[Scummvm-git-logs] scummvm master -> 784f8fe9d38d0de14badf29d39e52a95fe2c027e

djsrv dservilla at gmail.com
Tue Jun 22 22:17:45 UTC 2021


This automated email contains information about 79 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
560bae0f85 DIRECTOR: LINGO: Remove varCheck and checkImmediate
f54ebabe23 DIRECTOR: LINGO: Add TestScript type
688ca6b299 DIRECTOR: LINGO: Update comment
34d8aabc4b DIRECTOR: LINGO: Add DatumType enum
f726a6ed89 DIRECTOR: LINGO: Rewrite grammar to build AST
e44ff48492 DIRECTOR: LINGO: Move VarType to types.h
a4df3c3d8e DIRECTOR: LINGO: Eliminate Lingo::varCreate
0a708b9c8f DIRECTOR: LINGO: Move compiler logic to new class
38e8068180 DIRECTOR: LINGO: Use visitor pattern for AST traversal
20947e2505 DIRECTOR: Rename nodes to children
0a87b2ab2e DIRECTOR: LINGO: Eliminate argstack
220d4adac7 DIRECTOR: LINGO: Eliminate codeDefine
6b756b3213 DIRECTOR: LINGO: Rename codeFactory to registerFactory
52a056f91c DIRECTOR: LINGO: Reimplement if statements
e23e46c668 DIRECTOR: LINGO: Remove if preprocessor
dac5b6230c DIRECTOR: LINGO: Create compile convenience funcs
03e6a56c5c DIRECTOR: LINGO: Remove old if code
d9a1057cd6 DIRECTOR: LINGO: Reimplement loops
2b19132d97 DIRECTOR: LINGO: Add global, local, prop reference types
6a1829a7d5 DIRECTOR: LINGO: Alphabetize putafter & putbefore
ad934d5960 DIRECTOR: LINGO: Add missing newlines
4f29ef7b29 DIRECTOR: LINGO: Reimplement basic var instructions
cb7d578a55 DIRECTOR: LINGO: Fix ExprNode superclass
ced5aaeb3f DIRECTOR: LINGO: Fix symbol token type
38c0d5fddd DIRECTOR: LINGO: Switch proplist value and prop order
a6cfb4e275 DIRECTOR: LINGO: Reimplement lists
7649e2d44c DIRECTOR: LINGO: Reimplement exit
25b606c9b1 DIRECTOR: LINGO: Parse all variants of cmd args
68200d4542 DIRECTOR: LINGO: Reimplement play command
da9341c796 DIRECTOR: LINGO: Remove play preprocessor
4d6e4558c9 DIRECTOR: LINGO: Reimplement playAccel
553b4beafd DIRECTOR: LINGO: Create FrameNode and MovieNode
41caf423dd DIRECTOR: LINGO: Reimplement go command
9a2eaee922 DIRECTOR: LINGO: Remove c_goto* and c_play
35c103de10 DIRECTOR: LINGO: Replace sound preprocessor
884db621b4 DIRECTOR: LINGO: Reimplement scummvmAssertError
3f1df58337 DIRECTOR: LINGO: Reimplement tell
a5865079a1 DIRECTOR: LINGO: Reimplement when
5915ded25b DIRECTOR: LINGO: Remove outdated comment
744fbc8628 DIRECTOR: LINGO: Reimplement intersects/within
089cd9bb36 DIRECTOR: LINGO: Add error handling to LingoCompiler
0980939740 DIRECTOR: LINGO: Reimplement cast/object refs
510681249b DIRECTOR: LINGO: Clean up token types
de3f586e32 DIRECTOR: LINGO: Fix objectproppush/assign
68d7eb1249 DIRECTOR: LINGO: Change codeCmd/codeFunc arg type
d393fa5472 DIRECTOR: LINGO: Reimplement 'the'
a37b2f6bb6 DIRECTOR: LINGO: Fix chunk expr type checks
1a311812cf DIRECTOR: LINGO: Reimplement chunk expressions
a825a68f55 DIRECTOR: LINGO: Reimplement open
ac5dbe3492 DIRECTOR: LINGO: Create CMDID symbol
c7e8003ccb DIRECTOR: LINGO: Lower b_go version
c66377b5e8 DIRECTOR: LINGO: Reimplement repeat with in
0ff9d8437c DIRECTOR: LINGO: Add function fallback to getObjectProp
46785dbe26 DIRECTOR: LINGO: Fix list definitions
ba8671f7e0 DIRECTOR: LINGO: Add buildbot warnings to compiler
161cf05f7c DIRECTOR: LINGO: Add missing !
597952bdd8 DIRECTOR: LINGO: Correct codeTheFieldGet to codeTheFieldSet
150e819d3f DIRECTOR: LINGO: Correct more 'the' assignments
fee4e419f8 DIRECTOR: LINGO: Make var undefined warning stricter
87dc8c0269 DIRECTOR: LINGO: Fix delete/hilite type checks
6a85f47291 DIRECTOR: LINGO: Compile vars as refs for delete/hilite
b098219eae DIRECTOR: LINGO: Fix if statements in tests
76195e62f4 DIRECTOR: LINGO: Allow stray end ifs
e093f59aa2 DIRECTOR: LINGO: Allow trailing comma
155db7d72c DIRECTOR: LINGO: Correctly populate _methodVars
478f74de3e DIRECTOR: LINGO: Reimplement factory calls
9c5c8cbb1d DIRECTOR: LINGO: Remove buildbot warnings for undefined var
7d543f5750 DIRECTOR: LINGO: Fix factory redefinition warning
509b34579f DIRECTOR: LINGO: Change chunk ref args to exprs
16ad72c042 DIRECTOR: LINGO: Fix calling window with multiple args
2aa766754f DIRECTOR: LINGO: Make getObjectProp use stack
8f836f321c DIRECTOR: Don't load shared cast twice
d9877305e7 DIRECTOR: LINGO: Fix varFetch warnings
e38939fe4a DIRECTOR: LINGO: Fix D2-3 cast numbers
8abdb0df16 DIRECTOR: LINGO: Allow missing end if
ace4d11cf7 DIRECTOR: LINGO: Allow trailing comma in function args
56718ceb8a DIRECTOR: LINGO: Add trailing comma in function test
32534e2d7a DIRECTOR: LINGO: Move tokens out of CMDID
784f8fe9d3 DIRECTOR: LINGO: Allow expression after sprite


Commit: 560bae0f8565d1aaee0378505f65ae7fea859f10
    https://github.com/scummvm/scummvm/commit/560bae0f8565d1aaee0378505f65ae7fea859f10
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Remove varCheck and checkImmediate

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-code.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 475c7c44a7..20da9aa978 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -118,7 +118,6 @@ static struct FuncDescr {
 	{ LC::c_play,			"c_play",			"" },
 	{ LC::c_procret,		"c_procret",		"" },
 	{ LC::c_proparraypush,	"c_proparraypush",	"i" },
-	{ LC::c_setImmediate,	"c_setImmediate",	"i" },
 	{ LC::c_starts,			"c_starts",			"" },
 	{ LC::c_stringpush,		"c_stringpush",		"s" },
 	{ LC::c_sub,			"c_sub",			"" },
@@ -447,14 +446,6 @@ void LC::c_varpush() {
 	Common::String name(g_lingo->readString());
 	Datum d;
 
-	// In immediate mode we will push variables as strings
-	// This is used for playAccel
-	if (g_lingo->_immediateMode) {
-		g_lingo->push(Datum(Common::String(name)));
-
-		return;
-	}
-
 	// Looking for the cast member constants
 	if (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
 		int val = castNumToNum(name.c_str());
@@ -484,10 +475,6 @@ void LC::c_stackdrop() {
 	}
 }
 
-void LC::c_setImmediate() {
-	g_lingo->_immediateMode = g_lingo->readInt();
-}
-
 void LC::c_assign() {
 	Datum d1, d2;
 	d1 = g_lingo->pop(false);
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 3db90833b8..aa7616d77c 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -86,7 +86,6 @@ void c_stackdrop();
 void c_assign();
 bool verify(const Symbol &s);
 void c_eval();
-void c_setImmediate();
 
 void c_swap();
 
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index a53c2cccd9..a3883eaba3 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -202,17 +202,6 @@ void Lingo::clearArgStack() {
 	_argstack.clear();
 }
 
-int Lingo::codeSetImmediate(bool state) {
-	g_lingo->_immediateMode = state;
-
-	int res = g_lingo->code1(LC::c_setImmediate);
-	inst i = 0;
-	WRITE_UINT32(&i, state);
-	g_lingo->code1(i);
-
-	return res;
-}
-
 int Lingo::codeCmd(Common::String *s, int numpar) {
 	// Insert current line number to our asserts
 	if (s->equalsIgnoreCase("scummvmAssert") || s->equalsIgnoreCase("scummvmAssertEqual")) {
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 663074c947..4e01c278d9 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -34,7 +34,7 @@
 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types.
+ * if you want the limit (max/min) macros for int types. 
  */
 #ifndef __STDC_LIMIT_MACROS
 #define __STDC_LIMIT_MACROS 1
@@ -51,7 +51,7 @@ typedef uint32_t flex_uint32_t;
 typedef signed char flex_int8_t;
 typedef short int flex_int16_t;
 typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t;
+typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
 
@@ -162,10 +162,10 @@ extern FILE *yyin, *yyout;
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
-
+    
     #define YY_LESS_LINENO(n)
     #define YY_LINENO_REWIND_TO(ptr)
-
+    
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
 	do \
@@ -364,7 +364,7 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[333] =
+static const flex_int16_t yy_accept[330] =
     {   0,
         0,    0,   76,   74,    1,   72,   72,   74,   74,   71,
        71,   70,   71,   67,   71,   68,   68,   68,   68,   68,
@@ -389,20 +389,19 @@ static const flex_int16_t yy_accept[333] =
        68,   30,    0,   68,   68,   68,   68,   68,   68,   68,
 
        68,   52,   52,   52,   60,   68,   68,    0,   68,    5,
-       68,    0,   13,   17,    0,    0,    0,   68,   68,   68,
+       68,    0,   13,   17,    0,    0,    0,   68,   68,   28,
         0,   68,   68,   68,   43,   44,   68,   56,   46,    0,
        52,   52,   61,   58,    0,   68,   68,   11,    0,   20,
-       68,   68,    0,    0,   68,   68,   68,   68,    0,    0,
-        0,   52,   52,    0,   14,    8,   18,   21,   68,   28,
-        0,   68,   40,   41,   68,    0,    0,    0,   52,   52,
-       14,   68,   28,    0,   39,   68,    0,    0,    0,    0,
-       52,   22,   37,   68,   51,   50,   51,    0,    0,    0,
-        0,   52,   68,   50,    0,    0,    0,    0,    0,   68,
-
-        0,    0,    0,    0,    0,    0,   68,    0,    0,   51,
-       50,   50,   51,    0,   68,   49,   50,   50,    0,   68,
-       50,   68,    0,   50,   68,    0,    0,   55,    0,    0,
-       48,    0
+       68,   68,    0,   68,   68,   68,   68,    0,    0,    0,
+       52,   52,    0,   14,    8,   18,   21,   68,    0,   68,
+       40,   41,   68,    0,    0,    0,   52,   52,   14,   68,
+        0,   39,   68,    0,    0,    0,    0,   52,   22,   37,
+       68,   51,   50,   51,    0,    0,    0,    0,   52,   68,
+       50,    0,    0,    0,    0,    0,   68,    0,    0,    0,
+
+        0,    0,    0,   68,    0,    0,   51,   50,   50,   51,
+        0,   68,   49,   50,   50,    0,   68,   50,   68,    0,
+       50,   68,    0,    0,   55,    0,    0,   48,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -431,7 +430,7 @@ static const YY_CHAR yy_ec[256] =
 
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    2,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1
@@ -447,91 +446,91 @@ static const YY_CHAR yy_meta[60] =
         5,    5,    5,    5,    5,    5,    5,    5,    5
     } ;
 
-static const flex_int16_t yy_base[347] =
+static const flex_int16_t yy_base[342] =
     {   0,
-        0,   58,  663,  735,   59,  735,  735,  657,    0,  735,
-      653,   55,   54,  735,  647,   49,   51,   57,   46,   50,
+        0,   58,  661,  727,   59,  727,  727,  654,    0,  727,
+      648,   55,   54,  727,  643,   49,   51,   57,   46,   50,
        48,   56,    0,   85,   59,   95,   73,   98,  106,   68,
-      124,  138,   98,  165,  148,   85,  735,  651,  735,    0,
-      735,  645,  122,  735,  735,  735,    0,  120,   73,   93,
-      124,  143,  146,  139,  146,  146,  157,  164,  162,  650,
+      124,  138,   98,  165,  148,   85,  727,  647,  727,    0,
+      727,  640,  122,  727,  727,  727,    0,  120,   73,   93,
+      124,  143,  146,  139,  146,  146,  157,  164,  162,  644,
         0,  160,  167,  166,  177,  166,  183,  163,  171,    0,
         0,  186,    0,  191,  192,  176,  190,  194,  191,  198,
       197,  207,  214,    0,  215,  217,  207,  249,  224,  224,
-        0,  640,  237,    0,  217,  216,  229,  229,  237,  247,
+        0,  635,  237,    0,  217,  216,  229,  229,  237,  247,
 
-      644,  241,  249,  254,  275,  243,  258,  250,  260,  251,
+      638,  241,  249,  254,  275,  243,  258,  250,  260,  251,
       266,    0,  266,  251,    0,  258,  254,  258,  273,    0,
       286,  287,  290,    0,  288,  287,  293,  317,  295,  299,
       308,  305,  310,  314,  301,  306,  307,    0,    0,  323,
-        0,  643,  638,    0,  324,  331,  318,  321,  325,  339,
+        0,  637,  622,    0,  324,  331,  318,  321,  325,  339,
       327,    0,    0,    0,  330,  333,  344,    0,    0,  362,
       341,  349,  354,  344,  348,  343,  347,    0,  379,    0,
         0,  364,  357,  363,    0,  357,  362,    0,  372,  371,
-      396,    0,    0,  375,  394,  375,  637,  378,  380,    0,
+      396,    0,    0,  375,  394,  375,  579,  378,  380,    0,
       396,    0,  417,  399,  393,  392,  392,  393,  396,  398,
 
-      400,  622,  436,  429,    0,  400,  409,  414,  416,    0,
-      422,  430,    0,    0,  429,  427,  457,  435,  438,  579,
+      400,  512,  436,  429,    0,  400,  409,  414,  416,    0,
+      422,  430,    0,    0,  429,  427,  457,  435,  438,    0,
       433,  447,  433,  435,    0,    0,  442,    0,    0,  477,
-      467,  468,    0,    0,  443,  446,  453,  735,  468,  735,
-      473,  482,  512,  485,  483,  466,  467,  495,  497,  493,
-      491,  490,  515,  488,    0,    0,  735,    0,  497,    0,
-      504,  508,    0,    0,  504,  507,  505,  514,  500,  538,
-      735,  511,    0,  524,    0,  515,  525,  479,  528,  546,
-      547,    0,  735,  532,  735,    0,  735,  392,  551,  567,
-      556,  340,  530,    0,  570,  573,  329,  558,  588,  540,
-
-      558,  560,  583,  586,  591,  579,  593,  318,  199,  169,
-      565,  598,  158,  144,  566,  127,  119,  116,  610,  592,
-      621,  599,  626,  641,  605,  611,  611,    0,   80,   77,
-       70,  735,  678,  680,  683,  686,  691,  696,  698,  703,
-      706,  711,  716,  718,  723,  728
+      467,  468,    0,    0,  443,  446,  453,  727,  468,  727,
+      473,  482,  485,  483,  466,  467,  495,  497,  493,  491,
+      490,  515,  488,    0,    0,  727,    0,  497,  504,  508,
+        0,    0,  504,  507,  505,  514,  500,  538,  727,  511,
+      524,    0,  515,  525,  479,  528,  546,  547,    0,  727,
+      532,  727,    0,  727,  392,  551,  567,  556,  340,  530,
+        0,  570,  573,  329,  558,  588,  540,  558,  560,  583,
+
+      586,  591,  579,  593,  318,  199,  169,  565,  598,  158,
+      144,  566,  127,  119,  116,  610,  592,  621,  599,  626,
+      641,  605,  611,  611,    0,   80,   77,   70,  727,  678,
+      680,  683,  686,  691,  696,  698,  703,  708,  710,  715,
+      720
     } ;
 
-static const flex_int16_t yy_def[347] =
+static const flex_int16_t yy_def[342] =
     {   0,
-      332,    1,  332,  332,  332,  332,  332,  333,  334,  332,
-      332,  332,  332,  332,  332,  335,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
-      335,  335,  335,  332,  335,  332,  332,  333,  332,  336,
-      332,  332,  332,  332,  332,  332,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  332,  332,  335,
-      336,  332,  335,  335,  335,  335,  335,  335,  335,  335,
-
-      335,  335,  335,  335,  332,  335,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
-      335,  335,  335,  332,  335,  335,  335,  335,  335,  335,
-      335,  335,  337,  335,  335,  335,  332,  332,  332,  335,
-      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  335,  338,  335,
-      335,  335,  335,  335,  335,  332,  335,  335,  335,  335,
-      332,  339,  335,  335,  332,  332,  332,  335,  335,  335,
-      335,  335,  332,  335,  335,  335,  335,  335,  335,  335,
-
-      335,  338,  338,  338,  335,  335,  335,  332,  335,  335,
-      335,  332,  339,  335,  332,  332,  332,  335,  335,  335,
-      332,  335,  335,  335,  335,  335,  335,  335,  335,  332,
-      338,  338,  335,  335,  332,  335,  335,  332,  332,  332,
-      335,  335,  340,  332,  335,  335,  335,  335,  332,  332,
-      332,  338,  338,  332,  335,  335,  332,  335,  335,  341,
-      332,  335,  335,  335,  335,  332,  332,  332,  338,  338,
-      332,  335,  341,  332,  335,  335,  332,  342,  332,  343,
-      338,  335,  332,  335,  332,  344,  332,  343,  343,  343,
-      343,  338,  335,  344,  332,  343,  343,  343,  332,  335,
-
-      332,  332,  343,  342,  343,  332,  335,  332,  332,  343,
-      344,  344,  343,  332,  335,  332,  344,  344,  345,  335,
-      346,  335,  332,  346,  335,  332,  332,  335,  332,  332,
-      332,    0,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332
+      329,    1,  329,  329,  329,  329,  329,  330,  331,  329,
+      329,  329,  329,  329,  329,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  329,  332,  329,  329,  330,  329,  333,
+      329,  329,  329,  329,  329,  329,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  329,  329,  332,
+      333,  329,  332,  332,  332,  332,  332,  332,  332,  332,
+
+      332,  332,  332,  332,  329,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  329,  332,  332,  332,  332,  332,  332,
+      332,  332,  334,  332,  332,  332,  329,  329,  329,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  335,  332,
+      332,  332,  332,  332,  332,  329,  332,  332,  332,  332,
+      329,  336,  332,  332,  329,  329,  329,  332,  332,  332,
+      332,  332,  329,  332,  332,  332,  332,  332,  332,  332,
+
+      332,  335,  335,  335,  332,  332,  332,  329,  332,  332,
+      332,  329,  336,  332,  329,  329,  329,  332,  332,  332,
+      329,  332,  332,  332,  332,  332,  332,  332,  332,  329,
+      335,  335,  332,  332,  329,  332,  332,  329,  329,  329,
+      332,  332,  329,  332,  332,  332,  332,  329,  329,  329,
+      335,  335,  329,  332,  332,  329,  332,  332,  329,  332,
+      332,  332,  332,  329,  329,  329,  335,  335,  329,  332,
+      329,  332,  332,  329,  337,  329,  338,  335,  332,  329,
+      332,  329,  339,  329,  338,  338,  338,  338,  335,  332,
+      339,  329,  338,  338,  338,  329,  332,  329,  329,  338,
+
+      337,  338,  329,  332,  329,  329,  338,  339,  339,  338,
+      329,  332,  329,  339,  339,  340,  332,  341,  332,  329,
+      341,  332,  329,  329,  332,  329,  329,  329,    0,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329
     } ;
 
-static const flex_int16_t yy_nxt[795] =
+static const flex_int16_t yy_nxt[787] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,    4,   12,
        13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
@@ -540,22 +539,22 @@ static const flex_int16_t yy_nxt[795] =
        19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
        29,   30,   31,   32,   23,   23,   33,   23,   23,   34,
        36,   37,   37,   42,   43,   44,   45,   48,   50,   58,
-       51,  331,   54,   55,   49,   56,   35,   52,  331,   59,
-       64,  331,   60,   53,   57,   77,   36,   37,   37,   94,
+       51,  328,   54,   55,   49,   56,   35,   52,  328,   59,
+       64,  328,   60,   53,   57,   77,   36,   37,   37,   94,
        68,   48,   50,   58,   51,   54,   55,   49,   56,   69,
 
        35,   52,   59,   61,   64,   60,   53,   57,   65,   77,
-       62,   95,   66,   94,   68,   63,   70,  316,   85,   86,
-      316,   67,   69,   71,   87,   72,   73,   61,  316,   74,
+       62,   95,   66,   94,   68,   63,   70,  313,   85,   86,
+      313,   67,   69,   71,   87,   72,   73,   61,  313,   74,
        42,   43,   65,   62,   75,   95,   66,   76,   63,   78,
-       70,   79,   85,   86,   67,  319,   71,   87,   72,   73,
-       93,   80,   74,   96,   81,   82,   97,   75,   83,  295,
+       70,   79,   85,   86,   67,  316,   71,   87,   72,   73,
+       93,   80,   74,   96,   81,   82,   97,   75,   83,  292,
        76,   90,  101,   78,   84,   79,   88,   37,   37,   58,
-      295,   98,   99,   93,   80,  100,   96,   81,  102,   82,
+      292,   98,   99,   93,   80,  100,   96,   81,  102,   82,
        97,  103,   83,   89,  108,   90,  101,   84,  104,  106,
       107,  109,  110,   58,   98,   99,  111,  114,  100,  112,
 
-      316,  115,  102,  116,  117,  103,  120,   89,  108,  118,
+      313,  115,  102,  116,  117,  103,  120,   89,  108,  118,
       126,  104,  106,  107,  109,  113,  110,  121,  119,  111,
       114,  124,  122,  112,  115,  123,  125,  116,  117,  120,
       127,  128,  129,  118,  126,  133,  130,  134,  113,  135,
@@ -567,15 +566,15 @@ static const flex_int16_t yy_nxt[795] =
       161,   89,  146,  147,  144,  145,  150,  153,  148,  151,
 
       162,  154,  155,  163,  158,  149,  159,  152,  164,  166,
-      156,  157,  160,  161,  165,  167,  168,  147,  169,  316,
+      156,  157,  160,  161,  165,  167,  168,  147,  169,  313,
       171,  148,  172,  162,  173,  174,  175,  163,  149,  176,
-      304,  177,  164,  166,  178,  179,  180,  165,  167,  168,
-      183,  299,  170,  171,  184,  172,  185,  186,  173,  174,
+      301,  177,  164,  166,  178,  179,  180,  165,  167,  168,
+      183,  296,  170,  171,  184,  172,  185,  186,  173,  174,
       175,  187,  188,  176,  177,  189,  190,  178,  179,  191,
       180,  192,  195,  193,  183,  170,  196,  197,  184,  185,
       186,  198,  199,  200,  187,  194,  188,  201,  189,  190,
       169,  205,  191,  206,  207,  192,  195,  208,  209,  210,
-      196,  197,  211,  295,  198,  199,  200,  181,  214,  194,
+      196,  197,  211,  292,  198,  199,  200,  181,  214,  194,
 
       201,  216,  203,  218,  204,  205,  206,  215,  207,  219,
       208,  209,  220,  210,  222,  228,  211,  212,  193,  223,
@@ -583,47 +582,45 @@ static const flex_int16_t yy_nxt[795] =
       230,  215,  219,  233,  234,  221,  220,  230,  222,  228,
       235,  212,  223,  224,  236,  225,  226,  237,  238,  231,
       241,  227,  229,  239,  240,  242,  233,  234,  217,  221,
-      232,  244,  245,  235,  246,  247,  248,  236,  230,  230,
-      237,  254,  238,  231,  241,  147,  239,  240,  230,  242,
-      278,  255,  256,  232,  244,  257,  245,  246,  247,  248,
-      258,  230,  253,  249,  254,  263,  252,  259,  261,  147,
-
-      262,  280,  264,  250,  255,  256,  278,  251,  265,  257,
-      266,  267,  268,  243,  258,  253,  230,  249,  263,  252,
-      269,  259,  261,  271,  262,  264,  250,  272,  274,  270,
-      251,  275,  265,  276,  266,  267,  268,  277,  279,  230,
-      282,  283,  285,  269,  284,  287,  271,  280,  230,  293,
-      272,  274,  295,  270,  275,  281,  276,  295,  300,  295,
-      277,  279,  289,  282,  296,  283,  285,  284,  295,  287,
-      307,  295,  290,  293,  295,  292,  291,  298,  309,  281,
-      243,  300,  305,  308,  295,  297,  289,  304,  296,  299,
-      317,  301,  295,  307,  320,  290,  302,  314,  292,  291,
-
-      310,  298,  309,  303,  249,  305,  308,  311,  313,  297,
-      315,  319,  312,  317,  306,  301,  318,  320,  251,  302,
-      322,  314,  323,  230,  310,  325,  303,  323,  249,  330,
-      294,  311,  313,  328,  315,  312,  329,  306,  217,  143,
-      318,  251,  323,  322,  181,  143,  286,  326,  325,   92,
-      294,  105,  327,  330,   92,   39,  328,  294,   46,  329,
-       41,   39,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  326,  332,  332,  332,  327,  332,  294,   38,   38,
-      332,   38,   38,   38,   40,   40,   47,   47,   47,   91,
-       91,   91,  182,  332,  332,  182,  182,  202,  332,  332,
-
-      202,  213,  213,  213,  260,  332,  332,  260,  260,  273,
-      273,  273,  286,  332,  332,  286,  286,  288,  332,  332,
-      288,  294,  294,  294,  321,  332,  332,  321,  321,  324,
-      332,  324,  324,  324,    3,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332
-
+      232,  243,  244,  235,  245,  246,  247,  236,  230,  230,
+      237,  253,  238,  231,  241,  147,  239,  240,  230,  242,
+      275,  254,  255,  232,  243,  256,  244,  245,  246,  247,
+      257,  230,  252,  248,  253,  261,  251,  258,  259,  147,
+
+      260,  277,  262,  249,  254,  255,  275,  250,  263,  256,
+      264,  265,  266,  230,  257,  252,  230,  248,  261,  251,
+      267,  258,  259,  269,  260,  262,  249,  270,  271,  268,
+      250,  272,  263,  273,  264,  265,  266,  274,  276,  230,
+      279,  280,  282,  267,  281,  284,  269,  277,  230,  290,
+      270,  271,  292,  268,  272,  278,  273,  292,  297,  292,
+      274,  276,  286,  279,  293,  280,  282,  281,  292,  284,
+      304,  292,  287,  290,  292,  289,  288,  295,  306,  278,
+      217,  297,  302,  305,  292,  294,  286,  301,  293,  296,
+      314,  298,  292,  304,  317,  287,  299,  311,  289,  288,
+
+      307,  295,  306,  300,  248,  302,  305,  308,  310,  294,
+      312,  316,  309,  314,  303,  298,  315,  317,  250,  299,
+      319,  311,  320,  143,  307,  322,  300,  320,  248,  327,
+      291,  308,  310,  325,  312,  309,  326,  303,  181,  143,
+      315,  250,  320,  319,   92,  105,  283,  323,  322,   92,
+      291,   39,  324,  327,   46,   41,  325,  291,   39,  326,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  323,  329,  329,  329,  324,  329,  291,   38,   38,
+      329,   38,   38,   38,   40,   40,   47,   47,   47,   91,
+       91,   91,  182,  329,  329,  182,  182,  202,  329,  329,
+
+      202,  213,  213,  213,  283,  329,  329,  283,  283,  285,
+      329,  329,  285,  291,  291,  291,  318,  329,  329,  318,
+      318,  321,  329,  321,  321,  321,    3,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329
     } ;
 
-static const flex_int16_t yy_chk[795] =
+static const flex_int16_t yy_chk[787] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -632,22 +629,22 @@ static const flex_int16_t yy_chk[795] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
         5,    5,    5,   12,   12,   13,   13,   16,   17,   21,
-       18,  331,   19,   20,   16,   20,    2,   18,  330,   22,
-       25,  329,   22,   18,   20,   30,   36,   36,   36,   49,
+       18,  328,   19,   20,   16,   20,    2,   18,  327,   22,
+       25,  326,   22,   18,   20,   30,   36,   36,   36,   49,
        27,   16,   17,   21,   18,   19,   20,   16,   20,   27,
 
         2,   18,   22,   24,   25,   22,   18,   20,   26,   30,
-       24,   50,   26,   49,   27,   24,   28,  318,   33,   33,
-      317,   26,   27,   28,   33,   28,   28,   24,  316,   29,
+       24,   50,   26,   49,   27,   24,   28,  315,   33,   33,
+      314,   26,   27,   28,   33,   28,   28,   24,  313,   29,
        43,   43,   26,   24,   29,   50,   26,   29,   24,   31,
-       28,   31,   33,   33,   26,  314,   28,   33,   28,   28,
-       48,   31,   29,   51,   31,   32,   52,   29,   32,  313,
+       28,   31,   33,   33,   26,  311,   28,   33,   28,   28,
+       48,   31,   29,   51,   31,   32,   52,   29,   32,  310,
        29,   35,   56,   31,   32,   31,   34,   34,   34,   35,
-      310,   53,   54,   48,   31,   55,   51,   31,   57,   32,
+      307,   53,   54,   48,   31,   55,   51,   31,   57,   32,
        52,   58,   32,   34,   63,   35,   56,   32,   59,   62,
        62,   64,   65,   35,   53,   54,   66,   68,   55,   67,
 
-      309,   69,   57,   72,   74,   58,   76,   34,   63,   75,
+      306,   69,   57,   72,   74,   58,   76,   34,   63,   75,
        81,   59,   62,   62,   64,   67,   65,   77,   75,   66,
        68,   79,   78,   67,   69,   78,   80,   72,   74,   76,
        82,   83,   85,   75,   81,   87,   85,   89,   67,   90,
@@ -659,15 +656,15 @@ static const flex_int16_t yy_chk[795] =
       118,   88,  104,  105,  102,  103,  106,  108,  105,  107,
 
       119,  109,  110,  121,  114,  105,  116,  107,  122,  125,
-      111,  113,  117,  118,  123,  126,  127,  105,  128,  308,
+      111,  113,  117,  118,  123,  126,  127,  105,  128,  305,
       129,  105,  130,  119,  131,  132,  133,  121,  105,  134,
-      297,  135,  122,  125,  136,  137,  140,  123,  126,  127,
-      145,  292,  128,  129,  146,  130,  147,  148,  131,  132,
+      294,  135,  122,  125,  136,  137,  140,  123,  126,  127,
+      145,  289,  128,  129,  146,  130,  147,  148,  131,  132,
       133,  149,  150,  134,  135,  151,  155,  136,  137,  156,
       140,  157,  161,  160,  145,  128,  162,  163,  146,  147,
       148,  164,  165,  166,  149,  160,  150,  167,  151,  155,
       169,  172,  156,  173,  174,  157,  161,  176,  177,  179,
-      162,  163,  180,  288,  164,  165,  166,  181,  184,  160,
+      162,  163,  180,  285,  164,  165,  166,  181,  184,  160,
 
       167,  186,  169,  188,  169,  172,  173,  185,  174,  189,
       176,  177,  191,  179,  194,  200,  180,  181,  193,  195,
@@ -677,42 +674,40 @@ static const flex_int16_t yy_chk[795] =
       218,  199,  201,  215,  216,  219,  206,  207,  217,  193,
       204,  221,  222,  208,  223,  224,  227,  209,  231,  232,
       211,  235,  212,  203,  218,  217,  215,  216,  230,  219,
-      278,  236,  237,  204,  221,  239,  222,  223,  224,  227,
-      241,  252,  232,  230,  235,  246,  231,  242,  244,  217,
-
-      245,  269,  247,  230,  236,  237,  267,  230,  248,  239,
-      249,  250,  251,  243,  241,  232,  253,  230,  246,  231,
-      252,  242,  244,  254,  245,  247,  230,  259,  261,  253,
-      230,  262,  248,  265,  249,  250,  251,  266,  268,  270,
-      272,  274,  277,  252,  276,  279,  254,  280,  281,  284,
-      259,  261,  289,  253,  262,  270,  265,  291,  293,  298,
-      266,  268,  280,  272,  289,  274,  277,  276,  290,  279,
-      300,  295,  280,  284,  296,  281,  280,  291,  302,  270,
-      220,  293,  298,  301,  303,  290,  280,  304,  289,  299,
-      311,  295,  305,  300,  315,  280,  295,  306,  281,  280,
-
-      303,  291,  302,  296,  299,  298,  301,  304,  305,  290,
-      307,  319,  304,  311,  299,  295,  312,  315,  299,  295,
-      320,  306,  321,  202,  303,  322,  296,  323,  299,  327,
-      321,  304,  305,  325,  307,  304,  326,  299,  187,  143,
-      312,  299,  324,  320,  142,  101,  319,  323,  322,   92,
-      324,   60,  323,  327,   42,   38,  325,  321,   15,  326,
-       11,    8,    3,    0,    0,    0,    0,    0,    0,    0,
-        0,  323,    0,    0,    0,  323,    0,  324,  333,  333,
-        0,  333,  333,  333,  334,  334,  335,  335,  335,  336,
-      336,  336,  337,    0,    0,  337,  337,  338,    0,    0,
-
-      338,  339,  339,  339,  340,    0,    0,  340,  340,  341,
-      341,  341,  342,    0,    0,  342,  342,  343,    0,    0,
-      343,  344,  344,  344,  345,    0,    0,  345,  345,  346,
-        0,  346,  346,  346,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332
-
+      275,  236,  237,  204,  221,  239,  222,  223,  224,  227,
+      241,  251,  232,  230,  235,  245,  231,  242,  243,  217,
+
+      244,  267,  246,  230,  236,  237,  265,  230,  247,  239,
+      248,  249,  250,  202,  241,  232,  252,  230,  245,  231,
+      251,  242,  243,  253,  244,  246,  230,  258,  259,  252,
+      230,  260,  247,  263,  248,  249,  250,  264,  266,  268,
+      270,  271,  274,  251,  273,  276,  253,  277,  278,  281,
+      258,  259,  286,  252,  260,  268,  263,  288,  290,  295,
+      264,  266,  277,  270,  286,  271,  274,  273,  287,  276,
+      297,  292,  277,  281,  293,  278,  277,  288,  299,  268,
+      187,  290,  295,  298,  300,  287,  277,  301,  286,  296,
+      308,  292,  302,  297,  312,  277,  292,  303,  278,  277,
+
+      300,  288,  299,  293,  296,  295,  298,  301,  302,  287,
+      304,  316,  301,  308,  296,  292,  309,  312,  296,  292,
+      317,  303,  318,  143,  300,  319,  293,  320,  296,  324,
+      318,  301,  302,  322,  304,  301,  323,  296,  142,  101,
+      309,  296,  321,  317,   92,   60,  316,  320,  319,   42,
+      321,   38,  320,  324,   15,   11,  322,  318,    8,  323,
+        3,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  320,    0,    0,    0,  320,    0,  321,  330,  330,
+        0,  330,  330,  330,  331,  331,  332,  332,  332,  333,
+      333,  333,  334,    0,    0,  334,  334,  335,    0,    0,
+
+      335,  336,  336,  336,  337,    0,    0,  337,  337,  338,
+        0,    0,  338,  339,  339,  339,  340,    0,    0,  340,
+      340,  341,    0,  341,  341,  341,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -801,17 +796,6 @@ static void count() {
 	}
 }
 
-static int checkImmediate(int token) {
-	if (g_lingo->_immediateMode || g_lingo->_indef == kStateInArgs ||
-			g_lingo->_methodVars->contains(yytext)) {
-		yylval.s = new Common::String(yytext);
-
-		return VARID;
-	}
-
-	return token;
-}
-
 static Common::String *cleanupString(const char *s) {
 	Common::String *res = new Common::String;
 
@@ -828,18 +812,8 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-static int varCheck(int token, const char *name) {
-	if (g_lingo->_indef == kStateInArgs || g_lingo->_methodVars->contains(name)) {
-		yylval.s = new Common::String(name);
-
-		return VARID;
-	}
-
-	return token;
-}
-
-#line 841 "engines/director/lingo/lingo-lex.cpp"
-#line 842 "engines/director/lingo/lingo-lex.cpp"
+#line 815 "engines/director/lingo/lingo-lex.cpp"
+#line 816 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -899,9 +873,9 @@ extern int yywrap ( void );
 #endif
 
 #ifndef YY_NO_UNPUT
-
+    
     static void yyunput ( int c, char *buf_ptr  );
-
+    
 #endif
 
 #ifndef yytext_ptr
@@ -1031,7 +1005,7 @@ YY_DECL
 	yy_state_type yy_current_state;
 	char *yy_cp, *yy_bp;
 	int yy_act;
-
+    
 	if ( !(yy_init) )
 		{
 		(yy_init) = 1;
@@ -1059,10 +1033,10 @@ YY_DECL
 		}
 
 	{
-#line 126 "engines/director/lingo/lingo-lex.l"
+#line 105 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1065 "engines/director/lingo/lingo-lex.cpp"
+#line 1039 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1090,13 +1064,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 333 )
+				if ( yy_current_state >= 330 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 332 );
+		while ( yy_current_state != 329 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1118,67 +1092,67 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 128 "engines/director/lingo/lingo-lex.l"
+#line 107 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 130 "engines/director/lingo/lingo-lex.l"
+#line 109 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 132 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tAFTER, "after"); }		// D3
+#line 111 "engines/director/lingo/lingo-lex.l"
+{ count(); return tAFTER; }		// D3
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 133 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tAND, "and"); }
+#line 112 "engines/director/lingo/lingo-lex.l"
+{ count(); return tAND; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 134 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tBEFORE, "before"); }	// D3
+#line 113 "engines/director/lingo/lingo-lex.l"
+{ count(); return tBEFORE; }	// D3
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 135 "engines/director/lingo/lingo-lex.l"
+#line 114 "engines/director/lingo/lingo-lex.l"
 { count(); return tCAST; }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 136 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tCHAR, "char"); }		// D3
+#line 115 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCHAR; }		// D3
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 137 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tCONTAINS, "contains"); }
+#line 116 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCONTAINS; }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 138 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tDOWN, "down"); }
+#line 117 "engines/director/lingo/lingo-lex.l"
+{ count(); return tDOWN; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 139 "engines/director/lingo/lingo-lex.l"
+#line 118 "engines/director/lingo/lingo-lex.l"
 { count(); return tIF; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 140 "engines/director/lingo/lingo-lex.l"
+#line 119 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSIF; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 141 "engines/director/lingo/lingo-lex.l"
+#line 120 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSE; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 142 "engines/director/lingo/lingo-lex.l"
+#line 121 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1193,11 +1167,6 @@ YY_RULE_SETUP
 		else if (!scumm_stricmp(ptr, "tell"))
 			return tENDTELL;
 
-		if (!*ptr) {	// If it is stale "end", check it
-			if (varCheck(ENDCLAUSE, "end") == VARID)
-				return VARID;
-		}
-
 		yylval.s = new Common::String(ptr);
 
 		return ENDCLAUSE;
@@ -1205,187 +1174,177 @@ YY_RULE_SETUP
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 165 "engines/director/lingo/lingo-lex.l"
+#line 139 "engines/director/lingo/lingo-lex.l"
 { count(); return tFACTORY; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tEXIT, "exit"); }
+#line 140 "engines/director/lingo/lingo-lex.l"
+{ count(); return tEXIT; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 167 "engines/director/lingo/lingo-lex.l"
+#line 141 "engines/director/lingo/lingo-lex.l"
 { count(); return tFIELD; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 168 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tGLOBAL, "global"); }
+#line 142 "engines/director/lingo/lingo-lex.l"
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 169 "engines/director/lingo/lingo-lex.l"
+#line 143 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 170 "engines/director/lingo/lingo-lex.l"
+#line 144 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 171 "engines/director/lingo/lingo-lex.l"
+#line 145 "engines/director/lingo/lingo-lex.l"
 { count(); return tGOLOOP; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 172 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tINSTANCE, "instance"); }
+#line 146 "engines/director/lingo/lingo-lex.l"
+{ count(); return tINSTANCE; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 173 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tINTERSECTS, "intersects"); }
+#line 147 "engines/director/lingo/lingo-lex.l"
+{ count(); return tINTERSECTS;}
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 174 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tINTO, "into"); }
+#line 148 "engines/director/lingo/lingo-lex.l"
+{ count(); return tINTO; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 175 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tIN, "in"); }
+#line 149 "engines/director/lingo/lingo-lex.l"
+{ count(); return tIN; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 176 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tITEM, "item"); }
+#line 150 "engines/director/lingo/lingo-lex.l"
+{ count(); return tITEM; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 177 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tLINE, "line"); }
+#line 151 "engines/director/lingo/lingo-lex.l"
+{ count(); return tLINE; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 178 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tMACRO, "macro"); }
+#line 152 "engines/director/lingo/lingo-lex.l"
+{ count(); return tMACRO;; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 179 "engines/director/lingo/lingo-lex.l"
-{
-		count();
-
-		const char *ptr = &yytext[6]; // Skip 'method '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		yylval.s = new Common::String(ptr);
-
-		return tMETHOD;
-	}
+#line 153 "engines/director/lingo/lingo-lex.l"
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 190 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tMOD, "mod"); }
+#line 154 "engines/director/lingo/lingo-lex.l"
+{ count(); return tMOD;}
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 191 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tMOVIE, "movie"); }
+#line 155 "engines/director/lingo/lingo-lex.l"
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 192 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tNEXT, "next"); }
+#line 156 "engines/director/lingo/lingo-lex.l"
+{ count(); return tNEXT; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 193 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tNOT, "not"); }
+#line 157 "engines/director/lingo/lingo-lex.l"
+{ count(); return tNOT; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 194 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tOF, "of"); }
+#line 158 "engines/director/lingo/lingo-lex.l"
+{ count(); return tOF; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 195 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tON, "on"); }		// D3
+#line 159 "engines/director/lingo/lingo-lex.l"
+{ count(); return tON }		// D3
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 196 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tOPEN, "open"); }
+#line 160 "engines/director/lingo/lingo-lex.l"
+{ count(); return tOPEN; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 197 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tOR, "or"); }
+#line 161 "engines/director/lingo/lingo-lex.l"
+{ count(); return tOR; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 198 "engines/director/lingo/lingo-lex.l"
+#line 162 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAY; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 199 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tPLAY, "play"); }
+#line 163 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPLAY; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 200 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
+#line 164 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPLAYACCEL; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 201 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tPREVIOUS, "previous"); }
+#line 165 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 202 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tPROPERTY, "property"); }	// D4
+#line 166 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 203 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tPUT, "put"); }
+#line 167 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPUT; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 204 "engines/director/lingo/lingo-lex.l"
-{ count(); return checkImmediate(tREPEAT); }
+#line 168 "engines/director/lingo/lingo-lex.l"
+{ count(); return tREPEAT; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 205 "engines/director/lingo/lingo-lex.l"
+#line 169 "engines/director/lingo/lingo-lex.l"
 { count(); return tSCRIPT; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 206 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tSET, "set"); }
+#line 170 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSET; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 207 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tSTARTS, "starts"); }
+#line 171 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 208 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tTELL, "tell"); }
+#line 172 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTELL; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 209 "engines/director/lingo/lingo-lex.l"
+#line 173 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1424,7 +1383,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 244 "engines/director/lingo/lingo-lex.l"
+#line 208 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1450,7 +1409,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 266 "engines/director/lingo/lingo-lex.l"
+#line 230 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1527,7 +1486,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 339 "engines/director/lingo/lingo-lex.l"
+#line 303 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1565,7 +1524,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 373 "engines/director/lingo/lingo-lex.l"
+#line 337 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1595,82 +1554,82 @@ YY_RULE_SETUP
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 399 "engines/director/lingo/lingo-lex.l"
+#line 363 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 400 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tTO, "to"); }
+#line 364 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTO; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 401 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tASSERTERROR, "scummvmAssertError"); }
+#line 365 "engines/director/lingo/lingo-lex.l"
+{ count(); return tASSERTERROR; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 402 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tSPRITE, "sprite"); }
+#line 366 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 403 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWITH, "with"); }
+#line 367 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWITH; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 404 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWITHIN, "within"); }
+#line 368 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 405 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWHEN, "when"); }
+#line 369 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHEN; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 406 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWHILE, "while"); }
+#line 370 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHILE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 407 "engines/director/lingo/lingo-lex.l"
+#line 371 "engines/director/lingo/lingo-lex.l"
 { count(); return tWINDOW; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 408 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWORD, "word"); }
+#line 372 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWORD; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 410 "engines/director/lingo/lingo-lex.l"
+#line 374 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 411 "engines/director/lingo/lingo-lex.l"
+#line 375 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 412 "engines/director/lingo/lingo-lex.l"
+#line 376 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 413 "engines/director/lingo/lingo-lex.l"
+#line 377 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 414 "engines/director/lingo/lingo-lex.l"
+#line 378 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 416 "engines/director/lingo/lingo-lex.l"
+#line 380 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1680,41 +1639,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 422 "engines/director/lingo/lingo-lex.l"
+#line 386 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 423 "engines/director/lingo/lingo-lex.l"
+#line 387 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 424 "engines/director/lingo/lingo-lex.l"
+#line 388 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 72:
 /* rule 72 can match eol */
 YY_RULE_SETUP
-#line 425 "engines/director/lingo/lingo-lex.l"
+#line 389 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 426 "engines/director/lingo/lingo-lex.l"
+#line 390 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 427 "engines/director/lingo/lingo-lex.l"
+#line 391 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 429 "engines/director/lingo/lingo-lex.l"
+#line 393 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1717 "engines/director/lingo/lingo-lex.cpp"
+#line 1676 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1998,7 +1957,7 @@ static int yy_get_next_buffer (void)
 {
 	yy_state_type yy_current_state;
 	char *yy_cp;
-
+    
 	yy_current_state = (yy_start);
 	yy_current_state += YY_AT_BOL();
 
@@ -2013,7 +1972,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 333 )
+			if ( yy_current_state >= 330 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -2041,11 +2000,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 333 )
+		if ( yy_current_state >= 330 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 332);
+	yy_is_jam = (yy_current_state == 329);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2055,7 +2014,7 @@ static int yy_get_next_buffer (void)
     static void yyunput (int c, char * yy_bp )
 {
 	char *yy_cp;
-
+    
     yy_cp = (yy_c_buf_p);
 
 	/* undo effects of setting up yytext */
@@ -2100,7 +2059,7 @@ static int yy_get_next_buffer (void)
 
 {
 	int c;
-
+    
 	*(yy_c_buf_p) = (yy_hold_char);
 
 	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
@@ -2169,12 +2128,12 @@ static int yy_get_next_buffer (void)
 
 /** Immediately switch to a different input stream.
  * @param input_file A readable stream.
- *
+ * 
  * @note This function does not reset the start condition to @c INITIAL .
  */
     void yyrestart  (FILE * input_file )
 {
-
+    
 	if ( ! YY_CURRENT_BUFFER ){
         yyensure_buffer_stack ();
 		YY_CURRENT_BUFFER_LVALUE =
@@ -2187,11 +2146,11 @@ static int yy_get_next_buffer (void)
 
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
- *
+ * 
  */
     void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 {
-
+    
 	/* TODO. We should be able to replace this entire function body
 	 * with
 	 *		yypop_buffer_state();
@@ -2231,13 +2190,13 @@ static void yy_load_buffer_state  (void)
 /** Allocate and initialize an input buffer state.
  * @param file A readable stream.
  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- *
+ * 
  * @return the allocated buffer state.
  */
     YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
 {
 	YY_BUFFER_STATE b;
-
+    
 	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
@@ -2260,11 +2219,11 @@ static void yy_load_buffer_state  (void)
 
 /** Destroy the buffer.
  * @param b a buffer created with yy_create_buffer()
- *
+ * 
  */
     void yy_delete_buffer (YY_BUFFER_STATE  b )
 {
-
+    
 	if ( ! b )
 		return;
 
@@ -2285,7 +2244,7 @@ static void yy_load_buffer_state  (void)
 
 {
 	int oerrno = errno;
-
+    
 	yy_flush_buffer( b );
 
 	b->yy_input_file = file;
@@ -2301,13 +2260,13 @@ static void yy_load_buffer_state  (void)
     }
 
         b->yy_is_interactive = 0;
-
+    
 	errno = oerrno;
 }
 
 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- *
+ * 
  */
     void yy_flush_buffer (YY_BUFFER_STATE  b )
 {
@@ -2336,7 +2295,7 @@ static void yy_load_buffer_state  (void)
  *  the current state. This function will allocate the stack
  *  if necessary.
  *  @param new_buffer The new state.
- *
+ *  
  */
 void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
 {
@@ -2366,7 +2325,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
 
 /** Removes and deletes the top of the stack, if present.
  *  The next element becomes the new top.
- *
+ *  
  */
 void yypop_buffer_state (void)
 {
@@ -2390,7 +2349,7 @@ void yypop_buffer_state (void)
 static void yyensure_buffer_stack (void)
 {
 	yy_size_t num_to_alloc;
-
+    
 	if (!(yy_buffer_stack)) {
 
 		/* First allocation is just for 2 elements, since we don't know if this
@@ -2433,13 +2392,13 @@ static void yyensure_buffer_stack (void)
 /** Setup the input buffer state to scan directly from a user-specified character buffer.
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
- *
+ * 
  * @return the newly allocated buffer state object.
  */
 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
 	YY_BUFFER_STATE b;
-
+    
 	if ( size < 2 ||
 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
@@ -2468,14 +2427,14 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 /** Setup the input buffer state to scan a string. The next call to yylex() will
  * scan from a @e copy of @a str.
  * @param yystr a NUL-terminated string to scan
- *
+ * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
  *       yy_scan_bytes() instead.
  */
 YY_BUFFER_STATE yy_scan_string (const char * yystr )
 {
-
+    
 	return yy_scan_bytes( yystr, (int) strlen(yystr) );
 }
 
@@ -2483,7 +2442,7 @@ YY_BUFFER_STATE yy_scan_string (const char * yystr )
  * scan from a @e copy of @a bytes.
  * @param yybytes the byte buffer to scan
  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
- *
+ * 
  * @return the newly allocated buffer state object.
  */
 YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
@@ -2492,7 +2451,7 @@ YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 	char *buf;
 	yy_size_t n;
 	int i;
-
+    
 	/* Get memory for full buffer, including space for trailing EOB's. */
 	n = (yy_size_t) (_yybytes_len + 2);
 	buf = (char *) yyalloc( n  );
@@ -2546,16 +2505,16 @@ static void yynoreturn yy_fatal_error (const char* msg )
 /* Accessor  methods (get/set functions) to struct members. */
 
 /** Get the current line number.
- *
+ * 
  */
 int yyget_lineno  (void)
 {
-
+    
     return yylineno;
 }
 
 /** Get the input stream.
- *
+ * 
  */
 FILE *yyget_in  (void)
 {
@@ -2563,7 +2522,7 @@ FILE *yyget_in  (void)
 }
 
 /** Get the output stream.
- *
+ * 
  */
 FILE *yyget_out  (void)
 {
@@ -2571,7 +2530,7 @@ FILE *yyget_out  (void)
 }
 
 /** Get the length of the current token.
- *
+ * 
  */
 int yyget_leng  (void)
 {
@@ -2579,7 +2538,7 @@ int yyget_leng  (void)
 }
 
 /** Get the current token.
- *
+ * 
  */
 
 char *yyget_text  (void)
@@ -2589,18 +2548,18 @@ char *yyget_text  (void)
 
 /** Set the current line number.
  * @param _line_number line number
- *
+ * 
  */
 void yyset_lineno (int  _line_number )
 {
-
+    
     yylineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
  * @param _in_str A readable stream.
- *
+ * 
  * @see yy_switch_to_buffer
  */
 void yyset_in (FILE *  _in_str )
@@ -2654,7 +2613,7 @@ static int yy_init_globals (void)
 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
 int yylex_destroy  (void)
 {
-
+    
     /* Pop the buffer stack, destroying each element. */
 	while(YY_CURRENT_BUFFER){
 		yy_delete_buffer( YY_CURRENT_BUFFER  );
@@ -2680,7 +2639,7 @@ int yylex_destroy  (void)
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, const char * s2, int n )
 {
-
+		
 	int i;
 	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
@@ -2705,7 +2664,7 @@ void *yyalloc (yy_size_t  size )
 
 void *yyrealloc  (void * ptr, yy_size_t  size )
 {
-
+		
 	/* The cast to (char *) in the following accommodates both
 	 * implementations that use char* generic pointers, and those
 	 * that use void* generic pointers.  It works with the latter
@@ -2723,7 +2682,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 429 "engines/director/lingo/lingo-lex.l"
+#line 393 "engines/director/lingo/lingo-lex.l"
 
 
 extern int yydebug;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index e50c2aab46..ea62b52f17 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -76,17 +76,6 @@ static void count() {
 	}
 }
 
-static int checkImmediate(int token) {
-	if (g_lingo->_immediateMode || g_lingo->_indef == kStateInArgs ||
-			g_lingo->_methodVars->contains(yytext)) {
-		yylval.s = new Common::String(yytext);
-
-		return VARID;
-	}
-
-	return token;
-}
-
 static Common::String *cleanupString(const char *s) {
 	Common::String *res = new Common::String;
 
@@ -103,16 +92,6 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-static int varCheck(int token, const char *name) {
-	if (g_lingo->_indef == kStateInArgs || g_lingo->_methodVars->contains(name)) {
-		yylval.s = new Common::String(name);
-
-		return VARID;
-	}
-
-	return token;
-}
-
 %}
 
 identifier [_[:alpha:]][_[:alnum:]]*
@@ -129,13 +108,13 @@ spc [ \t\xC2]
 
 [#]{identifier}	{ count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
 
-after		{ count(); return varCheck(tAFTER, "after"); }		// D3
-and			{ count(); return varCheck(tAND, "and"); }
-before		{ count(); return varCheck(tBEFORE, "before"); }	// D3
+after		{ count(); return tAFTER; }		// D3
+and			{ count(); return tAND; }
+before		{ count(); return tBEFORE; }	// D3
 cast		{ count(); return tCAST; }
-char		{ count(); return varCheck(tCHAR, "char"); }		// D3
-contains	{ count(); return varCheck(tCONTAINS, "contains"); }
-down		{ count(); return varCheck(tDOWN, "down"); }
+char		{ count(); return tCHAR; }		// D3
+contains	{ count(); return tCONTAINS; }
+down		{ count(); return tDOWN; }
 if			{ count(); return tIF; }
 else{spc}+if { count(); return tELSIF; }
 else		{ count(); return tELSE; }
@@ -153,59 +132,44 @@ end({spc}+{identifier})?	{
 		else if (!scumm_stricmp(ptr, "tell"))
 			return tENDTELL;
 
-		if (!*ptr) {	// If it is stale "end", check it
-			if (varCheck(ENDCLAUSE, "end") == VARID)
-				return VARID;
-		}
-
 		yylval.s = new Common::String(ptr);
 
 		return ENDCLAUSE;
 	}
 ^{spc}*factory { count(); return tFACTORY; }
-exit		{ count(); return varCheck(tEXIT, "exit"); }
+exit		{ count(); return tEXIT; }
 field		{ count(); return tFIELD; }
-global		{ count(); return varCheck(tGLOBAL, "global"); }
+global		{ count(); return tGLOBAL; }
 go{spc}+(to{spc}+)?frame	{ count(); return tGO; }
 go{spc}+(to)?	{ count(); return tGO; }
 go{spc}+loop	{ count(); return tGOLOOP; }
-instance	{ count(); return varCheck(tINSTANCE, "instance"); }
-intersects	{ count(); return varCheck(tINTERSECTS, "intersects"); }
-into		{ count(); return varCheck(tINTO, "into"); }
-in			{ count(); return varCheck(tIN, "in"); }
-item		{ count(); return varCheck(tITEM, "item"); }
-line		{ count(); return varCheck(tLINE, "line"); }
-macro		{ count(); return varCheck(tMACRO, "macro"); }
-method{spc}+{identifier}		{
-		count();
-
-		const char *ptr = &yytext[6]; // Skip 'method '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		yylval.s = new Common::String(ptr);
-
-		return tMETHOD;
-	}
-mod			{ count(); return varCheck(tMOD, "mod"); }
-movie		{ count(); return varCheck(tMOVIE, "movie"); }
-next		{ count(); return varCheck(tNEXT, "next"); }
-not			{ count(); return varCheck(tNOT, "not"); }
-of			{ count(); return varCheck(tOF, "of"); }
-on			{ count(); return varCheck(tON, "on"); }		// D3
-open		{ count(); return varCheck(tOPEN, "open"); }
-or			{ count(); return varCheck(tOR, "or"); }
+instance	{ count(); return tINSTANCE; }
+intersects	{ count(); return tINTERSECTS;}
+into		{ count(); return tINTO; }
+in			{ count(); return tIN; }
+item		{ count(); return tITEM; }
+line		{ count(); return tLINE; }
+macro		{ count(); return tMACRO;; }
+method		{ count(); return tMETHOD; }
+mod			{ count(); return tMOD;}
+movie		{ count(); return tMOVIE; }
+next		{ count(); return tNEXT; }
+not			{ count(); return tNOT; }
+of			{ count(); return tOF; }
+on			{ count(); return tON }		// D3
+open		{ count(); return tOPEN; }
+or			{ count(); return tOR; }
 play{spc}+frame	{ count(); return tPLAY; }
-play		{ count(); return varCheck(tPLAY, "play"); }
-playAccel	{ count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
-previous	{ count(); return varCheck(tPREVIOUS, "previous"); }
-property	{ count(); return varCheck(tPROPERTY, "property"); }	// D4
-put			{ count(); return varCheck(tPUT, "put"); }
-repeat		{ count(); return checkImmediate(tREPEAT); }
+play		{ count(); return tPLAY; }
+playAccel	{ count(); return tPLAYACCEL; }
+previous	{ count(); return tPREVIOUS; }
+property	{ count(); return tPROPERTY; }	// D4
+put			{ count(); return tPUT; }
+repeat		{ count(); return tREPEAT; }
 script		{ count(); return tSCRIPT; }
-set			{ count(); return varCheck(tSET, "set"); }
-starts		{ count(); return varCheck(tSTARTS, "starts"); }
-tell		{ count(); return varCheck(tTELL, "tell"); }
+set			{ count(); return tSET; }
+starts		{ count(); return tSTARTS; }
+tell		{ count(); return tTELL; }
 the{spc}+number{spc}+of{spc}+[[:alpha:]]+{spc}+(in|of){spc}+ {
 		count();
 
@@ -397,15 +361,15 @@ the{spc}+[[:alpha:]]+		{
 		warning("LEXER: Unhandled the entity '%s'", ptr);
 	}
 then			{ count(); return tTHEN; }
-to				{ count(); return varCheck(tTO, "to"); }
-scummvmAssertError	{ count(); return varCheck(tASSERTERROR, "scummvmAssertError"); }
-sprite			{ count(); return varCheck(tSPRITE, "sprite"); }
-with			{ count(); return varCheck(tWITH, "with"); }
-within			{ count(); return varCheck(tWITHIN, "within"); }
-when			{ count(); return varCheck(tWHEN, "when"); }
-while			{ count(); return varCheck(tWHILE, "while"); }
+to				{ count(); return tTO; }
+scummvmAssertError	{ count(); return tASSERTERROR; }
+sprite			{ count(); return tSPRITE; }
+with			{ count(); return tWITH; }
+within			{ count(); return tWITHIN; }
+when			{ count(); return tWHEN; }
+while			{ count(); return tWHILE; }
 window			{ count(); return tWINDOW; }
-word			{ count(); return varCheck(tWORD, "word"); }
+word			{ count(); return tWORD; }
 
 [<][>]			{ count(); return tNEQ; }
 [>][=]			{ count(); return tGE; }
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index e23d638788..15086ddc98 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -155,7 +155,6 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 	_abort = false;
 	_indef = kStateNone;
 	_indef = kStateNone;
-	_immediateMode = false;
 	_expectError = false;
 	_caughtError = false;
 
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index a8f8edd6ed..5f68c6ec20 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -315,9 +315,6 @@ public:
 		return (l + instLen - 1) / instLen;
 	}
 
-	int codeSetImmediate(bool state);
-	// int codeMe(Common::String *method, int numpar);
-
 	inst readInst() { return getInst(_pc++); }
 	inst getInst(uint pc) { return (*_currentScript)[pc]; }
 	int readInt() { return getInt(_pc++); }
@@ -423,7 +420,6 @@ public:
 	Datum _currentMe;
 
 	bool _abort;
-	bool _immediateMode;
 	bool _expectError;
 	bool _caughtError;
 


Commit: f54ebabe2332da6e794df9bc4e7955a8c4c15bf2
    https://github.com/scummvm/scummvm/commit/f54ebabe2332da6e794df9bc4e7955a8c4c15bf2
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add TestScript type

Changed paths:
    engines/director/cast.cpp
    engines/director/lingo/lingo.cpp
    engines/director/types.h


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index e36746108a..814884069e 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -47,7 +47,8 @@ const char *scriptTypes[] = {
 	"ScoreScript",
 	"CastScript",
 	"MovieScript",
-	"EventScript"
+	"EventScript",
+	"TestScript"
 };
 
 const char *scriptType2str(ScriptType scr) {
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 15086ddc98..c4231e859a 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1211,11 +1211,11 @@ void Lingo::runTests() {
 			debug(">> Compiling file %s of size %d, id: %d", fileList[i].c_str(), size, counter);
 
 			_hadError = false;
-			mainArchive->addCode(script, kMovieScript, counter);
+			mainArchive->addCode(script, kTestScript, counter);
 
 			if (!debugChannelSet(-1, kDebugCompileOnly)) {
 				if (!_hadError)
-					executeScript(kMovieScript, counter);
+					executeScript(kTestScript, counter);
 				else
 					debug(">> Skipping execution");
 			}
diff --git a/engines/director/types.h b/engines/director/types.h
index a3ac33e517..93ee1a69c6 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -51,7 +51,8 @@ enum ScriptType {
 	kCastScript = 1,
 	kMovieScript = 2,
 	kEventScript = 3,
-	kMaxScriptType = 3	// Sync with score-loading.cpp:45, array scriptTypes[]
+	kTestScript = 4,
+	kMaxScriptType = 4	// Sync with score-loading.cpp:45, array scriptTypes[]
 };
 
 enum ScriptFlag {


Commit: 688ca6b2999eb3e143d87eb5de9ae90a9ec1a3be
    https://github.com/scummvm/scummvm/commit/688ca6b2999eb3e143d87eb5de9ae90a9ec1a3be
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Update comment

Changed paths:
    engines/director/types.h


diff --git a/engines/director/types.h b/engines/director/types.h
index 93ee1a69c6..bb2a152bed 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -52,7 +52,7 @@ enum ScriptType {
 	kMovieScript = 2,
 	kEventScript = 3,
 	kTestScript = 4,
-	kMaxScriptType = 4	// Sync with score-loading.cpp:45, array scriptTypes[]
+	kMaxScriptType = 4	// Sync with cast.cpp:46, array scriptTypes[]
 };
 
 enum ScriptFlag {


Commit: 34d8aabc4bb81ac1f8d2685b97d53a4920ec34c2
    https://github.com/scummvm/scummvm/commit/34d8aabc4bb81ac1f8d2685b97d53a4920ec34c2
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add DatumType enum

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-funcs.cpp
    engines/director/lingo/lingo-object.cpp
    engines/director/lingo/lingo-object.h
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo.h
    engines/director/types.h


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 18bd0bd21a..fab803cedf 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -46,7 +46,6 @@
 #include "director/lingo/lingo-builtins.h"
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-object.h"
-#include "director/lingo/lingo-gr.h"
 
 namespace Director {
 
@@ -339,7 +338,7 @@ void Lingo::printSTUBWithArglist(const char *funcname, int nargs, const char *pr
 }
 
 void Lingo::convertVOIDtoString(int arg, int nargs) {
-	if (_stack[_stack.size() - nargs + arg].type == VOIDSYM) {
+	if (_stack[_stack.size() - nargs + arg].type == VOID) {
 		if (_stack[_stack.size() - nargs + arg].u.s != NULL)
 			g_lingo->_stack[_stack.size() - nargs + arg].type = STRING;
 		else
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index a926583a39..3f413dece7 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -35,7 +35,6 @@
 #include "director/lingo/lingo-bytecode.h"
 #include "director/lingo/lingo-object.h"
 #include "director/lingo/lingo-the.h"
-#include "director/lingo/lingo-gr.h"
 
 namespace Director {
 
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 20da9aa978..27170e2193 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -56,7 +56,6 @@
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-object.h"
 #include "director/lingo/lingo-the.h"
-#include "director/lingo/lingo-gr.h"
 
 namespace Director {
 
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index a3883eaba3..2d6056dd9d 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -49,7 +49,6 @@
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-object.h"
-#include "director/lingo/lingo-gr.h"
 
 namespace Director {
 
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 5f03dd1936..3a70aaa044 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -38,7 +38,6 @@
 #include "director/util.h"
 
 #include "director/lingo/lingo.h"
-#include "director/lingo/lingo-gr.h"
 
 
 namespace Director {
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index d74b2d8139..5329984914 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -32,7 +32,6 @@
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-object.h"
 #include "director/lingo/lingo-the.h"
-#include "director/lingo/lingo-gr.h"
 #include "director/lingo/xlibs/fileio.h"
 #include "director/lingo/xlibs/palxobj.h"
 #include "director/lingo/xlibs/flushxobj.h"
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
index 197e9e431f..f2c36387d7 100644
--- a/engines/director/lingo/lingo-object.h
+++ b/engines/director/lingo/lingo-object.h
@@ -23,9 +23,8 @@
 #ifndef DIRECTOR_LINGO_OBJECT_H
 #define DIRECTOR_LINGO_OBJECT_H
 
-// FIXME: Basic Lingo types like Datum should probably be in a separate, smaller header
+#include "director/director.h"
 #include "director/lingo/lingo.h"
-#include "director/lingo/lingo-gr.h"
 
 namespace Director {
 
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 5e3cd1d4d6..21ddecabc2 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -37,7 +37,6 @@
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-object.h"
 #include "director/lingo/lingo-the.h"
-#include "director/lingo/lingo-gr.h"
 namespace Director {
 
 class Sprite;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 5f68c6ec20..71a1dbcbca 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -25,6 +25,7 @@
 
 #include "common/hash-ptr.h"
 #include "common/hash-str.h"
+#include "common/str-array.h"
 
 #include "director/types.h"
 
@@ -44,6 +45,7 @@ struct LingoArchive;
 struct LingoV4Bytecode;
 struct LingoV4TheEntity;
 class AbstractObject;
+class Cast;
 class ScriptContext;
 class DirectorEngine;
 class Frame;
@@ -109,7 +111,7 @@ struct Symbol {	/* symbol table entry */
 };
 
 struct Datum {	/* interpreter stack type */
-	int type;
+	DatumType type;
 
 	union {
 		int	i;				/* INT, ARGC, ARGCNORET */
diff --git a/engines/director/types.h b/engines/director/types.h
index bb2a152bed..b5d6a6c2c9 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -332,6 +332,25 @@ enum FileVersion {
 	kFileVer1201 = 0x79F
 };
 
+enum DatumType {
+	ARRAY,
+	ARGC,
+	ARGCNORET,
+	CASTREF,
+	CHUNKREF,
+	FIELDREF,
+	FLOAT,
+	INT,
+	OBJECT,
+	PARRAY,
+	POINT,
+	STRING,
+	SYMBOL,
+	VAR,
+	VOID,
+	RECT
+};
+
 struct Datum;
 struct PCell;
 typedef Common::Array<Datum> DatumArray;


Commit: f726a6ed89c47088f219ba7af1beb4ab256a87c7
    https://github.com/scummvm/scummvm/commit/f726a6ed89c47088f219ba7af1beb4ab256a87c7
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Rewrite grammar to build AST

Changed paths:
  A engines/director/lingo/lingo-ast.cpp
  A engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h
    engines/director/module.mk


diff --git a/engines/director/lingo/lingo-ast.cpp b/engines/director/lingo/lingo-ast.cpp
new file mode 100644
index 0000000000..a81ce4ba74
--- /dev/null
+++ b/engines/director/lingo/lingo-ast.cpp
@@ -0,0 +1,191 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-ast.h"
+#include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-object.h"
+
+namespace Director {
+
+/* ScriptNode */
+
+void ScriptNode::compile() {
+	for (uint i = 0; i < nodes->size(); i++) {
+		(*nodes)[i]->compile();
+	}
+}
+
+/* FactoryNode */
+
+void FactoryNode::compile() {
+	g_lingo->_inFactory = true;
+	ScriptContext *mainContext = g_lingo->_assemblyContext;
+	g_lingo->_assemblyContext = new ScriptContext(mainContext->getName(), mainContext->_archive, mainContext->_scriptType, mainContext->_id);
+
+	g_lingo->codeFactory(*name);
+	for (uint i = 0; i < methods->size(); i++) {
+		(*methods)[i]->compile();
+	}
+
+	g_lingo->_inFactory = false;
+	g_lingo->_assemblyContext = mainContext;
+}
+
+/* HandlerNode */
+
+void HandlerNode::compile() {
+	g_lingo->_indef = true;
+	VarTypeHash *mainMethodVars = g_lingo->_methodVars;
+	g_lingo->_methodVars = new VarTypeHash;
+
+	for (VarTypeHash::iterator i = mainMethodVars->begin(); i != mainMethodVars->end(); ++i) {
+		if (i->_value == kVarGlobal || i->_value == kVarProperty)
+			(*g_lingo->_methodVars)[i->_key] = i->_value;
+	}
+	if (g_lingo->_inFactory) {
+		for (DatumHash::iterator i = g_lingo->_assemblyContext->_properties.begin(); i != g_lingo->_assemblyContext->_properties.end(); ++i) {
+			(*g_lingo->_methodVars)[i->_key] = kVarInstance;
+		}
+	}
+
+	for (uint i = 0; i < args->size(); i++) { // TODO: eliminate argstack
+		g_lingo->codeArg((*args)[i]);
+	}
+
+	uint start = g_lingo->_currentAssembly->size(); // TODO: should always be zero
+	for (uint i = 0; i < stmts->size(); i++) {
+		(*stmts)[i]->compile();
+	}
+
+	g_lingo->code1(LC::c_procret);
+	g_lingo->codeDefine(*name, start, args->size());
+
+	g_lingo->clearArgStack();
+	g_lingo->_indef = false;
+	delete g_lingo->_methodVars;
+	g_lingo->_methodVars = mainMethodVars;
+}
+
+/* CmdNode */
+
+void CmdNode::compile() {
+	for (uint i = 0; i < args->size(); i++) {
+		(*args)[i]->compile();
+	}
+	g_lingo->codeCmd(name, args->size());
+}
+
+/* GlobalNode */
+
+void GlobalNode::compile() {
+	for (uint i = 0; i < names->size(); i++) {
+		g_lingo->registerMethodVar(*(*names)[i], kVarGlobal);
+	}
+}
+
+/* PropertyNode */
+
+void PropertyNode::compile() {
+	for (uint i = 0; i < names->size(); i++) {
+		g_lingo->registerMethodVar(*(*names)[i], kVarProperty);
+	}
+}
+
+/* InstanceNode */
+
+void InstanceNode::compile() {
+	for (uint i = 0; i < names->size(); i++) {
+		g_lingo->registerMethodVar(*(*names)[i], kVarInstance);
+	}
+}
+
+/* IntNode */
+
+void IntNode::compile() {
+	g_lingo->code1(LC::c_intpush);
+	g_lingo->codeInt(val);
+}
+
+/* FloatNode */
+
+void FloatNode::compile() {
+	g_lingo->code1(LC::c_floatpush);
+	g_lingo->codeFloat(val);
+}
+
+/* SymbolNode */
+
+void SymbolNode::compile() {
+	g_lingo->code1(LC::c_symbolpush);
+	g_lingo->codeString(val->c_str());
+}
+
+/* StringNode */
+
+void StringNode::compile() {
+	g_lingo->code1(LC::c_stringpush);
+	g_lingo->codeString(val->c_str());
+}
+
+/* FuncNode */
+
+void FuncNode::compile() {
+	for (uint i = 0; i < args->size(); i++) {
+		(*args)[i]->compile();
+	}
+	g_lingo->codeFunc(name, args->size());
+}
+
+/* VarNode */
+
+void VarNode::compile() {
+	if (g_lingo->_builtinConsts.contains(*name)) {
+		g_lingo->code1(LC::c_constpush);
+	} else {
+		g_lingo->code1(LC::c_eval);
+	}
+	g_lingo->codeString(name->c_str());
+}
+
+/* ParensNode */
+
+void ParensNode::compile() {
+	expr->compile();
+}
+
+/* UnaryOpNode */
+
+void UnaryOpNode::compile() {
+	arg->compile();
+	g_lingo->code1(op);
+}
+
+/* BinaryOpNode */
+
+void BinaryOpNode::compile() {
+	a->compile();
+	b->compile();
+	g_lingo->code1(op);
+}
+
+} // End of namespace Director
diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
new file mode 100644
index 0000000000..742dcef6eb
--- /dev/null
+++ b/engines/director/lingo/lingo-ast.h
@@ -0,0 +1,300 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef DIRECTOR_LINGO_LINGO_AST_H
+#define DIRECTOR_LINGO_LINGO_AST_H
+
+namespace Director {
+
+struct Node;
+
+typedef Common::Array<Node *> NodeList;
+typedef Common::Array<Common::String *> IDList;
+
+typedef void (*inst)(void);
+
+template <typename T>
+void deleteList(Common::Array<T> *list) {
+	for (uint i = 0; i < list->size(); i++) {
+		delete (*list)[i];
+	}
+	delete list;
+}
+
+enum NodeType {
+	kScriptNode,
+	kFactoryNode,
+	kHandlerNode,
+	kCmdNode,
+	kGlobalNode,
+	kPropertyNode,
+	kInstanceNode,
+	kIntNode,
+	kFloatNode,
+	kSymbolNode,
+	kStringNode,
+	kFuncNode,
+	kVarNode,
+	kParensNode,
+	kUnaryOpNode,
+	kBinaryOpNode
+};
+
+/* Node */
+
+struct Node {
+	NodeType type;
+	bool isExpression;
+	bool isStatement;
+
+	Node(NodeType t) : type(t), isExpression(false), isStatement(false) {}
+	virtual ~Node() = default;
+	virtual void compile() {}
+};
+
+/* ExprNode */
+
+struct ExprNode : Node {
+	ExprNode(NodeType t) : Node(t) {
+		isExpression = true;
+	}
+	virtual ~ExprNode() = default;
+};
+
+/* StmtNode */
+
+struct StmtNode : Node {
+	StmtNode(NodeType t) : Node(t) {
+		isStatement = true;
+	}
+	virtual ~StmtNode() = default;
+};
+
+/* ScriptNode */
+
+struct ScriptNode : Node {
+	NodeList *nodes;
+
+	ScriptNode(NodeList *nodesIn): Node(kScriptNode), nodes(nodesIn) {}
+	virtual ~ScriptNode() {
+		deleteList(nodes);
+	}
+	virtual void compile();
+};
+
+/* FactoryNode */
+
+struct FactoryNode : Node {
+	Common::String *name;
+	NodeList *methods;
+
+	FactoryNode(Common::String *nameIn, NodeList *methodsIn)
+		: Node(kFactoryNode), name(nameIn), methods(methodsIn) {}
+	virtual ~FactoryNode() {
+		delete name;
+		deleteList(methods);
+	}
+	virtual void compile();
+};
+
+/* HandlerNode */
+
+struct HandlerNode : Node {
+	Common::String *name;
+	IDList *args;
+	NodeList *stmts;
+
+	HandlerNode(Common::String *nameIn, IDList *argsIn, NodeList *stmtsIn)
+		: Node(kHandlerNode), name(nameIn), args(argsIn), stmts(stmtsIn) {}
+	virtual ~HandlerNode() {
+		delete name;
+		deleteList(args);
+		deleteList(stmts);
+	}
+	virtual void compile();
+};
+
+/* CmdNode */
+
+struct CmdNode : StmtNode {
+	Common::String *name;
+	NodeList *args;
+
+	CmdNode(Common::String *nameIn, NodeList *argsIn)
+		: StmtNode(kCmdNode), name(nameIn), args(argsIn) {}
+	virtual ~CmdNode() {
+		delete name;
+		deleteList(args);
+	}
+	virtual void compile();
+};
+
+/* GlobalNode */
+
+struct GlobalNode : StmtNode {
+	IDList *names;
+
+	GlobalNode(IDList *namesIn) : StmtNode(kGlobalNode), names(namesIn) {}
+	virtual ~GlobalNode() {
+		delete names;
+	}
+	virtual void compile();
+};
+
+/* PropertyNode */
+
+struct PropertyNode : StmtNode {
+	IDList *names;
+
+	PropertyNode(IDList *namesIn) : StmtNode(kPropertyNode), names(namesIn) {}
+	virtual ~PropertyNode() {
+		delete names;
+	}
+	virtual void compile();
+};
+
+/* InstanceNode */
+
+struct InstanceNode : StmtNode {
+	IDList *names;
+
+	InstanceNode(IDList *namesIn) : StmtNode(kInstanceNode), names(namesIn) {}
+	virtual ~InstanceNode() {
+		delete names;
+	}
+	virtual void compile();
+};
+
+/* IntNode */
+
+struct IntNode : ExprNode {
+	int val;
+
+	IntNode(int valIn) : ExprNode(kIntNode), val(valIn) {}
+	virtual ~IntNode() = default;
+	virtual void compile();
+};
+
+/* FloatNode */
+
+struct FloatNode : ExprNode {
+	double val;
+
+	FloatNode(double valIn) : ExprNode(kFloatNode), val(valIn) {}
+	virtual ~FloatNode() = default;
+	virtual void compile();
+};
+
+/* SymbolNode */
+
+struct SymbolNode : ExprNode {
+	Common::String *val;
+
+	SymbolNode(Common::String *valIn) : ExprNode(kSymbolNode), val(valIn) {}
+	virtual ~SymbolNode() {
+		delete val;
+	}
+	virtual void compile();
+};
+
+/* StringNode */
+
+struct StringNode : ExprNode {
+	Common::String *val;
+
+	StringNode(Common::String *valIn) : ExprNode(kStringNode), val(valIn) {}
+	virtual ~StringNode() {
+		delete val;
+	}
+	virtual void compile();
+};
+
+/* FuncNode */
+
+struct FuncNode : StmtNode {
+	Common::String *name;
+	NodeList *args;
+
+	FuncNode(Common::String *nameIn, NodeList *argsIn)
+		: StmtNode(kFuncNode), name(nameIn), args(argsIn) {}
+	virtual ~FuncNode() {
+		delete name;
+		deleteList(args);
+	}
+	virtual void compile();
+};
+
+/* VarNode */
+
+struct VarNode : ExprNode {
+	Common::String *name;
+
+	VarNode(Common::String *nameIn) : ExprNode(kVarNode), name(nameIn) {}
+	virtual ~VarNode() {
+		delete name;
+	}
+	virtual void compile();
+};
+
+/* ParensNode */
+
+struct ParensNode : ExprNode {
+	Node *expr;
+
+	ParensNode(Node *exprIn) : ExprNode(kParensNode), expr(exprIn) {}
+	virtual ~ParensNode() {
+		delete expr;
+	}
+	virtual void compile();
+};
+
+/* UnaryOpNode */
+
+struct UnaryOpNode : ExprNode {
+	inst op;
+	Node *arg;
+
+	UnaryOpNode(inst opIn, Node *argIn) : ExprNode(kUnaryOpNode), op(opIn), arg(argIn) {}
+	virtual ~UnaryOpNode() {
+		delete arg;
+	}
+	virtual void compile();
+};
+
+/* BinaryOpNode */
+
+struct BinaryOpNode : ExprNode {
+	inst op;
+	Node *a;
+	Node *b;
+
+	BinaryOpNode(inst opIn, Node *aIn, Node *bIn) : ExprNode(kBinaryOpNode), op(opIn), a(aIn), b(bIn) {}
+	virtual ~BinaryOpNode() {
+		delete a;
+		delete b;
+	}
+	virtual void compile();
+};
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 2d6056dd9d..7e9ace6234 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -264,6 +264,17 @@ void Lingo::processIf(int toplabel, int endlabel) {
 	}
 }
 
+void Lingo::registerMethodVar(const Common::String &name, VarType type) {
+	if (!g_lingo->_methodVars->contains(name)) {
+		(*g_lingo->_methodVars)[name] = type;
+		if (type == kVarProperty || type == kVarInstance) {
+			g_lingo->_assemblyContext->_properties[name] = Datum();
+		} else if (type == kVarGlobal) {
+			g_lingo->varCreate(name, true);
+		}
+	}
+}
+
 void Lingo::varCreate(const Common::String &name, bool global, DatumHash *localvars) {
 	if (localvars == nullptr) {
 		localvars = _localvars;
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 9ff550f179..11d6da5b0b 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.7.1.  */
+/* A Bison parser, made by GNU Bison 3.7.6.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -45,11 +45,11 @@
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
-/* Identify Bison output.  */
-#define YYBISON 1
+/* Identify Bison output, and Bison version.  */
+#define YYBISON 30706
 
-/* Bison version.  */
-#define YYBISON_VERSION "3.7.1"
+/* Bison version string.  */
+#define YYBISON_VERSION "3.7.6"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -77,6 +77,7 @@
 
 #include "director/director.h"
 #include "director/lingo/lingo.h"
+#include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-object.h"
@@ -111,89 +112,17 @@ static void yyerror(const char *s) {
 	warning("#      %s^ about here", arrow.c_str());
 }
 
-static void checkEnd(Common::String *token, const char *expect, bool required) {
+static void checkEnd(Common::String *token, Common::String *expect, bool required) {
 	if (required) {
-		if (token->compareToIgnoreCase(expect)) {
-			Common::String err = Common::String::format("end mismatch. Expected %s but got %s", expect, token->c_str());
+		if (token->compareToIgnoreCase(*expect)) {
+			Common::String err = Common::String::format("end mismatch. Expected %s but got %s", expect->c_str(), token->c_str());
 			yyerror(err.c_str());
 		}
 	}
 }
 
-static void inArgs() { g_lingo->_indefStore = g_lingo->_indef; g_lingo->_indef = kStateInArgs; }
-static void inDef()  { g_lingo->_indefStore = g_lingo->_indef; g_lingo->_indef = kStateInDef; }
-static void inNone() { g_lingo->_indefStore = g_lingo->_indef; g_lingo->_indef = kStateNone; }
-static void inLast() { g_lingo->_indef = g_lingo->_indefStore; }
 
-static void startDef() {
-	inArgs();
-	g_lingo->_methodVarsStash = g_lingo->_methodVars;
-	g_lingo->_methodVars = new VarTypeHash;
-
-	for (VarTypeHash::iterator i = g_lingo->_methodVarsStash->begin(); i != g_lingo->_methodVarsStash->end(); ++i) {
-		if (i->_value == kVarGlobal || i->_value == kVarProperty)
-			(*g_lingo->_methodVars)[i->_key] = i->_value;
-	}
-	if (g_lingo->_inFactory) {
-		for (DatumHash::iterator i = g_lingo->_assemblyContext->_properties.begin(); i != g_lingo->_assemblyContext->_properties.end(); ++i) {
-			(*g_lingo->_methodVars)[i->_key] = kVarInstance;
-		}
-	}
-}
-
-static void endDef() {
-	g_lingo->clearArgStack();
-	inNone();
-
-	delete g_lingo->_methodVars;
-	g_lingo->_methodVars = g_lingo->_methodVarsStash;
-	g_lingo->_methodVarsStash = nullptr;
-}
-
-static void startRepeat() {
-	g_lingo->_repeatStack.push_back(new RepeatBlock);
-}
-
-static void endRepeat(uint exitPos, uint nextPos) {
-	RepeatBlock *block = g_lingo->_repeatStack.back();
-	g_lingo->_repeatStack.pop_back();
-	for (uint i = 0; i < block->exits.size(); i++) {
-		uint32 pos = block->exits[i];
-		inst exit = 0;
-		WRITE_UINT32(&exit, exitPos - (pos - 1));
-		(*g_lingo->_currentAssembly)[pos] = exit;
-	}
-	for (uint i = 0; i < block->nexts.size(); i++) {
-		uint32 pos = block->nexts[i];
-		inst next = 0;
-		WRITE_UINT32(&next, nextPos - (pos - 1));
-		(*g_lingo->_currentAssembly)[pos] = next;
-	}
-	delete block;
-}
-
-static VarType globalCheck() {
-	// If in a definition, assume variables are local unless
-	// they were declared global with `global varname`
-	if (g_lingo->_indef == kStateInDef) {
-		return kVarLocal;
-	}
-	return kVarGlobal;
-}
-
-static void mVar(Common::String *s, VarType type) {
-	if (!g_lingo->_methodVars->contains(*s)) {
-		(*g_lingo->_methodVars)[*s] = type;
-		if (type == kVarProperty || type == kVarInstance) {
-			g_lingo->_assemblyContext->_properties[*s] = Datum();
-		} else if (type == kVarGlobal) {
-			g_lingo->varCreate(*s, true);
-		}
-	}
-}
-
-
-#line 197 "engines/director/lingo/lingo-gr.cpp"
+#line 126 "engines/director/lingo/lingo-gr.cpp"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -224,171 +153,120 @@ enum yysymbol_kind_t
   YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
   YYSYMBOL_YYerror = 1,                    /* error  */
   YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
-  YYSYMBOL_UNARY = 3,                      /* UNARY  */
-  YYSYMBOL_VOID = 4,                       /* VOID  */
-  YYSYMBOL_VAR = 5,                        /* VAR  */
-  YYSYMBOL_POINT = 6,                      /* POINT  */
-  YYSYMBOL_RECT = 7,                       /* RECT  */
-  YYSYMBOL_ARRAY = 8,                      /* ARRAY  */
-  YYSYMBOL_OBJECT = 9,                     /* OBJECT  */
-  YYSYMBOL_LEXERROR = 10,                  /* LEXERROR  */
-  YYSYMBOL_PARRAY = 11,                    /* PARRAY  */
-  YYSYMBOL_CASTREF = 12,                   /* CASTREF  */
-  YYSYMBOL_FIELDREF = 13,                  /* FIELDREF  */
-  YYSYMBOL_CHUNKREF = 14,                  /* CHUNKREF  */
-  YYSYMBOL_INT = 15,                       /* INT  */
-  YYSYMBOL_ARGC = 16,                      /* ARGC  */
-  YYSYMBOL_ARGCNORET = 17,                 /* ARGCNORET  */
-  YYSYMBOL_THEENTITY = 18,                 /* THEENTITY  */
-  YYSYMBOL_THEENTITYWITHID = 19,           /* THEENTITYWITHID  */
-  YYSYMBOL_THEMENUITEMENTITY = 20,         /* THEMENUITEMENTITY  */
-  YYSYMBOL_THEMENUITEMSENTITY = 21,        /* THEMENUITEMSENTITY  */
-  YYSYMBOL_FLOAT = 22,                     /* FLOAT  */
-  YYSYMBOL_THEFUNC = 23,                   /* THEFUNC  */
-  YYSYMBOL_THEFUNCINOF = 24,               /* THEFUNCINOF  */
-  YYSYMBOL_VARID = 25,                     /* VARID  */
-  YYSYMBOL_STRING = 26,                    /* STRING  */
-  YYSYMBOL_SYMBOL = 27,                    /* SYMBOL  */
-  YYSYMBOL_ENDCLAUSE = 28,                 /* ENDCLAUSE  */
-  YYSYMBOL_tPLAYACCEL = 29,                /* tPLAYACCEL  */
-  YYSYMBOL_tMETHOD = 30,                   /* tMETHOD  */
-  YYSYMBOL_THEOBJECTPROP = 31,             /* THEOBJECTPROP  */
-  YYSYMBOL_tCAST = 32,                     /* tCAST  */
-  YYSYMBOL_tFIELD = 33,                    /* tFIELD  */
-  YYSYMBOL_tSCRIPT = 34,                   /* tSCRIPT  */
-  YYSYMBOL_tWINDOW = 35,                   /* tWINDOW  */
-  YYSYMBOL_tDOWN = 36,                     /* tDOWN  */
-  YYSYMBOL_tELSE = 37,                     /* tELSE  */
-  YYSYMBOL_tELSIF = 38,                    /* tELSIF  */
-  YYSYMBOL_tEXIT = 39,                     /* tEXIT  */
-  YYSYMBOL_tGLOBAL = 40,                   /* tGLOBAL  */
-  YYSYMBOL_tGO = 41,                       /* tGO  */
-  YYSYMBOL_tGOLOOP = 42,                   /* tGOLOOP  */
-  YYSYMBOL_tIF = 43,                       /* tIF  */
-  YYSYMBOL_tIN = 44,                       /* tIN  */
-  YYSYMBOL_tINTO = 45,                     /* tINTO  */
-  YYSYMBOL_tMACRO = 46,                    /* tMACRO  */
-  YYSYMBOL_tMOVIE = 47,                    /* tMOVIE  */
-  YYSYMBOL_tNEXT = 48,                     /* tNEXT  */
-  YYSYMBOL_tOF = 49,                       /* tOF  */
-  YYSYMBOL_tPREVIOUS = 50,                 /* tPREVIOUS  */
-  YYSYMBOL_tPUT = 51,                      /* tPUT  */
-  YYSYMBOL_tREPEAT = 52,                   /* tREPEAT  */
-  YYSYMBOL_tSET = 53,                      /* tSET  */
-  YYSYMBOL_tTHEN = 54,                     /* tTHEN  */
-  YYSYMBOL_tTO = 55,                       /* tTO  */
-  YYSYMBOL_tWHEN = 56,                     /* tWHEN  */
-  YYSYMBOL_tWITH = 57,                     /* tWITH  */
-  YYSYMBOL_tWHILE = 58,                    /* tWHILE  */
-  YYSYMBOL_tFACTORY = 59,                  /* tFACTORY  */
-  YYSYMBOL_tOPEN = 60,                     /* tOPEN  */
-  YYSYMBOL_tPLAY = 61,                     /* tPLAY  */
-  YYSYMBOL_tINSTANCE = 62,                 /* tINSTANCE  */
-  YYSYMBOL_tGE = 63,                       /* tGE  */
-  YYSYMBOL_tLE = 64,                       /* tLE  */
-  YYSYMBOL_tEQ = 65,                       /* tEQ  */
-  YYSYMBOL_tNEQ = 66,                      /* tNEQ  */
-  YYSYMBOL_tAND = 67,                      /* tAND  */
-  YYSYMBOL_tOR = 68,                       /* tOR  */
-  YYSYMBOL_tNOT = 69,                      /* tNOT  */
-  YYSYMBOL_tMOD = 70,                      /* tMOD  */
-  YYSYMBOL_tAFTER = 71,                    /* tAFTER  */
-  YYSYMBOL_tBEFORE = 72,                   /* tBEFORE  */
-  YYSYMBOL_tCONCAT = 73,                   /* tCONCAT  */
-  YYSYMBOL_tCONTAINS = 74,                 /* tCONTAINS  */
-  YYSYMBOL_tSTARTS = 75,                   /* tSTARTS  */
-  YYSYMBOL_tCHAR = 76,                     /* tCHAR  */
-  YYSYMBOL_tITEM = 77,                     /* tITEM  */
-  YYSYMBOL_tLINE = 78,                     /* tLINE  */
-  YYSYMBOL_tWORD = 79,                     /* tWORD  */
-  YYSYMBOL_tSPRITE = 80,                   /* tSPRITE  */
-  YYSYMBOL_tINTERSECTS = 81,               /* tINTERSECTS  */
-  YYSYMBOL_tWITHIN = 82,                   /* tWITHIN  */
-  YYSYMBOL_tTELL = 83,                     /* tTELL  */
-  YYSYMBOL_tPROPERTY = 84,                 /* tPROPERTY  */
-  YYSYMBOL_tON = 85,                       /* tON  */
-  YYSYMBOL_tENDIF = 86,                    /* tENDIF  */
-  YYSYMBOL_tENDREPEAT = 87,                /* tENDREPEAT  */
-  YYSYMBOL_tENDTELL = 88,                  /* tENDTELL  */
-  YYSYMBOL_tASSERTERROR = 89,              /* tASSERTERROR  */
-  YYSYMBOL_90_ = 90,                       /* '<'  */
-  YYSYMBOL_91_ = 91,                       /* '>'  */
-  YYSYMBOL_92_ = 92,                       /* '&'  */
-  YYSYMBOL_93_ = 93,                       /* '+'  */
-  YYSYMBOL_94_ = 94,                       /* '-'  */
-  YYSYMBOL_95_ = 95,                       /* '*'  */
-  YYSYMBOL_96_ = 96,                       /* '/'  */
-  YYSYMBOL_97_ = 97,                       /* '%'  */
-  YYSYMBOL_98_n_ = 98,                     /* '\n'  */
-  YYSYMBOL_99_ = 99,                       /* '('  */
-  YYSYMBOL_100_ = 100,                     /* ')'  */
-  YYSYMBOL_101_ = 101,                     /* ','  */
-  YYSYMBOL_102_ = 102,                     /* '['  */
-  YYSYMBOL_103_ = 103,                     /* ']'  */
-  YYSYMBOL_104_ = 104,                     /* ':'  */
-  YYSYMBOL_YYACCEPT = 105,                 /* $accept  */
-  YYSYMBOL_program = 106,                  /* program  */
-  YYSYMBOL_programline = 107,              /* programline  */
-  YYSYMBOL_ID = 108,                       /* ID  */
-  YYSYMBOL_asgn = 109,                     /* asgn  */
-  YYSYMBOL_stmtoneliner = 110,             /* stmtoneliner  */
-  YYSYMBOL_stmt = 111,                     /* stmt  */
-  YYSYMBOL_112_1 = 112,                    /* $@1  */
-  YYSYMBOL_113_2 = 113,                    /* $@2  */
-  YYSYMBOL_114_3 = 114,                    /* $@3  */
-  YYSYMBOL_115_4 = 115,                    /* $@4  */
-  YYSYMBOL_116_5 = 116,                    /* $@5  */
-  YYSYMBOL_117_6 = 117,                    /* $@6  */
-  YYSYMBOL_118_7 = 118,                    /* $@7  */
-  YYSYMBOL_119_8 = 119,                    /* $@8  */
-  YYSYMBOL_120_9 = 120,                    /* $@9  */
-  YYSYMBOL_startrepeat = 121,              /* startrepeat  */
-  YYSYMBOL_tellstart = 122,                /* tellstart  */
-  YYSYMBOL_asserterrorstart = 123,         /* asserterrorstart  */
-  YYSYMBOL_ifstmt = 124,                   /* ifstmt  */
-  YYSYMBOL_elseifstmtlist = 125,           /* elseifstmtlist  */
-  YYSYMBOL_elseifstmt = 126,               /* elseifstmt  */
-  YYSYMBOL_jumpifz = 127,                  /* jumpifz  */
-  YYSYMBOL_jump = 128,                     /* jump  */
-  YYSYMBOL_varassign = 129,                /* varassign  */
-  YYSYMBOL_if = 130,                       /* if  */
-  YYSYMBOL_lbl = 131,                      /* lbl  */
-  YYSYMBOL_stmtlist = 132,                 /* stmtlist  */
-  YYSYMBOL_stmtlistline = 133,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 134,       /* simpleexprnoparens  */
-  YYSYMBOL_135_10 = 135,                   /* $@10  */
-  YYSYMBOL_simpleexpr = 136,               /* simpleexpr  */
-  YYSYMBOL_expr = 137,                     /* expr  */
-  YYSYMBOL_chunkexpr = 138,                /* chunkexpr  */
-  YYSYMBOL_reference = 139,                /* reference  */
-  YYSYMBOL_proc = 140,                     /* proc  */
-  YYSYMBOL_141_11 = 141,                   /* $@11  */
-  YYSYMBOL_142_12 = 142,                   /* $@12  */
-  YYSYMBOL_143_13 = 143,                   /* $@13  */
-  YYSYMBOL_144_14 = 144,                   /* $@14  */
-  YYSYMBOL_globallist = 145,               /* globallist  */
-  YYSYMBOL_propertylist = 146,             /* propertylist  */
-  YYSYMBOL_instancelist = 147,             /* instancelist  */
-  YYSYMBOL_gotofunc = 148,                 /* gotofunc  */
-  YYSYMBOL_gotomovie = 149,                /* gotomovie  */
-  YYSYMBOL_playfunc = 150,                 /* playfunc  */
-  YYSYMBOL_151_15 = 151,                   /* $@15  */
-  YYSYMBOL_defn = 152,                     /* defn  */
-  YYSYMBOL_153_16 = 153,                   /* $@16  */
-  YYSYMBOL_154_17 = 154,                   /* $@17  */
-  YYSYMBOL_on = 155,                       /* on  */
-  YYSYMBOL_156_18 = 156,                   /* $@18  */
-  YYSYMBOL_argname = 157,                  /* argname  */
-  YYSYMBOL_argdef = 158,                   /* argdef  */
-  YYSYMBOL_endargdef = 159,                /* endargdef  */
-  YYSYMBOL_argstore = 160,                 /* argstore  */
-  YYSYMBOL_arglist = 161,                  /* arglist  */
-  YYSYMBOL_nonemptyarglist = 162,          /* nonemptyarglist  */
-  YYSYMBOL_list = 163,                     /* list  */
-  YYSYMBOL_valuelist = 164,                /* valuelist  */
-  YYSYMBOL_linearlist = 165,               /* linearlist  */
-  YYSYMBOL_proplist = 166,                 /* proplist  */
-  YYSYMBOL_proppair = 167                  /* proppair  */
+  YYSYMBOL_tUNARY = 3,                     /* tUNARY  */
+  YYSYMBOL_tLEXERROR = 4,                  /* tLEXERROR  */
+  YYSYMBOL_tINT = 5,                       /* tINT  */
+  YYSYMBOL_tTHEENTITY = 6,                 /* tTHEENTITY  */
+  YYSYMBOL_tTHEENTITYWITHID = 7,           /* tTHEENTITYWITHID  */
+  YYSYMBOL_tTHEMENUITEMENTITY = 8,         /* tTHEMENUITEMENTITY  */
+  YYSYMBOL_tTHEMENUITEMSENTITY = 9,        /* tTHEMENUITEMSENTITY  */
+  YYSYMBOL_tFLOAT = 10,                    /* tFLOAT  */
+  YYSYMBOL_tTHEFUNC = 11,                  /* tTHEFUNC  */
+  YYSYMBOL_tTHEFUNCINOF = 12,              /* tTHEFUNCINOF  */
+  YYSYMBOL_tVARID = 13,                    /* tVARID  */
+  YYSYMBOL_tSTRING = 14,                   /* tSTRING  */
+  YYSYMBOL_tSYMBOL = 15,                   /* tSYMBOL  */
+  YYSYMBOL_tENDCLAUSE = 16,                /* tENDCLAUSE  */
+  YYSYMBOL_tPLAYACCEL = 17,                /* tPLAYACCEL  */
+  YYSYMBOL_tTHEOBJECTPROP = 18,            /* tTHEOBJECTPROP  */
+  YYSYMBOL_tCAST = 19,                     /* tCAST  */
+  YYSYMBOL_tFIELD = 20,                    /* tFIELD  */
+  YYSYMBOL_tSCRIPT = 21,                   /* tSCRIPT  */
+  YYSYMBOL_tWINDOW = 22,                   /* tWINDOW  */
+  YYSYMBOL_tDOWN = 23,                     /* tDOWN  */
+  YYSYMBOL_tELSE = 24,                     /* tELSE  */
+  YYSYMBOL_tELSIF = 25,                    /* tELSIF  */
+  YYSYMBOL_tEXIT = 26,                     /* tEXIT  */
+  YYSYMBOL_tGLOBAL = 27,                   /* tGLOBAL  */
+  YYSYMBOL_tGO = 28,                       /* tGO  */
+  YYSYMBOL_tGOLOOP = 29,                   /* tGOLOOP  */
+  YYSYMBOL_tIF = 30,                       /* tIF  */
+  YYSYMBOL_tIN = 31,                       /* tIN  */
+  YYSYMBOL_tINTO = 32,                     /* tINTO  */
+  YYSYMBOL_tMACRO = 33,                    /* tMACRO  */
+  YYSYMBOL_tMOVIE = 34,                    /* tMOVIE  */
+  YYSYMBOL_tNEXT = 35,                     /* tNEXT  */
+  YYSYMBOL_tOF = 36,                       /* tOF  */
+  YYSYMBOL_tPREVIOUS = 37,                 /* tPREVIOUS  */
+  YYSYMBOL_tPUT = 38,                      /* tPUT  */
+  YYSYMBOL_tREPEAT = 39,                   /* tREPEAT  */
+  YYSYMBOL_tSET = 40,                      /* tSET  */
+  YYSYMBOL_tTHEN = 41,                     /* tTHEN  */
+  YYSYMBOL_tTO = 42,                       /* tTO  */
+  YYSYMBOL_tWHEN = 43,                     /* tWHEN  */
+  YYSYMBOL_tWITH = 44,                     /* tWITH  */
+  YYSYMBOL_tWHILE = 45,                    /* tWHILE  */
+  YYSYMBOL_tFACTORY = 46,                  /* tFACTORY  */
+  YYSYMBOL_tOPEN = 47,                     /* tOPEN  */
+  YYSYMBOL_tPLAY = 48,                     /* tPLAY  */
+  YYSYMBOL_tINSTANCE = 49,                 /* tINSTANCE  */
+  YYSYMBOL_tGE = 50,                       /* tGE  */
+  YYSYMBOL_tLE = 51,                       /* tLE  */
+  YYSYMBOL_tEQ = 52,                       /* tEQ  */
+  YYSYMBOL_tNEQ = 53,                      /* tNEQ  */
+  YYSYMBOL_tAND = 54,                      /* tAND  */
+  YYSYMBOL_tOR = 55,                       /* tOR  */
+  YYSYMBOL_tNOT = 56,                      /* tNOT  */
+  YYSYMBOL_tMOD = 57,                      /* tMOD  */
+  YYSYMBOL_tAFTER = 58,                    /* tAFTER  */
+  YYSYMBOL_tBEFORE = 59,                   /* tBEFORE  */
+  YYSYMBOL_tCONCAT = 60,                   /* tCONCAT  */
+  YYSYMBOL_tCONTAINS = 61,                 /* tCONTAINS  */
+  YYSYMBOL_tSTARTS = 62,                   /* tSTARTS  */
+  YYSYMBOL_tCHAR = 63,                     /* tCHAR  */
+  YYSYMBOL_tITEM = 64,                     /* tITEM  */
+  YYSYMBOL_tLINE = 65,                     /* tLINE  */
+  YYSYMBOL_tWORD = 66,                     /* tWORD  */
+  YYSYMBOL_tSPRITE = 67,                   /* tSPRITE  */
+  YYSYMBOL_tINTERSECTS = 68,               /* tINTERSECTS  */
+  YYSYMBOL_tWITHIN = 69,                   /* tWITHIN  */
+  YYSYMBOL_tTELL = 70,                     /* tTELL  */
+  YYSYMBOL_tPROPERTY = 71,                 /* tPROPERTY  */
+  YYSYMBOL_tON = 72,                       /* tON  */
+  YYSYMBOL_tMETHOD = 73,                   /* tMETHOD  */
+  YYSYMBOL_tENDIF = 74,                    /* tENDIF  */
+  YYSYMBOL_tENDREPEAT = 75,                /* tENDREPEAT  */
+  YYSYMBOL_tENDTELL = 76,                  /* tENDTELL  */
+  YYSYMBOL_tASSERTERROR = 77,              /* tASSERTERROR  */
+  YYSYMBOL_78_ = 78,                       /* '<'  */
+  YYSYMBOL_79_ = 79,                       /* '>'  */
+  YYSYMBOL_80_ = 80,                       /* '&'  */
+  YYSYMBOL_81_ = 81,                       /* '+'  */
+  YYSYMBOL_82_ = 82,                       /* '-'  */
+  YYSYMBOL_83_ = 83,                       /* '*'  */
+  YYSYMBOL_84_ = 84,                       /* '/'  */
+  YYSYMBOL_85_ = 85,                       /* '%'  */
+  YYSYMBOL_86_n_ = 86,                     /* '\n'  */
+  YYSYMBOL_87_ = 87,                       /* ','  */
+  YYSYMBOL_88_ = 88,                       /* '('  */
+  YYSYMBOL_89_ = 89,                       /* ')'  */
+  YYSYMBOL_YYACCEPT = 90,                  /* $accept  */
+  YYSYMBOL_script = 91,                    /* script  */
+  YYSYMBOL_scriptpartlist = 92,            /* scriptpartlist  */
+  YYSYMBOL_scriptpart = 93,                /* scriptpart  */
+  YYSYMBOL_macro = 94,                     /* macro  */
+  YYSYMBOL_factory = 95,                   /* factory  */
+  YYSYMBOL_method = 96,                    /* method  */
+  YYSYMBOL_methodlist = 97,                /* methodlist  */
+  YYSYMBOL_nonemptymethodlist = 98,        /* nonemptymethodlist  */
+  YYSYMBOL_methodlistline = 99,            /* methodlistline  */
+  YYSYMBOL_handler = 100,                  /* handler  */
+  YYSYMBOL_endargdef = 101,                /* endargdef  */
+  YYSYMBOL_ID = 102,                       /* ID  */
+  YYSYMBOL_idlist = 103,                   /* idlist  */
+  YYSYMBOL_nonemptyidlist = 104,           /* nonemptyidlist  */
+  YYSYMBOL_stmt = 105,                     /* stmt  */
+  YYSYMBOL_stmtoneliner = 106,             /* stmtoneliner  */
+  YYSYMBOL_proc = 107,                     /* proc  */
+  YYSYMBOL_definevars = 108,               /* definevars  */
+  YYSYMBOL_stmtlist = 109,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 110,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 111,             /* stmtlistline  */
+  YYSYMBOL_simpleexprnoparens = 112,       /* simpleexprnoparens  */
+  YYSYMBOL_simpleexpr = 113,               /* simpleexpr  */
+  YYSYMBOL_expr = 114,                     /* expr  */
+  YYSYMBOL_exprlist = 115,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 116          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -432,6 +310,18 @@ typedef int_least16_t yytype_int16;
 typedef short yytype_int16;
 #endif
 
+/* Work around bug in HP-UX 11.23, which defines these macros
+   incorrectly for preprocessor constants.  This workaround can likely
+   be removed in 2023, as HPE has promised support for HP-UX 11.23
+   (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+   <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
+#endif
+
 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
@@ -493,7 +383,7 @@ typedef int yytype_uint16;
 
 
 /* Stored state numbers (used for stacks). */
-typedef yytype_int16 yy_state_t;
+typedef yytype_uint8 yy_state_t;
 
 /* State numbers in computations.  */
 typedef int yy_state_fast_t;
@@ -529,9 +419,9 @@ typedef int yy_state_fast_t;
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
+# define YY_USE(E) ((void) (E))
 #else
-# define YYUSE(E) /* empty */
+# define YY_USE(E) /* empty */
 #endif
 
 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
@@ -696,21 +586,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  102
+#define YYFINAL  66
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2006
+#define YYLAST   567
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  105
+#define YYNTOKENS  90
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  63
+#define YYNNTS  27
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  197
+#define YYNRULES  113
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  394
+#define YYNSTATES  164
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   344
+#define YYMAXUTOK   332
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -725,15 +615,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      98,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      86,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    85,    80,     2,
+      88,    89,    83,    81,    87,    82,     2,    84,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      78,     2,    79,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    97,    92,     2,
-      99,   100,    95,    93,   101,    94,     2,    96,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   104,     2,
-      90,     2,    91,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   102,     2,   103,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -757,34 +647,25 @@ static const yytype_int8 yytranslate[] =
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89
+      75,    76,    77
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   236,   236,   237,   239,   240,   241,   243,   244,   245,
-     246,   247,   249,   256,   260,   271,   278,   281,   288,   291,
-     298,   305,   312,   319,   325,   332,   343,   354,   361,   369,
-     370,   372,   373,   378,   391,   395,   398,   390,   425,   429,
-     432,   424,   459,   466,   472,   458,   502,   510,   513,   514,
-     515,   516,   518,   520,   522,   524,   531,   539,   540,   542,
-     548,   552,   556,   560,   563,   565,   566,   568,   569,   571,
-     574,   577,   581,   585,   586,   587,   588,   589,   597,   603,
-     606,   609,   615,   616,   617,   618,   624,   624,   629,   632,
-     641,   642,   644,   645,   646,   647,   648,   649,   650,   651,
-     652,   653,   654,   655,   656,   657,   658,   659,   660,   661,
-     663,   666,   669,   670,   671,   672,   673,   674,   675,   676,
-     678,   679,   682,   686,   689,   690,   691,   699,   700,   700,
-     701,   701,   702,   702,   703,   706,   709,   715,   715,   720,
-     723,   727,   728,   731,   735,   736,   739,   743,   744,   747,
-     758,   759,   760,   761,   765,   769,   774,   775,   777,   781,
-     785,   789,   789,   819,   819,   825,   826,   826,   836,   844,
-     850,   850,   852,   854,   855,   856,   858,   859,   860,   862,
-     864,   865,   866,   868,   869,   870,   872,   874,   875,   876,
-     877,   879,   880,   882,   883,   885,   889,   893
+       0,   188,   188,   190,   196,   203,   204,   205,   206,   207,
+     236,   240,   242,   244,   245,   248,   254,   261,   262,   267,
+     271,   275,   276,   277,   282,   283,   284,   285,   286,   287,
+     288,   291,   293,   296,   298,   299,   300,   301,   304,   305,
+     306,   307,   308,   310,   311,   312,   313,   314,   316,   317,
+     318,   319,   320,   321,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   334,   335,   338,   342,   349,   351,   352,
+     355,   356,   359,   360,   361,   364,   365,   369,   375,   382,
+     383,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+     399,   400,   403,   404,   405,   406,   407,   408,   409,   410,
+     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
+     423,   424,   427,   431
 };
 #endif
 
@@ -801,32 +682,25 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 {
   static const char *const yy_sname[] =
   {
-  "end of file", "error", "invalid token", "UNARY", "VOID", "VAR",
-  "POINT", "RECT", "ARRAY", "OBJECT", "LEXERROR", "PARRAY", "CASTREF",
-  "FIELDREF", "CHUNKREF", "INT", "ARGC", "ARGCNORET", "THEENTITY",
-  "THEENTITYWITHID", "THEMENUITEMENTITY", "THEMENUITEMSENTITY", "FLOAT",
-  "THEFUNC", "THEFUNCINOF", "VARID", "STRING", "SYMBOL", "ENDCLAUSE",
-  "tPLAYACCEL", "tMETHOD", "THEOBJECTPROP", "tCAST", "tFIELD", "tSCRIPT",
-  "tWINDOW", "tDOWN", "tELSE", "tELSIF", "tEXIT", "tGLOBAL", "tGO",
-  "tGOLOOP", "tIF", "tIN", "tINTO", "tMACRO", "tMOVIE", "tNEXT", "tOF",
-  "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO", "tWHEN", "tWITH",
-  "tWHILE", "tFACTORY", "tOPEN", "tPLAY", "tINSTANCE", "tGE", "tLE", "tEQ",
-  "tNEQ", "tAND", "tOR", "tNOT", "tMOD", "tAFTER", "tBEFORE", "tCONCAT",
-  "tCONTAINS", "tSTARTS", "tCHAR", "tITEM", "tLINE", "tWORD", "tSPRITE",
-  "tINTERSECTS", "tWITHIN", "tTELL", "tPROPERTY", "tON", "tENDIF",
-  "tENDREPEAT", "tENDTELL", "tASSERTERROR", "'<'", "'>'", "'&'", "'+'",
-  "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "','", "'['", "']'",
-  "':'", "$accept", "program", "programline", "ID", "asgn", "stmtoneliner",
-  "stmt", "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9",
-  "startrepeat", "tellstart", "asserterrorstart", "ifstmt",
-  "elseifstmtlist", "elseifstmt", "jumpifz", "jump", "varassign", "if",
-  "lbl", "stmtlist", "stmtlistline", "simpleexprnoparens", "$@10",
-  "simpleexpr", "expr", "chunkexpr", "reference", "proc", "$@11", "$@12",
-  "$@13", "$@14", "globallist", "propertylist", "instancelist", "gotofunc",
-  "gotomovie", "playfunc", "$@15", "defn", "$@16", "$@17", "on", "$@18",
-  "argname", "argdef", "endargdef", "argstore", "arglist",
-  "nonemptyarglist", "list", "valuelist", "linearlist", "proplist",
-  "proppair", YY_NULLPTR
+  "end of file", "error", "invalid token", "tUNARY", "tLEXERROR", "tINT",
+  "tTHEENTITY", "tTHEENTITYWITHID", "tTHEMENUITEMENTITY",
+  "tTHEMENUITEMSENTITY", "tFLOAT", "tTHEFUNC", "tTHEFUNCINOF", "tVARID",
+  "tSTRING", "tSYMBOL", "tENDCLAUSE", "tPLAYACCEL", "tTHEOBJECTPROP",
+  "tCAST", "tFIELD", "tSCRIPT", "tWINDOW", "tDOWN", "tELSE", "tELSIF",
+  "tEXIT", "tGLOBAL", "tGO", "tGOLOOP", "tIF", "tIN", "tINTO", "tMACRO",
+  "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET",
+  "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tFACTORY", "tOPEN", "tPLAY",
+  "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD",
+  "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM",
+  "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
+  "tPROPERTY", "tON", "tMETHOD", "tENDIF", "tENDREPEAT", "tENDTELL",
+  "tASSERTERROR", "'<'", "'>'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
+  "'\\n'", "','", "'('", "')'", "$accept", "script", "scriptpartlist",
+  "scriptpart", "macro", "factory", "method", "methodlist",
+  "nonemptymethodlist", "methodlistline", "handler", "endargdef", "ID",
+  "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "definevars",
+  "stmtlist", "nonemptystmtlist", "stmtlistline", "simpleexprnoparens",
+  "simpleexpr", "expr", "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -844,19 +718,17 @@ static const yytype_int16 yytoknum[] =
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-      60,    62,    38,    43,    45,    42,    47,    37,    10,    40,
-      41,    44,    91,    93,    58
+     325,   326,   327,   328,   329,   330,   331,   332,    60,    62,
+      38,    43,    45,    42,    47,    37,    10,    44,    40,    41
 };
 #endif
 
-#define YYPACT_NINF (-359)
+#define YYPACT_NINF (-140)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-68)
+#define YYTABLE_NINF (-1)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -865,626 +737,245 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     585,   -72,  -359,  -359,  -359,  -359,  -359,  -359,  -359,   -30,
-    -359,  1079,  -359,  -359,  -359,    -8,  1200,   -42,   261,    54,
-      54,  1282,  1161,  -359,  1282,  -359,  -359,  -359,    13,  -359,
-    1309,  -359,  -359,  -359,  -359,  1282,  -359,  -359,  -359,  -359,
-    -359,  -359,  1282,  -359,  -359,    54,  -359,  -359,  1282,  -359,
-     -10,  1282,  -359,  -359,  -359,  1391,  1391,  1391,  1391,  1282,
-    -359,    -1,  -359,  1282,  1282,  1282,  1282,  1282,  1282,  1282,
-    1282,  1282,  1040,   -40,  -359,  -359,  1382,  -359,  -359,  -359,
-    -359,    54,  -359,    54,   507,    54,  -359,   -24,  1282,  1282,
-     -12,     5,    17,  -359,  1739,  1382,  -359,    54,  1683,    54,
-      54,   405,  -359,   585,  1282,  1786,  -359,  1910,    54,  -359,
-      54,   -17,  -359,  -359,  1282,  -359,  -359,  -359,  -359,  -359,
-    1910,  1282,  -359,  1431,  1465,  1499,  1533,  1876,  -359,  -359,
-    1838,   -14,    -6,  -359,   -76,  1910,   -37,    -9,     1,  -359,
-    1282,  1282,  1282,  1282,  1282,  1282,  1282,  1282,  1282,  1282,
-    1282,  1282,  1282,  1282,  1282,  1282,  1282,  1282,  -359,  -359,
-    1282,   159,   159,   159,   -27,  1282,  1282,  1282,  1725,    63,
-    1282,  1282,  1282,  1282,  1282,  1282,  -359,    23,  -359,  -359,
-    -359,    25,  -359,  -359,  -359,  -359,   -26,  1773,    14,  1282,
-      80,  -359,    31,    38,    40,    54,  -359,  1910,  1282,  1282,
-    1282,  1282,  1282,  1282,  1282,  1282,  1282,  1282,  -359,  1282,
-    1282,  1282,  -359,  1282,    96,    -5,    42,   -59,   -59,   -59,
-     -59,   267,   267,  -359,   -38,   -59,   -59,   -59,   -59,   -38,
-     -45,   -45,  -359,  -359,    54,    99,  -359,  -359,  -359,  -359,
-    -359,  -359,  1282,  1282,  1910,  1910,  1910,  1282,  1282,    54,
-    1910,  1910,  1910,  1910,  1910,  1910,    54,   405,   834,    54,
-    -359,  -359,  -359,  -359,   772,    54,  -359,  -359,  -359,  -359,
-    1567,  -359,  1601,  -359,  1635,  -359,  1669,  -359,  -359,  1910,
-    1910,  1910,  1910,   -14,    -6,    41,  -359,  -359,  -359,  -359,
-      48,  1282,  1910,   133,  -359,  1910,    78,  1282,  -359,  -359,
-    -359,  -359,    51,  -359,  1282,  -359,  -359,   652,   719,  1282,
-    1282,  1282,  1282,  1282,  -359,  1910,  -359,  -359,  -359,   896,
-      12,  -359,    62,   478,  1825,    52,  -359,   125,  -359,  -359,
-    -359,  -359,  -359,    55,   719,  -359,  -359,  -359,  -359,  1282,
-    1282,  -359,  -359,  1282,  -359,    24,    54,  -359,  -359,  -359,
-     101,   123,    73,  1910,  1910,  -359,   963,  1282,  -359,    81,
-    -359,    67,  -359,  1282,   120,  -359,  -359,  1910,  -359,    54,
-    -359,  1910,  1282,    92,   126,  -359,   896,  -359,  1910,  -359,
-     772,    95,  -359,  -359,  -359,  -359,   896,  -359,  -359,   115,
-     896,  -359,   117,  -359
+     293,  -140,  -140,  -140,  -140,  -140,  -140,  -140,  -140,   414,
+    -140,  -140,   414,  -140,  -140,  -140,  -140,  -140,  -140,  -140,
+    -140,  -140,  -140,  -140,   414,  -140,  -140,   414,  -140,  -140,
+    -140,  -140,  -140,  -140,  -140,  -140,  -140,  -140,  -140,  -140,
+    -140,  -140,  -140,   414,   414,  -140,  -140,    16,   293,  -140,
+    -140,  -140,  -140,   153,   -66,  -140,  -140,  -140,  -140,  -140,
+     -62,   414,   -60,  -140,  -140,   414,  -140,  -140,  -140,  -140,
+    -140,  -140,   223,   223,   223,   223,   -51,  -140,  -140,   448,
+    -140,   -49,  -140,   414,   -45,   -63,   -44,   223,  -140,  -140,
+    -140,   435,   -53,   223,   223,   223,   223,   223,   223,   223,
+     223,   223,   223,   223,   223,   223,   223,   223,   223,   223,
+     223,   223,  -140,    32,   414,  -140,  -140,   -40,  -140,  -140,
+      32,   435,  -140,  -140,   -42,   -52,   -52,   -52,   -52,   483,
+     483,  -140,    60,   -52,   -52,   -52,   -52,    60,   -50,   -50,
+    -140,  -140,   448,  -140,   -30,    32,  -140,  -140,   414,   -63,
+     355,  -140,  -140,  -140,   -29,  -140,   414,    32,   -68,  -140,
+      32,  -140,   414,  -140
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
-static const yytype_uint8 yydefact[] =
+static const yytype_int8 yydefact[] =
 {
-       0,     0,     7,   161,   166,     8,     9,    10,    11,   127,
-     128,     0,   150,    63,   163,     0,     0,     0,     0,     0,
-       0,     0,     0,   132,     0,   130,   170,    54,     0,     2,
-     180,    29,    31,     6,    32,     0,    30,   124,   125,     5,
-      64,    51,   180,    64,   126,   141,    69,    77,     0,    70,
-       0,     0,    72,    71,    81,     8,     9,    10,    11,     0,
-     151,     0,   152,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   187,    89,    90,    92,   153,   120,    76,   155,
-      84,     0,    46,     0,   123,     0,    64,     0,     0,     0,
-       0,     0,     0,   165,   135,   158,   160,   147,     0,   144,
-       0,     0,     1,     0,   180,   181,   140,    60,   173,   162,
-     173,   142,   129,    78,     0,    79,   111,   110,   121,   122,
-     157,     0,    75,     0,     0,     0,     0,     0,    73,    74,
-       0,    72,    71,   188,    89,   191,     0,   190,   189,   193,
-     180,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   154,    64,
+       0,    24,    46,    28,    32,    50,    59,    30,    31,    63,
+      33,    35,     0,    39,    40,    42,    47,    48,    49,    51,
+      54,    57,    60,    58,     0,    43,    45,    63,    26,    44,
+      41,    38,    25,    27,    52,    29,    36,    37,    62,    56,
+      34,    61,    53,    63,     0,    55,     5,     0,     2,     3,
+       6,     7,     8,   110,     0,    67,    68,    69,    65,    72,
+      64,    63,     0,    74,    73,    63,     1,     4,    81,    82,
+      84,    83,    41,     0,     0,   110,    89,    90,    92,   112,
+      71,   111,     9,     0,     0,    13,     0,     0,    87,    85,
+      86,   112,     0,   110,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   159,   148,   133,    53,
-      53,   145,   131,   171,    50,     3,    89,     0,     0,   180,
-       0,   172,   174,     0,     0,   141,    80,   156,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    91,     0,
-       0,     0,   186,     0,     0,    89,     0,   102,   103,   100,
-     101,   104,   105,    97,   107,   108,   109,    99,    98,   106,
-      93,    94,    95,    96,   173,     0,    12,    13,    15,    16,
-      17,    18,     0,     0,    60,    22,    20,     0,     0,     0,
-      27,    28,    21,    19,    47,   134,   147,     0,     0,   144,
-     136,   137,   139,   182,     0,   173,   179,   179,   143,   112,
-       0,   114,     0,   116,     0,   118,     0,    82,    83,   196,
-     195,   197,   192,     0,     0,     0,   194,    85,    86,    88,
-       0,     0,    42,    34,    52,    23,   100,     0,   149,    64,
-      68,    64,    65,   146,     0,    61,   175,     0,     0,     0,
-       0,     0,     0,     0,   179,    14,    64,    62,    62,     0,
-       0,    49,     0,     0,   183,     0,    57,   169,   167,   113,
-     115,   117,   119,     0,     0,    43,    35,    39,    61,     0,
-       0,    48,    66,   184,   138,    64,   176,    87,   164,    60,
-       0,     0,     0,    25,    26,   185,     0,     0,    58,     0,
-     177,   168,    44,     0,     0,    33,    64,    60,    55,     0,
-      52,    36,     0,     0,     0,   178,     0,    60,    40,    56,
-       0,     0,    52,    60,    61,    45,     0,    52,    59,     0,
-       0,    37,     0,    41
+       0,     0,    66,    75,     0,    17,    18,    11,    14,    15,
+      75,     0,    91,    70,     0,   102,   103,   100,   101,   104,
+     105,    97,   107,   108,   109,    99,    98,   106,    93,    94,
+      95,    96,   113,    79,     0,    10,    76,    77,    63,     0,
+      20,    88,    80,    78,     0,    16,    21,    75,     0,    22,
+      12,    19,     0,    23
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -359,  -359,   102,     0,  -359,  -100,     6,  -359,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -358,    29,  -359,  -359,
-    -359,  -359,  -242,  -330,  -108,  -359,   -39,  -243,  -359,   132,
-    -359,   -21,   250,   -44,  -359,  -359,  -359,  -359,  -359,  -359,
-      16,   -47,   -43,  -359,   -13,  -359,  -359,  -359,  -359,  -359,
-    -359,  -359,  -359,  -107,  -359,  -262,   -35,  -303,  -359,  -359,
-    -359,  -359,     2
+    -140,  -140,  -140,    12,  -140,  -140,  -140,  -140,  -140,   -87,
+    -140,  -140,     0,   -26,  -140,     2,  -140,  -140,  -140,  -117,
+    -140,  -139,  -140,   -59,    29,   -71,  -140
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
+static const yytype_uint8 yydefgoto[] =
 {
-      -1,    28,    29,    73,    31,    32,   300,   317,   350,   377,
-     318,   351,   383,   316,   349,   370,   319,   257,   101,    34,
-     345,   358,   190,   326,   336,    35,   108,   301,   302,    74,
-     313,    75,   105,    77,    78,    36,    45,    99,    97,   304,
-     112,   182,   178,    37,    79,    38,    42,    39,    81,    43,
-      40,   100,   192,   193,   361,   307,   106,   325,    80,   136,
-     137,   138,   139
+       0,    47,    48,    49,    50,    51,   116,   117,   118,   119,
+      52,   158,    76,    59,    60,   144,    55,    56,    57,   145,
+     146,   147,    77,    78,    79,    80,    81
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule whose
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_int16 yytable[] =
+static const yytype_uint8 yytable[] =
 {
-      30,   184,   294,   194,   110,   308,    33,   109,   352,    96,
-     333,   147,   376,   102,   148,    85,    86,   242,    91,    92,
-      93,   305,    44,   140,   386,   147,    41,   113,   211,   390,
-     115,   166,   147,   153,   154,   155,   156,   157,   243,   114,
-     355,   167,   122,   170,    82,   111,   121,   165,   128,   129,
-     156,   157,   334,   171,   388,   154,   155,   156,   157,   140,
-     172,   356,   357,   158,   327,   328,   212,   339,   169,   188,
-     173,   174,   134,   140,   260,   261,   338,   340,   -24,     2,
-     342,   159,   176,   160,   195,   164,     5,     6,     7,     8,
-     209,   348,   213,   196,   140,   287,   288,   177,   210,   181,
-     183,    30,   214,    30,   186,   216,   -24,   362,   191,    33,
-     191,   103,   249,   366,   262,   -24,   -24,   237,   239,   241,
-     234,     2,   283,   284,   256,   374,   259,   290,     5,     6,
-       7,     8,   265,   381,   264,   382,   266,   384,   267,   235,
-     215,   387,   289,   389,   291,   211,   314,   392,   147,   323,
-     341,   148,   344,   346,   263,   347,   363,   299,   306,   364,
-     365,   236,   238,   240,   -24,   -24,   -24,   368,   369,   -38,
-     153,   154,   155,   156,   157,   372,   -24,   269,   379,   271,
-     380,   273,   385,   275,     2,   277,   278,   116,   117,   118,
-     119,    55,    56,     7,     8,   111,   141,   142,   143,   144,
-     145,   146,   391,   147,   393,   185,   148,   149,   150,   258,
-     337,   268,   303,   298,   285,     0,   286,     0,     0,     0,
-       0,     0,     0,   151,   152,   153,   154,   155,   156,   157,
-       0,     0,     0,     0,   191,    64,    65,    66,    67,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   297,
-       0,     0,     0,     0,     0,     0,   177,    30,    30,   181,
-     321,    76,   322,     0,    30,   191,    84,     0,     0,     0,
-       0,    94,    95,     0,    98,     0,   320,   335,     0,    87,
-      88,    89,     0,     0,     0,   107,     2,     0,   329,   330,
-     331,   332,    90,     5,     6,     7,     8,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   359,    30,    30,   120,
-       0,     0,     0,     0,   123,   124,   125,   126,   127,    30,
-       0,   130,   135,    30,     0,     0,     0,   373,     0,     0,
-     141,   142,   143,   144,    30,     0,     0,   147,   168,     0,
-     148,   149,   150,     0,     0,     0,   360,     0,     0,     0,
-       0,     0,     0,     0,   187,     0,    30,   151,   152,   153,
-     154,   155,   156,   157,     0,     0,     0,     0,     0,   375,
-       0,   197,     0,     0,     0,     0,    30,     0,     0,     0,
-      30,     0,     0,     0,     0,     0,    30,     0,     0,     0,
-      30,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,     0,     0,
-       0,     0,     0,     0,     0,   244,   245,   246,     0,     0,
-     250,   251,   252,   253,   254,   255,     0,     0,     0,     0,
-       2,     0,     0,     0,     3,     0,     0,     5,     6,     7,
-       8,     0,     0,     0,     9,    10,    11,    12,     0,   270,
-       0,   272,     0,   274,     0,   276,    16,     0,    18,   279,
-     280,   281,     0,   282,     0,    21,    22,    23,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   -67,     1,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    25,
-       0,     0,   292,   293,     0,     0,     0,   295,   296,     0,
-       0,     0,     0,     2,     0,     0,   -67,     3,     0,     0,
-       5,     6,     7,     8,     0,   -67,   -67,     9,    10,    11,
-      12,    13,     0,     0,     0,     0,    15,     0,     0,    16,
-      17,    18,     0,     0,    19,     0,     0,     0,    21,    22,
-      23,   315,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   161,     0,   324,     0,     0,     0,     0,     0,
-       0,    24,    25,   324,   -67,   -67,   -67,    27,     0,     0,
-     141,   142,   143,   144,   145,   146,   -67,   147,   162,   163,
-     148,   149,   150,     0,     0,    -4,     1,     0,     0,   353,
-     354,     0,     0,   324,     0,     0,     0,   151,   152,   153,
-     154,   155,   156,   157,     0,     0,     0,   367,     0,     0,
-       2,     0,     0,   371,     3,     4,     0,     5,     6,     7,
-       8,     0,   378,     0,     9,    10,    11,    12,    13,     0,
-       0,    14,     0,    15,     0,     0,    16,    17,    18,     0,
-       0,    19,     0,     0,    20,    21,    22,    23,     0,     0,
-       0,     0,   -67,     1,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    24,    25,
-      26,     0,     0,     0,    27,     0,     0,     2,     0,     0,
-     -67,     3,     0,    -4,     5,     6,     7,     8,     0,     0,
-       0,     9,    10,    11,    12,    13,     0,     0,     0,     0,
-      15,     0,     0,    16,    17,    18,     0,     0,    19,     0,
-       0,     0,    21,    22,    23,     0,     0,     0,     0,   -67,
-       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    24,    25,     0,     0,     0,
-       0,    27,     0,     0,     2,     0,     0,     0,     3,     0,
-     -67,     5,     6,     7,     8,     0,     0,     0,     9,    10,
-      11,    12,    13,     0,     0,     0,     0,    15,     0,     0,
-      16,    17,    18,     1,     0,    19,     0,     0,     0,    21,
-      22,    23,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     2,     0,     0,
-       0,     3,    24,    25,     5,     6,     7,     8,    27,   -67,
-     -67,     9,    10,    11,    12,    13,     0,   -67,     0,     0,
-      15,     0,     0,    16,    17,    18,     0,     0,    19,     0,
-       0,     0,    21,    22,    23,     1,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    24,    25,     0,   -67,     2,
-       0,    27,     0,     3,     0,     0,     5,     6,     7,     8,
-     -67,     0,     0,     9,    10,    11,    12,    13,     0,     0,
-       0,     0,    15,     0,     0,    16,    17,    18,     0,     0,
-      19,     0,     0,     0,    21,    22,    23,     1,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    24,    25,     0,
-       0,     2,   -67,    27,     0,     3,     0,     0,     5,     6,
-       7,     8,   -67,     0,     0,     9,    10,    11,    12,    13,
-       0,     0,     0,     0,    15,     0,     0,    16,    17,    18,
-       0,     0,    19,     0,     0,     0,    21,    22,    23,     0,
-       0,     0,     0,     0,     1,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    24,
-      25,     0,     0,   -67,     0,    27,     0,     0,     2,     0,
-       0,     0,     3,     0,   -67,     5,     6,     7,     8,     0,
-       0,     0,     9,    10,    11,    12,    13,     0,     0,     0,
-       0,    15,     0,     0,    16,    17,    18,     0,     0,    19,
-       0,     0,     0,    21,    22,    23,     0,     0,     0,     0,
+      53,    63,    54,   150,    92,   100,   153,   100,   101,    58,
+     114,   153,    61,    88,    89,    90,    66,    64,   161,   162,
+      82,   153,   124,   115,    62,    83,    85,    58,   106,   107,
+     108,   109,   110,   109,   110,    84,   123,    93,   111,    86,
+     160,   113,   120,    58,    65,     1,   149,   151,    53,     2,
+      54,     3,     4,     5,     6,     7,   152,   157,     8,     9,
+      67,    58,   155,    10,    11,    58,    13,    14,    15,    16,
+      17,    18,    19,     0,    20,    21,    22,    23,     0,    25,
+      26,    27,     0,   112,     0,     0,    28,    29,    30,    31,
+      32,    33,     0,     0,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    91,     0,     0,     0,     0,    45,
+       0,     0,     0,    53,   148,     0,   121,   100,   143,     0,
+      53,     0,   154,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   107,   108,   109,   110,    53,     0,     0,    58,     0,
+      53,     0,     0,     0,     0,     0,   159,    53,    68,     0,
+      53,     0,   163,    69,     0,     0,     1,    70,    71,     0,
+       2,     0,     3,     4,     5,     6,     7,     0,     0,     8,
+       0,     0,     0,     0,    10,    11,     0,    13,    14,    15,
+      16,    17,    18,    19,     0,    20,    21,    22,    23,     0,
+      25,    26,     0,     0,     0,     0,     0,    28,    29,    72,
+      31,    32,    33,     0,     0,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,     0,     0,     0,     0,    68,     0,
+      45,     0,     0,    69,    73,    74,     1,    70,    71,     0,
+       2,    75,     3,     4,     5,     6,     7,     0,     0,     8,
+       0,     0,     0,     0,    10,    11,     0,    13,    14,    15,
+      16,    17,    18,    19,     0,    20,    21,    22,    23,     0,
+      25,    26,     0,     0,     0,     0,     0,    28,    29,    72,
+      31,    32,    33,     0,     0,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,     0,     0,     0,     0,     0,     0,
+      45,     0,     0,     0,    73,    74,     1,     0,     0,     0,
+       2,    87,     3,     4,     5,     6,     7,     0,     0,     8,
+       9,     0,     0,     0,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,     0,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,     0,     0,    28,    29,    30,
+      31,    32,    33,     0,     0,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,     0,     0,     1,     0,
+      45,   156,     2,     0,     3,     4,     5,     6,     7,    46,
+       0,     8,     9,     0,     0,     0,    10,    11,     0,    13,
+      14,    15,    16,    17,    18,    19,     0,    20,    21,    22,
+      23,     0,    25,    26,    27,     0,     0,     0,     0,    28,
+      29,    30,    31,    32,    33,     0,     0,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,     1,     0,     0,
+       0,     2,    45,     3,     4,     5,     6,     7,     0,     0,
+       8,   143,     0,     0,     0,    10,    11,     0,    13,    14,
+      15,    16,    17,    18,    19,     0,    20,    21,    22,    23,
+       0,    25,    26,     0,     0,     0,     0,     0,    28,    29,
+      30,    31,    32,    33,     0,     0,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    94,    95,    96,    97,    98,
+      99,    45,   100,     0,     0,   101,   102,   103,    94,    95,
+      96,    97,    98,    99,     0,   100,     0,     0,   101,   102,
+     103,     0,     0,   104,   105,   106,   107,   108,   109,   110,
+       0,     0,     0,     0,   122,     0,   104,   105,   106,   107,
+     108,   109,   110,    94,    95,    96,    97,     0,     0,     0,
+     100,     0,     0,   101,   102,   103,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    24,    25,     0,   -67,
-       0,     0,    27,     0,     0,    46,     0,     0,    47,    48,
-       0,   -67,    49,    50,    51,     2,   131,   132,     0,     0,
-       0,    54,    55,    56,    57,    58,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    46,     0,     0,    47,    48,     0,
-       0,    49,    50,    51,     2,    52,    53,     0,     0,    63,
-      54,    55,    56,    57,    58,     0,    64,    65,    66,    67,
-      68,     0,     0,     0,     0,     0,    59,    60,    61,    62,
-       0,     0,     0,    69,    70,     0,     0,     0,     0,    71,
-       0,     0,    72,     0,   133,     0,     0,     0,    63,     0,
-       0,     0,     0,     0,     0,    64,    65,    66,    67,    68,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    69,    70,     0,     0,    46,     0,    71,    47,
-      48,    72,     0,    49,    50,    51,     2,    52,    53,     0,
-       0,     0,    54,    55,    56,    57,    58,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    59,     0,
-      61,     0,     0,     0,     0,    46,     0,     0,    47,    48,
-       0,    83,    49,    50,    51,     2,    52,    53,     0,     0,
-      63,    54,    55,    56,    57,    58,     0,    64,    65,    66,
-      67,    68,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    69,    70,     0,     0,     0,     0,
-      71,     0,     0,    72,     0,     0,     0,     0,     0,    63,
-       0,     0,     0,     0,     0,     0,    64,    65,    66,    67,
-      68,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    69,    70,     0,     0,    46,     0,    71,
-      47,    48,    72,     0,    49,    50,    51,     2,    52,    53,
-       0,     0,     0,    54,    55,    56,    57,    58,     0,     0,
-       0,     0,     0,     0,    46,     0,     0,    47,    48,     0,
-       0,    49,    50,    51,     2,    52,    53,     0,     0,     0,
-      54,    55,    56,    57,    58,     0,     0,     0,     0,     0,
-       0,    63,     0,     0,     0,     0,     0,     0,    64,    65,
-      66,    67,    68,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    69,    70,     0,    63,     0,
-       0,    71,     0,     0,    72,    64,    65,    66,    67,    68,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    69,    70,     0,     0,    46,     0,   104,    47,
-      48,    72,     0,    49,    50,    51,     2,    52,    53,     0,
-       0,     0,    54,    55,    56,    57,    58,     0,     0,    59,
-       0,    61,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   141,   142,   143,   144,   145,
-     146,     0,   147,     0,     0,   148,   149,   150,     0,     0,
-      63,     0,     0,     0,     0,     0,     0,    64,    65,    66,
-      67,    68,   151,   152,   153,   154,   155,   156,   157,     0,
-     198,     0,     0,     0,     0,     0,   199,     0,     0,     0,
-       0,     0,     0,    72,   141,   142,   143,   144,   145,   146,
-       0,   147,     0,     0,   148,   149,   150,     0,     0,     0,
-       0,     0,     0,     0,   200,     0,     0,     0,     0,     0,
-     201,   151,   152,   153,   154,   155,   156,   157,   141,   142,
-     143,   144,   145,   146,     0,   147,     0,     0,   148,   149,
-     150,     0,     0,     0,     0,     0,     0,     0,   202,     0,
-       0,     0,     0,     0,   203,   151,   152,   153,   154,   155,
-     156,   157,   141,   142,   143,   144,   145,   146,     0,   147,
-       0,     0,   148,   149,   150,     0,     0,     0,     0,     0,
-       0,     0,   204,     0,     0,     0,     0,     0,   205,   151,
-     152,   153,   154,   155,   156,   157,   141,   142,   143,   144,
-     145,   146,     0,   147,     0,     0,   148,   149,   150,     0,
-       0,     0,     0,     0,     0,     0,   309,     0,     0,     0,
-       0,     0,     0,   151,   152,   153,   154,   155,   156,   157,
-     141,   142,   143,   144,   145,   146,     0,   147,     0,     0,
-     148,   149,   150,     0,     0,     0,     0,     0,     0,     0,
-     310,     0,     0,     0,     0,     0,     0,   151,   152,   153,
-     154,   155,   156,   157,   141,   142,   143,   144,   145,   146,
-       0,   147,     0,     0,   148,   149,   150,     0,     0,     0,
-       0,     0,     0,     0,   311,     0,     0,     0,     0,     0,
-       0,   151,   152,   153,   154,   155,   156,   157,   141,   142,
-     143,   144,   145,   146,     0,   147,     0,     0,   148,   149,
-     150,     0,     0,     0,     0,     0,     0,     0,   312,     0,
-       0,     0,     0,     0,     0,   151,   152,   153,   154,   155,
-     156,   157,   141,   142,   143,   144,   145,   146,   179,   147,
-       0,     0,   148,   149,   150,     0,   141,   142,   143,   144,
-     145,   146,     0,   147,     0,     0,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,     0,     0,     0,     0,
-       0,     0,     0,   151,   152,   153,   154,   155,   156,   157,
-     247,   180,     0,     0,     0,     0,     0,     0,   141,   142,
-     248,   144,   145,   146,     0,   147,   175,     0,   148,   149,
-     150,     0,   141,   142,   143,   144,   145,   146,     0,   147,
-       0,     0,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,     0,     0,     0,     0,     0,     0,     0,   151,
-     152,   153,   154,   155,   156,   157,   141,   142,   143,   144,
-     145,   146,     0,   147,     0,     0,   148,   149,   150,   141,
-     142,   143,   144,   145,   146,     0,   147,     0,     0,   148,
-     149,   150,     0,   151,   152,   153,   154,   155,   156,   157,
-       0,     0,     0,   208,   189,     0,   151,   152,   153,   154,
-     155,   156,   157,     0,     0,     0,     0,   189,   141,   142,
-     143,   144,   145,   146,     0,   147,     0,     0,   148,   149,
-     150,   141,   142,   143,   144,   145,   146,     0,   147,     0,
-       0,   148,   149,   150,     0,   151,   152,   153,   154,   155,
-     156,   157,     0,     0,     0,     0,   343,     0,   151,   152,
-     153,   154,   155,   156,   157,     0,     0,     0,   208,   141,
-     142,   143,   144,   145,   146,     0,   147,     0,     0,   148,
-     149,   150,     0,     0,     0,     0,     0,   206,   207,     0,
-       0,     0,     0,     0,     0,     0,   151,   152,   153,   154,
-     155,   156,   157,   141,   142,   143,   144,   145,   146,     0,
-     147,     0,     0,   148,   149,   150,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     151,   152,   153,   154,   155,   156,   157
+       0,   104,   105,   106,   107,   108,   109,   110
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   101,   244,   110,    43,   267,     0,    42,   338,    22,
-     313,    70,   370,     0,    73,    57,    58,    44,    18,    19,
-      20,   264,    52,    99,   382,    70,    98,    48,   104,   387,
-      51,    55,    70,    92,    93,    94,    95,    96,    65,    49,
-     343,    65,    63,    55,    52,    45,    47,    86,    69,    70,
-      95,    96,   314,    65,   384,    93,    94,    95,    96,    99,
-      55,    37,    38,    76,   307,   308,   103,    55,    89,   104,
-      65,    54,    72,    99,   100,   101,   319,    65,     0,    25,
-     323,    81,    95,    83,   101,    85,    32,    33,    34,    35,
-     104,   334,   101,   114,    99,   100,   101,    97,   104,    99,
-     100,   101,   101,   103,   104,   140,    28,   349,   108,   103,
-     110,    98,    49,   356,   100,    37,    38,   161,   162,   163,
-     159,    25,    26,    27,   101,   367,   101,   234,    32,    33,
-      34,    35,   101,   376,    54,   377,    98,   380,    98,   160,
-     140,   383,   100,   386,    45,   104,    98,   390,    70,    98,
-      88,    73,   100,    28,   189,   100,    55,   257,   265,    36,
-      87,   161,   162,   163,    86,    87,    88,    86,   101,    36,
-      92,    93,    94,    95,    96,    55,    98,   198,    86,   200,
-      54,   202,    87,   204,    25,   206,   207,    55,    56,    57,
-      58,    32,    33,    34,    35,   195,    63,    64,    65,    66,
-      67,    68,    87,    70,    87,   103,    73,    74,    75,   180,
-     318,   195,   259,   256,   214,    -1,   214,    -1,    -1,    -1,
-      -1,    -1,    -1,    90,    91,    92,    93,    94,    95,    96,
-      -1,    -1,    -1,    -1,   234,    76,    77,    78,    79,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   249,
-      -1,    -1,    -1,    -1,    -1,    -1,   256,   257,   258,   259,
-     299,    11,   301,    -1,   264,   265,    16,    -1,    -1,    -1,
-      -1,    21,    22,    -1,    24,    -1,   297,   316,    -1,    18,
-      19,    20,    -1,    -1,    -1,    35,    25,    -1,   309,   310,
-     311,   312,    31,    32,    33,    34,    35,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   345,   307,   308,    59,
-      -1,    -1,    -1,    -1,    64,    65,    66,    67,    68,   319,
-      -1,    71,    72,   323,    -1,    -1,    -1,   366,    -1,    -1,
-      63,    64,    65,    66,   334,    -1,    -1,    70,    88,    -1,
-      73,    74,    75,    -1,    -1,    -1,   346,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,    -1,   356,    90,    91,    92,
-      93,    94,    95,    96,    -1,    -1,    -1,    -1,    -1,   369,
-      -1,   121,    -1,    -1,    -1,    -1,   376,    -1,    -1,    -1,
-     380,    -1,    -1,    -1,    -1,    -1,   386,    -1,    -1,    -1,
-     390,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   165,   166,   167,    -1,    -1,
-     170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
-      25,    -1,    -1,    -1,    29,    -1,    -1,    32,    33,    34,
-      35,    -1,    -1,    -1,    39,    40,    41,    42,    -1,   199,
-      -1,   201,    -1,   203,    -1,   205,    51,    -1,    53,   209,
-     210,   211,    -1,   213,    -1,    60,    61,    62,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,     1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    84,
-      -1,    -1,   242,   243,    -1,    -1,    -1,   247,   248,    -1,
-      -1,    -1,    -1,    25,    -1,    -1,    28,    29,    -1,    -1,
-      32,    33,    34,    35,    -1,    37,    38,    39,    40,    41,
-      42,    43,    -1,    -1,    -1,    -1,    48,    -1,    -1,    51,
-      52,    53,    -1,    -1,    56,    -1,    -1,    -1,    60,    61,
-      62,   291,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    45,    -1,   304,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    84,   313,    86,    87,    88,    89,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    98,    70,    71,    72,
-      73,    74,    75,    -1,    -1,     0,     1,    -1,    -1,   339,
-     340,    -1,    -1,   343,    -1,    -1,    -1,    90,    91,    92,
-      93,    94,    95,    96,    -1,    -1,    -1,   357,    -1,    -1,
-      25,    -1,    -1,   363,    29,    30,    -1,    32,    33,    34,
-      35,    -1,   372,    -1,    39,    40,    41,    42,    43,    -1,
-      -1,    46,    -1,    48,    -1,    -1,    51,    52,    53,    -1,
-      -1,    56,    -1,    -1,    59,    60,    61,    62,    -1,    -1,
-      -1,    -1,     0,     1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,
-      85,    -1,    -1,    -1,    89,    -1,    -1,    25,    -1,    -1,
-      28,    29,    -1,    98,    32,    33,    34,    35,    -1,    -1,
-      -1,    39,    40,    41,    42,    43,    -1,    -1,    -1,    -1,
-      48,    -1,    -1,    51,    52,    53,    -1,    -1,    56,    -1,
-      -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,     0,
-       1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,    -1,
-      -1,    89,    -1,    -1,    25,    -1,    -1,    -1,    29,    -1,
-      98,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
-      41,    42,    43,    -1,    -1,    -1,    -1,    48,    -1,    -1,
-      51,    52,    53,     1,    -1,    56,    -1,    -1,    -1,    60,
-      61,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,    -1,
-      -1,    29,    83,    84,    32,    33,    34,    35,    89,    37,
-      38,    39,    40,    41,    42,    43,    -1,    98,    -1,    -1,
-      48,    -1,    -1,    51,    52,    53,    -1,    -1,    56,    -1,
-      -1,    -1,    60,    61,    62,     1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    86,    25,
-      -1,    89,    -1,    29,    -1,    -1,    32,    33,    34,    35,
-      98,    -1,    -1,    39,    40,    41,    42,    43,    -1,    -1,
-      -1,    -1,    48,    -1,    -1,    51,    52,    53,    -1,    -1,
-      56,    -1,    -1,    -1,    60,    61,    62,     1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,
-      -1,    25,    88,    89,    -1,    29,    -1,    -1,    32,    33,
-      34,    35,    98,    -1,    -1,    39,    40,    41,    42,    43,
-      -1,    -1,    -1,    -1,    48,    -1,    -1,    51,    52,    53,
-      -1,    -1,    56,    -1,    -1,    -1,    60,    61,    62,    -1,
-      -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
-      84,    -1,    -1,    87,    -1,    89,    -1,    -1,    25,    -1,
-      -1,    -1,    29,    -1,    98,    32,    33,    34,    35,    -1,
-      -1,    -1,    39,    40,    41,    42,    43,    -1,    -1,    -1,
-      -1,    48,    -1,    -1,    51,    52,    53,    -1,    -1,    56,
-      -1,    -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    86,
-      -1,    -1,    89,    -1,    -1,    15,    -1,    -1,    18,    19,
-      -1,    98,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      -1,    31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    15,    -1,    -1,    18,    19,    -1,
-      -1,    22,    23,    24,    25,    26,    27,    -1,    -1,    69,
-      31,    32,    33,    34,    35,    -1,    76,    77,    78,    79,
-      80,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,
-      -1,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    99,
-      -1,    -1,   102,    -1,   104,    -1,    -1,    -1,    69,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    94,    -1,    -1,    15,    -1,    99,    18,
-      19,   102,    -1,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    -1,    31,    32,    33,    34,    35,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,    -1,
-      49,    -1,    -1,    -1,    -1,    15,    -1,    -1,    18,    19,
-      -1,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      69,    31,    32,    33,    34,    35,    -1,    76,    77,    78,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,
-      99,    -1,    -1,   102,    -1,    -1,    -1,    -1,    -1,    69,
-      -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,
-      80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    93,    94,    -1,    -1,    15,    -1,    99,
-      18,    19,   102,    -1,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    -1,    31,    32,    33,    34,    35,    -1,    -1,
-      -1,    -1,    -1,    -1,    15,    -1,    -1,    18,    19,    -1,
-      -1,    22,    23,    24,    25,    26,    27,    -1,    -1,    -1,
-      31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,
-      -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
-      78,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    94,    -1,    69,    -1,
-      -1,    99,    -1,    -1,   102,    76,    77,    78,    79,    80,
+       0,    27,     0,   120,    75,    57,   145,    57,    60,     9,
+      73,   150,    12,    72,    73,    74,     0,    43,    86,    87,
+      86,   160,    93,    86,    24,    87,    86,    27,    80,    81,
+      82,    83,    84,    83,    84,    61,    89,    88,    87,    65,
+     157,    86,    86,    43,    44,    13,    86,    89,    48,    17,
+      48,    19,    20,    21,    22,    23,    86,    86,    26,    27,
+      48,    61,   149,    31,    32,    65,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    83,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    75,    -1,    -1,    -1,    -1,    77,
+      -1,    -1,    -1,   113,   114,    -1,    87,    57,    86,    -1,
+     120,    -1,   148,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,    81,    82,    83,    84,   145,    -1,    -1,   148,    -1,
+     150,    -1,    -1,    -1,    -1,    -1,   156,   157,     5,    -1,
+     160,    -1,   162,    10,    -1,    -1,    13,    14,    15,    -1,
+      17,    -1,    19,    20,    21,    22,    23,    -1,    -1,    26,
+      -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,     5,    -1,
+      77,    -1,    -1,    10,    81,    82,    13,    14,    15,    -1,
+      17,    88,    19,    20,    21,    22,    23,    -1,    -1,    26,
+      -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    -1,    -1,    -1,    81,    82,    13,    -1,    -1,    -1,
+      17,    88,    19,    20,    21,    22,    23,    -1,    -1,    26,
+      27,    -1,    -1,    -1,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    46,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    -1,    -1,    13,    -1,
+      77,    16,    17,    -1,    19,    20,    21,    22,    23,    86,
+      -1,    26,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    13,    -1,    -1,
+      -1,    17,    77,    19,    20,    21,    22,    23,    -1,    -1,
+      26,    86,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    50,    51,    52,    53,    54,
+      55,    77,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    -1,    89,    -1,    78,    79,    80,    81,
+      82,    83,    84,    50,    51,    52,    53,    -1,    -1,    -1,
+      57,    -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    94,    -1,    -1,    15,    -1,    99,    18,
-      19,   102,    -1,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    -1,    31,    32,    33,    34,    35,    -1,    -1,    47,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    63,    64,    65,    66,    67,
-      68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,
-      79,    80,    90,    91,    92,    93,    94,    95,    96,    -1,
-      49,    -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,    -1,
-      -1,    -1,    -1,   102,    63,    64,    65,    66,    67,    68,
-      -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      55,    90,    91,    92,    93,    94,    95,    96,    63,    64,
-      65,    66,    67,    68,    -1,    70,    -1,    -1,    73,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,
-      -1,    -1,    -1,    -1,    55,    90,    91,    92,    93,    94,
-      95,    96,    63,    64,    65,    66,    67,    68,    -1,    70,
-      -1,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    55,    90,
-      91,    92,    93,    94,    95,    96,    63,    64,    65,    66,
-      67,    68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,
-      -1,    -1,    -1,    90,    91,    92,    93,    94,    95,    96,
-      63,    64,    65,    66,    67,    68,    -1,    70,    -1,    -1,
-      73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      49,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,
-      93,    94,    95,    96,    63,    64,    65,    66,    67,    68,
-      -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      -1,    90,    91,    92,    93,    94,    95,    96,    63,    64,
-      65,    66,    67,    68,    -1,    70,    -1,    -1,    73,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,
-      -1,    -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,
-      95,    96,    63,    64,    65,    66,    67,    68,    55,    70,
-      -1,    -1,    73,    74,    75,    -1,    63,    64,    65,    66,
-      67,    68,    -1,    70,    -1,    -1,    73,    74,    75,    90,
-      91,    92,    93,    94,    95,    96,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    90,    91,    92,    93,    94,    95,    96,
-      55,    98,    -1,    -1,    -1,    -1,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    -1,    70,    57,    -1,    73,    74,
-      75,    -1,    63,    64,    65,    66,    67,    68,    -1,    70,
-      -1,    -1,    73,    74,    75,    90,    91,    92,    93,    94,
-      95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
-      91,    92,    93,    94,    95,    96,    63,    64,    65,    66,
-      67,    68,    -1,    70,    -1,    -1,    73,    74,    75,    63,
-      64,    65,    66,    67,    68,    -1,    70,    -1,    -1,    73,
-      74,    75,    -1,    90,    91,    92,    93,    94,    95,    96,
-      -1,    -1,    -1,   100,   101,    -1,    90,    91,    92,    93,
-      94,    95,    96,    -1,    -1,    -1,    -1,   101,    63,    64,
-      65,    66,    67,    68,    -1,    70,    -1,    -1,    73,    74,
-      75,    63,    64,    65,    66,    67,    68,    -1,    70,    -1,
-      -1,    73,    74,    75,    -1,    90,    91,    92,    93,    94,
-      95,    96,    -1,    -1,    -1,    -1,   101,    -1,    90,    91,
-      92,    93,    94,    95,    96,    -1,    -1,    -1,   100,    63,
-      64,    65,    66,    67,    68,    -1,    70,    -1,    -1,    73,
-      74,    75,    -1,    -1,    -1,    -1,    -1,    81,    82,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,    93,
-      94,    95,    96,    63,    64,    65,    66,    67,    68,    -1,
-      70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      90,    91,    92,    93,    94,    95,    96
+      -1,    78,    79,    80,    81,    82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
+static const yytype_int8 yystos[] =
 {
-       0,     1,    25,    29,    30,    32,    33,    34,    35,    39,
-      40,    41,    42,    43,    46,    48,    51,    52,    53,    56,
-      59,    60,    61,    62,    83,    84,    85,    89,   106,   107,
-     108,   109,   110,   111,   124,   130,   140,   148,   150,   152,
-     155,    98,   151,   154,    52,   141,    15,    18,    19,    22,
-      23,    24,    26,    27,    31,    32,    33,    34,    35,    47,
-      48,    49,    50,    69,    76,    77,    78,    79,    80,    93,
-      94,    99,   102,   108,   134,   136,   137,   138,   139,   149,
-     163,   153,    52,    21,   137,    57,    58,    18,    19,    20,
-      31,   108,   108,   108,   137,   137,   149,   143,   137,   142,
-     156,   123,     0,    98,    99,   137,   161,   137,   131,   161,
-     131,   108,   145,   136,    49,   136,   134,   134,   134,   134,
-     137,    47,   136,   137,   137,   137,   137,   137,   136,   136,
-     137,    26,    27,   104,   108,   137,   164,   165,   166,   167,
-      99,    63,    64,    65,    66,    67,    68,    70,    73,    74,
-      75,    90,    91,    92,    93,    94,    95,    96,   149,   108,
-     108,    45,    71,    72,   108,   131,    55,    65,   137,   136,
-      55,    65,    55,    65,    54,    57,   149,   108,   147,    55,
-      98,   108,   146,   108,   110,   107,   108,   137,   161,   101,
-     127,   108,   157,   158,   158,   101,   136,   137,    49,    55,
-      49,    55,    49,    55,    49,    55,    81,    82,   100,   104,
-     104,   104,   103,   101,   101,   108,   161,   137,   137,   137,
-     137,   137,   137,   137,   137,   137,   137,   137,   137,   137,
-     137,   137,   137,   137,   131,   136,   108,   138,   108,   138,
-     108,   138,    44,    65,   137,   137,   137,    55,    65,    49,
-     137,   137,   137,   137,   137,   137,   101,   122,   122,   101,
-     100,   101,   100,   161,    54,   101,    98,    98,   145,   136,
-     137,   136,   137,   136,   137,   136,   137,   136,   136,   137,
-     137,   137,   137,    26,    27,   108,   167,   100,   101,   100,
-     158,    45,   137,   137,   127,   137,   137,   108,   147,   110,
-     111,   132,   133,   146,   144,   132,   158,   160,   160,    49,
-      49,    49,    49,   135,    98,   137,   118,   112,   115,   121,
-     136,   131,   131,    98,   137,   162,   128,   132,   132,   136,
-     136,   136,   136,   162,   160,   131,   129,   129,   132,    55,
-      65,    88,   132,   101,   100,   125,    28,   100,   132,   119,
-     113,   116,   128,   137,   137,   162,    37,    38,   126,   131,
-     108,   159,   127,    55,    36,    87,   132,   137,    86,   101,
-     120,   137,    55,   131,   127,   108,   121,   114,   137,    86,
-      54,   132,   127,   117,   132,    87,   121,   127,   128,   132,
-     121,    87,   132,    87
+       0,    13,    17,    19,    20,    21,    22,    23,    26,    27,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      42,    43,    44,    45,    46,    47,    48,    49,    54,    55,
+      56,    57,    58,    59,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    77,    86,    91,    92,    93,
+      94,    95,   100,   102,   105,   106,   107,   108,   102,   103,
+     104,   102,   102,   103,   103,   102,     0,    93,     5,    10,
+      14,    15,    56,    81,    82,    88,   102,   112,   113,   114,
+     115,   116,    86,    87,   103,    86,   103,    88,   113,   113,
+     113,   114,   115,    88,    50,    51,    52,    53,    54,    55,
+      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
+      84,    87,   102,    86,    73,    86,    96,    97,    98,    99,
+      86,   114,    89,    89,   115,   114,   114,   114,   114,   114,
+     114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
+     114,   114,   114,    86,   105,   109,   110,   111,   102,    86,
+     109,    89,    86,   111,   103,    99,    16,    86,   101,   102,
+     109,    86,    87,   102
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
+static const yytype_int8 yyr1[] =
 {
-       0,   105,   106,   106,   107,   107,   107,   108,   108,   108,
-     108,   108,   109,   109,   109,   109,   109,   109,   109,   109,
-     109,   109,   109,   109,   109,   109,   109,   109,   109,   110,
-     110,   111,   111,   111,   112,   113,   114,   111,   115,   116,
-     117,   111,   118,   119,   120,   111,   111,   111,   111,   111,
-     111,   111,   121,   122,   123,   124,   124,   125,   125,   126,
-     127,   128,   129,   130,   131,   132,   132,   133,   133,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   135,   134,   134,   134,
-     136,   136,   137,   137,   137,   137,   137,   137,   137,   137,
-     137,   137,   137,   137,   137,   137,   137,   137,   137,   137,
-     138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
-     139,   139,   139,   140,   140,   140,   140,   140,   141,   140,
-     142,   140,   143,   140,   140,   140,   140,   144,   140,   140,
-     140,   145,   145,   145,   146,   146,   146,   147,   147,   147,
-     148,   148,   148,   148,   148,   148,   149,   149,   150,   150,
-     150,   151,   150,   153,   152,   152,   154,   152,   152,   152,
-     156,   155,   157,   158,   158,   158,   159,   159,   159,   160,
-     161,   161,   161,   162,   162,   162,   163,   164,   164,   164,
-     164,   165,   165,   166,   166,   167,   167,   167
+       0,    90,    91,    92,    92,    93,    93,    93,    93,    93,
+      94,    95,    96,    97,    97,    98,    98,    99,    99,   100,
+     100,   101,   101,   101,   102,   102,   102,   102,   102,   102,
+     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
+     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
+     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
+     102,   102,   102,   103,   103,   104,   104,   105,   106,   106,
+     107,   107,   108,   108,   108,   109,   109,   110,   110,   111,
+     111,   112,   112,   112,   112,   112,   112,   112,   112,   112,
+     113,   113,   114,   114,   114,   114,   114,   114,   114,   114,
+     114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
+     115,   115,   116,   116
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int8 yyr2[] =
 {
-       0,     2,     1,     3,     0,     1,     1,     1,     1,     1,
-       1,     1,     4,     4,     6,     4,     4,     4,     4,     4,
-       4,     4,     4,     5,     5,     8,     8,     4,     4,     1,
-       1,     1,     1,     9,     0,     0,     0,    15,     0,     0,
-       0,    16,     0,     0,     0,    13,     2,     4,     7,     6,
-       3,     2,     0,     0,     0,     9,    11,     0,     2,     6,
-       0,     0,     0,     1,     0,     1,     3,     0,     1,     1,
-       1,     1,     1,     2,     2,     2,     1,     1,     2,     2,
-       3,     1,     4,     4,     1,     4,     0,     7,     4,     1,
+       0,     2,     1,     1,     2,     1,     1,     1,     1,     2,
+       5,     4,     5,     0,     1,     1,     3,     1,     1,     8,
+       5,     0,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     1,     1,     3,     1,     1,     1,
+       4,     2,     2,     2,     2,     0,     1,     1,     2,     1,
+       2,     1,     1,     1,     1,     2,     2,     2,     4,     1,
        1,     3,     1,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       2,     2,     4,     6,     4,     6,     4,     6,     4,     6,
-       1,     2,     2,     2,     1,     1,     2,     1,     0,     3,
-       0,     3,     0,     3,     4,     2,     4,     0,     7,     4,
-       2,     0,     1,     3,     0,     1,     3,     0,     1,     3,
-       1,     2,     2,     2,     3,     2,     3,     2,     2,     3,
-       2,     0,     3,     0,     8,     2,     0,     7,     8,     6,
-       0,     3,     1,     0,     1,     3,     0,     1,     3,     0,
-       0,     1,     3,     1,     2,     3,     3,     0,     1,     1,
-       1,     1,     3,     1,     3,     3,     3,     3
+       0,     1,     1,     3
 };
 
 
@@ -1563,7 +1054,7 @@ yy_symbol_value_print (FILE *yyo,
                        yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
   FILE *yyoutput = yyo;
-  YYUSE (yyoutput);
+  YY_USE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
@@ -1571,7 +1062,7 @@ yy_symbol_value_print (FILE *yyo,
     YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yykind);
+  YY_USE (yykind);
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
@@ -1747,7 +1238,7 @@ static void
 yydestruct (const char *yymsg,
             yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
-  YYUSE (yyvaluep);
+  YY_USE (yyvaluep);
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
@@ -1755,64 +1246,52 @@ yydestruct (const char *yymsg,
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   switch (yykind)
     {
-    case YYSYMBOL_THEFUNC: /* THEFUNC  */
-#line 232 "engines/director/lingo/lingo-gr.y"
+    case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
+#line 182 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1762 "engines/director/lingo/lingo-gr.cpp"
+#line 1253 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case YYSYMBOL_THEFUNCINOF: /* THEFUNCINOF  */
-#line 232 "engines/director/lingo/lingo-gr.y"
+    case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
+#line 182 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1768 "engines/director/lingo/lingo-gr.cpp"
+#line 1259 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case YYSYMBOL_VARID: /* VARID  */
-#line 232 "engines/director/lingo/lingo-gr.y"
+    case YYSYMBOL_tVARID: /* tVARID  */
+#line 182 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1774 "engines/director/lingo/lingo-gr.cpp"
+#line 1265 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case YYSYMBOL_STRING: /* STRING  */
-#line 232 "engines/director/lingo/lingo-gr.y"
+    case YYSYMBOL_tSTRING: /* tSTRING  */
+#line 182 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1780 "engines/director/lingo/lingo-gr.cpp"
+#line 1271 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case YYSYMBOL_SYMBOL: /* SYMBOL  */
-#line 232 "engines/director/lingo/lingo-gr.y"
+    case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
+#line 182 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1786 "engines/director/lingo/lingo-gr.cpp"
+#line 1277 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case YYSYMBOL_ENDCLAUSE: /* ENDCLAUSE  */
-#line 232 "engines/director/lingo/lingo-gr.y"
+    case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
+#line 182 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1792 "engines/director/lingo/lingo-gr.cpp"
+#line 1283 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
-#line 232 "engines/director/lingo/lingo-gr.y"
+#line 182 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1798 "engines/director/lingo/lingo-gr.cpp"
-        break;
-
-    case YYSYMBOL_tMETHOD: /* tMETHOD  */
-#line 232 "engines/director/lingo/lingo-gr.y"
-            { delete ((*yyvaluep).s); }
-#line 1804 "engines/director/lingo/lingo-gr.cpp"
+#line 1289 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 232 "engines/director/lingo/lingo-gr.y"
-            { delete ((*yyvaluep).s); }
-#line 1810 "engines/director/lingo/lingo-gr.cpp"
-        break;
-
-    case YYSYMBOL_on: /* on  */
-#line 232 "engines/director/lingo/lingo-gr.y"
+#line 182 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1816 "engines/director/lingo/lingo-gr.cpp"
+#line 1295 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2077,1381 +1556,625 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-  case 8: /* ID: tCAST  */
-#line 244 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("cast"); }
-#line 2084 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 9: /* ID: tFIELD  */
-#line 245 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("field"); }
-#line 2090 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 10: /* ID: tSCRIPT  */
-#line 246 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("script"); }
-#line 2096 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 11: /* ID: tWINDOW  */
-#line 247 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("window"); }
-#line 2102 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 12: /* asgn: tPUT expr tINTO ID  */
-#line 249 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[0].s)->c_str());
-		mVar((yyvsp[0].s), globalCheck());
-		g_lingo->code1(LC::c_assign);
-		(yyval.code) = (yyvsp[-2].code);
-		delete (yyvsp[0].s); }
-#line 2114 "engines/director/lingo/lingo-gr.cpp"
+  case 2: /* script: scriptpartlist  */
+#line 188 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
+#line 1563 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 13: /* asgn: tPUT expr tINTO chunkexpr  */
-#line 256 "engines/director/lingo/lingo-gr.y"
-                                        {
-		g_lingo->code1(LC::c_assign);
-		(yyval.code) = (yyvsp[-2].code); }
-#line 2122 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 14: /* asgn: tPUT THEMENUITEMSENTITY ID simpleexpr tINTO expr  */
-#line 260 "engines/director/lingo/lingo-gr.y"
+  case 3: /* scriptpartlist: scriptpart  */
+#line 190 "engines/director/lingo/lingo-gr.y"
                                                                 {
-		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
-			warning("LEXER: keyword 'menu' expected");
-			YYERROR;
+		NodeList *list = new NodeList;
+		if ((yyvsp[0].node)) {
+			list->push_back((yyvsp[0].node));
 		}
-
-		g_lingo->code1(LC::c_themenuentitypush);
-		g_lingo->codeInt((yyvsp[-4].e)[0]);
-		g_lingo->codeInt((yyvsp[-4].e)[1]);
-		g_lingo->code1(LC::c_assign);
-		(yyval.code) = (yyvsp[0].code); }
-#line 2138 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 15: /* asgn: tPUT expr tAFTER ID  */
-#line 271 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[0].s)->c_str());
-		mVar((yyvsp[0].s), globalCheck());
-		g_lingo->code1(LC::c_putafter);
-		(yyval.code) = (yyvsp[-2].code);
-		delete (yyvsp[0].s); }
-#line 2150 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 16: /* asgn: tPUT expr tAFTER chunkexpr  */
-#line 278 "engines/director/lingo/lingo-gr.y"
-                                        {
-		g_lingo->code1(LC::c_putafter);
-		(yyval.code) = (yyvsp[-2].code); }
-#line 2158 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 17: /* asgn: tPUT expr tBEFORE ID  */
-#line 281 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[0].s)->c_str());
-		mVar((yyvsp[0].s), globalCheck());
-		g_lingo->code1(LC::c_putbefore);
-		(yyval.code) = (yyvsp[-2].code);
-		delete (yyvsp[0].s); }
-#line 2170 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 18: /* asgn: tPUT expr tBEFORE chunkexpr  */
-#line 288 "engines/director/lingo/lingo-gr.y"
-                                        {
-		g_lingo->code1(LC::c_putbefore);
-		(yyval.code) = (yyvsp[-2].code); }
-#line 2178 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 19: /* asgn: tSET ID tEQ expr  */
-#line 291 "engines/director/lingo/lingo-gr.y"
-                                                        {
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[-2].s)->c_str());
-		mVar((yyvsp[-2].s), globalCheck());
-		g_lingo->code1(LC::c_assign);
-		(yyval.code) = (yyvsp[0].code);
-		delete (yyvsp[-2].s); }
-#line 2190 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 20: /* asgn: tSET THEENTITY tEQ expr  */
-#line 298 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(0); // Put dummy id
-		g_lingo->code1(LC::c_theentityassign);
-		g_lingo->codeInt((yyvsp[-2].e)[0]);
-		g_lingo->codeInt((yyvsp[-2].e)[1]);
-		(yyval.code) = (yyvsp[0].code); }
-#line 2202 "engines/director/lingo/lingo-gr.cpp"
+		(yyval.nodelist) = list; }
+#line 1574 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 21: /* asgn: tSET ID tTO expr  */
-#line 305 "engines/director/lingo/lingo-gr.y"
+  case 4: /* scriptpartlist: scriptpartlist scriptpart  */
+#line 196 "engines/director/lingo/lingo-gr.y"
                                                         {
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[-2].s)->c_str());
-		mVar((yyvsp[-2].s), globalCheck());
-		g_lingo->code1(LC::c_assign);
-		(yyval.code) = (yyvsp[0].code);
-		delete (yyvsp[-2].s); }
-#line 2214 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 22: /* asgn: tSET THEENTITY tTO expr  */
-#line 312 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(0); // Put dummy id
-		g_lingo->code1(LC::c_theentityassign);
-		g_lingo->codeInt((yyvsp[-2].e)[0]);
-		g_lingo->codeInt((yyvsp[-2].e)[1]);
-		(yyval.code) = (yyvsp[0].code); }
-#line 2226 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 23: /* asgn: tSET THEENTITYWITHID expr tTO expr  */
-#line 319 "engines/director/lingo/lingo-gr.y"
-                                                                {
-		g_lingo->code1(LC::c_swap);
-		g_lingo->code1(LC::c_theentityassign);
-		g_lingo->codeInt((yyvsp[-3].e)[0]);
-		g_lingo->codeInt((yyvsp[-3].e)[1]);
-		(yyval.code) = (yyvsp[0].code); }
-#line 2237 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 24: /* asgn: tSET THEENTITYWITHID expr tEQ expr  */
-#line 325 "engines/director/lingo/lingo-gr.y"
-                                                                {
-		g_lingo->code1(LC::c_swap);
-		g_lingo->code1(LC::c_theentityassign);
-		g_lingo->codeInt((yyvsp[-3].e)[0]);
-		g_lingo->codeInt((yyvsp[-3].e)[1]);
-		(yyval.code) = (yyvsp[0].code); }
-#line 2248 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 25: /* asgn: tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tTO expr  */
-#line 332 "engines/director/lingo/lingo-gr.y"
-                                                                        {
-		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
-			warning("LEXER: keyword 'menu' expected");
-			YYERROR;
-		}
-
-		warning("STUB: menuItem entity");
-		g_lingo->code1(LC::c_themenuitementityassign);
-		g_lingo->codeInt((yyvsp[-6].e)[0]);
-		g_lingo->codeInt((yyvsp[-6].e)[1]);
-		(yyval.code) = (yyvsp[0].code); }
-#line 2264 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 26: /* asgn: tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tEQ expr  */
-#line 343 "engines/director/lingo/lingo-gr.y"
-                                                                        {
-		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
-			warning("LEXER: keyword 'menu' expected");
-			YYERROR;
+		if ((yyvsp[0].node)) {
+			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
-
-		warning("STUB: menuItem entity");
-		g_lingo->code1(LC::c_themenuitementityassign);
-		g_lingo->codeInt((yyvsp[-6].e)[0]);
-		g_lingo->codeInt((yyvsp[-6].e)[1]);
-		(yyval.code) = (yyvsp[0].code); }
-#line 2280 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 27: /* asgn: tSET THEOBJECTPROP tTO expr  */
-#line 354 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_objectpropassign);
-		g_lingo->codeString((yyvsp[-2].objectprop).obj->c_str());
-		g_lingo->codeString((yyvsp[-2].objectprop).prop->c_str());
-		delete (yyvsp[-2].objectprop).obj;
-		delete (yyvsp[-2].objectprop).prop;
-		(yyval.code) = (yyvsp[0].code); }
-#line 2292 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 28: /* asgn: tSET THEOBJECTPROP tEQ expr  */
-#line 361 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_objectpropassign);
-		g_lingo->codeString((yyvsp[-2].objectprop).obj->c_str());
-		g_lingo->codeString((yyvsp[-2].objectprop).prop->c_str());
-		delete (yyvsp[-2].objectprop).obj;
-		delete (yyvsp[-2].objectprop).prop;
-		(yyval.code) = (yyvsp[0].code); }
-#line 2304 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 33: /* stmt: tREPEAT tWHILE lbl expr jumpifz startrepeat stmtlist jump tENDREPEAT  */
-#line 378 "engines/director/lingo/lingo-gr.y"
-                                                                                                {
-		inst start = 0, end = 0;
-		WRITE_UINT32(&start, (yyvsp[-6].code) - (yyvsp[-1].code) + 1);
-		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-4].code) + 2);
-		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
-		(*g_lingo->_currentAssembly)[(yyvsp[-1].code)] = start;	/* looping back */
-		endRepeat((yyvsp[-1].code) + 1, (yyvsp[-6].code));	}
-#line 2316 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 34: /* $@1: %empty  */
-#line 391 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_varpush);
-				  g_lingo->codeString((yyvsp[-2].s)->c_str());
-				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2324 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 35: /* $@2: %empty  */
-#line 395 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_eval);
-				  g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2331 "engines/director/lingo/lingo-gr.cpp"
+		(yyval.nodelist) = (yyvsp[-1].nodelist); }
+#line 1584 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 36: /* $@3: %empty  */
-#line 398 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_le); }
-#line 2337 "engines/director/lingo/lingo-gr.cpp"
+  case 5: /* scriptpart: '\n'  */
+#line 203 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = nullptr; }
+#line 1590 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 37: /* stmt: tREPEAT tWITH ID tEQ expr $@1 varassign $@2 tTO expr $@3 jumpifz startrepeat stmtlist tENDREPEAT  */
-#line 398 "engines/director/lingo/lingo-gr.y"
-                                                                                                      {
-
-		int nextPos = g_lingo->_currentAssembly->size();
-		g_lingo->code1(LC::c_eval);
-		g_lingo->codeString((yyvsp[-12].s)->c_str());
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_add);
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[-12].s)->c_str());
-		g_lingo->code1(LC::c_assign);
-		g_lingo->code2(LC::c_jump, 0);
-		int pos = g_lingo->_currentAssembly->size() - 1;
-
-		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, (yyvsp[-8].code) - pos + 2);
-		WRITE_UINT32(&end, pos - (yyvsp[-3].code) + 2);
-		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
-		endRepeat(pos + 1, nextPos); }
-#line 2362 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 38: /* $@4: %empty  */
-#line 425 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_varpush);
-				  g_lingo->codeString((yyvsp[-2].s)->c_str());
-				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2370 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 39: /* $@5: %empty  */
-#line 429 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_eval);
-				  g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2377 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 40: /* $@6: %empty  */
-#line 432 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_ge); }
-#line 2383 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 41: /* stmt: tREPEAT tWITH ID tEQ expr $@4 varassign $@5 tDOWN tTO expr $@6 jumpifz startrepeat stmtlist tENDREPEAT  */
-#line 433 "engines/director/lingo/lingo-gr.y"
-                                                                {
-
-		int nextPos = g_lingo->_currentAssembly->size();
-		g_lingo->code1(LC::c_eval);
-		g_lingo->codeString((yyvsp[-13].s)->c_str());
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_sub);
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[-13].s)->c_str());
-		g_lingo->code1(LC::c_assign);
-		g_lingo->code2(LC::c_jump, 0);
-		int pos = g_lingo->_currentAssembly->size() - 1;
-
-		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, (yyvsp[-9].code) - pos + 2);
-		WRITE_UINT32(&end, pos - (yyvsp[-3].code) + 2);
-		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
-		endRepeat(pos + 1, nextPos); }
-#line 2408 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 42: /* $@7: %empty  */
-#line 459 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_stackpeek);
-				  g_lingo->codeInt(0);
-				  Common::String count("count");
-				  g_lingo->codeFunc(&count, 1);
-				  g_lingo->code1(LC::c_intpush);	// start counter
-				  g_lingo->codeInt(1); }
-#line 2419 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 43: /* $@8: %empty  */
-#line 466 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_stackpeek);	// get counter
-				  g_lingo->codeInt(0);
-				  g_lingo->code1(LC::c_stackpeek);	// get array size
-				  g_lingo->codeInt(2);
-				  g_lingo->code1(LC::c_le); }
-#line 2429 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 44: /* $@9: %empty  */
-#line 472 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_stackpeek);	// get list
-				  g_lingo->codeInt(2);
-				  g_lingo->code1(LC::c_stackpeek);	// get counter
-				  g_lingo->codeInt(1);
-				  Common::String getAt("getAt");
-				  g_lingo->codeFunc(&getAt, 2);
-				  g_lingo->code1(LC::c_varpush);
-				  g_lingo->codeString((yyvsp[-6].s)->c_str());
-				  mVar((yyvsp[-6].s), globalCheck());
-				  g_lingo->code1(LC::c_assign); }
-#line 2444 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 45: /* stmt: tREPEAT tWITH ID tIN expr $@7 lbl $@8 jumpifz $@9 startrepeat stmtlist tENDREPEAT  */
-#line 482 "engines/director/lingo/lingo-gr.y"
-                                                        {
-
-		int nextPos = g_lingo->_currentAssembly->size();
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_add);			// Increment counter
-
-		int jump = g_lingo->code2(LC::c_jump, 0);
-
-		int end2 = g_lingo->code1(LC::c_stackdrop);	// remove list, size, counter
-		g_lingo->codeInt(3);
-
-		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, (yyvsp[-6].code) - jump);
-		WRITE_UINT32(&end, end2 - (yyvsp[-4].code) + 1);
-
-		(*g_lingo->_currentAssembly)[jump + 1] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
-		endRepeat(end2, nextPos); }
-#line 2468 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 46: /* stmt: tNEXT tREPEAT  */
-#line 502 "engines/director/lingo/lingo-gr.y"
-                                        {
-		if (g_lingo->_repeatStack.size()) {
-			g_lingo->code2(LC::c_jump, 0);
-			int pos = g_lingo->_currentAssembly->size() - 1;
-			g_lingo->_repeatStack.back()->nexts.push_back(pos);
-		} else {
-			warning("# LINGO: next repeat not inside repeat block");
-		} }
-#line 2481 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 47: /* stmt: tWHEN ID tTHEN expr  */
-#line 510 "engines/director/lingo/lingo-gr.y"
-                                {
-		g_lingo->code1(LC::c_whencode);
-		g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2489 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 48: /* stmt: tTELL expr '\n' tellstart stmtlist lbl tENDTELL  */
-#line 513 "engines/director/lingo/lingo-gr.y"
-                                                          { g_lingo->code1(LC::c_telldone); }
-#line 2495 "engines/director/lingo/lingo-gr.cpp"
+  case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
+#line 236 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
+#line 1596 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 49: /* stmt: tTELL expr tTO tellstart stmtoneliner lbl  */
-#line 514 "engines/director/lingo/lingo-gr.y"
-                                                    { g_lingo->code1(LC::c_telldone); }
-#line 2501 "engines/director/lingo/lingo-gr.cpp"
+  case 11: /* factory: tFACTORY ID '\n' methodlist  */
+#line 240 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
+#line 1602 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50: /* stmt: tASSERTERROR asserterrorstart stmtoneliner  */
-#line 515 "engines/director/lingo/lingo-gr.y"
-                                                     { g_lingo->code1(LC::c_asserterrordone); }
-#line 2507 "engines/director/lingo/lingo-gr.cpp"
+  case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
+#line 242 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
+#line 1608 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51: /* stmt: error '\n'  */
-#line 516 "engines/director/lingo/lingo-gr.y"
-                                        { yyerrok; }
-#line 2513 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 52: /* startrepeat: %empty  */
-#line 518 "engines/director/lingo/lingo-gr.y"
-                                { startRepeat(); }
-#line 2519 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 53: /* tellstart: %empty  */
-#line 520 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_tell); }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 54: /* asserterrorstart: %empty  */
-#line 522 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->code1(LC::c_asserterror); }
-#line 2531 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 55: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist lbl tENDIF  */
-#line 524 "engines/director/lingo/lingo-gr.y"
-                                                                                         {
-		inst else1 = 0, end3 = 0;
-		WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
-		WRITE_UINT32(&end3, (yyvsp[-1].code) - (yyvsp[-3].code) + 1);
-		(*g_lingo->_currentAssembly)[(yyvsp[-6].code)] = else1;		/* elsepart */
-		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end3;		/* end, if cond fails */
-		g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2543 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 56: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist tELSE stmtlist lbl tENDIF  */
-#line 531 "engines/director/lingo/lingo-gr.y"
-                                                                                                          {
-		inst else1 = 0, end = 0;
-		WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
-		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-5].code) + 1);
-		(*g_lingo->_currentAssembly)[(yyvsp[-8].code)] = else1;		/* elsepart */
-		(*g_lingo->_currentAssembly)[(yyvsp[-5].code)] = end;		/* end, if cond fails */
-		g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2555 "engines/director/lingo/lingo-gr.cpp"
+  case 13: /* methodlist: %empty  */
+#line 244 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.nodelist) = new NodeList; }
+#line 1614 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* elseifstmt: tELSIF expr jumpifz tTHEN stmtlist jump  */
-#line 542 "engines/director/lingo/lingo-gr.y"
+  case 15: /* nonemptymethodlist: methodlistline  */
+#line 248 "engines/director/lingo/lingo-gr.y"
                                                                 {
-		inst else1 = 0;
-		WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
-		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = else1;	/* end, if cond fails */
-		g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2565 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 60: /* jumpifz: %empty  */
-#line 548 "engines/director/lingo/lingo-gr.y"
-                                {
-		g_lingo->code2(LC::c_jumpifz, 0);
-		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2573 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 61: /* jump: %empty  */
-#line 552 "engines/director/lingo/lingo-gr.y"
-                                {
-		g_lingo->code2(LC::c_jump, 0);
-		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2581 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 62: /* varassign: %empty  */
-#line 556 "engines/director/lingo/lingo-gr.y"
-                                        {
-		g_lingo->code1(LC::c_assign);
-		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2589 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 63: /* if: tIF  */
-#line 560 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->codeLabel(0); }
-#line 2596 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 64: /* lbl: %empty  */
-#line 563 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.code) = g_lingo->_currentAssembly->size(); }
-#line 2602 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 69: /* simpleexprnoparens: INT  */
-#line 571 "engines/director/lingo/lingo-gr.y"
-                                {
-		(yyval.code) = g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2610 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 70: /* simpleexprnoparens: FLOAT  */
-#line 574 "engines/director/lingo/lingo-gr.y"
-                        {
-		(yyval.code) = g_lingo->code1(LC::c_floatpush);
-		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2618 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 71: /* simpleexprnoparens: SYMBOL  */
-#line 577 "engines/director/lingo/lingo-gr.y"
-                        {											// D3
-		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
-		g_lingo->codeString((yyvsp[0].s)->c_str());
-		delete (yyvsp[0].s); }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 72: /* simpleexprnoparens: STRING  */
-#line 581 "engines/director/lingo/lingo-gr.y"
-                                {
-		(yyval.code) = g_lingo->code1(LC::c_stringpush);
-		g_lingo->codeString((yyvsp[0].s)->c_str());
-		delete (yyvsp[0].s); }
-#line 2636 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 73: /* simpleexprnoparens: '+' simpleexpr  */
-#line 585 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.code) = (yyvsp[0].code); }
-#line 2642 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 74: /* simpleexprnoparens: '-' simpleexpr  */
-#line 586 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2648 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 75: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 587 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_not); }
-#line 2654 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 77: /* simpleexprnoparens: THEENTITY  */
-#line 589 "engines/director/lingo/lingo-gr.y"
-                                                        {
-		(yyval.code) = g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(0); // Put dummy id
-		g_lingo->code1(LC::c_theentitypush);
-		inst e = 0, f = 0;
-		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
-		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
-		g_lingo->code2(e, f); }
-#line 2667 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 78: /* simpleexprnoparens: THEENTITYWITHID simpleexpr  */
-#line 597 "engines/director/lingo/lingo-gr.y"
-                                     {
-		(yyval.code) = g_lingo->code1(LC::c_theentitypush);
-		inst e = 0, f = 0;
-		WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
-		WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
-		g_lingo->code2(e, f); }
-#line 2678 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 79: /* simpleexprnoparens: THEFUNCINOF simpleexpr  */
-#line 603 "engines/director/lingo/lingo-gr.y"
-                                        {
-		(yyval.code) = g_lingo->codeFunc((yyvsp[-1].s), 1);
-		delete (yyvsp[-1].s); }
-#line 2686 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 80: /* simpleexprnoparens: THEFUNC tOF simpleexpr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
-                                        {
-		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
-		delete (yyvsp[-2].s); }
-#line 2694 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 81: /* simpleexprnoparens: THEOBJECTPROP  */
-#line 609 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_objectproppush);
-		g_lingo->codeString((yyvsp[0].objectprop).obj->c_str());
-		g_lingo->codeString((yyvsp[0].objectprop).prop->c_str());
-		delete (yyvsp[0].objectprop).obj;
-		delete (yyvsp[0].objectprop).prop; }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 82: /* simpleexprnoparens: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 615 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_intersects); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 83: /* simpleexprnoparens: tSPRITE expr tWITHIN simpleexpr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_within); }
-#line 2717 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 85: /* simpleexprnoparens: ID '(' ID ')'  */
-#line 618 "engines/director/lingo/lingo-gr.y"
-                                      {
-			g_lingo->code1(LC::c_varpush);
-			g_lingo->codeString((yyvsp[-1].s)->c_str());
-			g_lingo->codeFunc((yyvsp[-3].s), 1);
-			delete (yyvsp[-3].s);
-			delete (yyvsp[-1].s); }
-#line 2728 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 86: /* $@10: %empty  */
-#line 624 "engines/director/lingo/lingo-gr.y"
-                                      { g_lingo->code1(LC::c_varpush); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 2734 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 87: /* simpleexprnoparens: ID '(' ID ',' $@10 nonemptyarglist ')'  */
-#line 625 "engines/director/lingo/lingo-gr.y"
-                                                    {
-			g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
-			delete (yyvsp[-6].s);
-			delete (yyvsp[-4].s); }
-#line 2743 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 88: /* simpleexprnoparens: ID '(' arglist ')'  */
-#line 629 "engines/director/lingo/lingo-gr.y"
-                                        {
-		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
-		delete (yyvsp[-3].s); }
-#line 2751 "engines/director/lingo/lingo-gr.cpp"
+		NodeList *list = new NodeList;
+		if ((yyvsp[0].node)) {
+			list->push_back((yyvsp[0].node));
+		}
+		(yyval.nodelist) = list; }
+#line 1625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* simpleexprnoparens: ID  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
+#line 254 "engines/director/lingo/lingo-gr.y"
                                                         {
-		if (g_lingo->_builtinConsts.contains(*(yyvsp[0].s))) {
-			(yyval.code) = g_lingo->code1(LC::c_constpush);
-		} else {
-			(yyval.code) = g_lingo->code1(LC::c_eval);
+		if ((yyvsp[0].node)) {
+			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
-		g_lingo->codeString((yyvsp[0].s)->c_str());
-		delete (yyvsp[0].s); }
-#line 2764 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 91: /* simpleexpr: '(' expr ')'  */
-#line 642 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.code) = (yyvsp[-1].code); }
-#line 2770 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 92: /* expr: simpleexpr  */
-#line 644 "engines/director/lingo/lingo-gr.y"
-                 { (yyval.code) = (yyvsp[0].code); }
-#line 2776 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 93: /* expr: expr '+' expr  */
-#line 645 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_add); }
-#line 2782 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 94: /* expr: expr '-' expr  */
-#line 646 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_sub); }
-#line 2788 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 95: /* expr: expr '*' expr  */
-#line 647 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_mul); }
-#line 2794 "engines/director/lingo/lingo-gr.cpp"
+		(yyval.nodelist) = (yyvsp[-2].nodelist); }
+#line 1635 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* expr: expr '/' expr  */
-#line 648 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_div); }
-#line 2800 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 97: /* expr: expr tMOD expr  */
-#line 649 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_mod); }
-#line 2806 "engines/director/lingo/lingo-gr.cpp"
+  case 17: /* methodlistline: '\n'  */
+#line 261 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = nullptr; }
+#line 1641 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* expr: expr '>' expr  */
-#line 650 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_gt); }
-#line 2812 "engines/director/lingo/lingo-gr.cpp"
+  case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
+#line 267 "engines/director/lingo/lingo-gr.y"
+                                                               {	// D3
+		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
+		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
+		delete (yyvsp[-2].s); }
+#line 1650 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* expr: expr '<' expr  */
-#line 651 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_lt); }
-#line 2818 "engines/director/lingo/lingo-gr.cpp"
+  case 20: /* handler: tON ID idlist '\n' stmtlist  */
+#line 271 "engines/director/lingo/lingo-gr.y"
+                                      {	// D4. No 'end' clause
+		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
+#line 1657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* expr: expr tEQ expr  */
-#line 652 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_eq); }
-#line 2824 "engines/director/lingo/lingo-gr.cpp"
+  case 22: /* endargdef: ID  */
+#line 276 "engines/director/lingo/lingo-gr.y"
+                                                        { delete (yyvsp[0].s); }
+#line 1663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* expr: expr tNEQ expr  */
-#line 653 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_neq); }
-#line 2830 "engines/director/lingo/lingo-gr.cpp"
+  case 23: /* endargdef: endargdef ',' ID  */
+#line 277 "engines/director/lingo/lingo-gr.y"
+                                                { delete (yyvsp[0].s); }
+#line 1669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* expr: expr tGE expr  */
-#line 654 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_ge); }
-#line 2836 "engines/director/lingo/lingo-gr.cpp"
+  case 25: /* ID: tAFTER  */
+#line 283 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("after"); }
+#line 1675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* expr: expr tLE expr  */
-#line 655 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_le); }
-#line 2842 "engines/director/lingo/lingo-gr.cpp"
+  case 26: /* ID: tAND  */
+#line 284 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("and"); }
+#line 1681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* expr: expr tAND expr  */
-#line 656 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_and); }
-#line 2848 "engines/director/lingo/lingo-gr.cpp"
+  case 27: /* ID: tBEFORE  */
+#line 285 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("before"); }
+#line 1687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* expr: expr tOR expr  */
-#line 657 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_or); }
-#line 2854 "engines/director/lingo/lingo-gr.cpp"
+  case 28: /* ID: tCAST  */
+#line 286 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("cast"); }
+#line 1693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* expr: expr '&' expr  */
-#line 658 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_ampersand); }
-#line 2860 "engines/director/lingo/lingo-gr.cpp"
+  case 29: /* ID: tCHAR  */
+#line 287 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("char"); }
+#line 1699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* expr: expr tCONCAT expr  */
-#line 659 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_concat); }
-#line 2866 "engines/director/lingo/lingo-gr.cpp"
+  case 30: /* ID: tDOWN  */
+#line 288 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("down"); }
+#line 1705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* expr: expr tCONTAINS expr  */
-#line 660 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->code1(LC::c_contains); }
-#line 2872 "engines/director/lingo/lingo-gr.cpp"
+  case 31: /* ID: tEXIT  */
+#line 291 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("exit"); }
+#line 1711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* expr: expr tSTARTS expr  */
-#line 661 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_starts); }
-#line 2878 "engines/director/lingo/lingo-gr.cpp"
+  case 32: /* ID: tFIELD  */
+#line 293 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("field"); }
+#line 1717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* chunkexpr: tFIELD simpleexprnoparens  */
-#line 663 "engines/director/lingo/lingo-gr.y"
-                                        {
-		Common::String field("field");
-		g_lingo->codeFunc(&field, 1); }
-#line 2886 "engines/director/lingo/lingo-gr.cpp"
+  case 33: /* ID: tIN  */
+#line 296 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("in"); }
+#line 1723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* chunkexpr: tCAST simpleexprnoparens  */
-#line 666 "engines/director/lingo/lingo-gr.y"
-                                                {
-		Common::String cast("cast");
-		g_lingo->codeFunc(&cast, 1); }
-#line 2894 "engines/director/lingo/lingo-gr.cpp"
+  case 34: /* ID: tINTERSECTS  */
+#line 298 "engines/director/lingo/lingo-gr.y"
+                        { (yyval.s) = new Common::String("intersects"); }
+#line 1729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* chunkexpr: tCHAR expr tOF simpleexpr  */
-#line 669 "engines/director/lingo/lingo-gr.y"
-                                                                { g_lingo->code1(LC::c_charOf); }
-#line 2900 "engines/director/lingo/lingo-gr.cpp"
+  case 35: /* ID: tINTO  */
+#line 299 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("into"); }
+#line 1735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* chunkexpr: tCHAR expr tTO expr tOF simpleexpr  */
-#line 670 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_charToOf); }
-#line 2906 "engines/director/lingo/lingo-gr.cpp"
+  case 36: /* ID: tITEM  */
+#line 300 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("item"); }
+#line 1741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* chunkexpr: tITEM expr tOF simpleexpr  */
-#line 671 "engines/director/lingo/lingo-gr.y"
-                                                                { g_lingo->code1(LC::c_itemOf); }
-#line 2912 "engines/director/lingo/lingo-gr.cpp"
+  case 37: /* ID: tLINE  */
+#line 301 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("line"); }
+#line 1747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* chunkexpr: tITEM expr tTO expr tOF simpleexpr  */
-#line 672 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_itemToOf); }
-#line 2918 "engines/director/lingo/lingo-gr.cpp"
+  case 38: /* ID: tMOD  */
+#line 304 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("mod"); }
+#line 1753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* chunkexpr: tLINE expr tOF simpleexpr  */
-#line 673 "engines/director/lingo/lingo-gr.y"
-                                                                { g_lingo->code1(LC::c_lineOf); }
-#line 2924 "engines/director/lingo/lingo-gr.cpp"
+  case 39: /* ID: tMOVIE  */
+#line 305 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("movie"); }
+#line 1759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* chunkexpr: tLINE expr tTO expr tOF simpleexpr  */
-#line 674 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_lineToOf); }
-#line 2930 "engines/director/lingo/lingo-gr.cpp"
+  case 40: /* ID: tNEXT  */
+#line 306 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("next"); }
+#line 1765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* chunkexpr: tWORD expr tOF simpleexpr  */
-#line 675 "engines/director/lingo/lingo-gr.y"
-                                                                { g_lingo->code1(LC::c_wordOf); }
-#line 2936 "engines/director/lingo/lingo-gr.cpp"
+  case 41: /* ID: tNOT  */
+#line 307 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("not"); }
+#line 1771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* chunkexpr: tWORD expr tTO expr tOF simpleexpr  */
-#line 676 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_wordToOf); }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+  case 42: /* ID: tOF  */
+#line 308 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("of"); }
+#line 1777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* reference: tSCRIPT simpleexprnoparens  */
-#line 679 "engines/director/lingo/lingo-gr.y"
-                                        {
-		Common::String script("script");
-		g_lingo->codeFunc(&script, 1); }
-#line 2950 "engines/director/lingo/lingo-gr.cpp"
+  case 43: /* ID: tOPEN  */
+#line 310 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("open"); }
+#line 1783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* reference: tWINDOW simpleexprnoparens  */
-#line 682 "engines/director/lingo/lingo-gr.y"
-                                        {
-		Common::String window("window");
-		g_lingo->codeFunc(&window, 1); }
-#line 2958 "engines/director/lingo/lingo-gr.cpp"
+  case 44: /* ID: tOR  */
+#line 311 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("or"); }
+#line 1789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* proc: tPUT expr  */
-#line 686 "engines/director/lingo/lingo-gr.y"
-                                                {
-		Common::String put("put");
-		g_lingo->codeCmd(&put, 1); }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+  case 45: /* ID: tPLAY  */
+#line 312 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("play"); }
+#line 1795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* proc: tEXIT tREPEAT  */
-#line 691 "engines/director/lingo/lingo-gr.y"
-                                                {
-		if (g_lingo->_repeatStack.size()) {
-			g_lingo->code2(LC::c_jump, 0);
-			int pos = g_lingo->_currentAssembly->size() - 1;
-			g_lingo->_repeatStack.back()->exits.push_back(pos);
-		} else {
-			warning("# LINGO: exit repeat not inside repeat block");
-		} }
-#line 2979 "engines/director/lingo/lingo-gr.cpp"
+  case 46: /* ID: tPLAYACCEL  */
+#line 313 "engines/director/lingo/lingo-gr.y"
+                        { (yyval.s) = new Common::String("playAccel"); }
+#line 1801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* proc: tEXIT  */
-#line 699 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_procret); }
-#line 2985 "engines/director/lingo/lingo-gr.cpp"
+  case 47: /* ID: tPREVIOUS  */
+#line 314 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("previous"); }
+#line 1807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* $@11: %empty  */
-#line 700 "engines/director/lingo/lingo-gr.y"
-                                                        { inArgs(); }
-#line 2991 "engines/director/lingo/lingo-gr.cpp"
+  case 48: /* ID: tPUT  */
+#line 316 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("put"); }
+#line 1813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* proc: tGLOBAL $@11 globallist  */
-#line 700 "engines/director/lingo/lingo-gr.y"
-                                                                                 { inLast(); }
-#line 2997 "engines/director/lingo/lingo-gr.cpp"
+  case 49: /* ID: tREPEAT  */
+#line 317 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("repeat"); }
+#line 1819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* $@12: %empty  */
-#line 701 "engines/director/lingo/lingo-gr.y"
-                                                        { inArgs(); }
-#line 3003 "engines/director/lingo/lingo-gr.cpp"
+  case 50: /* ID: tSCRIPT  */
+#line 318 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("script"); }
+#line 1825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* proc: tPROPERTY $@12 propertylist  */
-#line 701 "engines/director/lingo/lingo-gr.y"
-                                                                                   { inLast(); }
-#line 3009 "engines/director/lingo/lingo-gr.cpp"
+  case 51: /* ID: tSET  */
+#line 319 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("set"); }
+#line 1831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* $@13: %empty  */
-#line 702 "engines/director/lingo/lingo-gr.y"
-                                                        { inArgs(); }
-#line 3015 "engines/director/lingo/lingo-gr.cpp"
+  case 52: /* ID: tSTARTS  */
+#line 320 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("starts"); }
+#line 1837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* proc: tINSTANCE $@13 instancelist  */
-#line 702 "engines/director/lingo/lingo-gr.y"
-                                                                                   { inLast(); }
-#line 3021 "engines/director/lingo/lingo-gr.cpp"
+  case 53: /* ID: tTELL  */
+#line 321 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("tell"); }
+#line 1843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* proc: tOPEN expr tWITH expr  */
-#line 703 "engines/director/lingo/lingo-gr.y"
-                                        {
-		Common::String open("open");
-		g_lingo->codeCmd(&open, 2); }
-#line 3029 "engines/director/lingo/lingo-gr.cpp"
+  case 54: /* ID: tTO  */
+#line 323 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("to"); }
+#line 1849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* proc: tOPEN expr  */
-#line 706 "engines/director/lingo/lingo-gr.y"
-                                                {
-		Common::String open("open");
-		g_lingo->codeCmd(&open, 1); }
-#line 3037 "engines/director/lingo/lingo-gr.cpp"
+  case 55: /* ID: tASSERTERROR  */
+#line 324 "engines/director/lingo/lingo-gr.y"
+                        { (yyval.s) = new Common::String("scummvmAssertError"); }
+#line 1855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* proc: ID '(' ID ')'  */
-#line 709 "engines/director/lingo/lingo-gr.y"
-                                      {
-			g_lingo->code1(LC::c_varpush);
-			g_lingo->codeString((yyvsp[-1].s)->c_str());
-			g_lingo->codeCmd((yyvsp[-3].s), 1);
-			delete (yyvsp[-3].s);
-			delete (yyvsp[-1].s); }
-#line 3048 "engines/director/lingo/lingo-gr.cpp"
+  case 56: /* ID: tSPRITE  */
+#line 325 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("sprite"); }
+#line 1861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* $@14: %empty  */
-#line 715 "engines/director/lingo/lingo-gr.y"
-                                      { g_lingo->code1(LC::c_varpush); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 3054 "engines/director/lingo/lingo-gr.cpp"
+  case 57: /* ID: tWHEN  */
+#line 326 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("when"); }
+#line 1867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* proc: ID '(' ID ',' $@14 nonemptyarglist ')'  */
-#line 716 "engines/director/lingo/lingo-gr.y"
-                                                    {
-			g_lingo->codeCmd((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
-			delete (yyvsp[-6].s);
-			delete (yyvsp[-4].s); }
-#line 3063 "engines/director/lingo/lingo-gr.cpp"
+  case 58: /* ID: tWHILE  */
+#line 327 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("while"); }
+#line 1873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* proc: ID '(' arglist ')'  */
-#line 720 "engines/director/lingo/lingo-gr.y"
-                                        {
-		g_lingo->codeCmd((yyvsp[-3].s), (yyvsp[-1].narg));
-		delete (yyvsp[-3].s); }
-#line 3071 "engines/director/lingo/lingo-gr.cpp"
+  case 59: /* ID: tWINDOW  */
+#line 328 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("window"); }
+#line 1879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* proc: ID arglist  */
-#line 723 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->codeCmd((yyvsp[-1].s), (yyvsp[0].narg));
-		delete (yyvsp[-1].s); }
-#line 3079 "engines/director/lingo/lingo-gr.cpp"
+  case 60: /* ID: tWITH  */
+#line 329 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("with"); }
+#line 1885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* globallist: ID  */
-#line 728 "engines/director/lingo/lingo-gr.y"
-                                                        {
-		mVar((yyvsp[0].s), kVarGlobal);
-		delete (yyvsp[0].s); }
-#line 3087 "engines/director/lingo/lingo-gr.cpp"
+  case 61: /* ID: tWITHIN  */
+#line 330 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("within"); }
+#line 1891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* globallist: ID ',' globallist  */
-#line 731 "engines/director/lingo/lingo-gr.y"
-                                                {
-		mVar((yyvsp[-2].s), kVarGlobal);
-		delete (yyvsp[-2].s); }
-#line 3095 "engines/director/lingo/lingo-gr.cpp"
+  case 62: /* ID: tWORD  */
+#line 331 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("word"); }
+#line 1897 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* propertylist: ID  */
-#line 736 "engines/director/lingo/lingo-gr.y"
-                                                        {
-		mVar((yyvsp[0].s), kVarProperty);
-		delete (yyvsp[0].s); }
-#line 3103 "engines/director/lingo/lingo-gr.cpp"
+  case 63: /* idlist: %empty  */
+#line 334 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.idlist) = new IDList; }
+#line 1903 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* propertylist: ID ',' propertylist  */
-#line 739 "engines/director/lingo/lingo-gr.y"
-                                        {
-		mVar((yyvsp[-2].s), kVarProperty);
-		delete (yyvsp[-2].s); }
-#line 3111 "engines/director/lingo/lingo-gr.cpp"
+  case 65: /* nonemptyidlist: ID  */
+#line 338 "engines/director/lingo/lingo-gr.y"
+                                                                {
+		Common::Array<Common::String *> *list = new IDList;
+		list->push_back((yyvsp[0].s));
+		(yyval.idlist) = list; }
+#line 1912 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* instancelist: ID  */
-#line 744 "engines/director/lingo/lingo-gr.y"
+  case 66: /* nonemptyidlist: nonemptyidlist ',' ID  */
+#line 342 "engines/director/lingo/lingo-gr.y"
                                                         {
-		mVar((yyvsp[0].s), kVarInstance);
-		delete (yyvsp[0].s); }
-#line 3119 "engines/director/lingo/lingo-gr.cpp"
+		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
+		(yyval.idlist) = (yyvsp[-2].idlist); }
+#line 1920 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* instancelist: ID ',' instancelist  */
-#line 747 "engines/director/lingo/lingo-gr.y"
-                                        {
-		mVar((yyvsp[-2].s), kVarInstance);
-		delete (yyvsp[-2].s); }
-#line 3127 "engines/director/lingo/lingo-gr.cpp"
+  case 70: /* proc: ID '(' exprlist ')'  */
+#line 355 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new CmdNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
+#line 1926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* gotofunc: tGOLOOP  */
-#line 758 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_gotoloop); }
-#line 3133 "engines/director/lingo/lingo-gr.cpp"
+  case 71: /* proc: ID exprlist  */
+#line 356 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new CmdNode((yyvsp[-1].s), (yyvsp[0].nodelist)); }
+#line 1932 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* gotofunc: tGO tNEXT  */
-#line 759 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_gotonext); }
-#line 3139 "engines/director/lingo/lingo-gr.cpp"
+  case 72: /* definevars: tGLOBAL idlist  */
+#line 359 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new GlobalNode((yyvsp[0].idlist)); }
+#line 1938 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* gotofunc: tGO tPREVIOUS  */
-#line 760 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_gotoprevious); }
-#line 3145 "engines/director/lingo/lingo-gr.cpp"
+  case 73: /* definevars: tPROPERTY idlist  */
+#line 360 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new PropertyNode((yyvsp[0].idlist)); }
+#line 1944 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* gotofunc: tGO expr  */
-#line 761 "engines/director/lingo/lingo-gr.y"
-                                                        {
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_goto); }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 154: /* gotofunc: tGO expr gotomovie  */
-#line 765 "engines/director/lingo/lingo-gr.y"
-                                        {
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(3);
-		g_lingo->code1(LC::c_goto); }
-#line 3163 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 155: /* gotofunc: tGO gotomovie  */
-#line 769 "engines/director/lingo/lingo-gr.y"
-                                                {
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(2);
-		g_lingo->code1(LC::c_goto); }
-#line 3172 "engines/director/lingo/lingo-gr.cpp"
+  case 74: /* definevars: tINSTANCE idlist  */
+#line 361 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new InstanceNode((yyvsp[0].idlist)); }
+#line 1950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* playfunc: tPLAY expr  */
-#line 777 "engines/director/lingo/lingo-gr.y"
-                                        { // "play #done" is also caught by this
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_play); }
-#line 3181 "engines/director/lingo/lingo-gr.cpp"
+  case 75: /* stmtlist: %empty  */
+#line 364 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.nodelist) = new NodeList; }
+#line 1956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* playfunc: tPLAY expr gotomovie  */
-#line 781 "engines/director/lingo/lingo-gr.y"
-                                        {
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(3);
-		g_lingo->code1(LC::c_play); }
-#line 3190 "engines/director/lingo/lingo-gr.cpp"
+  case 77: /* nonemptystmtlist: stmtlistline  */
+#line 369 "engines/director/lingo/lingo-gr.y"
+                                                                {
+		NodeList *list = new NodeList;
+		if ((yyvsp[0].node)) {
+			list->push_back((yyvsp[0].node));
+		}
+		(yyval.nodelist) = list; }
+#line 1967 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* playfunc: tPLAY gotomovie  */
-#line 785 "engines/director/lingo/lingo-gr.y"
+  case 78: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 375 "engines/director/lingo/lingo-gr.y"
                                                 {
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(2);
-		g_lingo->code1(LC::c_play); }
-#line 3199 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 161: /* $@15: %empty  */
-#line 789 "engines/director/lingo/lingo-gr.y"
-                     { g_lingo->codeSetImmediate(true); }
-#line 3205 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 162: /* playfunc: tPLAYACCEL $@15 arglist  */
-#line 789 "engines/director/lingo/lingo-gr.y"
-                                                                  {
-		g_lingo->codeSetImmediate(false);
-		g_lingo->codeCmd((yyvsp[-2].s), (yyvsp[0].narg));
-		delete (yyvsp[-2].s); }
-#line 3214 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 163: /* $@16: %empty  */
-#line 819 "engines/director/lingo/lingo-gr.y"
-             { startDef(); }
-#line 3220 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 164: /* defn: tMACRO $@16 ID lbl argdef '\n' argstore stmtlist  */
-#line 820 "engines/director/lingo/lingo-gr.y"
-                                                                        {
-		g_lingo->code1(LC::c_procret);
-		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
-		endDef();
-		delete (yyvsp[-5].s); }
-#line 3230 "engines/director/lingo/lingo-gr.cpp"
+		if ((yyvsp[0].node)) {
+			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
+		}
+		(yyval.nodelist) = (yyvsp[-1].nodelist); }
+#line 1977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* defn: tFACTORY ID  */
-#line 825 "engines/director/lingo/lingo-gr.y"
-                        { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3236 "engines/director/lingo/lingo-gr.cpp"
+  case 79: /* stmtlistline: '\n'  */
+#line 382 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = nullptr; }
+#line 1983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* $@17: %empty  */
-#line 826 "engines/director/lingo/lingo-gr.y"
-                  {
-			startDef();
-			Common::String me("me");
-			g_lingo->codeArg(&me);
-			mVar(&me, kVarArgument);
-		}
-#line 3247 "engines/director/lingo/lingo-gr.cpp"
+  case 81: /* simpleexprnoparens: tINT  */
+#line 388 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new IntNode((yyvsp[0].i)); }
+#line 1989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* defn: tMETHOD $@17 lbl argdef '\n' argstore stmtlist  */
-#line 831 "engines/director/lingo/lingo-gr.y"
-                                                    {
-			g_lingo->code1(LC::c_procret);
-			g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1);
-			endDef();
-			delete (yyvsp[-6].s); }
-#line 3257 "engines/director/lingo/lingo-gr.cpp"
+  case 82: /* simpleexprnoparens: tFLOAT  */
+#line 389 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new FloatNode((yyvsp[0].f)); }
+#line 1995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* defn: on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef  */
-#line 836 "engines/director/lingo/lingo-gr.y"
-                                                                   {	// D3
-		g_lingo->code1(LC::c_procret);
-		g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
-		endDef();
-
-		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
-		delete (yyvsp[-7].s);
-		delete (yyvsp[-1].s); }
-#line 3270 "engines/director/lingo/lingo-gr.cpp"
+  case 83: /* simpleexprnoparens: tSYMBOL  */
+#line 390 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
+#line 2001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* defn: on lbl argdef '\n' argstore stmtlist  */
-#line 844 "engines/director/lingo/lingo-gr.y"
-                                               {	// D4. No 'end' clause
-		g_lingo->code1(LC::c_procret);
-		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
-		endDef();
-		delete (yyvsp[-5].s); }
-#line 3280 "engines/director/lingo/lingo-gr.cpp"
+  case 84: /* simpleexprnoparens: tSTRING  */
+#line 391 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new StringNode((yyvsp[0].s)); }
+#line 2007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* $@18: %empty  */
-#line 850 "engines/director/lingo/lingo-gr.y"
-         { startDef(); }
-#line 3286 "engines/director/lingo/lingo-gr.cpp"
+  case 85: /* simpleexprnoparens: '+' simpleexpr  */
+#line 392 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = (yyvsp[0].node); }
+#line 2013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* on: tON $@18 ID  */
-#line 850 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = (yyvsp[0].s); }
-#line 3292 "engines/director/lingo/lingo-gr.cpp"
+  case 86: /* simpleexprnoparens: '-' simpleexpr  */
+#line 393 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
+#line 2019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* argname: ID  */
-#line 852 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); delete (yyvsp[0].s); }
-#line 3298 "engines/director/lingo/lingo-gr.cpp"
+  case 87: /* simpleexprnoparens: tNOT simpleexpr  */
+#line 394 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
+#line 2025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* argdef: %empty  */
-#line 854 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = 0; }
-#line 3304 "engines/director/lingo/lingo-gr.cpp"
+  case 88: /* simpleexprnoparens: ID '(' exprlist ')'  */
+#line 395 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
+#line 2031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* argdef: argname  */
-#line 855 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.narg) = 1; }
-#line 3310 "engines/director/lingo/lingo-gr.cpp"
+  case 89: /* simpleexprnoparens: ID  */
+#line 396 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new VarNode((yyvsp[0].s)); }
+#line 2037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* argdef: argname ',' argdef  */
-#line 856 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3316 "engines/director/lingo/lingo-gr.cpp"
+  case 91: /* simpleexpr: '(' expr ')'  */
+#line 400 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = (yyvsp[-1].node); }
+#line 2043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* endargdef: ID  */
-#line 859 "engines/director/lingo/lingo-gr.y"
-                                                        { delete (yyvsp[0].s); }
-#line 3322 "engines/director/lingo/lingo-gr.cpp"
+  case 92: /* expr: simpleexpr  */
+#line 403 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = (yyvsp[0].node); }
+#line 2049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* endargdef: endargdef ',' ID  */
-#line 860 "engines/director/lingo/lingo-gr.y"
-                                                { delete (yyvsp[0].s); }
-#line 3328 "engines/director/lingo/lingo-gr.cpp"
+  case 93: /* expr: expr '+' expr  */
+#line 404 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* argstore: %empty  */
-#line 862 "engines/director/lingo/lingo-gr.y"
-                                        { inDef(); }
-#line 3334 "engines/director/lingo/lingo-gr.cpp"
+  case 94: /* expr: expr '-' expr  */
+#line 405 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* arglist: %empty  */
-#line 864 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = 0; }
-#line 3340 "engines/director/lingo/lingo-gr.cpp"
+  case 95: /* expr: expr '*' expr  */
+#line 406 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2067 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* arglist: expr  */
-#line 865 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.narg) = 1; }
-#line 3346 "engines/director/lingo/lingo-gr.cpp"
+  case 96: /* expr: expr '/' expr  */
+#line 407 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2073 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* arglist: expr ',' arglist  */
-#line 866 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3352 "engines/director/lingo/lingo-gr.cpp"
+  case 97: /* expr: expr tMOD expr  */
+#line 408 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* nonemptyarglist: expr  */
-#line 868 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = 1; }
-#line 3358 "engines/director/lingo/lingo-gr.cpp"
+  case 98: /* expr: expr '>' expr  */
+#line 409 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* nonemptyarglist: expr ','  */
-#line 869 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.narg) = 1; }
-#line 3364 "engines/director/lingo/lingo-gr.cpp"
+  case 99: /* expr: expr '<' expr  */
+#line 410 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* nonemptyarglist: expr ',' nonemptyarglist  */
-#line 870 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3370 "engines/director/lingo/lingo-gr.cpp"
+  case 100: /* expr: expr tEQ expr  */
+#line 411 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* list: '[' valuelist ']'  */
-#line 872 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.code) = (yyvsp[-1].code); }
-#line 3376 "engines/director/lingo/lingo-gr.cpp"
+  case 101: /* expr: expr tNEQ expr  */
+#line 412 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2103 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* valuelist: %empty  */
-#line 874 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3382 "engines/director/lingo/lingo-gr.cpp"
+  case 102: /* expr: expr tGE expr  */
+#line 413 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* valuelist: ':'  */
-#line 875 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3388 "engines/director/lingo/lingo-gr.cpp"
+  case 103: /* expr: expr tLE expr  */
+#line 414 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2115 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* valuelist: proplist  */
-#line 876 "engines/director/lingo/lingo-gr.y"
-                         { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3394 "engines/director/lingo/lingo-gr.cpp"
+  case 104: /* expr: expr tAND expr  */
+#line 415 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2121 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* valuelist: linearlist  */
-#line 877 "engines/director/lingo/lingo-gr.y"
-                     { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3400 "engines/director/lingo/lingo-gr.cpp"
+  case 105: /* expr: expr tOR expr  */
+#line 416 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2127 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* linearlist: expr  */
-#line 879 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.narg) = 1; }
-#line 3406 "engines/director/lingo/lingo-gr.cpp"
+  case 106: /* expr: expr '&' expr  */
+#line 417 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2133 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* linearlist: linearlist ',' expr  */
-#line 880 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3412 "engines/director/lingo/lingo-gr.cpp"
+  case 107: /* expr: expr tCONCAT expr  */
+#line 418 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2139 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* proplist: proppair  */
-#line 882 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.narg) = 1; }
-#line 3418 "engines/director/lingo/lingo-gr.cpp"
+  case 108: /* expr: expr tCONTAINS expr  */
+#line 419 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2145 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* proplist: proplist ',' proppair  */
-#line 883 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3424 "engines/director/lingo/lingo-gr.cpp"
+  case 109: /* expr: expr tSTARTS expr  */
+#line 420 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2151 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* proppair: SYMBOL ':' expr  */
-#line 885 "engines/director/lingo/lingo-gr.y"
-                          {
-		g_lingo->code1(LC::c_symbolpush);
-		g_lingo->codeString((yyvsp[-2].s)->c_str());
-		delete (yyvsp[-2].s); }
-#line 3433 "engines/director/lingo/lingo-gr.cpp"
+  case 110: /* exprlist: %empty  */
+#line 423 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.nodelist) = new NodeList; }
+#line 2157 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* proppair: STRING ':' expr  */
-#line 889 "engines/director/lingo/lingo-gr.y"
-                                {
-		g_lingo->code1(LC::c_stringpush);
-		g_lingo->codeString((yyvsp[-2].s)->c_str());
-		delete (yyvsp[-2].s); }
-#line 3442 "engines/director/lingo/lingo-gr.cpp"
+  case 112: /* nonemptyexprlist: expr  */
+#line 427 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		NodeList *list = new NodeList; 
+		list->push_back((yyvsp[0].node));
+		(yyval.nodelist) = list; }
+#line 2166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* proppair: ID ':' expr  */
-#line 893 "engines/director/lingo/lingo-gr.y"
-                        {
-		g_lingo->code1(LC::c_stringpush);
-		g_lingo->codeString((yyvsp[-2].s)->c_str());
-		delete (yyvsp[-2].s); }
-#line 3451 "engines/director/lingo/lingo-gr.cpp"
+  case 113: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 431 "engines/director/lingo/lingo-gr.y"
+                                                {
+		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
+		(yyval.nodelist) = (yyvsp[-2].nodelist); }
+#line 2174 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3455 "engines/director/lingo/lingo-gr.cpp"
+#line 2178 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3650,7 +2373,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 899 "engines/director/lingo/lingo-gr.y"
+#line 436 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 73b6a236b5..711e188b77 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.7.1.  */
+/* A Bison parser, made by GNU Bison 3.7.6.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -54,93 +54,81 @@ extern int yydebug;
     YYEOF = 0,                     /* "end of file"  */
     YYerror = 256,                 /* error  */
     YYUNDEF = 257,                 /* "invalid token"  */
-    UNARY = 258,                   /* UNARY  */
-    VOID = 259,                    /* VOID  */
-    VAR = 260,                     /* VAR  */
-    POINT = 261,                   /* POINT  */
-    RECT = 262,                    /* RECT  */
-    ARRAY = 263,                   /* ARRAY  */
-    OBJECT = 264,                  /* OBJECT  */
-    LEXERROR = 265,                /* LEXERROR  */
-    PARRAY = 266,                  /* PARRAY  */
-    CASTREF = 267,                 /* CASTREF  */
-    FIELDREF = 268,                /* FIELDREF  */
-    CHUNKREF = 269,                /* CHUNKREF  */
-    INT = 270,                     /* INT  */
-    ARGC = 271,                    /* ARGC  */
-    ARGCNORET = 272,               /* ARGCNORET  */
-    THEENTITY = 273,               /* THEENTITY  */
-    THEENTITYWITHID = 274,         /* THEENTITYWITHID  */
-    THEMENUITEMENTITY = 275,       /* THEMENUITEMENTITY  */
-    THEMENUITEMSENTITY = 276,      /* THEMENUITEMSENTITY  */
-    FLOAT = 277,                   /* FLOAT  */
-    THEFUNC = 278,                 /* THEFUNC  */
-    THEFUNCINOF = 279,             /* THEFUNCINOF  */
-    VARID = 280,                   /* VARID  */
-    STRING = 281,                  /* STRING  */
-    SYMBOL = 282,                  /* SYMBOL  */
-    ENDCLAUSE = 283,               /* ENDCLAUSE  */
-    tPLAYACCEL = 284,              /* tPLAYACCEL  */
-    tMETHOD = 285,                 /* tMETHOD  */
-    THEOBJECTPROP = 286,           /* THEOBJECTPROP  */
-    tCAST = 287,                   /* tCAST  */
-    tFIELD = 288,                  /* tFIELD  */
-    tSCRIPT = 289,                 /* tSCRIPT  */
-    tWINDOW = 290,                 /* tWINDOW  */
-    tDOWN = 291,                   /* tDOWN  */
-    tELSE = 292,                   /* tELSE  */
-    tELSIF = 293,                  /* tELSIF  */
-    tEXIT = 294,                   /* tEXIT  */
-    tGLOBAL = 295,                 /* tGLOBAL  */
-    tGO = 296,                     /* tGO  */
-    tGOLOOP = 297,                 /* tGOLOOP  */
-    tIF = 298,                     /* tIF  */
-    tIN = 299,                     /* tIN  */
-    tINTO = 300,                   /* tINTO  */
-    tMACRO = 301,                  /* tMACRO  */
-    tMOVIE = 302,                  /* tMOVIE  */
-    tNEXT = 303,                   /* tNEXT  */
-    tOF = 304,                     /* tOF  */
-    tPREVIOUS = 305,               /* tPREVIOUS  */
-    tPUT = 306,                    /* tPUT  */
-    tREPEAT = 307,                 /* tREPEAT  */
-    tSET = 308,                    /* tSET  */
-    tTHEN = 309,                   /* tTHEN  */
-    tTO = 310,                     /* tTO  */
-    tWHEN = 311,                   /* tWHEN  */
-    tWITH = 312,                   /* tWITH  */
-    tWHILE = 313,                  /* tWHILE  */
-    tFACTORY = 314,                /* tFACTORY  */
-    tOPEN = 315,                   /* tOPEN  */
-    tPLAY = 316,                   /* tPLAY  */
-    tINSTANCE = 317,               /* tINSTANCE  */
-    tGE = 318,                     /* tGE  */
-    tLE = 319,                     /* tLE  */
-    tEQ = 320,                     /* tEQ  */
-    tNEQ = 321,                    /* tNEQ  */
-    tAND = 322,                    /* tAND  */
-    tOR = 323,                     /* tOR  */
-    tNOT = 324,                    /* tNOT  */
-    tMOD = 325,                    /* tMOD  */
-    tAFTER = 326,                  /* tAFTER  */
-    tBEFORE = 327,                 /* tBEFORE  */
-    tCONCAT = 328,                 /* tCONCAT  */
-    tCONTAINS = 329,               /* tCONTAINS  */
-    tSTARTS = 330,                 /* tSTARTS  */
-    tCHAR = 331,                   /* tCHAR  */
-    tITEM = 332,                   /* tITEM  */
-    tLINE = 333,                   /* tLINE  */
-    tWORD = 334,                   /* tWORD  */
-    tSPRITE = 335,                 /* tSPRITE  */
-    tINTERSECTS = 336,             /* tINTERSECTS  */
-    tWITHIN = 337,                 /* tWITHIN  */
-    tTELL = 338,                   /* tTELL  */
-    tPROPERTY = 339,               /* tPROPERTY  */
-    tON = 340,                     /* tON  */
-    tENDIF = 341,                  /* tENDIF  */
-    tENDREPEAT = 342,              /* tENDREPEAT  */
-    tENDTELL = 343,                /* tENDTELL  */
-    tASSERTERROR = 344             /* tASSERTERROR  */
+    tUNARY = 258,                  /* tUNARY  */
+    tLEXERROR = 259,               /* tLEXERROR  */
+    tINT = 260,                    /* tINT  */
+    tTHEENTITY = 261,              /* tTHEENTITY  */
+    tTHEENTITYWITHID = 262,        /* tTHEENTITYWITHID  */
+    tTHEMENUITEMENTITY = 263,      /* tTHEMENUITEMENTITY  */
+    tTHEMENUITEMSENTITY = 264,     /* tTHEMENUITEMSENTITY  */
+    tFLOAT = 265,                  /* tFLOAT  */
+    tTHEFUNC = 266,                /* tTHEFUNC  */
+    tTHEFUNCINOF = 267,            /* tTHEFUNCINOF  */
+    tVARID = 268,                  /* tVARID  */
+    tSTRING = 269,                 /* tSTRING  */
+    tSYMBOL = 270,                 /* tSYMBOL  */
+    tENDCLAUSE = 271,              /* tENDCLAUSE  */
+    tPLAYACCEL = 272,              /* tPLAYACCEL  */
+    tTHEOBJECTPROP = 273,          /* tTHEOBJECTPROP  */
+    tCAST = 274,                   /* tCAST  */
+    tFIELD = 275,                  /* tFIELD  */
+    tSCRIPT = 276,                 /* tSCRIPT  */
+    tWINDOW = 277,                 /* tWINDOW  */
+    tDOWN = 278,                   /* tDOWN  */
+    tELSE = 279,                   /* tELSE  */
+    tELSIF = 280,                  /* tELSIF  */
+    tEXIT = 281,                   /* tEXIT  */
+    tGLOBAL = 282,                 /* tGLOBAL  */
+    tGO = 283,                     /* tGO  */
+    tGOLOOP = 284,                 /* tGOLOOP  */
+    tIF = 285,                     /* tIF  */
+    tIN = 286,                     /* tIN  */
+    tINTO = 287,                   /* tINTO  */
+    tMACRO = 288,                  /* tMACRO  */
+    tMOVIE = 289,                  /* tMOVIE  */
+    tNEXT = 290,                   /* tNEXT  */
+    tOF = 291,                     /* tOF  */
+    tPREVIOUS = 292,               /* tPREVIOUS  */
+    tPUT = 293,                    /* tPUT  */
+    tREPEAT = 294,                 /* tREPEAT  */
+    tSET = 295,                    /* tSET  */
+    tTHEN = 296,                   /* tTHEN  */
+    tTO = 297,                     /* tTO  */
+    tWHEN = 298,                   /* tWHEN  */
+    tWITH = 299,                   /* tWITH  */
+    tWHILE = 300,                  /* tWHILE  */
+    tFACTORY = 301,                /* tFACTORY  */
+    tOPEN = 302,                   /* tOPEN  */
+    tPLAY = 303,                   /* tPLAY  */
+    tINSTANCE = 304,               /* tINSTANCE  */
+    tGE = 305,                     /* tGE  */
+    tLE = 306,                     /* tLE  */
+    tEQ = 307,                     /* tEQ  */
+    tNEQ = 308,                    /* tNEQ  */
+    tAND = 309,                    /* tAND  */
+    tOR = 310,                     /* tOR  */
+    tNOT = 311,                    /* tNOT  */
+    tMOD = 312,                    /* tMOD  */
+    tAFTER = 313,                  /* tAFTER  */
+    tBEFORE = 314,                 /* tBEFORE  */
+    tCONCAT = 315,                 /* tCONCAT  */
+    tCONTAINS = 316,               /* tCONTAINS  */
+    tSTARTS = 317,                 /* tSTARTS  */
+    tCHAR = 318,                   /* tCHAR  */
+    tITEM = 319,                   /* tITEM  */
+    tLINE = 320,                   /* tLINE  */
+    tWORD = 321,                   /* tWORD  */
+    tSPRITE = 322,                 /* tSPRITE  */
+    tINTERSECTS = 323,             /* tINTERSECTS  */
+    tWITHIN = 324,                 /* tWITHIN  */
+    tTELL = 325,                   /* tTELL  */
+    tPROPERTY = 326,               /* tPROPERTY  */
+    tON = 327,                     /* tON  */
+    tMETHOD = 328,                 /* tMETHOD  */
+    tENDIF = 329,                  /* tENDIF  */
+    tENDREPEAT = 330,              /* tENDREPEAT  */
+    tENDTELL = 331,                /* tENDTELL  */
+    tASSERTERROR = 332             /* tASSERTERROR  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -149,22 +137,23 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 180 "engines/director/lingo/lingo-gr.y"
+#line 109 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
 	double f;
 	int e[2];	// Entity + field
-	int code;
-	int narg;	/* number of arguments */
-	Director::DatumArray *arr;
 
 	struct {
 		Common::String *obj;
 		Common::String *prop;
 	} objectprop;
 
-#line 168 "engines/director/lingo/lingo-gr.h"
+	Director::IDList *idlist;
+	Director::Node *node;
+	Director::NodeList *nodelist;
+
+#line 157 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index c7cc35725a..87a1199f35 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -60,6 +60,7 @@
 
 #include "director/director.h"
 #include "director/lingo/lingo.h"
+#include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-object.h"
@@ -94,87 +95,15 @@ static void yyerror(const char *s) {
 	warning("#      %s^ about here", arrow.c_str());
 }
 
-static void checkEnd(Common::String *token, const char *expect, bool required) {
+static void checkEnd(Common::String *token, Common::String *expect, bool required) {
 	if (required) {
-		if (token->compareToIgnoreCase(expect)) {
-			Common::String err = Common::String::format("end mismatch. Expected %s but got %s", expect, token->c_str());
+		if (token->compareToIgnoreCase(*expect)) {
+			Common::String err = Common::String::format("end mismatch. Expected %s but got %s", expect->c_str(), token->c_str());
 			yyerror(err.c_str());
 		}
 	}
 }
 
-static void inArgs() { g_lingo->_indefStore = g_lingo->_indef; g_lingo->_indef = kStateInArgs; }
-static void inDef()  { g_lingo->_indefStore = g_lingo->_indef; g_lingo->_indef = kStateInDef; }
-static void inNone() { g_lingo->_indefStore = g_lingo->_indef; g_lingo->_indef = kStateNone; }
-static void inLast() { g_lingo->_indef = g_lingo->_indefStore; }
-
-static void startDef() {
-	inArgs();
-	g_lingo->_methodVarsStash = g_lingo->_methodVars;
-	g_lingo->_methodVars = new VarTypeHash;
-
-	for (VarTypeHash::iterator i = g_lingo->_methodVarsStash->begin(); i != g_lingo->_methodVarsStash->end(); ++i) {
-		if (i->_value == kVarGlobal || i->_value == kVarProperty)
-			(*g_lingo->_methodVars)[i->_key] = i->_value;
-	}
-	if (g_lingo->_inFactory) {
-		for (DatumHash::iterator i = g_lingo->_assemblyContext->_properties.begin(); i != g_lingo->_assemblyContext->_properties.end(); ++i) {
-			(*g_lingo->_methodVars)[i->_key] = kVarInstance;
-		}
-	}
-}
-
-static void endDef() {
-	g_lingo->clearArgStack();
-	inNone();
-
-	delete g_lingo->_methodVars;
-	g_lingo->_methodVars = g_lingo->_methodVarsStash;
-	g_lingo->_methodVarsStash = nullptr;
-}
-
-static void startRepeat() {
-	g_lingo->_repeatStack.push_back(new RepeatBlock);
-}
-
-static void endRepeat(uint exitPos, uint nextPos) {
-	RepeatBlock *block = g_lingo->_repeatStack.back();
-	g_lingo->_repeatStack.pop_back();
-	for (uint i = 0; i < block->exits.size(); i++) {
-		uint32 pos = block->exits[i];
-		inst exit = 0;
-		WRITE_UINT32(&exit, exitPos - (pos - 1));
-		(*g_lingo->_currentAssembly)[pos] = exit;
-	}
-	for (uint i = 0; i < block->nexts.size(); i++) {
-		uint32 pos = block->nexts[i];
-		inst next = 0;
-		WRITE_UINT32(&next, nextPos - (pos - 1));
-		(*g_lingo->_currentAssembly)[pos] = next;
-	}
-	delete block;
-}
-
-static VarType globalCheck() {
-	// If in a definition, assume variables are local unless
-	// they were declared global with `global varname`
-	if (g_lingo->_indef == kStateInDef) {
-		return kVarLocal;
-	}
-	return kVarGlobal;
-}
-
-static void mVar(Common::String *s, VarType type) {
-	if (!g_lingo->_methodVars->contains(*s)) {
-		(*g_lingo->_methodVars)[*s] = type;
-		if (type == kVarProperty || type == kVarInstance) {
-			g_lingo->_assemblyContext->_properties[*s] = Datum();
-		} else if (type == kVarGlobal) {
-			g_lingo->varCreate(*s, true);
-		}
-	}
-}
-
 %}
 
 %union {
@@ -182,29 +111,27 @@ static void mVar(Common::String *s, VarType type) {
 	int i;
 	double f;
 	int e[2];	// Entity + field
-	int code;
-	int narg;	/* number of arguments */
-	Director::DatumArray *arr;
 
 	struct {
 		Common::String *obj;
 		Common::String *prop;
 	} objectprop;
-}
 
-%token UNARY
+	Director::IDList *idlist;
+	Director::Node *node;
+	Director::NodeList *nodelist;
+}
 
-// Datum types
-%token VOID VAR POINT RECT ARRAY OBJECT LEXERROR PARRAY
-%token CASTREF FIELDREF CHUNKREF
-%token<i> INT ARGC ARGCNORET
+%token tUNARY
 
-%token<e> THEENTITY THEENTITYWITHID THEMENUITEMENTITY THEMENUITEMSENTITY
-%token<f> FLOAT
-%token<s> THEFUNC THEFUNCINOF
-%token<s> VARID STRING SYMBOL
-%token<s> ENDCLAUSE tPLAYACCEL tMETHOD
-%token<objectprop> THEOBJECTPROP
+%token tLEXERROR
+%token<i> tINT
+%token<e> tTHEENTITY tTHEENTITYWITHID tTHEMENUITEMENTITY tTHEMENUITEMSENTITY
+%token<f> tFLOAT
+%token<s> tTHEFUNC tTHEFUNCINOF
+%token<s> tVARID tSTRING tSYMBOL
+%token<s> tENDCLAUSE tPLAYACCEL
+%token<objectprop> tTHEOBJECTPROP
 %token tCAST tFIELD tSCRIPT tWINDOW
 %token tDOWN tELSE tELSIF tEXIT tGLOBAL tGO tGOLOOP tIF tIN tINTO tMACRO
 %token tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
@@ -212,587 +139,76 @@ static void mVar(Common::String *s, VarType type) {
 %token tGE tLE tEQ tNEQ tAND tOR tNOT tMOD
 %token tAFTER tBEFORE tCONCAT tCONTAINS tSTARTS tCHAR tITEM tLINE tWORD
 %token tSPRITE tINTERSECTS tWITHIN tTELL tPROPERTY
-%token tON tENDIF tENDREPEAT tENDTELL
+%token tON tMETHOD tENDIF tENDREPEAT tENDTELL
 %token tASSERTERROR
 
-%type<code> asgn lbl expr if chunkexpr simpleexprnoparens
-%type<code> tellstart reference simpleexpr list valuelist
-%type<code> jump jumpifz varassign
-%type<narg> argdef arglist nonemptyarglist linearlist proplist
-%type<s> ID on
+// TOP-LEVEL STUFF
+%type<node> script scriptpart
+%type<nodelist> scriptpartlist
+
+// MACRO
+%type<node> macro
+
+// FACTORY
+%type<node> factory method
+%type<nodelist> methodlist nonemptymethodlist
+%type<node> methodlistline
+
+// HANDLER
+%type<node> handler
+
+// GENERIC VAR STUFF
+%type<s> ID
+%type<idlist> idlist nonemptyidlist
+
+// STATEMENT
+%type<node> stmt stmtoneliner proc definevars
+%type<nodelist> stmtlist nonemptystmtlist
+%type<node> stmtlistline
+
+// EXPRESSION
+%type<node> simpleexprnoparens simpleexpr expr
+%type<nodelist> exprlist nonemptyexprlist
 
 %left tAND tOR
 %left '<' tLE '>' tGE tEQ tNEQ tCONTAINS tSTARTS
 %left '&' tCONCAT
 %left '+' '-'
 %left '*' '/' '%' tMOD
-%right UNARY tCAST tFIELD tSCRIPT tWINDOW
-%nonassoc VARID
+%right tUNARY
+// %right tCAST tFIELD tSCRIPT tWINDOW
+// %nonassoc tVARID
 
 %destructor { delete $$; } <s>
 
 %%
 
-program: programline
-	| program '\n' programline
-
-programline: /* empty */
-	| defn
-	| stmt
+// TOP-LEVEL STUFF
 
-ID: VARID
-	| tCAST			{ $$ = new Common::String("cast"); }
-	| tFIELD		{ $$ = new Common::String("field"); }
-	| tSCRIPT		{ $$ = new Common::String("script"); }
-	| tWINDOW		{ $$ = new Common::String("window"); }
+script: scriptpartlist					{ g_lingo->_assemblyAST = new ScriptNode($scriptpartlist); } ;
 
-asgn: tPUT expr tINTO ID 			{
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString($ID->c_str());
-		mVar($ID, globalCheck());
-		g_lingo->code1(LC::c_assign);
-		$$ = $expr;
-		delete $ID; }
-	| tPUT expr tINTO chunkexpr 	{
-		g_lingo->code1(LC::c_assign);
-		$$ = $expr; }
-	// {put the number of menuItems of} menu into <expr>
-	| tPUT THEMENUITEMSENTITY ID simpleexpr tINTO expr	{
-		if (!$ID->equalsIgnoreCase("menu")) {
-			warning("LEXER: keyword 'menu' expected");
-			YYERROR;
+scriptpartlist: scriptpart[item]				{
+		NodeList *list = new NodeList;
+		if ($item) {
+			list->push_back($item);
 		}
-
-		g_lingo->code1(LC::c_themenuentitypush);
-		g_lingo->codeInt($THEMENUITEMSENTITY[0]);
-		g_lingo->codeInt($THEMENUITEMSENTITY[1]);
-		g_lingo->code1(LC::c_assign);
-		$$ = $expr; }
-	| tPUT expr tAFTER ID 			{
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString($ID->c_str());
-		mVar($ID, globalCheck());
-		g_lingo->code1(LC::c_putafter);
-		$$ = $expr;
-		delete $ID; }		// D3
-	| tPUT expr tAFTER chunkexpr	{
-		g_lingo->code1(LC::c_putafter);
-		$$ = $expr; }
-	| tPUT expr tBEFORE ID 			{
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString($ID->c_str());
-		mVar($ID, globalCheck());
-		g_lingo->code1(LC::c_putbefore);
-		$$ = $expr;
-		delete $ID; }		// D3
-	| tPUT expr tBEFORE chunkexpr 	{
-		g_lingo->code1(LC::c_putbefore);
-		$$ = $expr; }
-	| tSET ID tEQ expr				{
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString($ID->c_str());
-		mVar($ID, globalCheck());
-		g_lingo->code1(LC::c_assign);
-		$$ = $expr;
-		delete $ID; }
-	| tSET THEENTITY tEQ expr		{
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(0); // Put dummy id
-		g_lingo->code1(LC::c_theentityassign);
-		g_lingo->codeInt($THEENTITY[0]);
-		g_lingo->codeInt($THEENTITY[1]);
-		$$ = $expr; }
-	| tSET ID tTO expr				{
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString($ID->c_str());
-		mVar($ID, globalCheck());
-		g_lingo->code1(LC::c_assign);
-		$$ = $expr;
-		delete $ID; }
-	| tSET THEENTITY tTO expr		{
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(0); // Put dummy id
-		g_lingo->code1(LC::c_theentityassign);
-		g_lingo->codeInt($THEENTITY[0]);
-		g_lingo->codeInt($THEENTITY[1]);
-		$$ = $expr; }
-	| tSET THEENTITYWITHID expr[entityId] tTO expr[value]	{
-		g_lingo->code1(LC::c_swap);
-		g_lingo->code1(LC::c_theentityassign);
-		g_lingo->codeInt($THEENTITYWITHID[0]);
-		g_lingo->codeInt($THEENTITYWITHID[1]);
-		$$ = $value; }
-	| tSET THEENTITYWITHID expr[entityId] tEQ expr[value]	{
-		g_lingo->code1(LC::c_swap);
-		g_lingo->code1(LC::c_theentityassign);
-		g_lingo->codeInt($THEENTITYWITHID[0]);
-		g_lingo->codeInt($THEENTITYWITHID[1]);
-		$$ = $value; }
-	// the <field> of menuItem <expr> of menu <expr>
-	| tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tTO expr	{
-		if (!$ID->equalsIgnoreCase("menu")) {
-			warning("LEXER: keyword 'menu' expected");
-			YYERROR;
+		$$ = list; }
+	| scriptpartlist[prev] scriptpart[item]		{
+		if ($item) {
+			$prev->push_back($item);
 		}
+		$$ = $prev; }
+	;
 
-		warning("STUB: menuItem entity");
-		g_lingo->code1(LC::c_themenuitementityassign);
-		g_lingo->codeInt($THEMENUITEMENTITY[0]);
-		g_lingo->codeInt($THEMENUITEMENTITY[1]);
-		$$ = $expr; }
-	| tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tEQ expr	{
-		if (!$ID->equalsIgnoreCase("menu")) {
-			warning("LEXER: keyword 'menu' expected");
-			YYERROR;
-		}
+scriptpart:	'\n'						{ $$ = nullptr; }
+	| macro
+	| factory
+	| handler
+	| stmt '\n'
+	;
 
-		warning("STUB: menuItem entity");
-		g_lingo->code1(LC::c_themenuitementityassign);
-		g_lingo->codeInt($THEMENUITEMENTITY[0]);
-		g_lingo->codeInt($THEMENUITEMENTITY[1]);
-		$$ = $expr; }
-	| tSET THEOBJECTPROP tTO expr		{
-		g_lingo->code1(LC::c_objectpropassign);
-		g_lingo->codeString($THEOBJECTPROP.obj->c_str());
-		g_lingo->codeString($THEOBJECTPROP.prop->c_str());
-		delete $THEOBJECTPROP.obj;
-		delete $THEOBJECTPROP.prop;
-		$$ = $expr; }
-	| tSET THEOBJECTPROP tEQ expr		{
-		g_lingo->code1(LC::c_objectpropassign);
-		g_lingo->codeString($THEOBJECTPROP.obj->c_str());
-		g_lingo->codeString($THEOBJECTPROP.prop->c_str());
-		delete $THEOBJECTPROP.obj;
-		delete $THEOBJECTPROP.prop;
-		$$ = $expr; }
-
-stmtoneliner: asgn
-	| proc
-
-stmt: stmtoneliner
-	| ifstmt
-	// repeat while (expression = TRUE)
-	//   statements
-	// end repeat
-	//
-	| tREPEAT tWHILE lbl expr jumpifz[body] startrepeat stmtlist jump[end2] tENDREPEAT	{
-		inst start = 0, end = 0;
-		WRITE_UINT32(&start, $lbl - $end2 + 1);
-		WRITE_UINT32(&end, $end2 - $body + 2);
-		(*g_lingo->_currentAssembly)[$body] = end;		/* end, if cond fails */
-		(*g_lingo->_currentAssembly)[$end2] = start;	/* looping back */
-		endRepeat($end2 + 1, $lbl);	}	/* code any exit/next repeats */
-
-	// repeat with index = start to end
-	//   statements
-	// end repeat
-	//
-	| tREPEAT tWITH ID tEQ expr[init]
-				{ g_lingo->code1(LC::c_varpush);
-				  g_lingo->codeString($ID->c_str());
-				  mVar($ID, globalCheck()); }
-			varassign
-				{ g_lingo->code1(LC::c_eval);
-				  g_lingo->codeString($ID->c_str()); }
-			tTO expr[finish]
-				{ g_lingo->code1(LC::c_le); } jumpifz startrepeat stmtlist tENDREPEAT {
-
-		int nextPos = g_lingo->_currentAssembly->size();
-		g_lingo->code1(LC::c_eval);
-		g_lingo->codeString($ID->c_str());
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_add);
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString($ID->c_str());
-		g_lingo->code1(LC::c_assign);
-		g_lingo->code2(LC::c_jump, 0);
-		int pos = g_lingo->_currentAssembly->size() - 1;
-
-		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, $varassign - pos + 2);
-		WRITE_UINT32(&end, pos - $jumpifz + 2);
-		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[$jumpifz] = end;	/* end, if cond fails */
-		endRepeat(pos + 1, nextPos); }	/* code any exit/next repeats */
-
-
-	// repeat with index = high down to low
-	//   statements
-	// end repeat
-	//
-	| tREPEAT tWITH ID tEQ expr[init]
-				{ g_lingo->code1(LC::c_varpush);
-				  g_lingo->codeString($ID->c_str());
-				  mVar($ID, globalCheck()); }
-			varassign
-				{ g_lingo->code1(LC::c_eval);
-				  g_lingo->codeString($ID->c_str()); }
-			tDOWN tTO expr[finish]
-				{ g_lingo->code1(LC::c_ge); }
-			jumpifz startrepeat stmtlist tENDREPEAT {
-
-		int nextPos = g_lingo->_currentAssembly->size();
-		g_lingo->code1(LC::c_eval);
-		g_lingo->codeString($ID->c_str());
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_sub);
-		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString($ID->c_str());
-		g_lingo->code1(LC::c_assign);
-		g_lingo->code2(LC::c_jump, 0);
-		int pos = g_lingo->_currentAssembly->size() - 1;
-
-		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, $varassign - pos + 2);
-		WRITE_UINT32(&end, pos - $jumpifz + 2);
-		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[$jumpifz] = end;	/* end, if cond fails */
-		endRepeat(pos + 1, nextPos); }	/* code any exit/next repeats */
-
-	// repeat with index in list
-	//   statements
-	// end repeat
-	//
-	| tREPEAT tWITH ID tIN expr
-				{ g_lingo->code1(LC::c_stackpeek);
-				  g_lingo->codeInt(0);
-				  Common::String count("count");
-				  g_lingo->codeFunc(&count, 1);
-				  g_lingo->code1(LC::c_intpush);	// start counter
-				  g_lingo->codeInt(1); }
-			lbl
-				{ g_lingo->code1(LC::c_stackpeek);	// get counter
-				  g_lingo->codeInt(0);
-				  g_lingo->code1(LC::c_stackpeek);	// get array size
-				  g_lingo->codeInt(2);
-				  g_lingo->code1(LC::c_le); }
-			jumpifz
-				{ g_lingo->code1(LC::c_stackpeek);	// get list
-				  g_lingo->codeInt(2);
-				  g_lingo->code1(LC::c_stackpeek);	// get counter
-				  g_lingo->codeInt(1);
-				  Common::String getAt("getAt");
-				  g_lingo->codeFunc(&getAt, 2);
-				  g_lingo->code1(LC::c_varpush);
-				  g_lingo->codeString($ID->c_str());
-				  mVar($ID, globalCheck());
-				  g_lingo->code1(LC::c_assign); }
-			startrepeat stmtlist tENDREPEAT {
-
-		int nextPos = g_lingo->_currentAssembly->size();
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_add);			// Increment counter
-
-		int jump = g_lingo->code2(LC::c_jump, 0);
-
-		int end2 = g_lingo->code1(LC::c_stackdrop);	// remove list, size, counter
-		g_lingo->codeInt(3);
-
-		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, $lbl - jump);
-		WRITE_UINT32(&end, end2 - $jumpifz + 1);
-
-		(*g_lingo->_currentAssembly)[jump + 1] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[$jumpifz] = end;		/* end, if cond fails */
-		endRepeat(end2, nextPos); }	/* code any exit/next repeats */
-
-	| tNEXT tREPEAT 		{
-		if (g_lingo->_repeatStack.size()) {
-			g_lingo->code2(LC::c_jump, 0);
-			int pos = g_lingo->_currentAssembly->size() - 1;
-			g_lingo->_repeatStack.back()->nexts.push_back(pos);
-		} else {
-			warning("# LINGO: next repeat not inside repeat block");
-		} }
-	| tWHEN ID tTHEN expr	{
-		g_lingo->code1(LC::c_whencode);
-		g_lingo->codeString($ID->c_str()); }
-	| tTELL expr '\n' tellstart stmtlist lbl tENDTELL { g_lingo->code1(LC::c_telldone); }
-	| tTELL expr tTO tellstart stmtoneliner lbl { g_lingo->code1(LC::c_telldone); }
-	| tASSERTERROR asserterrorstart stmtoneliner { g_lingo->code1(LC::c_asserterrordone); }
-	| error	'\n'			{ yyerrok; }
-
-startrepeat:	/* nothing */	{ startRepeat(); }
-
-tellstart:	  /* empty */	{ g_lingo->code1(LC::c_tell); }
-
-asserterrorstart:	/* empty */	{ g_lingo->code1(LC::c_asserterror); }
-
-ifstmt: if expr jumpifz[then] tTHEN stmtlist jump[else1] elseifstmtlist lbl[end3] tENDIF {
-		inst else1 = 0, end3 = 0;
-		WRITE_UINT32(&else1, $else1 + 1 - $then + 1);
-		WRITE_UINT32(&end3, $end3 - $else1 + 1);
-		(*g_lingo->_currentAssembly)[$then] = else1;		/* elsepart */
-		(*g_lingo->_currentAssembly)[$else1] = end3;		/* end, if cond fails */
-		g_lingo->processIf($else1, $end3); }
-	| if expr jumpifz[then] tTHEN stmtlist jump[else1] elseifstmtlist tELSE stmtlist lbl[end3] tENDIF {
-		inst else1 = 0, end = 0;
-		WRITE_UINT32(&else1, $else1 + 1 - $then + 1);
-		WRITE_UINT32(&end, $end3 - $else1 + 1);
-		(*g_lingo->_currentAssembly)[$then] = else1;		/* elsepart */
-		(*g_lingo->_currentAssembly)[$else1] = end;		/* end, if cond fails */
-		g_lingo->processIf($else1, $end3); }
-
-elseifstmtlist:	/* nothing */
-	| elseifstmtlist elseifstmt
-
-elseifstmt: tELSIF expr jumpifz[then] tTHEN stmtlist jump[end3] {
-		inst else1 = 0;
-		WRITE_UINT32(&else1, $end3 + 1 - $then + 1);
-		(*g_lingo->_currentAssembly)[$then] = else1;	/* end, if cond fails */
-		g_lingo->codeLabel($end3); }
-
-jumpifz:	/* nothing */	{
-		g_lingo->code2(LC::c_jumpifz, 0);
-		$$ = g_lingo->_currentAssembly->size() - 1; }
-
-jump:		/* nothing */	{
-		g_lingo->code2(LC::c_jump, 0);
-		$$ = g_lingo->_currentAssembly->size() - 1; }
-
-varassign:		/* nothing */	{
-		g_lingo->code1(LC::c_assign);
-		$$ = g_lingo->_currentAssembly->size() - 1; }
-
-if:	  tIF					{
-		g_lingo->codeLabel(0); } // Mark beginning of the if() statement
-
-lbl:	  /* nothing */		{ $$ = g_lingo->_currentAssembly->size(); }
-
-stmtlist: stmtlistline
-	| stmtlistline '\n' stmtlist
-
-stmtlistline: /* empty */
-	| stmt
-
-simpleexprnoparens: INT		{
-		$$ = g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt($INT); }
-	| FLOAT		{
-		$$ = g_lingo->code1(LC::c_floatpush);
-		g_lingo->codeFloat($FLOAT); }
-	| SYMBOL	{											// D3
-		$$ = g_lingo->code1(LC::c_symbolpush);
-		g_lingo->codeString($SYMBOL->c_str());
-		delete $SYMBOL; }
-	| STRING		{
-		$$ = g_lingo->code1(LC::c_stringpush);
-		g_lingo->codeString($STRING->c_str());
-		delete $STRING; }
-	| '+' simpleexpr[arg]  %prec UNARY	{ $$ = $arg; }
-	| '-' simpleexpr[arg]  %prec UNARY	{ $$ = $arg; g_lingo->code1(LC::c_negate); }
-	| tNOT simpleexpr  %prec UNARY		{ g_lingo->code1(LC::c_not); }
-	| reference
-	| THEENTITY					{
-		$$ = g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(0); // Put dummy id
-		g_lingo->code1(LC::c_theentitypush);
-		inst e = 0, f = 0;
-		WRITE_UINT32(&e, $THEENTITY[0]);
-		WRITE_UINT32(&f, $THEENTITY[1]);
-		g_lingo->code2(e, f); }
-	| THEENTITYWITHID simpleexpr {
-		$$ = g_lingo->code1(LC::c_theentitypush);
-		inst e = 0, f = 0;
-		WRITE_UINT32(&e, $THEENTITYWITHID[0]);
-		WRITE_UINT32(&f, $THEENTITYWITHID[1]);
-		g_lingo->code2(e, f); }
-	| THEFUNCINOF simpleexpr	{
-		$$ = g_lingo->codeFunc($THEFUNCINOF, 1);
-		delete $THEFUNCINOF; }
-	| THEFUNC tOF simpleexpr	{
-		$$ = g_lingo->codeFunc($THEFUNC, 1);
-		delete $THEFUNC; }
-	| THEOBJECTPROP				{
-		g_lingo->code1(LC::c_objectproppush);
-		g_lingo->codeString($THEOBJECTPROP.obj->c_str());
-		g_lingo->codeString($THEOBJECTPROP.prop->c_str());
-		delete $THEOBJECTPROP.obj;
-		delete $THEOBJECTPROP.prop; }
-    | tSPRITE expr tINTERSECTS simpleexpr	{ g_lingo->code1(LC::c_intersects); }
-    | tSPRITE expr tWITHIN simpleexpr		{ g_lingo->code1(LC::c_within); }
-	| list
-	| ID[func] '(' ID[method] ')' {
-			g_lingo->code1(LC::c_varpush);
-			g_lingo->codeString($method->c_str());
-			g_lingo->codeFunc($func, 1);
-			delete $func;
-			delete $method; }
-	| ID[func] '(' ID[method] ',' { g_lingo->code1(LC::c_varpush); g_lingo->codeString($method->c_str()); }
-				nonemptyarglist ')' {
-			g_lingo->codeFunc($func, $nonemptyarglist + 1);
-			delete $func;
-			delete $method; }
-	| ID '(' arglist ')'		{
-		$$ = g_lingo->codeFunc($ID, $arglist);
-		delete $ID; }
-	| ID						{
-		if (g_lingo->_builtinConsts.contains(*$ID)) {
-			$$ = g_lingo->code1(LC::c_constpush);
-		} else {
-			$$ = g_lingo->code1(LC::c_eval);
-		}
-		g_lingo->codeString($ID->c_str());
-		delete $ID; }
+// MACRO
 
-simpleexpr: simpleexprnoparens
-	| '(' expr[arg] ')'			{ $$ = $arg; }
-
-expr: simpleexpr { $$ = $simpleexpr; }
-	| expr '+' expr				{ g_lingo->code1(LC::c_add); }
-	| expr '-' expr				{ g_lingo->code1(LC::c_sub); }
-	| expr '*' expr				{ g_lingo->code1(LC::c_mul); }
-	| expr '/' expr				{ g_lingo->code1(LC::c_div); }
-	| expr tMOD expr			{ g_lingo->code1(LC::c_mod); }
-	| expr '>' expr				{ g_lingo->code1(LC::c_gt); }
-	| expr '<' expr				{ g_lingo->code1(LC::c_lt); }
-	| expr tEQ expr				{ g_lingo->code1(LC::c_eq); }
-	| expr tNEQ expr			{ g_lingo->code1(LC::c_neq); }
-	| expr tGE expr				{ g_lingo->code1(LC::c_ge); }
-	| expr tLE expr				{ g_lingo->code1(LC::c_le); }
-	| expr tAND expr			{ g_lingo->code1(LC::c_and); }
-	| expr tOR expr				{ g_lingo->code1(LC::c_or); }
-	| expr '&' expr				{ g_lingo->code1(LC::c_ampersand); }
-	| expr tCONCAT expr			{ g_lingo->code1(LC::c_concat); }
-	| expr tCONTAINS expr		{ g_lingo->code1(LC::c_contains); }
-	| expr tSTARTS expr			{ g_lingo->code1(LC::c_starts); }
-
-chunkexpr:  tFIELD simpleexprnoparens	{
-		Common::String field("field");
-		g_lingo->codeFunc(&field, 1); }
-	| tCAST simpleexprnoparens		{
-		Common::String cast("cast");
-		g_lingo->codeFunc(&cast, 1); }
-	| tCHAR expr tOF simpleexpr				{ g_lingo->code1(LC::c_charOf); }
-	| tCHAR expr tTO expr tOF simpleexpr	{ g_lingo->code1(LC::c_charToOf); }
-	| tITEM expr tOF simpleexpr				{ g_lingo->code1(LC::c_itemOf); }
-	| tITEM expr tTO expr tOF simpleexpr	{ g_lingo->code1(LC::c_itemToOf); }
-	| tLINE expr tOF simpleexpr				{ g_lingo->code1(LC::c_lineOf); }
-	| tLINE expr tTO expr tOF simpleexpr	{ g_lingo->code1(LC::c_lineToOf); }
-	| tWORD expr tOF simpleexpr				{ g_lingo->code1(LC::c_wordOf); }
-	| tWORD expr tTO expr tOF simpleexpr	{ g_lingo->code1(LC::c_wordToOf); }
-
-reference: 	chunkexpr
-	| tSCRIPT simpleexprnoparens	{
-		Common::String script("script");
-		g_lingo->codeFunc(&script, 1); }
-	| tWINDOW simpleexprnoparens	{
-		Common::String window("window");
-		g_lingo->codeFunc(&window, 1); }
-
-proc: tPUT expr					{
-		Common::String put("put");
-		g_lingo->codeCmd(&put, 1); }
-	| gotofunc
-	| playfunc
-	| tEXIT tREPEAT				{
-		if (g_lingo->_repeatStack.size()) {
-			g_lingo->code2(LC::c_jump, 0);
-			int pos = g_lingo->_currentAssembly->size() - 1;
-			g_lingo->_repeatStack.back()->exits.push_back(pos);
-		} else {
-			warning("# LINGO: exit repeat not inside repeat block");
-		} }
-	| tEXIT						{ g_lingo->code1(LC::c_procret); }
-	| tGLOBAL					{ inArgs(); } globallist { inLast(); }
-	| tPROPERTY					{ inArgs(); } propertylist { inLast(); }
-	| tINSTANCE					{ inArgs(); } instancelist { inLast(); }
-	| tOPEN expr tWITH expr		{
-		Common::String open("open");
-		g_lingo->codeCmd(&open, 2); }
-	| tOPEN expr 				{
-		Common::String open("open");
-		g_lingo->codeCmd(&open, 1); }
-	| ID[func] '(' ID[method] ')' {
-			g_lingo->code1(LC::c_varpush);
-			g_lingo->codeString($method->c_str());
-			g_lingo->codeCmd($func, 1);
-			delete $func;
-			delete $method; }
-	| ID[func] '(' ID[method] ',' { g_lingo->code1(LC::c_varpush); g_lingo->codeString($method->c_str()); }
-				nonemptyarglist ')' {
-			g_lingo->codeCmd($func, $nonemptyarglist + 1);
-			delete $func;
-			delete $method; }
-	| ID '(' arglist ')'		{
-		g_lingo->codeCmd($ID, $arglist);
-		delete $ID; }
-	| ID arglist				{
-		g_lingo->codeCmd($ID, $arglist);
-		delete $ID; }
-
-globallist:		/* nothing */
-	| ID						{
-		mVar($ID, kVarGlobal);
-		delete $ID; }
-	| ID ',' globallist			{
-		mVar($ID, kVarGlobal);
-		delete $ID; }
-
-propertylist:	/* nothing */
-	| ID						{
-		mVar($ID, kVarProperty);
-		delete $ID; }
-	| ID ',' propertylist		{
-		mVar($ID, kVarProperty);
-		delete $ID; }
-
-instancelist:	/* nothing */
-	| ID						{
-		mVar($ID, kVarInstance);
-		delete $ID; }
-	| ID ',' instancelist		{
-		mVar($ID, kVarInstance);
-		delete $ID; }
-
-// go {to} {frame} whichFrame {of movie whichMovie}
-// go {to} {frame "Open23" of} movie whichMovie
-// go loop
-// go next
-// go previous
-// go to {frame} whichFrame {of movie whichMovie}
-// go to {frame whichFrame of} movie whichMovie
-gotofunc: tGOLOOP				{ g_lingo->code1(LC::c_gotoloop); }
-	| tGO tNEXT					{ g_lingo->code1(LC::c_gotonext); }
-	| tGO tPREVIOUS				{ g_lingo->code1(LC::c_gotoprevious); }
-	| tGO expr 					{
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_goto); }
-	| tGO expr gotomovie		{
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(3);
-		g_lingo->code1(LC::c_goto); }
-	| tGO gotomovie				{
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(2);
-		g_lingo->code1(LC::c_goto); }
-
-gotomovie: tOF tMOVIE expr
-	| tMOVIE expr
-
-playfunc: tPLAY expr 			{ // "play #done" is also caught by this
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(1);
-		g_lingo->code1(LC::c_play); }
-	| tPLAY expr gotomovie		{
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(3);
-		g_lingo->code1(LC::c_play); }
-	| tPLAY gotomovie			{
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(2);
-		g_lingo->code1(LC::c_play); }
-	| tPLAYACCEL { g_lingo->codeSetImmediate(true); } arglist {
-		g_lingo->codeSetImmediate(false);
-		g_lingo->codeCmd($tPLAYACCEL, $arglist);
-		delete $tPLAYACCEL; }
-
-// macro
-//
 // Special Note  The macro keyword is retained in Director 3.0 to maintain compatibility
 // with scripts developed under Version 2.0. When writing new scripts, or editing old
 // scripts, you should use handlers instead of macros. (Handlers are defined with the on keyword.)
@@ -816,85 +232,206 @@ playfunc: tPLAY expr 			{ // "play #done" is also caught by this
 //
 // See also:
 //   on keyword
-defn: tMACRO { startDef(); } ID
-			lbl argdef '\n' argstore stmtlist 		{
-		g_lingo->code1(LC::c_procret);
-		g_lingo->codeDefine(*$ID, $lbl, $argdef);
-		endDef();
-		delete $ID; }
-	| tFACTORY ID	{ g_lingo->codeFactory(*$ID); delete $ID; }
-	| tMETHOD {
-			startDef();
-			Common::String me("me");
-			g_lingo->codeArg(&me);
-			mVar(&me, kVarArgument);
-		} lbl argdef '\n' argstore stmtlist {
-			g_lingo->code1(LC::c_procret);
-			g_lingo->codeDefine(*$tMETHOD, $lbl, $argdef + 1);
-			endDef();
-			delete $tMETHOD; }
-	| on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef {	// D3
-		g_lingo->code1(LC::c_procret);
-		g_lingo->codeDefine(*$on, $lbl, $argdef);
-		endDef();
-
-		checkEnd($ENDCLAUSE, $on->c_str(), false);
-		delete $on;
-		delete $ENDCLAUSE; }
-	| on lbl argdef '\n' argstore stmtlist {	// D4. No 'end' clause
-		g_lingo->code1(LC::c_procret);
-		g_lingo->codeDefine(*$on, $lbl, $argdef);
-		endDef();
-		delete $on; }
-
-on:  tON { startDef(); } ID 	{ $$ = $ID; }
-
-argname: ID						{ g_lingo->codeArg($ID); mVar($ID, kVarArgument); delete $ID; }
-
-argdef:  /* nothing */ 			{ $$ = 0; }
-	| argname					{ $$ = 1; }
-	| argname ',' argdef		{ $$ = $3 + 1; }
 
-endargdef:	/* nothing */
-	| ID						{ delete $ID; }
-	| endargdef ',' ID			{ delete $ID; }
+macro: tMACRO ID idlist '\n' stmtlist	{ $$ = new HandlerNode($ID, $idlist, $stmtlist); } ;
 
-argstore:	  /* nothing */		{ inDef(); }
+// FACTORY
 
-arglist:  /* nothing */ 		{ $$ = 0; }
-	| expr						{ $$ = 1; }
-	| expr ',' arglist			{ $$ = $3 + 1; }
+factory: tFACTORY ID '\n' methodlist	{ $$ = new FactoryNode($ID, $methodlist); } ;
 
-nonemptyarglist:  expr			{ $$ = 1; }
-	| expr ','					{ $$ = 1; }
-	| expr ',' nonemptyarglist	{ $$ = $3 + 1; }
+method: tMETHOD ID idlist '\n' stmtlist	{ $$ = new HandlerNode($ID, $idlist, $stmtlist); } ;
 
-list: '[' valuelist ']'			{ $$ = $valuelist; }
+methodlist: /* empty */				{ $$ = new NodeList; }
+	| nonemptymethodlist
+	;
 
-valuelist:	/* nothing */		{ $$ = g_lingo->code2(LC::c_arraypush, 0); }
-	| ':'						{ $$ = g_lingo->code2(LC::c_proparraypush, 0); }
-	| proplist	 { $$ = g_lingo->code1(LC::c_proparraypush); $$ = g_lingo->codeInt($proplist); }
-	| linearlist { $$ = g_lingo->code1(LC::c_arraypush); $$ = g_lingo->codeInt($linearlist); }
+nonemptymethodlist: methodlistline[item]			{
+		NodeList *list = new NodeList;
+		if ($item) {
+			list->push_back($item);
+		}
+		$$ = list; }
+	| methodlist[prev] '\n' methodlistline[item]	{
+		if ($item) {
+			$prev->push_back($item);
+		}
+		$$ = $prev; }
+	;
+
+methodlistline: '\n'				{ $$ = nullptr; }
+	| method
+	;
+
+// HANDLER
+
+handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n' {	// D3
+		$$ = new HandlerNode($ID, $idlist, $stmtlist);
+		checkEnd($tENDCLAUSE, $ID, false);
+		delete $tENDCLAUSE; }
+	| tON ID idlist '\n' stmtlist {	// D4. No 'end' clause
+		$$ = new HandlerNode($ID, $idlist, $stmtlist); }
+	;
 
-linearlist: expr				{ $$ = 1; }
-	| linearlist ',' expr		{ $$ = $1 + 1; }
+endargdef:	/* nothing */
+	| ID						{ delete $ID; }
+	| endargdef ',' ID			{ delete $ID; }
+	;
 
-proplist:  proppair				{ $$ = 1; }
-	| proplist ',' proppair		{ $$ = $1 + 1; }
+// GENERIC VAR STUFF
 
-proppair: SYMBOL ':' expr {
-		g_lingo->code1(LC::c_symbolpush);
-		g_lingo->codeString($SYMBOL->c_str());
-		delete $SYMBOL; }
-	| STRING ':' expr 	{
-		g_lingo->code1(LC::c_stringpush);
-		g_lingo->codeString($STRING->c_str());
-		delete $STRING; }
-	| ID ':' expr 	{
-		g_lingo->code1(LC::c_stringpush);
-		g_lingo->codeString($ID->c_str());
-		delete $ID; }
+ID: tVARID
+	| tAFTER		{ $$ = new Common::String("after"); }
+	| tAND			{ $$ = new Common::String("and"); }
+	| tBEFORE		{ $$ = new Common::String("before"); }
+	| tCAST			{ $$ = new Common::String("cast"); }
+	| tCHAR			{ $$ = new Common::String("char"); }
+	| tDOWN			{ $$ = new Common::String("down"); }
+	// tENDCLAUSE
+	// tELSE
+	| tEXIT			{ $$ = new Common::String("exit"); }
+	// tFACTORY
+	| tFIELD		{ $$ = new Common::String("field"); }
+	// | tGLOBAL		{ $$ = new Common::String("global"); }
+	// tIF
+	| tIN			{ $$ = new Common::String("in"); }
+	// | tINSTANCE		{ $$ = new Common::String("instance"); }
+	| tINTERSECTS	{ $$ = new Common::String("intersects"); }
+	| tINTO			{ $$ = new Common::String("into"); }
+	| tITEM			{ $$ = new Common::String("item"); }
+	| tLINE			{ $$ = new Common::String("line"); }
+	// | tMACRO		{ $$ = new Common::String("macro"); }
+	// | tMETHOD		{ $$ = new Common::String("method"); }
+	| tMOD			{ $$ = new Common::String("mod"); }
+	| tMOVIE		{ $$ = new Common::String("movie"); }
+	| tNEXT			{ $$ = new Common::String("next"); }
+	| tNOT			{ $$ = new Common::String("not"); }
+	| tOF			{ $$ = new Common::String("of"); }
+	// | tON			{ $$ = new Common::String("on"); }
+	| tOPEN			{ $$ = new Common::String("open"); }
+	| tOR			{ $$ = new Common::String("or"); }
+	| tPLAY			{ $$ = new Common::String("play"); }		// FIXME: lexer includes "play frame"
+	| tPLAYACCEL	{ $$ = new Common::String("playAccel"); }
+	| tPREVIOUS		{ $$ = new Common::String("previous"); }
+	// | tPROPERTY		{ $$ = new Common::String("property"); }
+	| tPUT			{ $$ = new Common::String("put"); }
+	| tREPEAT		{ $$ = new Common::String("repeat"); }
+	| tSCRIPT		{ $$ = new Common::String("script"); }
+	| tSET			{ $$ = new Common::String("set"); }
+	| tSTARTS		{ $$ = new Common::String("starts"); }
+	| tTELL			{ $$ = new Common::String("tell"); }
+	// tTHEN
+	| tTO			{ $$ = new Common::String("to"); }
+	| tASSERTERROR	{ $$ = new Common::String("scummvmAssertError"); }
+	| tSPRITE		{ $$ = new Common::String("sprite"); }
+	| tWHEN			{ $$ = new Common::String("when"); }
+	| tWHILE		{ $$ = new Common::String("while"); }
+	| tWINDOW		{ $$ = new Common::String("window"); }
+	| tWITH			{ $$ = new Common::String("with"); }
+	| tWITHIN		{ $$ = new Common::String("within"); }
+	| tWORD			{ $$ = new Common::String("word"); }
+	;
+
+idlist: /* empty */					{ $$ = new IDList; }
+	| nonemptyidlist
+	;
+
+nonemptyidlist: ID[item]					{
+		Common::Array<Common::String *> *list = new IDList;
+		list->push_back($item);
+		$$ = list; }
+	| nonemptyidlist[prev] ',' ID[item]		{
+		$prev->push_back($item);
+		$$ = $prev; }
+	;
+
+// STATEMENT
+
+stmt: stmtoneliner ;
+
+stmtoneliner: proc
+	| definevars
+	;
+
+proc: ID '(' exprlist[args] ')'		{ $$ = new CmdNode($ID, $args); }
+	| ID exprlist[args]				{ $$ = new CmdNode($ID, $args); }
+	;
+
+definevars: tGLOBAL idlist			{ $$ = new GlobalNode($idlist); }
+	| tPROPERTY idlist				{ $$ = new PropertyNode($idlist); }
+	| tINSTANCE idlist				{ $$ = new InstanceNode($idlist); }
+	;
+
+stmtlist: /* empty */				{ $$ = new NodeList; }
+	| nonemptystmtlist
+	;
+
+nonemptystmtlist:
+	stmtlistline[item]					{
+		NodeList *list = new NodeList;
+		if ($item) {
+			list->push_back($item);
+		}
+		$$ = list; }
+	| stmtlist[prev] stmtlistline[item]	{
+		if ($item) {
+			$prev->push_back($item);
+		}
+		$$ = $prev; }
+	;
+
+stmtlistline: '\n'					{ $$ = nullptr; }
+	| stmt '\n'
+	;
+
+// EXPRESSION
+
+simpleexprnoparens: tINT			{ $$ = new IntNode($tINT); }
+	| tFLOAT						{ $$ = new FloatNode($tFLOAT); }
+	| tSYMBOL						{ $$ = new SymbolNode($tSYMBOL); }	// D3
+	| tSTRING						{ $$ = new StringNode($tSTRING); }
+	| '+' simpleexpr[arg]  %prec tUNARY		{ $$ = $arg; }
+	| '-' simpleexpr[arg]  %prec tUNARY		{ $$ = new UnaryOpNode(LC::c_negate, $arg); }
+	| tNOT simpleexpr[arg]  %prec tUNARY	{ $$ = new UnaryOpNode(LC::c_not, $arg); }
+	| ID '(' exprlist[args] ')'		{ $$ = new FuncNode($ID, $args); }
+	| ID							{ $$ = new VarNode($ID); }
+	;
 
+simpleexpr: simpleexprnoparens
+	| '(' expr ')'				{ $$ = $expr; }
+	;
+
+expr: simpleexpr				{ $$ = $simpleexpr; }
+	| expr[a] '+' expr[b]		{ $$ = new BinaryOpNode(LC::c_add, $a, $b); }
+	| expr[a] '-' expr[b]		{ $$ = new BinaryOpNode(LC::c_sub, $a, $b); }
+	| expr[a] '*' expr[b]		{ $$ = new BinaryOpNode(LC::c_mul, $a, $b); }
+	| expr[a] '/' expr[b]		{ $$ = new BinaryOpNode(LC::c_div, $a, $b); }
+	| expr[a] tMOD expr[b]		{ $$ = new BinaryOpNode(LC::c_mod, $a, $b); }
+	| expr[a] '>' expr[b]		{ $$ = new BinaryOpNode(LC::c_gt, $a, $b); }
+	| expr[a] '<' expr[b]		{ $$ = new BinaryOpNode(LC::c_lt, $a, $b); }
+	| expr[a] tEQ expr[b]		{ $$ = new BinaryOpNode(LC::c_eq, $a, $b); }
+	| expr[a] tNEQ expr[b]		{ $$ = new BinaryOpNode(LC::c_neq, $a, $b); }
+	| expr[a] tGE expr[b]		{ $$ = new BinaryOpNode(LC::c_ge, $a, $b); }
+	| expr[a] tLE expr[b]		{ $$ = new BinaryOpNode(LC::c_le, $a, $b); }
+	| expr[a] tAND expr[b]		{ $$ = new BinaryOpNode(LC::c_and, $a, $b); }
+	| expr[a] tOR expr[b]		{ $$ = new BinaryOpNode(LC::c_or, $a, $b); }
+	| expr[a] '&' expr[b]		{ $$ = new BinaryOpNode(LC::c_ampersand, $a, $b); }
+	| expr[a] tCONCAT expr[b]	{ $$ = new BinaryOpNode(LC::c_concat, $a, $b); }
+	| expr[a] tCONTAINS expr[b]	{ $$ = new BinaryOpNode(LC::c_contains, $a, $b); }
+	| expr[a] tSTARTS expr[b]	{ $$ = new BinaryOpNode(LC::c_starts, $a, $b); }
+	;
+
+exprlist: /* empty */						{ $$ = new NodeList; }
+	| nonemptyexprlist
+	;
+
+nonemptyexprlist: expr[item]				{
+		NodeList *list = new NodeList; 
+		list->push_back($item);
+		$$ = list; }
+	| nonemptyexprlist[prev] ',' expr[item]	{
+		$prev->push_back($item);
+		$$ = $prev; }
+	;
 
 %%
 
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 4e01c278d9..4a6358a57b 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -756,6 +756,7 @@ char *yytext;
 
 #include "director/director.h"
 #include "director/lingo/lingo.h"
+#include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-the.h"
 
@@ -812,8 +813,8 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-#line 815 "engines/director/lingo/lingo-lex.cpp"
 #line 816 "engines/director/lingo/lingo-lex.cpp"
+#line 817 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1033,10 +1034,10 @@ YY_DECL
 		}
 
 	{
-#line 105 "engines/director/lingo/lingo-lex.l"
+#line 106 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1039 "engines/director/lingo/lingo-lex.cpp"
+#line 1040 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1092,67 +1093,67 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 107 "engines/director/lingo/lingo-lex.l"
+#line 108 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 109 "engines/director/lingo/lingo-lex.l"
+#line 110 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 111 "engines/director/lingo/lingo-lex.l"
+#line 112 "engines/director/lingo/lingo-lex.l"
 { count(); return tAFTER; }		// D3
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 112 "engines/director/lingo/lingo-lex.l"
+#line 113 "engines/director/lingo/lingo-lex.l"
 { count(); return tAND; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 113 "engines/director/lingo/lingo-lex.l"
+#line 114 "engines/director/lingo/lingo-lex.l"
 { count(); return tBEFORE; }	// D3
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 114 "engines/director/lingo/lingo-lex.l"
+#line 115 "engines/director/lingo/lingo-lex.l"
 { count(); return tCAST; }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 115 "engines/director/lingo/lingo-lex.l"
+#line 116 "engines/director/lingo/lingo-lex.l"
 { count(); return tCHAR; }		// D3
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 116 "engines/director/lingo/lingo-lex.l"
+#line 117 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONTAINS; }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 117 "engines/director/lingo/lingo-lex.l"
+#line 118 "engines/director/lingo/lingo-lex.l"
 { count(); return tDOWN; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 118 "engines/director/lingo/lingo-lex.l"
+#line 119 "engines/director/lingo/lingo-lex.l"
 { count(); return tIF; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 119 "engines/director/lingo/lingo-lex.l"
+#line 120 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSIF; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 120 "engines/director/lingo/lingo-lex.l"
+#line 121 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSE; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 121 "engines/director/lingo/lingo-lex.l"
+#line 122 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1169,182 +1170,182 @@ YY_RULE_SETUP
 
 		yylval.s = new Common::String(ptr);
 
-		return ENDCLAUSE;
+		return tENDCLAUSE;
 	}
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 139 "engines/director/lingo/lingo-lex.l"
+#line 140 "engines/director/lingo/lingo-lex.l"
 { count(); return tFACTORY; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 140 "engines/director/lingo/lingo-lex.l"
+#line 141 "engines/director/lingo/lingo-lex.l"
 { count(); return tEXIT; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 141 "engines/director/lingo/lingo-lex.l"
+#line 142 "engines/director/lingo/lingo-lex.l"
 { count(); return tFIELD; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 142 "engines/director/lingo/lingo-lex.l"
+#line 143 "engines/director/lingo/lingo-lex.l"
 { count(); return tGLOBAL; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 143 "engines/director/lingo/lingo-lex.l"
+#line 144 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 144 "engines/director/lingo/lingo-lex.l"
+#line 145 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 145 "engines/director/lingo/lingo-lex.l"
+#line 146 "engines/director/lingo/lingo-lex.l"
 { count(); return tGOLOOP; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 146 "engines/director/lingo/lingo-lex.l"
+#line 147 "engines/director/lingo/lingo-lex.l"
 { count(); return tINSTANCE; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 147 "engines/director/lingo/lingo-lex.l"
+#line 148 "engines/director/lingo/lingo-lex.l"
 { count(); return tINTERSECTS;}
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 148 "engines/director/lingo/lingo-lex.l"
+#line 149 "engines/director/lingo/lingo-lex.l"
 { count(); return tINTO; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 149 "engines/director/lingo/lingo-lex.l"
+#line 150 "engines/director/lingo/lingo-lex.l"
 { count(); return tIN; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 150 "engines/director/lingo/lingo-lex.l"
+#line 151 "engines/director/lingo/lingo-lex.l"
 { count(); return tITEM; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 151 "engines/director/lingo/lingo-lex.l"
+#line 152 "engines/director/lingo/lingo-lex.l"
 { count(); return tLINE; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 152 "engines/director/lingo/lingo-lex.l"
+#line 153 "engines/director/lingo/lingo-lex.l"
 { count(); return tMACRO;; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 153 "engines/director/lingo/lingo-lex.l"
+#line 154 "engines/director/lingo/lingo-lex.l"
 { count(); return tMETHOD; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 154 "engines/director/lingo/lingo-lex.l"
+#line 155 "engines/director/lingo/lingo-lex.l"
 { count(); return tMOD;}
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 155 "engines/director/lingo/lingo-lex.l"
+#line 156 "engines/director/lingo/lingo-lex.l"
 { count(); return tMOVIE; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 156 "engines/director/lingo/lingo-lex.l"
+#line 157 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEXT; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 157 "engines/director/lingo/lingo-lex.l"
+#line 158 "engines/director/lingo/lingo-lex.l"
 { count(); return tNOT; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 158 "engines/director/lingo/lingo-lex.l"
+#line 159 "engines/director/lingo/lingo-lex.l"
 { count(); return tOF; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 159 "engines/director/lingo/lingo-lex.l"
-{ count(); return tON }		// D3
+#line 160 "engines/director/lingo/lingo-lex.l"
+{ count(); return tON; }		// D3
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 160 "engines/director/lingo/lingo-lex.l"
+#line 161 "engines/director/lingo/lingo-lex.l"
 { count(); return tOPEN; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 161 "engines/director/lingo/lingo-lex.l"
+#line 162 "engines/director/lingo/lingo-lex.l"
 { count(); return tOR; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 162 "engines/director/lingo/lingo-lex.l"
+#line 163 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAY; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 163 "engines/director/lingo/lingo-lex.l"
+#line 164 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAY; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 164 "engines/director/lingo/lingo-lex.l"
+#line 165 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAYACCEL; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 165 "engines/director/lingo/lingo-lex.l"
+#line 166 "engines/director/lingo/lingo-lex.l"
 { count(); return tPREVIOUS; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 166 "engines/director/lingo/lingo-lex.l"
+#line 167 "engines/director/lingo/lingo-lex.l"
 { count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 167 "engines/director/lingo/lingo-lex.l"
+#line 168 "engines/director/lingo/lingo-lex.l"
 { count(); return tPUT; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 168 "engines/director/lingo/lingo-lex.l"
+#line 169 "engines/director/lingo/lingo-lex.l"
 { count(); return tREPEAT; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 169 "engines/director/lingo/lingo-lex.l"
+#line 170 "engines/director/lingo/lingo-lex.l"
 { count(); return tSCRIPT; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 170 "engines/director/lingo/lingo-lex.l"
+#line 171 "engines/director/lingo/lingo-lex.l"
 { count(); return tSET; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 171 "engines/director/lingo/lingo-lex.l"
+#line 172 "engines/director/lingo/lingo-lex.l"
 { count(); return tSTARTS; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 172 "engines/director/lingo/lingo-lex.l"
+#line 173 "engines/director/lingo/lingo-lex.l"
 { count(); return tTELL; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 173 "engines/director/lingo/lingo-lex.l"
+#line 174 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1368,22 +1369,22 @@ YY_RULE_SETUP
 			yylval.e[0] = kTheMenuItems;
 			yylval.e[1] = g_lingo->_theEntityFields[key]->field;
 
-			return THEMENUITEMSENTITY;
+			return tTHEMENUITEMSENTITY;
 		}
 
 		yylval.s = new Common::String(Common::String::format("numberOf%s", field.c_str()));
 
 		if (g_lingo->_builtinFuncs.contains(*yylval.s)) {
-			return THEFUNCINOF;
+			return tTHEFUNCINOF;
 		} else {
 			warning("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
-			return LEXERROR;
+			return tLEXERROR;
 		}
 	}
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 208 "engines/director/lingo/lingo-lex.l"
+#line 209 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1400,16 +1401,16 @@ YY_RULE_SETUP
 		yylval.s = new Common::String(Common::String::format("last%sOf", field.c_str()));
 
 		if (g_lingo->_builtinFuncs.contains(*yylval.s)) {
-			return THEFUNCINOF;
+			return tTHEFUNCINOF;
 		} else {
 			warning("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
-			return LEXERROR;
+			return tLEXERROR;
 		}
 	}
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 230 "engines/director/lingo/lingo-lex.l"
+#line 231 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1434,12 +1435,12 @@ YY_RULE_SETUP
 
 			if (!g_lingo->_theEntityFields.contains(field)) {
 				warning("LEXER: Unhandled the field %s of %s", field.c_str(), ptr);
-				return LEXERROR;
+				return tLEXERROR;
 			}
 
 			if (g_lingo->_theEntityFields[field]->entity != g_lingo->_theEntities[ptr]->entity) {
 				warning("LEXER: Unsupported field '%s' for entity '%s'", field.c_str(), ptr);
-				return LEXERROR;
+				return tLEXERROR;
 			}
 
 			yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
@@ -1447,12 +1448,12 @@ YY_RULE_SETUP
 
 			// the <field> of menuItem <expr>" of menu <expr>
 			if (g_lingo->_theEntityFields[field]->entity == kTheMenuItem)
-				return THEMENUITEMENTITY;
+				return tTHEMENUITEMENTITY;
 
 			if (g_lingo->_theEntities[ptr]->hasId)
-				return THEENTITYWITHID;
+				return tTHEENTITYWITHID;
 			else
-				return THEENTITY;
+				return tTHEENTITY;
 		} else {
 			if (g_director->getVersion() >= 400) {
 				Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
@@ -1460,7 +1461,7 @@ YY_RULE_SETUP
 				yylval.objectprop.obj = new Common::String(ptr);
 				yylval.objectprop.prop = new Common::String(field);
 
-				return THEOBJECTPROP;
+				return tTHEOBJECTPROP;
 			} else if (g_lingo->_builtinFuncs.contains(field)) { // Let's hope they don't do it in D4+
 				if (g_lingo->_builtinFuncs[field].nargs == 1 && g_lingo->_builtinFuncs[field].maxArgs == 1) {
 					yylval.s = new Common::String(field);
@@ -1476,7 +1477,7 @@ YY_RULE_SETUP
 
 					unput(' '); unput('f'); unput('o');
 
-					return THEFUNC;
+					return tTHEFUNC;
 				}
 			}
 		}
@@ -1486,7 +1487,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 303 "engines/director/lingo/lingo-lex.l"
+#line 304 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1505,26 +1506,26 @@ YY_RULE_SETUP
 
 		if (!g_lingo->_theEntityFields.contains(field)) {
 			warning("LEXER: Unhandled the field %s", ptr);
-			return LEXERROR;
+			return tLEXERROR;
 		}
 
 		if (g_lingo->_theEntityFields[field]->entity != g_lingo->_theEntities[ptr]->entity) {
 			warning("LEXER: Unsupported field '%s' for entity '%s'", field.c_str(), ptr);
-			return LEXERROR;
+			return tLEXERROR;
 		}
 
 		yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
 		yylval.e[1] = g_lingo->_theEntityFields[field]->field;
 
 		if (g_lingo->_theEntities[ptr]->hasId)
-			return THEENTITYWITHID;
+			return tTHEENTITYWITHID;
 		else
-			return THEENTITY;
+			return tTHEENTITY;
 	}
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 337 "engines/director/lingo/lingo-lex.l"
+#line 338 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1537,15 +1538,15 @@ YY_RULE_SETUP
 			yylval.e[1] = 0;	// No field
 
 			if (g_lingo->_theEntities[ptr]->hasId)
-				return THEENTITYWITHID;
+				return tTHEENTITYWITHID;
 			else
-				return THEENTITY;
+				return tTHEENTITY;
 		}
 
 		if (g_lingo->_builtinFuncs.contains(ptr)) {
 			if (g_lingo->_builtinFuncs[ptr].nargs == 1 && g_lingo->_builtinFuncs[ptr].maxArgs == 1) {
 				yylval.s = new Common::String(ptr);
-				return THEFUNC;
+				return tTHEFUNC;
 			}
 		}
 
@@ -1554,126 +1555,126 @@ YY_RULE_SETUP
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 363 "engines/director/lingo/lingo-lex.l"
+#line 364 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 364 "engines/director/lingo/lingo-lex.l"
+#line 365 "engines/director/lingo/lingo-lex.l"
 { count(); return tTO; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 365 "engines/director/lingo/lingo-lex.l"
+#line 366 "engines/director/lingo/lingo-lex.l"
 { count(); return tASSERTERROR; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 366 "engines/director/lingo/lingo-lex.l"
+#line 367 "engines/director/lingo/lingo-lex.l"
 { count(); return tSPRITE; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 367 "engines/director/lingo/lingo-lex.l"
+#line 368 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITH; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 368 "engines/director/lingo/lingo-lex.l"
+#line 369 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITHIN; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 369 "engines/director/lingo/lingo-lex.l"
+#line 370 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHEN; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 370 "engines/director/lingo/lingo-lex.l"
+#line 371 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHILE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 371 "engines/director/lingo/lingo-lex.l"
+#line 372 "engines/director/lingo/lingo-lex.l"
 { count(); return tWINDOW; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 372 "engines/director/lingo/lingo-lex.l"
+#line 373 "engines/director/lingo/lingo-lex.l"
 { count(); return tWORD; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 374 "engines/director/lingo/lingo-lex.l"
+#line 375 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 375 "engines/director/lingo/lingo-lex.l"
+#line 376 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 376 "engines/director/lingo/lingo-lex.l"
+#line 377 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 377 "engines/director/lingo/lingo-lex.l"
+#line 378 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 378 "engines/director/lingo/lingo-lex.l"
+#line 379 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 380 "engines/director/lingo/lingo-lex.l"
+#line 381 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
 
-		return VARID;
+		return tVARID;
 	}
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 386 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return FLOAT; }
+#line 387 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.f = atof(yytext); return tFLOAT; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 387 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
+#line 388 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 388 "engines/director/lingo/lingo-lex.l"
+#line 389 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 72:
 /* rule 72 can match eol */
 YY_RULE_SETUP
-#line 389 "engines/director/lingo/lingo-lex.l"
+#line 390 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 390 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
+#line 391 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 391 "engines/director/lingo/lingo-lex.l"
+#line 392 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 393 "engines/director/lingo/lingo-lex.l"
+#line 394 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1676 "engines/director/lingo/lingo-lex.cpp"
+#line 1677 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2682,7 +2683,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 393 "engines/director/lingo/lingo-lex.l"
+#line 394 "engines/director/lingo/lingo-lex.l"
 
 
 extern int yydebug;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index ea62b52f17..5c220c850e 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -36,6 +36,7 @@
 
 #include "director/director.h"
 #include "director/lingo/lingo.h"
+#include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-the.h"
 
@@ -134,7 +135,7 @@ end({spc}+{identifier})?	{
 
 		yylval.s = new Common::String(ptr);
 
-		return ENDCLAUSE;
+		return tENDCLAUSE;
 	}
 ^{spc}*factory { count(); return tFACTORY; }
 exit		{ count(); return tEXIT; }
@@ -156,7 +157,7 @@ movie		{ count(); return tMOVIE; }
 next		{ count(); return tNEXT; }
 not			{ count(); return tNOT; }
 of			{ count(); return tOF; }
-on			{ count(); return tON }		// D3
+on			{ count(); return tON; }		// D3
 open		{ count(); return tOPEN; }
 or			{ count(); return tOR; }
 play{spc}+frame	{ count(); return tPLAY; }
@@ -193,16 +194,16 @@ the{spc}+number{spc}+of{spc}+[[:alpha:]]+{spc}+(in|of){spc}+ {
 			yylval.e[0] = kTheMenuItems;
 			yylval.e[1] = g_lingo->_theEntityFields[key]->field;
 
-			return THEMENUITEMSENTITY;
+			return tTHEMENUITEMSENTITY;
 		}
 
 		yylval.s = new Common::String(Common::String::format("numberOf%s", field.c_str()));
 
 		if (g_lingo->_builtinFuncs.contains(*yylval.s)) {
-			return THEFUNCINOF;
+			return tTHEFUNCINOF;
 		} else {
 			warning("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
-			return LEXERROR;
+			return tLEXERROR;
 		}
 	}
 the{spc}+last{spc}+[[:alpha:]]+{spc}+(in|of){spc}+	{
@@ -221,10 +222,10 @@ the{spc}+last{spc}+[[:alpha:]]+{spc}+(in|of){spc}+	{
 		yylval.s = new Common::String(Common::String::format("last%sOf", field.c_str()));
 
 		if (g_lingo->_builtinFuncs.contains(*yylval.s)) {
-			return THEFUNCINOF;
+			return tTHEFUNCINOF;
 		} else {
 			warning("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
-			return LEXERROR;
+			return tLEXERROR;
 		}
 	}
 the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier}	{
@@ -251,12 +252,12 @@ the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier}	{
 
 			if (!g_lingo->_theEntityFields.contains(field)) {
 				warning("LEXER: Unhandled the field %s of %s", field.c_str(), ptr);
-				return LEXERROR;
+				return tLEXERROR;
 			}
 
 			if (g_lingo->_theEntityFields[field]->entity != g_lingo->_theEntities[ptr]->entity) {
 				warning("LEXER: Unsupported field '%s' for entity '%s'", field.c_str(), ptr);
-				return LEXERROR;
+				return tLEXERROR;
 			}
 
 			yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
@@ -264,12 +265,12 @@ the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier}	{
 
 			// the <field> of menuItem <expr>" of menu <expr>
 			if (g_lingo->_theEntityFields[field]->entity == kTheMenuItem)
-				return THEMENUITEMENTITY;
+				return tTHEMENUITEMENTITY;
 
 			if (g_lingo->_theEntities[ptr]->hasId)
-				return THEENTITYWITHID;
+				return tTHEENTITYWITHID;
 			else
-				return THEENTITY;
+				return tTHEENTITY;
 		} else {
 			if (g_director->getVersion() >= 400) {
 				Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
@@ -277,7 +278,7 @@ the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier}	{
 				yylval.objectprop.obj = new Common::String(ptr);
 				yylval.objectprop.prop = new Common::String(field);
 
-				return THEOBJECTPROP;
+				return tTHEOBJECTPROP;
 			} else if (g_lingo->_builtinFuncs.contains(field)) { // Let's hope they don't do it in D4+
 				if (g_lingo->_builtinFuncs[field].nargs == 1 && g_lingo->_builtinFuncs[field].maxArgs == 1) {
 					yylval.s = new Common::String(field);
@@ -293,7 +294,7 @@ the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier}	{
 
 					unput(' '); unput('f'); unput('o');
 
-					return THEFUNC;
+					return tTHEFUNC;
 				}
 			}
 		}
@@ -318,21 +319,21 @@ the{spc}+[[:alpha:]]+{spc}+(date|time)		{
 
 		if (!g_lingo->_theEntityFields.contains(field)) {
 			warning("LEXER: Unhandled the field %s", ptr);
-			return LEXERROR;
+			return tLEXERROR;
 		}
 
 		if (g_lingo->_theEntityFields[field]->entity != g_lingo->_theEntities[ptr]->entity) {
 			warning("LEXER: Unsupported field '%s' for entity '%s'", field.c_str(), ptr);
-			return LEXERROR;
+			return tLEXERROR;
 		}
 
 		yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
 		yylval.e[1] = g_lingo->_theEntityFields[field]->field;
 
 		if (g_lingo->_theEntities[ptr]->hasId)
-			return THEENTITYWITHID;
+			return tTHEENTITYWITHID;
 		else
-			return THEENTITY;
+			return tTHEENTITY;
 	}
 the{spc}+[[:alpha:]]+		{
 		count();
@@ -346,15 +347,15 @@ the{spc}+[[:alpha:]]+		{
 			yylval.e[1] = 0;	// No field
 
 			if (g_lingo->_theEntities[ptr]->hasId)
-				return THEENTITYWITHID;
+				return tTHEENTITYWITHID;
 			else
-				return THEENTITY;
+				return tTHEENTITY;
 		}
 
 		if (g_lingo->_builtinFuncs.contains(ptr)) {
 			if (g_lingo->_builtinFuncs[ptr].nargs == 1 && g_lingo->_builtinFuncs[ptr].maxArgs == 1) {
 				yylval.s = new Common::String(ptr);
-				return THEFUNC;
+				return tTHEFUNC;
 			}
 		}
 
@@ -381,13 +382,13 @@ word			{ count(); return tWORD; }
 		count();
 		yylval.s = new Common::String(yytext);
 
-		return VARID;
+		return tVARID;
 	}
-{constfloat}	{ count(); yylval.f = atof(yytext); return FLOAT; }
-{constinteger}	{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
+{constfloat}	{ count(); yylval.f = atof(yytext); return tFLOAT; }
+{constinteger}	{ count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
 {operator}		{ count(); return *yytext; }
 {newline}		{ count(); return '\n'; }
-{conststring}	{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
+{conststring}	{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
 .				{ count(); }
 
 %%
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index c4231e859a..f2bd25b499 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -36,6 +36,7 @@
 #include "director/util.h"
 
 #include "director/lingo/lingo.h"
+#include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-object.h"
@@ -145,6 +146,7 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 	_currentScript = 0;
 	_currentScriptContext = nullptr;
 
+	_assemblyAST = nullptr;
 	_assemblyArchive = nullptr;
 	_currentAssembly = nullptr;
 	_assemblyContext = nullptr;
@@ -153,8 +155,7 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 	_globalCounter = 0;
 	_pc = 0;
 	_abort = false;
-	_indef = kStateNone;
-	_indef = kStateNone;
+	_indef = false;
 	_expectError = false;
 	_caughtError = false;
 
@@ -164,7 +165,6 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 	_hadError = false;
 
 	_inFactory = false;
-	_inCond = false;
 
 	_floatPrecision = 4;
 	_floatPrecisionFormat = "%.4f";
@@ -249,43 +249,6 @@ Symbol Lingo::getHandler(const Common::String &name) {
 	return Symbol();
 }
 
-const char *Lingo::findNextDefinition(const char *s) {
-	const char *res = s;
-
-	while (*res) {
-		while (*res && (*res == ' ' || *res == '\t' || *res == '\n'))
-			res++;
-
-		if (!*res)
-			return NULL;
-
-		if (!scumm_strnicmp(res, "macro ", 6)) {
-			debugC(1, kDebugCompile, "findNextDefinition(): See 'macros ' construct");
-			return res;
-		}
-
-		if (!scumm_strnicmp(res, "on ", 3)) {
-			debugC(1, kDebugCompile, "findNextDefinition(): See 'on ' construct");
-			return res;
-		}
-
-		if (!scumm_strnicmp(res, "factory ", 8)) {
-			debugC(1, kDebugCompile, "findNextDefinition(): See 'factory ' construct");
-			return res;
-		}
-
-		if (!scumm_strnicmp(res, "method ", 7)) {
-			debugC(1, kDebugCompile, "findNextDefinition(): See 'method ' construct");
-			return res;
-		}
-
-		while (*res && *res != '\n')
-			res++;
-	}
-
-	return NULL;
-}
-
 void LingoArchive::addCode(const char *code, ScriptType type, uint16 id, const char *scriptName) {
 	debugC(1, kDebugCompile, "Add code for type %s(%d) with id %d in '%s%s'\n"
 			"***********\n%s\n\n***********", scriptType2str(type), type, id, g_director->getCurrentPath().c_str(), cast->getMacName().c_str(), code);
@@ -319,6 +282,7 @@ ScriptContext *Lingo::compileAnonymous(const char *code) {
 
 ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonymous) {
 	_assemblyArchive = archive;
+	_assemblyAST = nullptr;
 	ScriptContext *mainContext = _assemblyContext = new ScriptContext(scriptName, archive, type, id);
 	_currentAssembly = new ScriptData;
 
@@ -326,8 +290,6 @@ ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, Scri
 	_linenumber = _colnumber = 1;
 	_hadError = false;
 
-	const char *begin, *end;
-
 	if (!strncmp(code, "menu:", 5) || scumm_strcasestr(code, "\nmenu:")) {
 		debugC(1, kDebugCompile, "Parsing menu");
 		parseMenu(code);
@@ -338,53 +300,15 @@ ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, Scri
 	// Preprocess the code for ease of the parser
 	Common::String codeNorm = codePreprocessor(code, archive, type, id);
 	code = codeNorm.c_str();
-	begin = code;
-
-	// macros and factories have conflicting grammar. Thus we ease life for the parser.
-	if ((end = findNextDefinition(code))) {
-		do {
-			Common::String chunk(begin, end);
-
-			if (chunk.hasPrefixIgnoreCase("factory")) {
-				_inFactory = true;
-				_assemblyContext = new ScriptContext(scriptName, archive, type, id);
-			} else if (chunk.hasPrefixIgnoreCase("method")) {
-				_inFactory = true;
-				// remain in factory context
-			} else if (chunk.hasPrefixIgnoreCase("macro") || chunk.hasPrefixIgnoreCase("on")) {
-				_inFactory = false;
-				_assemblyContext = mainContext;
-			} else {
-				_inFactory = false;
-				_assemblyContext = mainContext;
-			}
-
-			debugC(1, kDebugCompile, "Code chunk:\n#####\n%s#####", chunk.c_str());
 
-			parse(chunk.c_str());
+	// Parse the Lingo and build an AST
+	parse(code);
 
-			if (debugChannelSet(3, kDebugCompile)) {
-				debugC(2, kDebugCompile, "<current code>");
-				uint pc = 0;
-				while (pc < _currentAssembly->size()) {
-					uint spc = pc;
-					Common::String instr = decodeInstruction(_assemblyArchive, _currentAssembly, pc, &pc);
-					debugC(2, kDebugCompile, "[%5d] %s", spc, instr.c_str());
-				}
-				debugC(2, kDebugCompile, "<end code>");
-			}
-
-			begin = end;
-		} while ((end = findNextDefinition(begin + 1)));
-
-		_inFactory = false;
-		_assemblyContext = mainContext;
-
-		debugC(1, kDebugCompile, "Last code chunk:\n#####\n%s\n#####", begin);
+	// Generate bytecode
+	if (_assemblyAST) {
+		_assemblyAST->compile();
 	}
 
-	parse(begin);
-
 	// for D4 and above, there usually won't be any code left.
 	// all scoped methods will be defined and stored by the code parser
 	// however D3 and below allow scopeless functions!
@@ -451,6 +375,8 @@ ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, Scri
 	delete _methodVars;
 	_methodVars = nullptr;
 	_currentAssembly = nullptr;
+	delete _assemblyAST;
+	_assemblyAST = nullptr;
 	_assemblyContext = nullptr;
 	_assemblyArchive = nullptr;
 	return mainContext;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 71a1dbcbca..a6f7996bff 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -44,18 +44,13 @@ struct TheEntityField;
 struct LingoArchive;
 struct LingoV4Bytecode;
 struct LingoV4TheEntity;
+struct Node;
 class AbstractObject;
 class Cast;
 class ScriptContext;
 class DirectorEngine;
 class Frame;
 
-enum LexerDefineState {
-	kStateNone,
-	kStateInDef,
-	kStateInArgs
-};
-
 enum VarType {
 	kVarArgument,
 	kVarProperty,
@@ -238,11 +233,6 @@ struct LingoArchive {
 	void addNamesV4(Common::SeekableReadStreamEndian &stream);
 };
 
-struct RepeatBlock {
-	Common::Array<uint32> exits;
-	Common::Array<uint32> nexts;
-};
-
 class Lingo {
 
 public:
@@ -281,10 +271,6 @@ public:
 	// lingo-patcher.cpp
 	Common::String patchLingoCode(Common::String &line, LingoArchive *archive, ScriptType type, uint16 id, int linenumber);
 
-	// lingo.cpp
-private:
-	const char *findNextDefinition(const char *s);
-
 	// lingo-events.cpp
 private:
 	void initEventHandlerTypes();
@@ -396,19 +382,19 @@ public:
 	void codeLabel(int label);
 	int codeString(const char *s);
 	void processIf(int toplabel, int endlabel);
+	void registerMethodVar(const Common::String &name, VarType type);
 	void varCreate(const Common::String &name, bool global, DatumHash *localvars = nullptr);
 
 	LingoArchive *_assemblyArchive;
 	ScriptContext *_assemblyContext;
+	Node *_assemblyAST;
 	ScriptData *_currentAssembly;
-	LexerDefineState _indef;
-	LexerDefineState _indefStore;
+	bool _indef;
 	uint _linenumber;
 	uint _colnumber;
 	uint _bytenumber;
 	const char *_lines[3];
 	bool _inFactory;
-	Common::Array<RepeatBlock *> _repeatStack;
 
 	Common::Array<Common::String *> _argstack;
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
@@ -443,8 +429,6 @@ public:
 
 	bool _hadError;
 
-	bool _inCond;
-
 private:
 	int parse(const char *code);
 	void parseMenu(const char *code);
diff --git a/engines/director/module.mk b/engines/director/module.mk
index 2f17e00eef..e14a492a60 100644
--- a/engines/director/module.mk
+++ b/engines/director/module.mk
@@ -23,6 +23,7 @@ MODULE_OBJS = \
 	util.o \
 	window.o \
 	lingo/lingo.o \
+	lingo/lingo-ast.o \
 	lingo/lingo-builtins.o \
 	lingo/lingo-bytecode.o \
 	lingo/lingo-code.o \


Commit: e44ff4849251fc2c67b921373562afb196a999ab
    https://github.com/scummvm/scummvm/commit/e44ff4849251fc2c67b921373562afb196a999ab
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Move VarType to types.h

Changed paths:
    engines/director/lingo/lingo.h
    engines/director/types.h


diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index a6f7996bff..b845eb63df 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -51,14 +51,6 @@ class ScriptContext;
 class DirectorEngine;
 class Frame;
 
-enum VarType {
-	kVarArgument,
-	kVarProperty,
-	kVarInstance,
-	kVarGlobal,
-	kVarLocal
-};
-
 typedef void (*inst)(void);
 #define	STOP (inst)0
 #define ENTITY_INDEX(t,id) ((t) * 100000 + (id))
diff --git a/engines/director/types.h b/engines/director/types.h
index b5d6a6c2c9..3b3e544c53 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -351,6 +351,14 @@ enum DatumType {
 	RECT
 };
 
+enum VarType {
+	kVarArgument,
+	kVarProperty,
+	kVarInstance,
+	kVarGlobal,
+	kVarLocal
+};
+
 struct Datum;
 struct PCell;
 typedef Common::Array<Datum> DatumArray;


Commit: a4df3c3d8ed61aff92534364857764b35a11d855
    https://github.com/scummvm/scummvm/commit/a4df3c3d8ed61aff92534364857764b35a11d855
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Eliminate Lingo::varCreate

This function just complicates things.

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 3f413dece7..8d99281780 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -535,7 +535,9 @@ void LC::cb_globalassign() {
 	// Lingo lets you declare globals inside a method.
 	// This doesn't define them in the script list, but you can still
 	// read and write to them???
-	g_lingo->varCreate(name, true);
+	if (!g_lingo->_globalvars.contains(name)) {
+		g_lingo->_globalvars[name] = Datum();
+	}
 	g_lingo->varAssign(target, source, true);
 }
 
@@ -979,8 +981,8 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, L
 		if (0 <= index && index < (int16)archive->names.size()) {
 			const char *name = archive->names[index].c_str();
 			debugC(5, kDebugLoading, "%d: %s", i, name);
-			if (!_globalvars.contains(name)) {
-				_globalvars[name] = Datum();
+			if (!g_lingo->_globalvars.contains(name)) {
+				g_lingo->_globalvars[name] = Datum();
 			} else {
 				warning("Global %d (%s) already defined", i, name);
 			}
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 27170e2193..db3b064c22 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -263,7 +263,7 @@ void Lingo::pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRet
 		for (int i = symNArgs - 1; i >= 0; i--) {
 			Common::String name = (*funcSym.argNames)[i];
 			if (!localvars->contains(name)) {
-				g_lingo->varCreate(name, false, localvars);
+				(*localvars)[name] = Datum();
 				Datum arg(name);
 				arg.type = VAR;
 				Datum value = g_lingo->pop();
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 7e9ace6234..77c5893b5a 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -270,39 +270,11 @@ void Lingo::registerMethodVar(const Common::String &name, VarType type) {
 		if (type == kVarProperty || type == kVarInstance) {
 			g_lingo->_assemblyContext->_properties[name] = Datum();
 		} else if (type == kVarGlobal) {
-			g_lingo->varCreate(name, true);
+			g_lingo->_globalvars[name] = Datum();
 		}
 	}
 }
 
-void Lingo::varCreate(const Common::String &name, bool global, DatumHash *localvars) {
-	if (localvars == nullptr) {
-		localvars = _localvars;
-	}
-
-	if (localvars && localvars->contains(name)) {
-		if (global)
-			warning("varCreate: variable %s is local, not global", name.c_str());
-		return;
-	} else if (_currentMe.type == OBJECT && _currentMe.u.obj->hasProp(name)) {
-		if (global)
-			warning("varCreate: variable %s is instance or property, not global", name.c_str());
-		return;
-	} else if (_globalvars.contains(name)) {
-		if (!global)
-			warning("varCreate: variable %s is global, not local", name.c_str());
-		return;
-	}
-
-	if (global) {
-		_globalvars[name] = Datum();
-		_globalvars[name].type = INT;
-		_globalvars[name].u.i = 0;
-	} else {
-		(*localvars)[name] = Datum();
-	}
-}
-
 void Lingo::codeFactory(Common::String &name) {
 	// FIXME: The factory's context should not be tied to the LingoArchive
 	// but bytecode needs it to resolve names
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index b845eb63df..b070a3d119 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -375,7 +375,6 @@ public:
 	int codeString(const char *s);
 	void processIf(int toplabel, int endlabel);
 	void registerMethodVar(const Common::String &name, VarType type);
-	void varCreate(const Common::String &name, bool global, DatumHash *localvars = nullptr);
 
 	LingoArchive *_assemblyArchive;
 	ScriptContext *_assemblyContext;


Commit: 0a708b9c8f9a0d1f232014c22f2cc8a3d0e9e512
    https://github.com/scummvm/scummvm/commit/0a708b9c8f9a0d1f232014c22f2cc8a3d0e9e512
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Move compiler logic to new class

Changed paths:
  A engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-ast.cpp
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/lingo-object.cpp
    engines/director/lingo/lingo-patcher.cpp
    engines/director/lingo/lingo-preprocessor.cpp
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-ast.cpp b/engines/director/lingo/lingo-ast.cpp
index a81ce4ba74..a2a67edbad 100644
--- a/engines/director/lingo/lingo-ast.cpp
+++ b/engines/director/lingo/lingo-ast.cpp
@@ -23,6 +23,7 @@
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-object.h"
 
 namespace Director {
@@ -38,52 +39,52 @@ void ScriptNode::compile() {
 /* FactoryNode */
 
 void FactoryNode::compile() {
-	g_lingo->_inFactory = true;
-	ScriptContext *mainContext = g_lingo->_assemblyContext;
-	g_lingo->_assemblyContext = new ScriptContext(mainContext->getName(), mainContext->_archive, mainContext->_scriptType, mainContext->_id);
+	g_lingo->_compiler->_inFactory = true;
+	ScriptContext *mainContext = g_lingo->_compiler->_assemblyContext;
+	g_lingo->_compiler->_assemblyContext = new ScriptContext(mainContext->getName(), mainContext->_archive, mainContext->_scriptType, mainContext->_id);
 
-	g_lingo->codeFactory(*name);
+	g_lingo->_compiler->codeFactory(*name);
 	for (uint i = 0; i < methods->size(); i++) {
 		(*methods)[i]->compile();
 	}
 
-	g_lingo->_inFactory = false;
-	g_lingo->_assemblyContext = mainContext;
+	g_lingo->_compiler->_inFactory = false;
+	g_lingo->_compiler->_assemblyContext = mainContext;
 }
 
 /* HandlerNode */
 
 void HandlerNode::compile() {
-	g_lingo->_indef = true;
-	VarTypeHash *mainMethodVars = g_lingo->_methodVars;
-	g_lingo->_methodVars = new VarTypeHash;
+	g_lingo->_compiler->_indef = true;
+	VarTypeHash *mainMethodVars = g_lingo->_compiler->_methodVars;
+	g_lingo->_compiler->_methodVars = new VarTypeHash;
 
 	for (VarTypeHash::iterator i = mainMethodVars->begin(); i != mainMethodVars->end(); ++i) {
 		if (i->_value == kVarGlobal || i->_value == kVarProperty)
-			(*g_lingo->_methodVars)[i->_key] = i->_value;
+			(*g_lingo->_compiler->_methodVars)[i->_key] = i->_value;
 	}
-	if (g_lingo->_inFactory) {
-		for (DatumHash::iterator i = g_lingo->_assemblyContext->_properties.begin(); i != g_lingo->_assemblyContext->_properties.end(); ++i) {
-			(*g_lingo->_methodVars)[i->_key] = kVarInstance;
+	if (g_lingo->_compiler->_inFactory) {
+		for (DatumHash::iterator i = g_lingo->_compiler->_assemblyContext->_properties.begin(); i != g_lingo->_compiler->_assemblyContext->_properties.end(); ++i) {
+			(*g_lingo->_compiler->_methodVars)[i->_key] = kVarInstance;
 		}
 	}
 
 	for (uint i = 0; i < args->size(); i++) { // TODO: eliminate argstack
-		g_lingo->codeArg((*args)[i]);
+		g_lingo->_compiler->codeArg((*args)[i]);
 	}
 
-	uint start = g_lingo->_currentAssembly->size(); // TODO: should always be zero
+	uint start = g_lingo->_compiler->_currentAssembly->size(); // TODO: should always be zero
 	for (uint i = 0; i < stmts->size(); i++) {
 		(*stmts)[i]->compile();
 	}
 
-	g_lingo->code1(LC::c_procret);
-	g_lingo->codeDefine(*name, start, args->size());
+	g_lingo->_compiler->code1(LC::c_procret);
+	g_lingo->_compiler->codeDefine(*name, start, args->size());
 
-	g_lingo->clearArgStack();
-	g_lingo->_indef = false;
-	delete g_lingo->_methodVars;
-	g_lingo->_methodVars = mainMethodVars;
+	g_lingo->_compiler->clearArgStack();
+	g_lingo->_compiler->_indef = false;
+	delete g_lingo->_compiler->_methodVars;
+	g_lingo->_compiler->_methodVars = mainMethodVars;
 }
 
 /* CmdNode */
@@ -92,14 +93,14 @@ void CmdNode::compile() {
 	for (uint i = 0; i < args->size(); i++) {
 		(*args)[i]->compile();
 	}
-	g_lingo->codeCmd(name, args->size());
+	g_lingo->_compiler->codeCmd(name, args->size());
 }
 
 /* GlobalNode */
 
 void GlobalNode::compile() {
 	for (uint i = 0; i < names->size(); i++) {
-		g_lingo->registerMethodVar(*(*names)[i], kVarGlobal);
+		g_lingo->_compiler->registerMethodVar(*(*names)[i], kVarGlobal);
 	}
 }
 
@@ -107,7 +108,7 @@ void GlobalNode::compile() {
 
 void PropertyNode::compile() {
 	for (uint i = 0; i < names->size(); i++) {
-		g_lingo->registerMethodVar(*(*names)[i], kVarProperty);
+		g_lingo->_compiler->registerMethodVar(*(*names)[i], kVarProperty);
 	}
 }
 
@@ -115,36 +116,36 @@ void PropertyNode::compile() {
 
 void InstanceNode::compile() {
 	for (uint i = 0; i < names->size(); i++) {
-		g_lingo->registerMethodVar(*(*names)[i], kVarInstance);
+		g_lingo->_compiler->registerMethodVar(*(*names)[i], kVarInstance);
 	}
 }
 
 /* IntNode */
 
 void IntNode::compile() {
-	g_lingo->code1(LC::c_intpush);
-	g_lingo->codeInt(val);
+	g_lingo->_compiler->code1(LC::c_intpush);
+	g_lingo->_compiler->codeInt(val);
 }
 
 /* FloatNode */
 
 void FloatNode::compile() {
-	g_lingo->code1(LC::c_floatpush);
-	g_lingo->codeFloat(val);
+	g_lingo->_compiler->code1(LC::c_floatpush);
+	g_lingo->_compiler->codeFloat(val);
 }
 
 /* SymbolNode */
 
 void SymbolNode::compile() {
-	g_lingo->code1(LC::c_symbolpush);
-	g_lingo->codeString(val->c_str());
+	g_lingo->_compiler->code1(LC::c_symbolpush);
+	g_lingo->_compiler->codeString(val->c_str());
 }
 
 /* StringNode */
 
 void StringNode::compile() {
-	g_lingo->code1(LC::c_stringpush);
-	g_lingo->codeString(val->c_str());
+	g_lingo->_compiler->code1(LC::c_stringpush);
+	g_lingo->_compiler->codeString(val->c_str());
 }
 
 /* FuncNode */
@@ -153,18 +154,18 @@ void FuncNode::compile() {
 	for (uint i = 0; i < args->size(); i++) {
 		(*args)[i]->compile();
 	}
-	g_lingo->codeFunc(name, args->size());
+	g_lingo->_compiler->codeFunc(name, args->size());
 }
 
 /* VarNode */
 
 void VarNode::compile() {
 	if (g_lingo->_builtinConsts.contains(*name)) {
-		g_lingo->code1(LC::c_constpush);
+		g_lingo->_compiler->code1(LC::c_constpush);
 	} else {
-		g_lingo->code1(LC::c_eval);
+		g_lingo->_compiler->code1(LC::c_eval);
 	}
-	g_lingo->codeString(name->c_str());
+	g_lingo->_compiler->codeString(name->c_str());
 }
 
 /* ParensNode */
@@ -177,7 +178,7 @@ void ParensNode::compile() {
 
 void UnaryOpNode::compile() {
 	arg->compile();
-	g_lingo->code1(op);
+	g_lingo->_compiler->code1(op);
 }
 
 /* BinaryOpNode */
@@ -185,7 +186,7 @@ void UnaryOpNode::compile() {
 void BinaryOpNode::compile() {
 	a->compile();
 	b->compile();
-	g_lingo->code1(op);
+	g_lingo->_compiler->code1(op);
 }
 
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index fab803cedf..2377334092 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -45,6 +45,7 @@
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-builtins.h"
 #include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-object.h"
 
 namespace Director {
@@ -628,7 +629,7 @@ void LB::b_value(int nargs) {
 	}
 	Common::String code = "scummvm_returnNumber " + expr;
 	// Compile the code to an anonymous function and call it
-	ScriptContext *sc = g_lingo->compileAnonymous(code.c_str());
+	ScriptContext *sc = g_lingo->_compiler->compileAnonymous(code.c_str());
 	Symbol sym = sc->_eventHandlers[kEventGeneric];
 	LC::call(sym, 0, true);
 }
@@ -1759,7 +1760,7 @@ void LB::b_installMenu(int nargs) {
 	}
 	TextCastMember *field = static_cast<TextCastMember *>(member);
 
-	Common::String menuStxt = g_lingo->codePreprocessor(field->getText().c_str(), field->getCast()->_lingoArchive, kNoneScript, castId, true);
+	Common::String menuStxt = g_lingo->_compiler->codePreprocessor(field->getText().c_str(), field->getCast()->_lingoArchive, kNoneScript, castId, true);
 	Common::String line;
 	int linenum = -1; // We increment it before processing
 
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 8d99281780..892efd8439 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -31,6 +31,7 @@
 #include "director/util.h"
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-builtins.h"
 #include "director/lingo/lingo-bytecode.h"
 #include "director/lingo/lingo-object.h"
@@ -828,7 +829,7 @@ void LC::cb_zeropush() {
 	g_lingo->push(d);
 }
 
-ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName, uint16 version) {
+ScriptContext *LingoCompiler::compileLingoV4(Common::SeekableReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName, uint16 version) {
 	if (stream.size() < 0x5c) {
 		warning("Lscr header too small");
 		return nullptr;
@@ -1277,13 +1278,13 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, L
 				Datum constant = _assemblyContext->_constants[arg];
 				switch (constant.type) {
 				case INT:
-					g_lingo->code1(LC::c_intpush);
+					code1(LC::c_intpush);
 					break;
 				case FLOAT:
-					g_lingo->code1(LC::c_floatpush);
+					code1(LC::c_floatpush);
 					break;
 				case STRING:
-					g_lingo->code1(LC::c_stringpush);
+					code1(LC::c_stringpush);
 					break;
 				default:
 					error("Unknown constant type %d", constant.type);
@@ -1297,27 +1298,27 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, L
 				}
 				switch (constant.type) {
 				case INT:
-					g_lingo->codeInt(constant.u.i);
+					codeInt(constant.u.i);
 					break;
 				case FLOAT:
-					g_lingo->codeFloat(constant.u.f);
+					codeFloat(constant.u.f);
 					break;
 				case STRING:
-					g_lingo->codeString(constant.u.s->c_str());
+					codeString(constant.u.s->c_str());
 					break;
 				default:
 					error("Unknown constant type %d", constant.type);
 					break;
 				}
-			} else if (_lingoV4.contains(opcode)) {
+			} else if (g_lingo->_lingoV4.contains(opcode)) {
 				offsetList.push_back(_currentAssembly->size());
-				g_lingo->code1(_lingoV4[opcode]->func);
+				code1(g_lingo->_lingoV4[opcode]->func);
 
-				size_t argc = strlen(_lingoV4[opcode]->proto);
+				size_t argc = strlen(g_lingo->_lingoV4[opcode]->proto);
 				if (argc) {
 					int arg = 0;
 					for (uint c = 0; c < argc; c++) {
-						switch (_lingoV4[opcode]->proto[c]) {
+						switch (g_lingo->_lingoV4[opcode]->proto[c]) {
 						case 'b':
 							// read one uint8 as an argument
 							offsetList.push_back(_currentAssembly->size());
@@ -1368,39 +1369,39 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, L
 							break;
 						}
 					}
-					g_lingo->codeInt(arg);
+					codeInt(arg);
 				}
 			} else {
 				// unimplemented instruction
 				if (opcode < 0x40) { // 1 byte instruction
 					debugC(5, kDebugCompile, "Unimplemented opcode: 0x%02x", opcode);
 					offsetList.push_back(_currentAssembly->size());
-					g_lingo->code1(LC::cb_unk);
-					g_lingo->codeInt(opcode);
+					code1(LC::cb_unk);
+					codeInt(opcode);
 				} else if (opcode < 0x80) { // 2 byte instruction
 					debugC(5, kDebugCompile, "Unimplemented opcode: 0x%02x (%d)", opcode, (uint)codeStore[pointer]);
 					offsetList.push_back(_currentAssembly->size());
-					g_lingo->code1(LC::cb_unk1);
-					g_lingo->codeInt(opcode);
+					code1(LC::cb_unk1);
+					codeInt(opcode);
 					offsetList.push_back(_currentAssembly->size());
-					g_lingo->codeInt((uint)codeStore[pointer]);
+					codeInt((uint)codeStore[pointer]);
 					pointer += 1;
 				} else { // 3 byte instruction
 					debugC(5, kDebugCompile, "Unimplemented opcode: 0x%02x (%d, %d)", opcode, (uint)codeStore[pointer], (uint)codeStore[pointer+1]);
 					offsetList.push_back(_currentAssembly->size());
-					g_lingo->code1(LC::cb_unk2);
-					g_lingo->codeInt(opcode);
+					code1(LC::cb_unk2);
+					codeInt(opcode);
 					offsetList.push_back(_currentAssembly->size());
-					g_lingo->codeInt((uint)codeStore[pointer]);
+					codeInt((uint)codeStore[pointer]);
 					offsetList.push_back(_currentAssembly->size());
-					g_lingo->codeInt((uint)codeStore[pointer+1]);
+					codeInt((uint)codeStore[pointer+1]);
 					pointer += 2;
 				}
 			}
 		}
 
 		// Add backstop
-		g_lingo->code1(STOP);
+		code1(STOP);
 
 		// Rewrite every offset flagged as a jump based on the new code alignment.
 		for (uint j = 0; j < jumpList.size(); j++) {
@@ -1424,7 +1425,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, L
 			functionName = archive->names[nameIndex];
 		} else if (i == 0 && (scriptFlags & kScriptFlagEventScript)) {
 			// event script (lingo not contained within a handler)
-			functionName = _eventHandlerTypes[kEventGeneric];
+			functionName = g_lingo->_eventHandlerTypes[kEventGeneric];
 		}
 
 		Symbol sym;
@@ -1460,7 +1461,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, L
 			uint pc = 0;
 			while (pc < _currentAssembly->size()) {
 				uint spc = pc;
-				Common::String instr = decodeInstruction(_assemblyArchive, _currentAssembly, pc, &pc);
+				Common::String instr = g_lingo->decodeInstruction(_assemblyArchive, _currentAssembly, pc, &pc);
 				out.writeString(Common::String::format("[%5d] %s\n", spc, instr.c_str()));
 			}
 			out.writeString(Common::String::format("<end code>\n\n"));
@@ -1482,7 +1483,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, L
 }
 
 void LingoArchive::addCodeV4(Common::SeekableReadStreamEndian &stream, uint16 lctxIndex, const Common::String &archName, uint16 version) {
-	ScriptContext *ctx = g_lingo->compileLingoV4(stream, this, archName, version);
+	ScriptContext *ctx = g_lingo->_compiler->compileLingoV4(stream, this, archName, version);
 	if (ctx) {
 		lctxContexts[lctxIndex] = ctx;
 		*ctx->_refCount += 1;
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 77c5893b5a..5731097e7d 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -47,56 +47,139 @@
 
 #include "director/director.h"
 #include "director/lingo/lingo.h"
+#include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-object.h"
 
 namespace Director {
 
-void Lingo::cleanLocalVars() {
-	// Clean up current scope local variables and clean up memory
-	debugC(3, kDebugLingoExec, "cleanLocalVars: have %d vars", _localvars->size());
+LingoCompiler::LingoCompiler() {
+	_assemblyAST = nullptr;
+	_assemblyArchive = nullptr;
+	_currentAssembly = nullptr;
+	_assemblyContext = nullptr;
 
-	g_lingo->_localvars->clear();
-	delete g_lingo->_localvars;
+	_indef = false;
 
-	g_lingo->_localvars = nullptr;
+	_linenumber = _colnumber = _bytenumber = 0;
+	_lines[0] = _lines[1] = _lines[2] = nullptr;
+
+	_inFactory = false;
+
+	_hadError = false;
 }
 
-Symbol ScriptContext::define(Common::String &name, int nargs, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames) {
-	Symbol sym;
-	sym.name = new Common::String(name);
-	sym.type = HANDLER;
-	sym.u.defn = code;
-	sym.nargs = nargs;
-	sym.maxArgs = nargs;
-	sym.argNames = argNames;
-	sym.varNames = varNames;
-	sym.ctx = this;
-	sym.archive = _archive;
+ScriptContext *LingoCompiler::compileAnonymous(const char *code) {
+	debugC(1, kDebugCompile, "Compiling anonymous lingo\n"
+			"***********\n%s\n\n***********", code);
 
-	if (debugChannelSet(1, kDebugCompile)) {
-		uint pc = 0;
-		while (pc < sym.u.defn->size()) {
-			uint spc = pc;
-			Common::String instr = g_lingo->decodeInstruction(_archive, sym.u.defn, pc, &pc);
-			debugC(1, kDebugCompile, "[%5d] %s", spc, instr.c_str());
-		}
-		debugC(1, kDebugCompile, "<end define code>");
+	return compileLingo(code, nullptr, kNoneScript, 0, "[anonymous]", true);
+}
+
+ScriptContext *LingoCompiler::compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonymous) {
+	_assemblyArchive = archive;
+	_assemblyAST = nullptr;
+	ScriptContext *mainContext = _assemblyContext = new ScriptContext(scriptName, archive, type, id);
+	_currentAssembly = new ScriptData;
+
+	_methodVars = new VarTypeHash;
+	_linenumber = _colnumber = 1;
+	_hadError = false;
+
+	if (!strncmp(code, "menu:", 5) || scumm_strcasestr(code, "\nmenu:")) {
+		debugC(1, kDebugCompile, "Parsing menu");
+		parseMenu(code);
+
+		return nullptr;
 	}
 
-	if (!g_lingo->_eventHandlerTypeIds.contains(name)) {
-		_functionHandlers[name] = sym;
-		if (_scriptType == kMovieScript && _archive && !_archive->functionHandlers.contains(name)) {
-			_archive->functionHandlers[name] = sym;
+	// Preprocess the code for ease of the parser
+	Common::String codeNorm = codePreprocessor(code, archive, type, id);
+	code = codeNorm.c_str();
+
+	// Parse the Lingo and build an AST
+	parse(code);
+
+	// Generate bytecode
+	if (_assemblyAST) {
+		_assemblyAST->compile();
+	}
+
+	// for D4 and above, there usually won't be any code left.
+	// all scoped methods will be defined and stored by the code parser
+	// however D3 and below allow scopeless functions!
+	// and these can show up in D4 when imported from other movies
+
+	if (!_currentAssembly->empty()) {
+		// end of script, add a c_procret so stack frames work as expected
+		code1(LC::c_procret);
+		code1(STOP);
+
+		if (debugChannelSet(3, kDebugCompile)) {
+			if (_currentAssembly->size() && !_hadError)
+				Common::hexdump((byte *)&_currentAssembly->front(), _currentAssembly->size() * sizeof(inst));
+
+			debugC(2, kDebugCompile, "<resulting code>");
+			uint pc = 0;
+			while (pc < _currentAssembly->size()) {
+				uint spc = pc;
+				Common::String instr = g_lingo->decodeInstruction(_assemblyArchive, _currentAssembly, pc, &pc);
+				debugC(2, kDebugCompile, "[%5d] %s", spc, instr.c_str());
+			}
+			debugC(2, kDebugCompile, "<end code>");
 		}
-	} else {
-		_eventHandlers[g_lingo->_eventHandlerTypeIds[name]] = sym;
+
+		Symbol currentFunc;
+
+		currentFunc.type = HANDLER;
+		currentFunc.u.defn = _currentAssembly;
+		Common::String typeStr = Common::String(scriptType2str(type));
+		currentFunc.name = new Common::String("[" + typeStr + " " + _assemblyContext->getName() + "]");
+		currentFunc.ctx = _assemblyContext;
+		currentFunc.archive = archive;
+		currentFunc.anonymous = anonymous;
+		// arg names should be empty, but just in case
+		Common::Array<Common::String> *argNames = new Common::Array<Common::String>;
+		for (uint i = 0; i < _argstack.size(); i++) {
+			argNames->push_back(Common::String(_argstack[i]->c_str()));
+		}
+		Common::Array<Common::String> *varNames = new Common::Array<Common::String>;
+		for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = _methodVars->begin(); it != _methodVars->end(); ++it) {
+			if (it->_value == kVarLocal)
+				varNames->push_back(Common::String(it->_key));
+		}
+
+		if (debugChannelSet(1, kDebugCompile)) {
+			debug("Function vars");
+			debugN("  Args: ");
+			for (uint i = 0; i < argNames->size(); i++) {
+				debugN("%s, ", (*argNames)[i].c_str());
+			}
+			debugN("\n");
+			debugN("  Local vars: ");
+			for (uint i = 0; i < varNames->size(); i++) {
+				debugN("%s, ", (*varNames)[i].c_str());
+			}
+			debugN("\n");
+		}
+
+		currentFunc.argNames = argNames;
+		currentFunc.varNames = varNames;
+		_assemblyContext->_eventHandlers[kEventGeneric] = currentFunc;
 	}
 
-	return sym;
+	delete _methodVars;
+	_methodVars = nullptr;
+	_currentAssembly = nullptr;
+	delete _assemblyAST;
+	_assemblyAST = nullptr;
+	_assemblyContext = nullptr;
+	_assemblyArchive = nullptr;
+	return mainContext;
 }
 
-Symbol Lingo::codeDefine(Common::String &name, int start, int nargs, int end, bool removeCode) {
+Symbol LingoCompiler::codeDefine(Common::String &name, int start, int nargs, int end, bool removeCode) {
 	if (debugChannelSet(-1, kDebugFewFramesOnly) || debugChannelSet(1, kDebugCompile))
 		debug("codeDefine(\"%s\"(len: %d), %d, %d, %d)",
 			name.c_str(), _currentAssembly->size() - 1, start, nargs, end);
@@ -140,7 +223,7 @@ Symbol Lingo::codeDefine(Common::String &name, int start, int nargs, int end, bo
 	return sym;
 }
 
-int Lingo::codeString(const char *str) {
+int LingoCompiler::codeString(const char *str) {
 	int numInsts = calcStringAlignment(str);
 
 	// Where we copy the string over
@@ -157,7 +240,7 @@ int Lingo::codeString(const char *str) {
 	return _currentAssembly->size();
 }
 
-int Lingo::codeFloat(double f) {
+int LingoCompiler::codeFloat(double f) {
 	int numInsts = calcCodeAlignment(sizeof(double));
 
 	// Where we copy the string over
@@ -174,15 +257,15 @@ int Lingo::codeFloat(double f) {
 	return _currentAssembly->size();
 }
 
-int Lingo::codeInt(int val) {
+int LingoCompiler::codeInt(int val) {
 	inst i = 0;
 	WRITE_UINT32(&i, val);
-	g_lingo->code1(i);
+	code1(i);
 
 	return _currentAssembly->size();
 }
 
-bool Lingo::isInArgStack(Common::String *s) {
+bool LingoCompiler::isInArgStack(Common::String *s) {
 	for (uint i = 0; i < _argstack.size(); i++)
 		if (_argstack[i]->equalsIgnoreCase(*s))
 			return true;
@@ -190,55 +273,55 @@ bool Lingo::isInArgStack(Common::String *s) {
 	return false;
 }
 
-void Lingo::codeArg(Common::String *s) {
+void LingoCompiler::codeArg(Common::String *s) {
 	_argstack.push_back(new Common::String(*s));
 }
 
-void Lingo::clearArgStack() {
+void LingoCompiler::clearArgStack() {
 	for (uint i = 0; i < _argstack.size(); i++)
 		delete _argstack[i];
 
 	_argstack.clear();
 }
 
-int Lingo::codeCmd(Common::String *s, int numpar) {
+int LingoCompiler::codeCmd(Common::String *s, int numpar) {
 	// Insert current line number to our asserts
 	if (s->equalsIgnoreCase("scummvmAssert") || s->equalsIgnoreCase("scummvmAssertEqual")) {
-		g_lingo->code1(LC::c_intpush);
-		g_lingo->codeInt(g_lingo->_linenumber);
+		code1(LC::c_intpush);
+		codeInt(_linenumber);
 
 		numpar++;
 	}
 
-	int ret = g_lingo->code1(LC::c_callcmd);
+	int ret = code1(LC::c_callcmd);
 
-	g_lingo->codeString(s->c_str());
+	codeString(s->c_str());
 
 	inst num = 0;
 	WRITE_UINT32(&num, numpar);
-	g_lingo->code1(num);
+	code1(num);
 
 	return ret;
 }
 
-int Lingo::codeFunc(Common::String *s, int numpar) {
-	int ret = g_lingo->code1(LC::c_callfunc);
+int LingoCompiler::codeFunc(Common::String *s, int numpar) {
+	int ret = code1(LC::c_callfunc);
 
-	g_lingo->codeString(s->c_str());
+	codeString(s->c_str());
 
 	inst num = 0;
 	WRITE_UINT32(&num, numpar);
-	g_lingo->code1(num);
+	code1(num);
 
 	return ret;
 }
 
-void Lingo::codeLabel(int label) {
+void LingoCompiler::codeLabel(int label) {
 	_labelstack.push_back(label);
 	debugC(4, kDebugCompile, "codeLabel: Added label %d", label);
 }
 
-void Lingo::processIf(int toplabel, int endlabel) {
+void LingoCompiler::processIf(int toplabel, int endlabel) {
 	inst iend;
 
 	debugC(4, kDebugCompile, "processIf(%d, %d)", toplabel, endlabel);
@@ -264,27 +347,31 @@ void Lingo::processIf(int toplabel, int endlabel) {
 	}
 }
 
-void Lingo::registerMethodVar(const Common::String &name, VarType type) {
-	if (!g_lingo->_methodVars->contains(name)) {
-		(*g_lingo->_methodVars)[name] = type;
+void LingoCompiler::registerMethodVar(const Common::String &name, VarType type) {
+	if (!_methodVars->contains(name)) {
+		(*_methodVars)[name] = type;
 		if (type == kVarProperty || type == kVarInstance) {
-			g_lingo->_assemblyContext->_properties[name] = Datum();
+			_assemblyContext->_properties[name] = Datum();
 		} else if (type == kVarGlobal) {
 			g_lingo->_globalvars[name] = Datum();
 		}
 	}
 }
 
-void Lingo::codeFactory(Common::String &name) {
+void LingoCompiler::codeFactory(Common::String &name) {
 	// FIXME: The factory's context should not be tied to the LingoArchive
 	// but bytecode needs it to resolve names
 	_assemblyContext->setName(name);
 	_assemblyContext->setFactory(true);
-	if (!_globalvars.contains(name)) {
-		_globalvars[name] = _assemblyContext;
+	if (!g_lingo->_globalvars.contains(name)) {
+		g_lingo->_globalvars[name] = _assemblyContext;
 	} else {
 		warning("Factory '%s' already defined", name.c_str());
 	}
 }
 
+void LingoCompiler::parseMenu(const char *code) {
+	warning("STUB: parseMenu");
+}
+
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
new file mode 100644
index 0000000000..3570713ffd
--- /dev/null
+++ b/engines/director/lingo/lingo-codegen.h
@@ -0,0 +1,91 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef DIRECTOR_LINGO_LINGO_CODEGEN_H
+#define DIRECTOR_LINGO_LINGO_CODEGEN_H
+
+#include "director/types.h"
+#include "director/lingo/lingo.h"
+
+namespace Director {
+
+class LingoCompiler {
+public:
+	LingoCompiler();
+
+	ScriptContext *compileAnonymous(const char *code);
+	ScriptContext *compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonyomous = false);
+	ScriptContext *compileLingoV4(Common::SeekableReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName, uint16 version);
+
+	bool isInArgStack(Common::String *s);
+	void clearArgStack();
+
+	int code1(inst code) { _currentAssembly->push_back(code); return _currentAssembly->size() - 1; }
+	int code2(inst code_1, inst code_2) { int o = code1(code_1); code1(code_2); return o; }
+	int code3(inst code_1, inst code_2, inst code_3) { int o = code1(code_1); code1(code_2); code1(code_3); return o; }
+	int code4(inst code_1, inst code_2, inst code_3, inst code_4) { int o = code1(code_1); code1(code_2); code1(code_3); code1(code_4); return o; }
+	void codeArg(Common::String *s);
+	int codeCmd(Common::String *s, int numpar);
+	Symbol codeDefine(Common::String &s, int start, int nargs, int end = -1, bool removeCode = true);
+	void codeFactory(Common::String &s);
+	int codeFloat(double f);
+	int codeFunc(Common::String *s, int numpar);
+	int codeInt(int val);
+	void codeLabel(int label);
+	int codeString(const char *s);
+	void processIf(int toplabel, int endlabel);
+	void registerMethodVar(const Common::String &name, VarType type);
+
+	LingoArchive *_assemblyArchive;
+	ScriptContext *_assemblyContext;
+	Node *_assemblyAST;
+	ScriptData *_currentAssembly;
+	bool _indef;
+	uint _linenumber;
+	uint _colnumber;
+	uint _bytenumber;
+	const char *_lines[3];
+	bool _inFactory;
+
+	Common::Array<Common::String *> _argstack;
+	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
+	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVarsStash;
+
+	Common::Array<int> _labelstack;
+
+	bool _hadError;
+
+private:
+	int parse(const char *code);
+	void parseMenu(const char *code);
+
+public:
+	// lingo-preprocessor.cpp
+	Common::String codePreprocessor(const char *s, LingoArchive *archive, ScriptType type, uint16 id, bool simple = false);
+
+	// lingo-patcher.cpp
+	Common::String patchLingoCode(Common::String &line, LingoArchive *archive, ScriptType type, uint16 id, int linenumber);
+};
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 11d6da5b0b..6316cc508e 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -79,6 +79,7 @@
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-object.h"
 
@@ -88,25 +89,26 @@ extern int yyparse();
 using namespace Director;
 
 static void yyerror(const char *s) {
-	g_lingo->_hadError = true;
+	LingoCompiler *compiler = g_lingo->_compiler;
+	compiler->_hadError = true;
 	warning("######################  LINGO: %s at line %d col %d in %s id: %d",
-		s, g_lingo->_linenumber, g_lingo->_colnumber, scriptType2str(g_lingo->_assemblyContext->_scriptType),
-		g_lingo->_assemblyContext->_id);
-	if (g_lingo->_lines[2] != g_lingo->_lines[1])
-		warning("# %3d: %s", g_lingo->_linenumber - 2, Common::String(g_lingo->_lines[2], g_lingo->_lines[1] - 1).c_str());
+		s, compiler->_linenumber, compiler->_colnumber, scriptType2str(compiler->_assemblyContext->_scriptType),
+		compiler->_assemblyContext->_id);
+	if (compiler->_lines[2] != compiler->_lines[1])
+		warning("# %3d: %s", compiler->_linenumber - 2, Common::String(compiler->_lines[2], compiler->_lines[1] - 1).c_str());
 
-	if (g_lingo->_lines[1] != g_lingo->_lines[0])
-		warning("# %3d: %s", g_lingo->_linenumber - 1, Common::String(g_lingo->_lines[1], g_lingo->_lines[0] - 1).c_str());
+	if (compiler->_lines[1] != compiler->_lines[0])
+		warning("# %3d: %s", compiler->_linenumber - 1, Common::String(compiler->_lines[1], compiler->_lines[0] - 1).c_str());
 
-	const char *ptr = g_lingo->_lines[0];
+	const char *ptr = compiler->_lines[0];
 
 	while (*ptr && *ptr != '\n')
 		ptr++;
 
-	warning("# %3d: %s", g_lingo->_linenumber, Common::String(g_lingo->_lines[0], ptr).c_str());
+	warning("# %3d: %s", compiler->_linenumber, Common::String(compiler->_lines[0], ptr).c_str());
 
 	Common::String arrow;
-	for (uint i = 0; i < g_lingo->_colnumber; i++)
+	for (uint i = 0; i < compiler->_colnumber; i++)
 		arrow += ' ';
 
 	warning("#      %s^ about here", arrow.c_str());
@@ -122,7 +124,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 }
 
 
-#line 126 "engines/director/lingo/lingo-gr.cpp"
+#line 128 "engines/director/lingo/lingo-gr.cpp"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -654,18 +656,18 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   188,   188,   190,   196,   203,   204,   205,   206,   207,
-     236,   240,   242,   244,   245,   248,   254,   261,   262,   267,
-     271,   275,   276,   277,   282,   283,   284,   285,   286,   287,
-     288,   291,   293,   296,   298,   299,   300,   301,   304,   305,
-     306,   307,   308,   310,   311,   312,   313,   314,   316,   317,
-     318,   319,   320,   321,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   334,   335,   338,   342,   349,   351,   352,
-     355,   356,   359,   360,   361,   364,   365,   369,   375,   382,
-     383,   388,   389,   390,   391,   392,   393,   394,   395,   396,
-     399,   400,   403,   404,   405,   406,   407,   408,   409,   410,
-     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
-     423,   424,   427,   431
+       0,   190,   190,   192,   198,   205,   206,   207,   208,   209,
+     238,   242,   244,   246,   247,   250,   256,   263,   264,   269,
+     273,   277,   278,   279,   284,   285,   286,   287,   288,   289,
+     290,   293,   295,   298,   300,   301,   302,   303,   306,   307,
+     308,   309,   310,   312,   313,   314,   315,   316,   318,   319,
+     320,   321,   322,   323,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   336,   337,   340,   344,   351,   353,   354,
+     357,   358,   361,   362,   363,   366,   367,   371,   377,   384,
+     385,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+     401,   402,   405,   406,   407,   408,   409,   410,   411,   412,
+     413,   414,   415,   416,   417,   418,   419,   420,   421,   422,
+     425,   426,   429,   433
 };
 #endif
 
@@ -1247,51 +1249,51 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1253 "engines/director/lingo/lingo-gr.cpp"
+#line 1255 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1259 "engines/director/lingo/lingo-gr.cpp"
+#line 1261 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1265 "engines/director/lingo/lingo-gr.cpp"
+#line 1267 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1271 "engines/director/lingo/lingo-gr.cpp"
+#line 1273 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1277 "engines/director/lingo/lingo-gr.cpp"
+#line 1279 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1283 "engines/director/lingo/lingo-gr.cpp"
+#line 1285 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1289 "engines/director/lingo/lingo-gr.cpp"
+#line 1291 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1295 "engines/director/lingo/lingo-gr.cpp"
+#line 1297 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -1557,624 +1559,624 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* script: scriptpartlist  */
-#line 188 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 1563 "engines/director/lingo/lingo-gr.cpp"
+#line 190 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
+#line 1565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1574 "engines/director/lingo/lingo-gr.cpp"
+#line 1576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
-#line 196 "engines/director/lingo/lingo-gr.y"
+#line 198 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1584 "engines/director/lingo/lingo-gr.cpp"
+#line 1586 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
-#line 203 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 1590 "engines/director/lingo/lingo-gr.cpp"
+#line 1592 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
-#line 236 "engines/director/lingo/lingo-gr.y"
+#line 238 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1596 "engines/director/lingo/lingo-gr.cpp"
+#line 1598 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
-#line 240 "engines/director/lingo/lingo-gr.y"
+#line 242 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 1602 "engines/director/lingo/lingo-gr.cpp"
+#line 1604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
-#line 242 "engines/director/lingo/lingo-gr.y"
+#line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1608 "engines/director/lingo/lingo-gr.cpp"
+#line 1610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
-#line 244 "engines/director/lingo/lingo-gr.y"
+#line 246 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 1614 "engines/director/lingo/lingo-gr.cpp"
+#line 1616 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
-#line 248 "engines/director/lingo/lingo-gr.y"
+#line 250 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1625 "engines/director/lingo/lingo-gr.cpp"
+#line 1627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
-#line 254 "engines/director/lingo/lingo-gr.y"
+#line 256 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 1635 "engines/director/lingo/lingo-gr.cpp"
+#line 1637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
-#line 261 "engines/director/lingo/lingo-gr.y"
+#line 263 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 1641 "engines/director/lingo/lingo-gr.cpp"
+#line 1643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
-#line 267 "engines/director/lingo/lingo-gr.y"
+#line 269 "engines/director/lingo/lingo-gr.y"
                                                                {	// D3
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 1650 "engines/director/lingo/lingo-gr.cpp"
+#line 1652 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
-#line 271 "engines/director/lingo/lingo-gr.y"
+#line 273 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1657 "engines/director/lingo/lingo-gr.cpp"
+#line 1659 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
-#line 276 "engines/director/lingo/lingo-gr.y"
+#line 278 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 1663 "engines/director/lingo/lingo-gr.cpp"
+#line 1665 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
-#line 277 "engines/director/lingo/lingo-gr.y"
+#line 279 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 1669 "engines/director/lingo/lingo-gr.cpp"
+#line 1671 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
-#line 283 "engines/director/lingo/lingo-gr.y"
+#line 285 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 1675 "engines/director/lingo/lingo-gr.cpp"
+#line 1677 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
-#line 284 "engines/director/lingo/lingo-gr.y"
+#line 286 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 1681 "engines/director/lingo/lingo-gr.cpp"
+#line 1683 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
-#line 285 "engines/director/lingo/lingo-gr.y"
+#line 287 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 1687 "engines/director/lingo/lingo-gr.cpp"
+#line 1689 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
-#line 286 "engines/director/lingo/lingo-gr.y"
+#line 288 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 1693 "engines/director/lingo/lingo-gr.cpp"
+#line 1695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
-#line 287 "engines/director/lingo/lingo-gr.y"
+#line 289 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 1699 "engines/director/lingo/lingo-gr.cpp"
+#line 1701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
-#line 288 "engines/director/lingo/lingo-gr.y"
+#line 290 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 1705 "engines/director/lingo/lingo-gr.cpp"
+#line 1707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tEXIT  */
-#line 291 "engines/director/lingo/lingo-gr.y"
+#line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 1711 "engines/director/lingo/lingo-gr.cpp"
+#line 1713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFIELD  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 1717 "engines/director/lingo/lingo-gr.cpp"
+#line 1719 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
-#line 296 "engines/director/lingo/lingo-gr.y"
+#line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 1723 "engines/director/lingo/lingo-gr.cpp"
+#line 1725 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
-#line 298 "engines/director/lingo/lingo-gr.y"
+#line 300 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 1729 "engines/director/lingo/lingo-gr.cpp"
+#line 1731 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
-#line 299 "engines/director/lingo/lingo-gr.y"
+#line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 1735 "engines/director/lingo/lingo-gr.cpp"
+#line 1737 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
-#line 300 "engines/director/lingo/lingo-gr.y"
+#line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 1741 "engines/director/lingo/lingo-gr.cpp"
+#line 1743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
-#line 301 "engines/director/lingo/lingo-gr.y"
+#line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 1747 "engines/director/lingo/lingo-gr.cpp"
+#line 1749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
-#line 304 "engines/director/lingo/lingo-gr.y"
+#line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 1753 "engines/director/lingo/lingo-gr.cpp"
+#line 1755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
-#line 305 "engines/director/lingo/lingo-gr.y"
+#line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 1759 "engines/director/lingo/lingo-gr.cpp"
+#line 1761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
-#line 306 "engines/director/lingo/lingo-gr.y"
+#line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 1765 "engines/director/lingo/lingo-gr.cpp"
+#line 1767 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 1771 "engines/director/lingo/lingo-gr.cpp"
+#line 1773 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 1777 "engines/director/lingo/lingo-gr.cpp"
+#line 1779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 1783 "engines/director/lingo/lingo-gr.cpp"
+#line 1785 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
-#line 311 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 1789 "engines/director/lingo/lingo-gr.cpp"
+#line 1791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPLAY  */
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 1795 "engines/director/lingo/lingo-gr.cpp"
+#line 1797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tPLAYACCEL  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("playAccel"); }
-#line 1801 "engines/director/lingo/lingo-gr.cpp"
+#line 1803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tPREVIOUS  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 1807 "engines/director/lingo/lingo-gr.cpp"
+#line 1809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tPUT  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 1813 "engines/director/lingo/lingo-gr.cpp"
+#line 1815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tREPEAT  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 1819 "engines/director/lingo/lingo-gr.cpp"
+#line 1821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tSCRIPT  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 1825 "engines/director/lingo/lingo-gr.cpp"
+#line 1827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tSET  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+#line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 1831 "engines/director/lingo/lingo-gr.cpp"
+#line 1833 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tSTARTS  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+#line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 1837 "engines/director/lingo/lingo-gr.cpp"
+#line 1839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tTELL  */
-#line 321 "engines/director/lingo/lingo-gr.y"
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 1843 "engines/director/lingo/lingo-gr.cpp"
+#line 1845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tTO  */
-#line 323 "engines/director/lingo/lingo-gr.y"
+#line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 1849 "engines/director/lingo/lingo-gr.cpp"
+#line 1851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tASSERTERROR  */
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 1855 "engines/director/lingo/lingo-gr.cpp"
+#line 1857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tSPRITE  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 1861 "engines/director/lingo/lingo-gr.cpp"
+#line 1863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWHEN  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 1867 "engines/director/lingo/lingo-gr.cpp"
+#line 1869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWHILE  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 1873 "engines/director/lingo/lingo-gr.cpp"
+#line 1875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWINDOW  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 1879 "engines/director/lingo/lingo-gr.cpp"
+#line 1881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* ID: tWITH  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 1885 "engines/director/lingo/lingo-gr.cpp"
+#line 1887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* ID: tWITHIN  */
-#line 330 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 1891 "engines/director/lingo/lingo-gr.cpp"
+#line 1893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* ID: tWORD  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 1897 "engines/director/lingo/lingo-gr.cpp"
+#line 1899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* idlist: %empty  */
-#line 334 "engines/director/lingo/lingo-gr.y"
+#line 336 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 1903 "engines/director/lingo/lingo-gr.cpp"
+#line 1905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* nonemptyidlist: ID  */
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 340 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 1912 "engines/director/lingo/lingo-gr.cpp"
+#line 1914 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 342 "engines/director/lingo/lingo-gr.y"
+#line 344 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 1920 "engines/director/lingo/lingo-gr.cpp"
+#line 1922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* proc: ID '(' exprlist ')'  */
-#line 355 "engines/director/lingo/lingo-gr.y"
+#line 357 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new CmdNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 1926 "engines/director/lingo/lingo-gr.cpp"
+#line 1928 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* proc: ID exprlist  */
-#line 356 "engines/director/lingo/lingo-gr.y"
+#line 358 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-1].s), (yyvsp[0].nodelist)); }
-#line 1932 "engines/director/lingo/lingo-gr.cpp"
+#line 1934 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* definevars: tGLOBAL idlist  */
-#line 359 "engines/director/lingo/lingo-gr.y"
+#line 361 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[0].idlist)); }
-#line 1938 "engines/director/lingo/lingo-gr.cpp"
+#line 1940 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* definevars: tPROPERTY idlist  */
-#line 360 "engines/director/lingo/lingo-gr.y"
+#line 362 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[0].idlist)); }
-#line 1944 "engines/director/lingo/lingo-gr.cpp"
+#line 1946 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* definevars: tINSTANCE idlist  */
-#line 361 "engines/director/lingo/lingo-gr.y"
+#line 363 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[0].idlist)); }
-#line 1950 "engines/director/lingo/lingo-gr.cpp"
+#line 1952 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* stmtlist: %empty  */
-#line 364 "engines/director/lingo/lingo-gr.y"
+#line 366 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 1956 "engines/director/lingo/lingo-gr.cpp"
+#line 1958 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* nonemptystmtlist: stmtlistline  */
-#line 369 "engines/director/lingo/lingo-gr.y"
+#line 371 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1967 "engines/director/lingo/lingo-gr.cpp"
+#line 1969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+#line 377 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1977 "engines/director/lingo/lingo-gr.cpp"
+#line 1979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* stmtlistline: '\n'  */
-#line 382 "engines/director/lingo/lingo-gr.y"
+#line 384 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 1983 "engines/director/lingo/lingo-gr.cpp"
+#line 1985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* simpleexprnoparens: tINT  */
-#line 388 "engines/director/lingo/lingo-gr.y"
+#line 390 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 1989 "engines/director/lingo/lingo-gr.cpp"
+#line 1991 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* simpleexprnoparens: tFLOAT  */
-#line 389 "engines/director/lingo/lingo-gr.y"
+#line 391 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 1995 "engines/director/lingo/lingo-gr.cpp"
+#line 1997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* simpleexprnoparens: tSYMBOL  */
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 392 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2001 "engines/director/lingo/lingo-gr.cpp"
+#line 2003 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* simpleexprnoparens: tSTRING  */
-#line 391 "engines/director/lingo/lingo-gr.y"
+#line 393 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2007 "engines/director/lingo/lingo-gr.cpp"
+#line 2009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* simpleexprnoparens: '+' simpleexpr  */
-#line 392 "engines/director/lingo/lingo-gr.y"
+#line 394 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[0].node); }
-#line 2013 "engines/director/lingo/lingo-gr.cpp"
+#line 2015 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* simpleexprnoparens: '-' simpleexpr  */
-#line 393 "engines/director/lingo/lingo-gr.y"
+#line 395 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2019 "engines/director/lingo/lingo-gr.cpp"
+#line 2021 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 396 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2025 "engines/director/lingo/lingo-gr.cpp"
+#line 2027 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* simpleexprnoparens: ID '(' exprlist ')'  */
-#line 395 "engines/director/lingo/lingo-gr.y"
+#line 397 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2031 "engines/director/lingo/lingo-gr.cpp"
+#line 2033 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* simpleexprnoparens: ID  */
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2037 "engines/director/lingo/lingo-gr.cpp"
+#line 2039 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* simpleexpr: '(' expr ')'  */
-#line 400 "engines/director/lingo/lingo-gr.y"
+#line 402 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2043 "engines/director/lingo/lingo-gr.cpp"
+#line 2045 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* expr: simpleexpr  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+#line 405 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2049 "engines/director/lingo/lingo-gr.cpp"
+#line 2051 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* expr: expr '+' expr  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+#line 406 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2055 "engines/director/lingo/lingo-gr.cpp"
+#line 2057 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* expr: expr '-' expr  */
-#line 405 "engines/director/lingo/lingo-gr.y"
+#line 407 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2061 "engines/director/lingo/lingo-gr.cpp"
+#line 2063 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* expr: expr '*' expr  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+#line 408 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2067 "engines/director/lingo/lingo-gr.cpp"
+#line 2069 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* expr: expr '/' expr  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 409 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2073 "engines/director/lingo/lingo-gr.cpp"
+#line 2075 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* expr: expr tMOD expr  */
-#line 408 "engines/director/lingo/lingo-gr.y"
+#line 410 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2079 "engines/director/lingo/lingo-gr.cpp"
+#line 2081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* expr: expr '>' expr  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+#line 411 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2085 "engines/director/lingo/lingo-gr.cpp"
+#line 2087 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* expr: expr '<' expr  */
-#line 410 "engines/director/lingo/lingo-gr.y"
+#line 412 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2091 "engines/director/lingo/lingo-gr.cpp"
+#line 2093 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100: /* expr: expr tEQ expr  */
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 413 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2097 "engines/director/lingo/lingo-gr.cpp"
+#line 2099 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* expr: expr tNEQ expr  */
-#line 412 "engines/director/lingo/lingo-gr.y"
+#line 414 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2103 "engines/director/lingo/lingo-gr.cpp"
+#line 2105 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102: /* expr: expr tGE expr  */
-#line 413 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2109 "engines/director/lingo/lingo-gr.cpp"
+#line 2111 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* expr: expr tLE expr  */
-#line 414 "engines/director/lingo/lingo-gr.y"
+#line 416 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2115 "engines/director/lingo/lingo-gr.cpp"
+#line 2117 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104: /* expr: expr tAND expr  */
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 417 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2121 "engines/director/lingo/lingo-gr.cpp"
+#line 2123 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* expr: expr tOR expr  */
-#line 416 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2127 "engines/director/lingo/lingo-gr.cpp"
+#line 2129 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* expr: expr '&' expr  */
-#line 417 "engines/director/lingo/lingo-gr.y"
+#line 419 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2133 "engines/director/lingo/lingo-gr.cpp"
+#line 2135 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* expr: expr tCONCAT expr  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 420 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2139 "engines/director/lingo/lingo-gr.cpp"
+#line 2141 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* expr: expr tCONTAINS expr  */
-#line 419 "engines/director/lingo/lingo-gr.y"
+#line 421 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2145 "engines/director/lingo/lingo-gr.cpp"
+#line 2147 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* expr: expr tSTARTS expr  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+#line 422 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2151 "engines/director/lingo/lingo-gr.cpp"
+#line 2153 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* exprlist: %empty  */
-#line 423 "engines/director/lingo/lingo-gr.y"
+#line 425 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 2157 "engines/director/lingo/lingo-gr.cpp"
+#line 2159 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* nonemptyexprlist: expr  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+#line 429 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2166 "engines/director/lingo/lingo-gr.cpp"
+#line 2168 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 431 "engines/director/lingo/lingo-gr.y"
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2174 "engines/director/lingo/lingo-gr.cpp"
+#line 2176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 2178 "engines/director/lingo/lingo-gr.cpp"
+#line 2180 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -2373,7 +2375,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 436 "engines/director/lingo/lingo-gr.y"
+#line 438 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 711e188b77..4fd31614ed 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -137,7 +137,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 109 "engines/director/lingo/lingo-gr.y"
+#line 111 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 87a1199f35..28838519be 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -62,6 +62,7 @@
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-object.h"
 
@@ -71,25 +72,26 @@ extern int yyparse();
 using namespace Director;
 
 static void yyerror(const char *s) {
-	g_lingo->_hadError = true;
+	LingoCompiler *compiler = g_lingo->_compiler;
+	compiler->_hadError = true;
 	warning("######################  LINGO: %s at line %d col %d in %s id: %d",
-		s, g_lingo->_linenumber, g_lingo->_colnumber, scriptType2str(g_lingo->_assemblyContext->_scriptType),
-		g_lingo->_assemblyContext->_id);
-	if (g_lingo->_lines[2] != g_lingo->_lines[1])
-		warning("# %3d: %s", g_lingo->_linenumber - 2, Common::String(g_lingo->_lines[2], g_lingo->_lines[1] - 1).c_str());
+		s, compiler->_linenumber, compiler->_colnumber, scriptType2str(compiler->_assemblyContext->_scriptType),
+		compiler->_assemblyContext->_id);
+	if (compiler->_lines[2] != compiler->_lines[1])
+		warning("# %3d: %s", compiler->_linenumber - 2, Common::String(compiler->_lines[2], compiler->_lines[1] - 1).c_str());
 
-	if (g_lingo->_lines[1] != g_lingo->_lines[0])
-		warning("# %3d: %s", g_lingo->_linenumber - 1, Common::String(g_lingo->_lines[1], g_lingo->_lines[0] - 1).c_str());
+	if (compiler->_lines[1] != compiler->_lines[0])
+		warning("# %3d: %s", compiler->_linenumber - 1, Common::String(compiler->_lines[1], compiler->_lines[0] - 1).c_str());
 
-	const char *ptr = g_lingo->_lines[0];
+	const char *ptr = compiler->_lines[0];
 
 	while (*ptr && *ptr != '\n')
 		ptr++;
 
-	warning("# %3d: %s", g_lingo->_linenumber, Common::String(g_lingo->_lines[0], ptr).c_str());
+	warning("# %3d: %s", compiler->_linenumber, Common::String(compiler->_lines[0], ptr).c_str());
 
 	Common::String arrow;
-	for (uint i = 0; i < g_lingo->_colnumber; i++)
+	for (uint i = 0; i < compiler->_colnumber; i++)
 		arrow += ' ';
 
 	warning("#      %s^ about here", arrow.c_str());
@@ -185,7 +187,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 
 // TOP-LEVEL STUFF
 
-script: scriptpartlist					{ g_lingo->_assemblyAST = new ScriptNode($scriptpartlist); } ;
+script: scriptpartlist					{ g_lingo->_compiler->_assemblyAST = new ScriptNode($scriptpartlist); } ;
 
 scriptpartlist: scriptpart[item]				{
 		NodeList *list = new NodeList;
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 4a6358a57b..cfaccbaa00 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -757,6 +757,7 @@ char *yytext;
 #include "director/director.h"
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-ast.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-the.h"
 
@@ -768,32 +769,36 @@ static uint inputlen;
 
 // Push lines in stack
 static void pushLine(uint num) {
+	LingoCompiler *compiler = g_lingo->_compiler;
+
 	if (num > inputlen)
 		return;
 
-	g_lingo->_lines[2] = g_lingo->_lines[1];
-	g_lingo->_lines[1] = g_lingo->_lines[0];
-	g_lingo->_lines[0] = &inputbuffer[num];
+	compiler->_lines[2] = compiler->_lines[1];
+	compiler->_lines[1] = compiler->_lines[0];
+	compiler->_lines[0] = &inputbuffer[num];
 }
 
 static void count() {
+	LingoCompiler *compiler = g_lingo->_compiler;
+
 	if (debugChannelSet(-1, kDebugParse))
-		debug("LEXER: Read '%s' at %d:%d", yytext, g_lingo->_linenumber, g_lingo->_colnumber);
+		debug("LEXER: Read '%s' at %d:%d", yytext, compiler->_linenumber, compiler->_colnumber);
 
 	char *p = yytext;
 
 	while (*p) {
 		if (*p == '\n' || *p == '\xC2') {
-			g_lingo->_linenumber++;
-			g_lingo->_colnumber = 0;
+			compiler->_linenumber++;
+			compiler->_colnumber = 0;
 
 			if (*p == '\n')
-				pushLine(g_lingo->_bytenumber + 1);
+				pushLine(compiler->_bytenumber + 1);
 		} else {
-			g_lingo->_colnumber++;
+			compiler->_colnumber++;
 		}
 		p++;
-		g_lingo->_bytenumber++;
+		compiler->_bytenumber++;
 	}
 }
 
@@ -813,8 +818,8 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-#line 816 "engines/director/lingo/lingo-lex.cpp"
-#line 817 "engines/director/lingo/lingo-lex.cpp"
+#line 821 "engines/director/lingo/lingo-lex.cpp"
+#line 822 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1034,10 +1039,10 @@ YY_DECL
 		}
 
 	{
-#line 106 "engines/director/lingo/lingo-lex.l"
+#line 111 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1040 "engines/director/lingo/lingo-lex.cpp"
+#line 1045 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1093,67 +1098,67 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 108 "engines/director/lingo/lingo-lex.l"
+#line 113 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 110 "engines/director/lingo/lingo-lex.l"
+#line 115 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 112 "engines/director/lingo/lingo-lex.l"
+#line 117 "engines/director/lingo/lingo-lex.l"
 { count(); return tAFTER; }		// D3
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 113 "engines/director/lingo/lingo-lex.l"
+#line 118 "engines/director/lingo/lingo-lex.l"
 { count(); return tAND; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 114 "engines/director/lingo/lingo-lex.l"
+#line 119 "engines/director/lingo/lingo-lex.l"
 { count(); return tBEFORE; }	// D3
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 115 "engines/director/lingo/lingo-lex.l"
+#line 120 "engines/director/lingo/lingo-lex.l"
 { count(); return tCAST; }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 116 "engines/director/lingo/lingo-lex.l"
+#line 121 "engines/director/lingo/lingo-lex.l"
 { count(); return tCHAR; }		// D3
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 117 "engines/director/lingo/lingo-lex.l"
+#line 122 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONTAINS; }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 118 "engines/director/lingo/lingo-lex.l"
+#line 123 "engines/director/lingo/lingo-lex.l"
 { count(); return tDOWN; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 119 "engines/director/lingo/lingo-lex.l"
+#line 124 "engines/director/lingo/lingo-lex.l"
 { count(); return tIF; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 120 "engines/director/lingo/lingo-lex.l"
+#line 125 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSIF; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 121 "engines/director/lingo/lingo-lex.l"
+#line 126 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSE; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 122 "engines/director/lingo/lingo-lex.l"
+#line 127 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1175,177 +1180,177 @@ YY_RULE_SETUP
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 140 "engines/director/lingo/lingo-lex.l"
+#line 145 "engines/director/lingo/lingo-lex.l"
 { count(); return tFACTORY; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 141 "engines/director/lingo/lingo-lex.l"
+#line 146 "engines/director/lingo/lingo-lex.l"
 { count(); return tEXIT; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 142 "engines/director/lingo/lingo-lex.l"
+#line 147 "engines/director/lingo/lingo-lex.l"
 { count(); return tFIELD; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 143 "engines/director/lingo/lingo-lex.l"
+#line 148 "engines/director/lingo/lingo-lex.l"
 { count(); return tGLOBAL; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 144 "engines/director/lingo/lingo-lex.l"
+#line 149 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 145 "engines/director/lingo/lingo-lex.l"
+#line 150 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 146 "engines/director/lingo/lingo-lex.l"
+#line 151 "engines/director/lingo/lingo-lex.l"
 { count(); return tGOLOOP; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 147 "engines/director/lingo/lingo-lex.l"
+#line 152 "engines/director/lingo/lingo-lex.l"
 { count(); return tINSTANCE; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 148 "engines/director/lingo/lingo-lex.l"
+#line 153 "engines/director/lingo/lingo-lex.l"
 { count(); return tINTERSECTS;}
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 149 "engines/director/lingo/lingo-lex.l"
+#line 154 "engines/director/lingo/lingo-lex.l"
 { count(); return tINTO; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 150 "engines/director/lingo/lingo-lex.l"
+#line 155 "engines/director/lingo/lingo-lex.l"
 { count(); return tIN; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 151 "engines/director/lingo/lingo-lex.l"
+#line 156 "engines/director/lingo/lingo-lex.l"
 { count(); return tITEM; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 152 "engines/director/lingo/lingo-lex.l"
+#line 157 "engines/director/lingo/lingo-lex.l"
 { count(); return tLINE; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 153 "engines/director/lingo/lingo-lex.l"
+#line 158 "engines/director/lingo/lingo-lex.l"
 { count(); return tMACRO;; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 154 "engines/director/lingo/lingo-lex.l"
+#line 159 "engines/director/lingo/lingo-lex.l"
 { count(); return tMETHOD; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 155 "engines/director/lingo/lingo-lex.l"
+#line 160 "engines/director/lingo/lingo-lex.l"
 { count(); return tMOD;}
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 156 "engines/director/lingo/lingo-lex.l"
+#line 161 "engines/director/lingo/lingo-lex.l"
 { count(); return tMOVIE; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 157 "engines/director/lingo/lingo-lex.l"
+#line 162 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEXT; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 158 "engines/director/lingo/lingo-lex.l"
+#line 163 "engines/director/lingo/lingo-lex.l"
 { count(); return tNOT; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 159 "engines/director/lingo/lingo-lex.l"
+#line 164 "engines/director/lingo/lingo-lex.l"
 { count(); return tOF; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 160 "engines/director/lingo/lingo-lex.l"
+#line 165 "engines/director/lingo/lingo-lex.l"
 { count(); return tON; }		// D3
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 161 "engines/director/lingo/lingo-lex.l"
+#line 166 "engines/director/lingo/lingo-lex.l"
 { count(); return tOPEN; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 162 "engines/director/lingo/lingo-lex.l"
+#line 167 "engines/director/lingo/lingo-lex.l"
 { count(); return tOR; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 163 "engines/director/lingo/lingo-lex.l"
+#line 168 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAY; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 164 "engines/director/lingo/lingo-lex.l"
+#line 169 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAY; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 165 "engines/director/lingo/lingo-lex.l"
+#line 170 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAYACCEL; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 166 "engines/director/lingo/lingo-lex.l"
+#line 171 "engines/director/lingo/lingo-lex.l"
 { count(); return tPREVIOUS; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 167 "engines/director/lingo/lingo-lex.l"
+#line 172 "engines/director/lingo/lingo-lex.l"
 { count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 168 "engines/director/lingo/lingo-lex.l"
+#line 173 "engines/director/lingo/lingo-lex.l"
 { count(); return tPUT; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 169 "engines/director/lingo/lingo-lex.l"
+#line 174 "engines/director/lingo/lingo-lex.l"
 { count(); return tREPEAT; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 170 "engines/director/lingo/lingo-lex.l"
+#line 175 "engines/director/lingo/lingo-lex.l"
 { count(); return tSCRIPT; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 171 "engines/director/lingo/lingo-lex.l"
+#line 176 "engines/director/lingo/lingo-lex.l"
 { count(); return tSET; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 172 "engines/director/lingo/lingo-lex.l"
+#line 177 "engines/director/lingo/lingo-lex.l"
 { count(); return tSTARTS; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 173 "engines/director/lingo/lingo-lex.l"
+#line 178 "engines/director/lingo/lingo-lex.l"
 { count(); return tTELL; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 174 "engines/director/lingo/lingo-lex.l"
+#line 179 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1384,7 +1389,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 209 "engines/director/lingo/lingo-lex.l"
+#line 214 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1410,7 +1415,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 231 "engines/director/lingo/lingo-lex.l"
+#line 236 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1487,7 +1492,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 304 "engines/director/lingo/lingo-lex.l"
+#line 309 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1525,7 +1530,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 338 "engines/director/lingo/lingo-lex.l"
+#line 343 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1555,82 +1560,82 @@ YY_RULE_SETUP
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 364 "engines/director/lingo/lingo-lex.l"
+#line 369 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 365 "engines/director/lingo/lingo-lex.l"
+#line 370 "engines/director/lingo/lingo-lex.l"
 { count(); return tTO; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 366 "engines/director/lingo/lingo-lex.l"
+#line 371 "engines/director/lingo/lingo-lex.l"
 { count(); return tASSERTERROR; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 367 "engines/director/lingo/lingo-lex.l"
+#line 372 "engines/director/lingo/lingo-lex.l"
 { count(); return tSPRITE; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 368 "engines/director/lingo/lingo-lex.l"
+#line 373 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITH; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 369 "engines/director/lingo/lingo-lex.l"
+#line 374 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITHIN; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 370 "engines/director/lingo/lingo-lex.l"
+#line 375 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHEN; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 371 "engines/director/lingo/lingo-lex.l"
+#line 376 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHILE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 372 "engines/director/lingo/lingo-lex.l"
+#line 377 "engines/director/lingo/lingo-lex.l"
 { count(); return tWINDOW; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 373 "engines/director/lingo/lingo-lex.l"
+#line 378 "engines/director/lingo/lingo-lex.l"
 { count(); return tWORD; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 375 "engines/director/lingo/lingo-lex.l"
+#line 380 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 376 "engines/director/lingo/lingo-lex.l"
+#line 381 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 377 "engines/director/lingo/lingo-lex.l"
+#line 382 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 378 "engines/director/lingo/lingo-lex.l"
+#line 383 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 379 "engines/director/lingo/lingo-lex.l"
+#line 384 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 381 "engines/director/lingo/lingo-lex.l"
+#line 386 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1640,41 +1645,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 387 "engines/director/lingo/lingo-lex.l"
+#line 392 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return tFLOAT; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 388 "engines/director/lingo/lingo-lex.l"
+#line 393 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 389 "engines/director/lingo/lingo-lex.l"
+#line 394 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 72:
 /* rule 72 can match eol */
 YY_RULE_SETUP
-#line 390 "engines/director/lingo/lingo-lex.l"
+#line 395 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 391 "engines/director/lingo/lingo-lex.l"
+#line 396 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 392 "engines/director/lingo/lingo-lex.l"
+#line 397 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 394 "engines/director/lingo/lingo-lex.l"
+#line 399 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1677 "engines/director/lingo/lingo-lex.cpp"
+#line 1682 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2683,16 +2688,16 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 394 "engines/director/lingo/lingo-lex.l"
+#line 399 "engines/director/lingo/lingo-lex.l"
 
 
 extern int yydebug;
 
 namespace Director {
 
-int Lingo::parse(const char *code) {
+int LingoCompiler::parse(const char *code) {
 	inputbuffer = code;
-	g_lingo->_bytenumber = 0;
+	_bytenumber = 0;
 	inputlen = strlen(code);
 
 	_lines[0] = _lines[1] = _lines[2] = code;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 5c220c850e..d92895bdcf 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -37,6 +37,7 @@
 #include "director/director.h"
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-ast.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-the.h"
 
@@ -48,32 +49,36 @@ static uint inputlen;
 
 // Push lines in stack
 static void pushLine(uint num) {
+	LingoCompiler *compiler = g_lingo->_compiler;
+
 	if (num > inputlen)
 		return;
 
-	g_lingo->_lines[2] = g_lingo->_lines[1];
-	g_lingo->_lines[1] = g_lingo->_lines[0];
-	g_lingo->_lines[0] = &inputbuffer[num];
+	compiler->_lines[2] = compiler->_lines[1];
+	compiler->_lines[1] = compiler->_lines[0];
+	compiler->_lines[0] = &inputbuffer[num];
 }
 
 static void count() {
+	LingoCompiler *compiler = g_lingo->_compiler;
+
 	if (debugChannelSet(-1, kDebugParse))
-		debug("LEXER: Read '%s' at %d:%d", yytext, g_lingo->_linenumber, g_lingo->_colnumber);
+		debug("LEXER: Read '%s' at %d:%d", yytext, compiler->_linenumber, compiler->_colnumber);
 
 	char *p = yytext;
 
 	while (*p) {
 		if (*p == '\n' || *p == '\xC2') {
-			g_lingo->_linenumber++;
-			g_lingo->_colnumber = 0;
+			compiler->_linenumber++;
+			compiler->_colnumber = 0;
 
 			if (*p == '\n')
-				pushLine(g_lingo->_bytenumber + 1);
+				pushLine(compiler->_bytenumber + 1);
 		} else {
-			g_lingo->_colnumber++;
+			compiler->_colnumber++;
 		}
 		p++;
-		g_lingo->_bytenumber++;
+		compiler->_bytenumber++;
 	}
 }
 
@@ -397,9 +402,9 @@ extern int yydebug;
 
 namespace Director {
 
-int Lingo::parse(const char *code) {
+int LingoCompiler::parse(const char *code) {
 	inputbuffer = code;
-	g_lingo->_bytenumber = 0;
+	_bytenumber = 0;
 	inputlen = strlen(code);
 
 	_lines[0] = _lines[1] = _lines[2] = code;
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 5329984914..13d7805362 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -201,6 +201,40 @@ Common::String ScriptContext::asString() {
 	return Common::String::format("script: #%s %d %p", _name.c_str(), _inheritanceLevel, (void *)this);
 }
 
+Symbol ScriptContext::define(Common::String &name, int nargs, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames) {
+	Symbol sym;
+	sym.name = new Common::String(name);
+	sym.type = HANDLER;
+	sym.u.defn = code;
+	sym.nargs = nargs;
+	sym.maxArgs = nargs;
+	sym.argNames = argNames;
+	sym.varNames = varNames;
+	sym.ctx = this;
+	sym.archive = _archive;
+
+	if (debugChannelSet(1, kDebugCompile)) {
+		uint pc = 0;
+		while (pc < sym.u.defn->size()) {
+			uint spc = pc;
+			Common::String instr = g_lingo->decodeInstruction(_archive, sym.u.defn, pc, &pc);
+			debugC(1, kDebugCompile, "[%5d] %s", spc, instr.c_str());
+		}
+		debugC(1, kDebugCompile, "<end define code>");
+	}
+
+	if (!g_lingo->_eventHandlerTypeIds.contains(name)) {
+		_functionHandlers[name] = sym;
+		if (_scriptType == kMovieScript && _archive && !_archive->functionHandlers.contains(name)) {
+			_archive->functionHandlers[name] = sym;
+		}
+	} else {
+		_eventHandlers[g_lingo->_eventHandlerTypeIds[name]] = sym;
+	}
+
+	return sym;
+}
+
 Symbol ScriptContext::getMethod(const Common::String &methodName) {
 	Symbol sym;
 
diff --git a/engines/director/lingo/lingo-patcher.cpp b/engines/director/lingo/lingo-patcher.cpp
index ad9703b548..500e276ca5 100644
--- a/engines/director/lingo/lingo-patcher.cpp
+++ b/engines/director/lingo/lingo-patcher.cpp
@@ -23,7 +23,7 @@
 #include "director/director.h"
 #include "director/cast.h"
 #include "director/movie.h"
-#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-codegen.h"
 
 
 namespace Director {
@@ -165,25 +165,25 @@ struct ScriptPatch {
 	{nullptr, nullptr, kPlatformUnknown, nullptr, kNoneScript, 0, 0, nullptr, nullptr}
 };
 
-Common::String Lingo::patchLingoCode(Common::String &line, LingoArchive *archive, ScriptType type, uint16 id, int linenum) {
+Common::String LingoCompiler::patchLingoCode(Common::String &line, LingoArchive *archive, ScriptType type, uint16 id, int linenum) {
 	if (!archive)
 		return line;
 
 	const ScriptPatch *patch = scriptPatches;
-	Common::String movie = _vm->getCurrentPath() + archive->cast->getMacName();
+	Common::String movie = g_director->getCurrentPath() + archive->cast->getMacName();
 
 	// So far, we have not many patches, so do linear lookup
 	while (patch->gameId) {
 		// First, we do cheap comparisons
 		if (patch->type != type || patch->id != id || patch->linenum != linenum ||
-				(patch->platform != kPlatformUnknown && patch->platform != _vm->getPlatform())) {
+				(patch->platform != kPlatformUnknown && patch->platform != g_director->getPlatform())) {
 			patch++;
 			continue;
 		}
 
 		// Now expensive ones
-		if (movie.compareToIgnoreCase(patch->movie) || strcmp(patch->gameId, _vm->getGameId())
-				|| (patch->extra && strcmp(patch->extra, _vm->getExtra()))) {
+		if (movie.compareToIgnoreCase(patch->movie) || strcmp(patch->gameId, g_director->getGameId())
+				|| (patch->extra && strcmp(patch->extra, g_director->getExtra()))) {
 			patch++;
 			continue;
 		}
diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index 1c1b9ba3ba..e3609344fe 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -22,7 +22,7 @@
 
 #include "director/director.h"
 #include "director/movie.h"
-#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-codegen.h"
 
 namespace Director {
 
@@ -126,7 +126,7 @@ static const char *findtokstart(const char *start, const char *token) {
 	return ptr;
 }
 
-Common::String Lingo::codePreprocessor(const char *s, LingoArchive *archive, ScriptType type, uint16 id, bool simple) {
+Common::String LingoCompiler::codePreprocessor(const char *s, LingoArchive *archive, ScriptType type, uint16 id, bool simple) {
 	Common::String res;
 
 	// We start from processing the continuation synbols
@@ -228,7 +228,7 @@ Common::String Lingo::codePreprocessor(const char *s, LingoArchive *archive, Scr
 		}
 		debugC(2, kDebugParse | kDebugPreprocess, "line: %d                         '%s'", iflevel, line.c_str());
 
-		if (!defFound && (type == kMovieScript || type == kCastScript) && (_vm->getVersion() < 400 || _vm->getCurrentMovie()->_allowOutdatedLingo)) {
+		if (!defFound && (type == kMovieScript || type == kCastScript) && (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo)) {
 			tok = nexttok(line.c_str());
 			if (tok.equals("macro") || tok.equals("factory") || tok.equals("on")) {
 				defFound = true;
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index f2bd25b499..760e5dd767 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -38,6 +38,7 @@
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-object.h"
 
@@ -45,6 +46,15 @@ namespace Director {
 
 Lingo *g_lingo;
 
+int calcStringAlignment(const char *s) {
+	return calcCodeAlignment(strlen(s) + 1);
+}
+
+int calcCodeAlignment(int l) {
+	int instLen = sizeof(inst);
+	return (l + instLen - 1) / instLen;
+}
+
 Symbol::Symbol() {
 	name = nullptr;
 	type = VOIDSYM;
@@ -146,26 +156,13 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 	_currentScript = 0;
 	_currentScriptContext = nullptr;
 
-	_assemblyAST = nullptr;
-	_assemblyArchive = nullptr;
-	_currentAssembly = nullptr;
-	_assemblyContext = nullptr;
-
 	_currentChannelId = -1;
 	_globalCounter = 0;
 	_pc = 0;
 	_abort = false;
-	_indef = false;
 	_expectError = false;
 	_caughtError = false;
 
-	_linenumber = _colnumber = _bytenumber = 0;
-	_lines[0] = _lines[1] = _lines[2] = nullptr;
-
-	_hadError = false;
-
-	_inFactory = false;
-
 	_floatPrecision = 4;
 	_floatPrecisionFormat = "%.4f";
 
@@ -181,6 +178,8 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 	_windowList.type = ARRAY;
 	_windowList.u.farr = new DatumArray;
 
+	_compiler = new LingoCompiler;
+
 	initEventHandlerTypes();
 
 	initBuiltIns();
@@ -266,122 +265,13 @@ void LingoArchive::addCode(const char *code, ScriptType type, uint16 id, const c
 	else
 		contextName = Common::String::format("%d", id);
 
-	ScriptContext *sc = g_lingo->compileLingo(code, this, type, id, contextName);
+	ScriptContext *sc = g_lingo->_compiler->compileLingo(code, this, type, id, contextName);
 	if (sc) {
 		scriptContexts[type][id] = sc;
 		*sc->_refCount += 1;
 	}
 }
 
-ScriptContext *Lingo::compileAnonymous(const char *code) {
-	debugC(1, kDebugCompile, "Compiling anonymous lingo\n"
-			"***********\n%s\n\n***********", code);
-
-	return compileLingo(code, nullptr, kNoneScript, 0, "[anonymous]", true);
-}
-
-ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonymous) {
-	_assemblyArchive = archive;
-	_assemblyAST = nullptr;
-	ScriptContext *mainContext = _assemblyContext = new ScriptContext(scriptName, archive, type, id);
-	_currentAssembly = new ScriptData;
-
-	_methodVars = new VarTypeHash;
-	_linenumber = _colnumber = 1;
-	_hadError = false;
-
-	if (!strncmp(code, "menu:", 5) || scumm_strcasestr(code, "\nmenu:")) {
-		debugC(1, kDebugCompile, "Parsing menu");
-		parseMenu(code);
-
-		return nullptr;
-	}
-
-	// Preprocess the code for ease of the parser
-	Common::String codeNorm = codePreprocessor(code, archive, type, id);
-	code = codeNorm.c_str();
-
-	// Parse the Lingo and build an AST
-	parse(code);
-
-	// Generate bytecode
-	if (_assemblyAST) {
-		_assemblyAST->compile();
-	}
-
-	// for D4 and above, there usually won't be any code left.
-	// all scoped methods will be defined and stored by the code parser
-	// however D3 and below allow scopeless functions!
-	// and these can show up in D4 when imported from other movies
-
-	if (!_currentAssembly->empty()) {
-		// end of script, add a c_procret so stack frames work as expected
-		code1(LC::c_procret);
-		code1(STOP);
-
-		if (debugChannelSet(3, kDebugCompile)) {
-			if (_currentAssembly->size() && !_hadError)
-				Common::hexdump((byte *)&_currentAssembly->front(), _currentAssembly->size() * sizeof(inst));
-
-			debugC(2, kDebugCompile, "<resulting code>");
-			uint pc = 0;
-			while (pc < _currentAssembly->size()) {
-				uint spc = pc;
-				Common::String instr = decodeInstruction(_assemblyArchive, _currentAssembly, pc, &pc);
-				debugC(2, kDebugCompile, "[%5d] %s", spc, instr.c_str());
-			}
-			debugC(2, kDebugCompile, "<end code>");
-		}
-
-		Symbol currentFunc;
-
-		currentFunc.type = HANDLER;
-		currentFunc.u.defn = _currentAssembly;
-		Common::String typeStr = Common::String(scriptType2str(type));
-		currentFunc.name = new Common::String("[" + typeStr + " " + _assemblyContext->getName() + "]");
-		currentFunc.ctx = _assemblyContext;
-		currentFunc.archive = archive;
-		currentFunc.anonymous = anonymous;
-		// arg names should be empty, but just in case
-		Common::Array<Common::String> *argNames = new Common::Array<Common::String>;
-		for (uint i = 0; i < _argstack.size(); i++) {
-			argNames->push_back(Common::String(_argstack[i]->c_str()));
-		}
-		Common::Array<Common::String> *varNames = new Common::Array<Common::String>;
-		for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = _methodVars->begin(); it != _methodVars->end(); ++it) {
-			if (it->_value == kVarLocal)
-				varNames->push_back(Common::String(it->_key));
-		}
-
-		if (debugChannelSet(1, kDebugCompile)) {
-			debug("Function vars");
-			debugN("  Args: ");
-			for (uint i = 0; i < argNames->size(); i++) {
-				debugN("%s, ", (*argNames)[i].c_str());
-			}
-			debugN("\n");
-			debugN("  Local vars: ");
-			for (uint i = 0; i < varNames->size(); i++) {
-				debugN("%s, ", (*varNames)[i].c_str());
-			}
-			debugN("\n");
-		}
-
-		currentFunc.argNames = argNames;
-		currentFunc.varNames = varNames;
-		_assemblyContext->_eventHandlers[kEventGeneric] = currentFunc;
-	}
-
-	delete _methodVars;
-	_methodVars = nullptr;
-	_currentAssembly = nullptr;
-	delete _assemblyAST;
-	_assemblyAST = nullptr;
-	_assemblyContext = nullptr;
-	_assemblyArchive = nullptr;
-	return mainContext;
-}
-
 void Lingo::printStack(const char *s, uint pc) {
 	Common::String stack(s);
 
@@ -1101,10 +991,6 @@ int Datum::compareTo(Datum &d, bool ignoreCase) const {
 	}
 }
 
-void Lingo::parseMenu(const char *code) {
-	warning("STUB: parseMenu");
-}
-
 void Lingo::runTests() {
 	Common::File inFile;
 	Common::ArchiveMemberList fsList;
@@ -1136,11 +1022,10 @@ void Lingo::runTests() {
 
 			debug(">> Compiling file %s of size %d, id: %d", fileList[i].c_str(), size, counter);
 
-			_hadError = false;
 			mainArchive->addCode(script, kTestScript, counter);
 
 			if (!debugChannelSet(-1, kDebugCompileOnly)) {
-				if (!_hadError)
+				if (!_compiler->_hadError)
 					executeScript(kTestScript, counter);
 				else
 					debug(">> Skipping execution");
@@ -1182,6 +1067,16 @@ void Lingo::executePerFrameHook(int frame, int subframe) {
 	}
 }
 
+void Lingo::cleanLocalVars() {
+	// Clean up current scope local variables and clean up memory
+	debugC(3, kDebugLingoExec, "cleanLocalVars: have %d vars", _localvars->size());
+
+	g_lingo->_localvars->clear();
+	delete g_lingo->_localvars;
+
+	g_lingo->_localvars = nullptr;
+}
+
 void Lingo::printAllVars() {
 	debugN("  Local vars: ");
 	if (_localvars) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index b070a3d119..4e74b5f9e3 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -50,11 +50,15 @@ class Cast;
 class ScriptContext;
 class DirectorEngine;
 class Frame;
+class LingoCompiler;
 
 typedef void (*inst)(void);
 #define	STOP (inst)0
 #define ENTITY_INDEX(t,id) ((t) * 100000 + (id))
 
+int calcStringAlignment(const char *s);
+int calcCodeAlignment(int l);
+
 typedef Common::Array<inst> ScriptData;
 
 struct FuncDesc {
@@ -233,9 +237,6 @@ public:
 
 	void resetLingo();
 
-	ScriptContext *compileAnonymous(const char *code);
-	ScriptContext *compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonyomous = false);
-	ScriptContext *compileLingoV4(Common::SeekableReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName, uint16 version);
 	void executeHandler(const Common::String &name);
 	void executeScript(ScriptType type, uint16 id);
 	void printStack(const char *s, uint pc);
@@ -256,13 +257,6 @@ public:
 
 	void runTests();
 
-	// lingo-preprocessor.cpp
-public:
-	Common::String codePreprocessor(const char *s, LingoArchive *archive, ScriptType type, uint16 id, bool simple = false);
-
-	// lingo-patcher.cpp
-	Common::String patchLingoCode(Common::String &line, LingoArchive *archive, ScriptType type, uint16 id, int linenumber);
-
 	// lingo-events.cpp
 private:
 	void initEventHandlerTypes();
@@ -287,14 +281,6 @@ public:
 
 	void printAllVars();
 
-	int calcStringAlignment(const char *s) {
-		return calcCodeAlignment(strlen(s) + 1);
-	}
-	int calcCodeAlignment(int l) {
-		int instLen = sizeof(inst);
-		return (l + instLen - 1) / instLen;
-	}
-
 	inst readInst() { return getInst(_pc++); }
 	inst getInst(uint pc) { return (*_currentScript)[pc]; }
 	int readInt() { return getInt(_pc++); }
@@ -355,43 +341,9 @@ private:
 	Common::StringArray _entityNames;
 	Common::StringArray _fieldNames;
 
-// compiler resources
 public:
-	bool isInArgStack(Common::String *s);
-	void clearArgStack();
-
-	int code1(inst code) { _currentAssembly->push_back(code); return _currentAssembly->size() - 1; }
-	int code2(inst code_1, inst code_2) { int o = code1(code_1); code1(code_2); return o; }
-	int code3(inst code_1, inst code_2, inst code_3) { int o = code1(code_1); code1(code_2); code1(code_3); return o; }
-	int code4(inst code_1, inst code_2, inst code_3, inst code_4) { int o = code1(code_1); code1(code_2); code1(code_3); code1(code_4); return o; }
-	void codeArg(Common::String *s);
-	int codeCmd(Common::String *s, int numpar);
-	Symbol codeDefine(Common::String &s, int start, int nargs, int end = -1, bool removeCode = true);
-	void codeFactory(Common::String &s);
-	int codeFloat(double f);
-	int codeFunc(Common::String *s, int numpar);
-	int codeInt(int val);
-	void codeLabel(int label);
-	int codeString(const char *s);
-	void processIf(int toplabel, int endlabel);
-	void registerMethodVar(const Common::String &name, VarType type);
-
-	LingoArchive *_assemblyArchive;
-	ScriptContext *_assemblyContext;
-	Node *_assemblyAST;
-	ScriptData *_currentAssembly;
-	bool _indef;
-	uint _linenumber;
-	uint _colnumber;
-	uint _bytenumber;
-	const char *_lines[3];
-	bool _inFactory;
-
-	Common::Array<Common::String *> _argstack;
-	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
-	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVarsStash;
+	LingoCompiler *_compiler;
 
-public:
 	int _currentChannelId;
 	LingoArchive *_currentArchive;
 	ScriptContext *_currentScriptContext;
@@ -408,8 +360,6 @@ public:
 
 	int _objectEntityId;
 
-	Common::Array<int> _labelstack;
-
 	SymbolHash _builtinCmds;
 	SymbolHash _builtinFuncs;
 	SymbolHash _builtinConsts;
@@ -418,12 +368,6 @@ public:
 
 	Common::String _floatPrecisionFormat;
 
-	bool _hadError;
-
-private:
-	int parse(const char *code);
-	void parseMenu(const char *code);
-
 public:
 	void push(Datum d);
 	Datum pop(bool eval = true);


Commit: 38e8068180fd0f5f2556d12b1a6ba9da600b4111
    https://github.com/scummvm/scummvm/commit/38e8068180fd0f5f2556d12b1a6ba9da600b4111
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Use visitor pattern for AST traversal

Compile functions now belong to LingoCompile.

Changed paths:
  R engines/director/lingo/lingo-ast.cpp
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/module.mk


diff --git a/engines/director/lingo/lingo-ast.cpp b/engines/director/lingo/lingo-ast.cpp
deleted file mode 100644
index a2a67edbad..0000000000
--- a/engines/director/lingo/lingo-ast.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "director/lingo/lingo.h"
-#include "director/lingo/lingo-ast.h"
-#include "director/lingo/lingo-code.h"
-#include "director/lingo/lingo-codegen.h"
-#include "director/lingo/lingo-object.h"
-
-namespace Director {
-
-/* ScriptNode */
-
-void ScriptNode::compile() {
-	for (uint i = 0; i < nodes->size(); i++) {
-		(*nodes)[i]->compile();
-	}
-}
-
-/* FactoryNode */
-
-void FactoryNode::compile() {
-	g_lingo->_compiler->_inFactory = true;
-	ScriptContext *mainContext = g_lingo->_compiler->_assemblyContext;
-	g_lingo->_compiler->_assemblyContext = new ScriptContext(mainContext->getName(), mainContext->_archive, mainContext->_scriptType, mainContext->_id);
-
-	g_lingo->_compiler->codeFactory(*name);
-	for (uint i = 0; i < methods->size(); i++) {
-		(*methods)[i]->compile();
-	}
-
-	g_lingo->_compiler->_inFactory = false;
-	g_lingo->_compiler->_assemblyContext = mainContext;
-}
-
-/* HandlerNode */
-
-void HandlerNode::compile() {
-	g_lingo->_compiler->_indef = true;
-	VarTypeHash *mainMethodVars = g_lingo->_compiler->_methodVars;
-	g_lingo->_compiler->_methodVars = new VarTypeHash;
-
-	for (VarTypeHash::iterator i = mainMethodVars->begin(); i != mainMethodVars->end(); ++i) {
-		if (i->_value == kVarGlobal || i->_value == kVarProperty)
-			(*g_lingo->_compiler->_methodVars)[i->_key] = i->_value;
-	}
-	if (g_lingo->_compiler->_inFactory) {
-		for (DatumHash::iterator i = g_lingo->_compiler->_assemblyContext->_properties.begin(); i != g_lingo->_compiler->_assemblyContext->_properties.end(); ++i) {
-			(*g_lingo->_compiler->_methodVars)[i->_key] = kVarInstance;
-		}
-	}
-
-	for (uint i = 0; i < args->size(); i++) { // TODO: eliminate argstack
-		g_lingo->_compiler->codeArg((*args)[i]);
-	}
-
-	uint start = g_lingo->_compiler->_currentAssembly->size(); // TODO: should always be zero
-	for (uint i = 0; i < stmts->size(); i++) {
-		(*stmts)[i]->compile();
-	}
-
-	g_lingo->_compiler->code1(LC::c_procret);
-	g_lingo->_compiler->codeDefine(*name, start, args->size());
-
-	g_lingo->_compiler->clearArgStack();
-	g_lingo->_compiler->_indef = false;
-	delete g_lingo->_compiler->_methodVars;
-	g_lingo->_compiler->_methodVars = mainMethodVars;
-}
-
-/* CmdNode */
-
-void CmdNode::compile() {
-	for (uint i = 0; i < args->size(); i++) {
-		(*args)[i]->compile();
-	}
-	g_lingo->_compiler->codeCmd(name, args->size());
-}
-
-/* GlobalNode */
-
-void GlobalNode::compile() {
-	for (uint i = 0; i < names->size(); i++) {
-		g_lingo->_compiler->registerMethodVar(*(*names)[i], kVarGlobal);
-	}
-}
-
-/* PropertyNode */
-
-void PropertyNode::compile() {
-	for (uint i = 0; i < names->size(); i++) {
-		g_lingo->_compiler->registerMethodVar(*(*names)[i], kVarProperty);
-	}
-}
-
-/* InstanceNode */
-
-void InstanceNode::compile() {
-	for (uint i = 0; i < names->size(); i++) {
-		g_lingo->_compiler->registerMethodVar(*(*names)[i], kVarInstance);
-	}
-}
-
-/* IntNode */
-
-void IntNode::compile() {
-	g_lingo->_compiler->code1(LC::c_intpush);
-	g_lingo->_compiler->codeInt(val);
-}
-
-/* FloatNode */
-
-void FloatNode::compile() {
-	g_lingo->_compiler->code1(LC::c_floatpush);
-	g_lingo->_compiler->codeFloat(val);
-}
-
-/* SymbolNode */
-
-void SymbolNode::compile() {
-	g_lingo->_compiler->code1(LC::c_symbolpush);
-	g_lingo->_compiler->codeString(val->c_str());
-}
-
-/* StringNode */
-
-void StringNode::compile() {
-	g_lingo->_compiler->code1(LC::c_stringpush);
-	g_lingo->_compiler->codeString(val->c_str());
-}
-
-/* FuncNode */
-
-void FuncNode::compile() {
-	for (uint i = 0; i < args->size(); i++) {
-		(*args)[i]->compile();
-	}
-	g_lingo->_compiler->codeFunc(name, args->size());
-}
-
-/* VarNode */
-
-void VarNode::compile() {
-	if (g_lingo->_builtinConsts.contains(*name)) {
-		g_lingo->_compiler->code1(LC::c_constpush);
-	} else {
-		g_lingo->_compiler->code1(LC::c_eval);
-	}
-	g_lingo->_compiler->codeString(name->c_str());
-}
-
-/* ParensNode */
-
-void ParensNode::compile() {
-	expr->compile();
-}
-
-/* UnaryOpNode */
-
-void UnaryOpNode::compile() {
-	arg->compile();
-	g_lingo->_compiler->code1(op);
-}
-
-/* BinaryOpNode */
-
-void BinaryOpNode::compile() {
-	a->compile();
-	b->compile();
-	g_lingo->_compiler->code1(op);
-}
-
-} // End of namespace Director
diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index 742dcef6eb..931f6cbec3 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -26,6 +26,22 @@
 namespace Director {
 
 struct Node;
+struct ScriptNode;
+struct FactoryNode;
+struct HandlerNode;
+struct CmdNode;
+struct GlobalNode;
+struct PropertyNode;
+struct InstanceNode;
+struct IntNode;
+struct FloatNode;
+struct SymbolNode;
+struct StringNode;
+struct FuncNode;
+struct VarNode;
+struct ParensNode;
+struct UnaryOpNode;
+struct BinaryOpNode;
 
 typedef Common::Array<Node *> NodeList;
 typedef Common::Array<Common::String *> IDList;
@@ -59,6 +75,31 @@ enum NodeType {
 	kBinaryOpNode
 };
 
+/* NodeVisitor */
+
+class NodeVisitor {
+public:
+	NodeVisitor() {}
+	virtual ~NodeVisitor() {}
+
+	virtual void visitScriptNode(ScriptNode *node) = 0;
+	virtual void visitFactoryNode(FactoryNode *node) = 0;
+	virtual void visitHandlerNode(HandlerNode *node) = 0;
+	virtual void visitCmdNode(CmdNode *node) = 0;
+	virtual void visitGlobalNode(GlobalNode *node) = 0;
+	virtual void visitPropertyNode(PropertyNode *node) = 0;
+	virtual void visitInstanceNode(InstanceNode *node) = 0;
+	virtual void visitIntNode(IntNode *node) = 0;
+	virtual void visitFloatNode(FloatNode *node) = 0;
+	virtual void visitSymbolNode(SymbolNode *node) = 0;
+	virtual void visitStringNode(StringNode *node) = 0;
+	virtual void visitFuncNode(FuncNode *node) = 0;
+	virtual void visitVarNode(VarNode *node) = 0;
+	virtual void visitParensNode(ParensNode *node) = 0;
+	virtual void visitUnaryOpNode(UnaryOpNode *node) = 0;
+	virtual void visitBinaryOpNode(BinaryOpNode *node) = 0;
+};
+
 /* Node */
 
 struct Node {
@@ -67,8 +108,8 @@ struct Node {
 	bool isStatement;
 
 	Node(NodeType t) : type(t), isExpression(false), isStatement(false) {}
-	virtual ~Node() = default;
-	virtual void compile() {}
+	virtual ~Node() {}
+	virtual void accept(NodeVisitor *visitor) = 0;
 };
 
 /* ExprNode */
@@ -77,7 +118,7 @@ struct ExprNode : Node {
 	ExprNode(NodeType t) : Node(t) {
 		isExpression = true;
 	}
-	virtual ~ExprNode() = default;
+	virtual ~ExprNode() {}
 };
 
 /* StmtNode */
@@ -86,7 +127,7 @@ struct StmtNode : Node {
 	StmtNode(NodeType t) : Node(t) {
 		isStatement = true;
 	}
-	virtual ~StmtNode() = default;
+	virtual ~StmtNode() {}
 };
 
 /* ScriptNode */
@@ -98,7 +139,9 @@ struct ScriptNode : Node {
 	virtual ~ScriptNode() {
 		deleteList(nodes);
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitScriptNode(this);
+	}
 };
 
 /* FactoryNode */
@@ -113,7 +156,9 @@ struct FactoryNode : Node {
 		delete name;
 		deleteList(methods);
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitFactoryNode(this);
+	}
 };
 
 /* HandlerNode */
@@ -130,7 +175,9 @@ struct HandlerNode : Node {
 		deleteList(args);
 		deleteList(stmts);
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitHandlerNode(this);
+	}
 };
 
 /* CmdNode */
@@ -145,7 +192,9 @@ struct CmdNode : StmtNode {
 		delete name;
 		deleteList(args);
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitCmdNode(this);
+	}
 };
 
 /* GlobalNode */
@@ -157,7 +206,9 @@ struct GlobalNode : StmtNode {
 	virtual ~GlobalNode() {
 		delete names;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitGlobalNode(this);
+	}
 };
 
 /* PropertyNode */
@@ -169,7 +220,9 @@ struct PropertyNode : StmtNode {
 	virtual ~PropertyNode() {
 		delete names;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitPropertyNode(this);
+	}
 };
 
 /* InstanceNode */
@@ -181,7 +234,9 @@ struct InstanceNode : StmtNode {
 	virtual ~InstanceNode() {
 		delete names;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitInstanceNode(this);
+	}
 };
 
 /* IntNode */
@@ -191,7 +246,9 @@ struct IntNode : ExprNode {
 
 	IntNode(int valIn) : ExprNode(kIntNode), val(valIn) {}
 	virtual ~IntNode() = default;
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitIntNode(this);
+	}
 };
 
 /* FloatNode */
@@ -201,7 +258,9 @@ struct FloatNode : ExprNode {
 
 	FloatNode(double valIn) : ExprNode(kFloatNode), val(valIn) {}
 	virtual ~FloatNode() = default;
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitFloatNode(this);
+	}
 };
 
 /* SymbolNode */
@@ -213,7 +272,9 @@ struct SymbolNode : ExprNode {
 	virtual ~SymbolNode() {
 		delete val;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitSymbolNode(this);
+	}
 };
 
 /* StringNode */
@@ -225,7 +286,9 @@ struct StringNode : ExprNode {
 	virtual ~StringNode() {
 		delete val;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitStringNode(this);
+	}
 };
 
 /* FuncNode */
@@ -240,7 +303,9 @@ struct FuncNode : StmtNode {
 		delete name;
 		deleteList(args);
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitFuncNode(this);
+	}
 };
 
 /* VarNode */
@@ -252,7 +317,9 @@ struct VarNode : ExprNode {
 	virtual ~VarNode() {
 		delete name;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitVarNode(this);
+	}
 };
 
 /* ParensNode */
@@ -264,7 +331,9 @@ struct ParensNode : ExprNode {
 	virtual ~ParensNode() {
 		delete expr;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitParensNode(this);
+	}
 };
 
 /* UnaryOpNode */
@@ -277,7 +346,9 @@ struct UnaryOpNode : ExprNode {
 	virtual ~UnaryOpNode() {
 		delete arg;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitUnaryOpNode(this);
+	}
 };
 
 /* BinaryOpNode */
@@ -292,7 +363,9 @@ struct BinaryOpNode : ExprNode {
 		delete a;
 		delete b;
 	}
-	virtual void compile();
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitBinaryOpNode(this);
+	}
 };
 
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 5731097e7d..59f8630b55 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -103,7 +103,7 @@ ScriptContext *LingoCompiler::compileLingo(const char *code, LingoArchive *archi
 
 	// Generate bytecode
 	if (_assemblyAST) {
-		_assemblyAST->compile();
+		_assemblyAST->accept(this);
 	}
 
 	// for D4 and above, there usually won't be any code left.
@@ -374,4 +374,165 @@ void LingoCompiler::parseMenu(const char *code) {
 	warning("STUB: parseMenu");
 }
 
+/* ScriptNode */
+
+void LingoCompiler::visitScriptNode(ScriptNode *node) {
+	for (uint i = 0; i < node->nodes->size(); i++) {
+		(*node->nodes)[i]->accept(this);
+	}
+}
+
+/* FactoryNode */
+
+void LingoCompiler::visitFactoryNode(FactoryNode *node) {
+	_inFactory = true;
+	ScriptContext *mainContext = _assemblyContext;
+	_assemblyContext = new ScriptContext(mainContext->getName(), mainContext->_archive, mainContext->_scriptType, mainContext->_id);
+
+	codeFactory(*node->name);
+	for (uint i = 0; i < node->methods->size(); i++) {
+		(*node->methods)[i]->accept(this);
+	}
+
+	_inFactory = false;
+	_assemblyContext = mainContext;
+}
+
+/* HandlerNode */
+
+void LingoCompiler::visitHandlerNode(HandlerNode *node) {
+	_indef = true;
+	VarTypeHash *mainMethodVars = _methodVars;
+	_methodVars = new VarTypeHash;
+
+	for (VarTypeHash::iterator i = mainMethodVars->begin(); i != mainMethodVars->end(); ++i) {
+		if (i->_value == kVarGlobal || i->_value == kVarProperty)
+			(*_methodVars)[i->_key] = i->_value;
+	}
+	if (_inFactory) {
+		for (DatumHash::iterator i = _assemblyContext->_properties.begin(); i != _assemblyContext->_properties.end(); ++i) {
+			(*_methodVars)[i->_key] = kVarInstance;
+		}
+	}
+
+	for (uint i = 0; i < node->args->size(); i++) { // TODO: eliminate argstack
+		codeArg((*node->args)[i]);
+	}
+
+	uint start = _currentAssembly->size(); // TODO: should always be zero
+	for (uint i = 0; i < node->stmts->size(); i++) {
+		(*node->stmts)[i]->accept(this);
+	}
+
+	code1(LC::c_procret);
+	codeDefine(*node->name, start, node->args->size());
+
+	clearArgStack();
+	_indef = false;
+	delete _methodVars;
+	_methodVars = mainMethodVars;
+}
+
+/* CmdNode */
+
+void LingoCompiler::visitCmdNode(CmdNode *node) {
+	for (uint i = 0; i < node->args->size(); i++) {
+		(*node->args)[i]->accept(this);
+	}
+	codeCmd(node->name, node->args->size());
+}
+
+/* GlobalNode */
+
+void LingoCompiler::visitGlobalNode(GlobalNode *node) {
+	for (uint i = 0; i < node->names->size(); i++) {
+		registerMethodVar(*(*node->names)[i], kVarGlobal);
+	}
+}
+
+/* PropertyNode */
+
+void LingoCompiler::visitPropertyNode(PropertyNode *node) {
+	for (uint i = 0; i < node->names->size(); i++) {
+		registerMethodVar(*(*node->names)[i], kVarProperty);
+	}
+}
+
+/* InstanceNode */
+
+void LingoCompiler::visitInstanceNode(InstanceNode *node) {
+	for (uint i = 0; i < node->names->size(); i++) {
+		registerMethodVar(*(*node->names)[i], kVarInstance);
+	}
+}
+
+/* IntNode */
+
+void LingoCompiler::visitIntNode(IntNode *node) {
+	code1(LC::c_intpush);
+	codeInt(node->val);
+}
+
+/* FloatNode */
+
+void LingoCompiler::visitFloatNode(FloatNode *node) {
+	code1(LC::c_floatpush);
+	codeFloat(node->val);
+}
+
+/* SymbolNode */
+
+void LingoCompiler::visitSymbolNode(SymbolNode *node) {
+	code1(LC::c_symbolpush);
+	codeString(node->val->c_str());
+}
+
+/* StringNode */
+
+void LingoCompiler::visitStringNode(StringNode *node) {
+	code1(LC::c_stringpush);
+	codeString(node->val->c_str());
+}
+
+/* FuncNode */
+
+void LingoCompiler::visitFuncNode(FuncNode *node) {
+	for (uint i = 0; i < node->args->size(); i++) {
+		(*node->args)[i]->accept(this);
+	}
+	codeFunc(node->name, node->args->size());
+}
+
+/* VarNode */
+
+void LingoCompiler::visitVarNode(VarNode *node) {
+	if (g_lingo->_builtinConsts.contains(*node->name)) {
+		code1(LC::c_constpush);
+	} else {
+		code1(LC::c_eval);
+	}
+	codeString(node->name->c_str());
+}
+
+/* ParensNode */
+
+void LingoCompiler::visitParensNode(ParensNode *node) {
+	node->expr->accept(this);
+}
+
+/* UnaryOpNode */
+
+void LingoCompiler::visitUnaryOpNode(UnaryOpNode *node) {
+	node->arg->accept(this);
+	code1(node->op);
+}
+
+/* BinaryOpNode */
+
+void LingoCompiler::visitBinaryOpNode(BinaryOpNode *node) {
+	node->a->accept(this);
+	node->b->accept(this);
+	code1(node->op);
+}
+
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 3570713ffd..a74673e5c9 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -25,12 +25,14 @@
 
 #include "director/types.h"
 #include "director/lingo/lingo.h"
+#include "director/lingo/lingo-ast.h"
 
 namespace Director {
 
-class LingoCompiler {
+class LingoCompiler : NodeVisitor {
 public:
 	LingoCompiler();
+	virtual ~LingoCompiler() {}
 
 	ScriptContext *compileAnonymous(const char *code);
 	ScriptContext *compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonyomous = false);
@@ -74,6 +76,24 @@ public:
 
 	bool _hadError;
 
+public:
+	virtual void visitScriptNode(ScriptNode *node);
+	virtual void visitFactoryNode(FactoryNode *node);
+	virtual void visitHandlerNode(HandlerNode *node);
+	virtual void visitCmdNode(CmdNode *node);
+	virtual void visitGlobalNode(GlobalNode *node);
+	virtual void visitPropertyNode(PropertyNode *node);
+	virtual void visitInstanceNode(InstanceNode *node);
+	virtual void visitIntNode(IntNode *node);
+	virtual void visitFloatNode(FloatNode *node);
+	virtual void visitSymbolNode(SymbolNode *node);
+	virtual void visitStringNode(StringNode *node);
+	virtual void visitFuncNode(FuncNode *node);
+	virtual void visitVarNode(VarNode *node);
+	virtual void visitParensNode(ParensNode *node);
+	virtual void visitUnaryOpNode(UnaryOpNode *node);
+	virtual void visitBinaryOpNode(BinaryOpNode *node);
+
 private:
 	int parse(const char *code);
 	void parseMenu(const char *code);
diff --git a/engines/director/module.mk b/engines/director/module.mk
index e14a492a60..2f17e00eef 100644
--- a/engines/director/module.mk
+++ b/engines/director/module.mk
@@ -23,7 +23,6 @@ MODULE_OBJS = \
 	util.o \
 	window.o \
 	lingo/lingo.o \
-	lingo/lingo-ast.o \
 	lingo/lingo-builtins.o \
 	lingo/lingo-bytecode.o \
 	lingo/lingo-code.o \


Commit: 20947e25050527d59043cc03122fbe1efca0a426
    https://github.com/scummvm/scummvm/commit/20947e25050527d59043cc03122fbe1efca0a426
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: Rename nodes to children

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index 931f6cbec3..ca2eded8ed 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -133,11 +133,11 @@ struct StmtNode : Node {
 /* ScriptNode */
 
 struct ScriptNode : Node {
-	NodeList *nodes;
+	NodeList *children;
 
-	ScriptNode(NodeList *nodesIn): Node(kScriptNode), nodes(nodesIn) {}
+	ScriptNode(NodeList *childrenIn): Node(kScriptNode), children(childrenIn) {}
 	virtual ~ScriptNode() {
-		deleteList(nodes);
+		deleteList(children);
 	}
 	virtual void accept(NodeVisitor *visitor) {
 		visitor->visitScriptNode(this);
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 59f8630b55..da25a5c835 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -377,8 +377,8 @@ void LingoCompiler::parseMenu(const char *code) {
 /* ScriptNode */
 
 void LingoCompiler::visitScriptNode(ScriptNode *node) {
-	for (uint i = 0; i < node->nodes->size(); i++) {
-		(*node->nodes)[i]->accept(this);
+	for (uint i = 0; i < node->children->size(); i++) {
+		(*node->children)[i]->accept(this);
 	}
 }
 


Commit: 0a87b2ab2ed37f2e6d377d54454bcadd8ff1bc7f
    https://github.com/scummvm/scummvm/commit/0a87b2ab2ed37f2e6d377d54454bcadd8ff1bc7f
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Eliminate argstack

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-object.cpp
    engines/director/lingo/lingo-object.h


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 892efd8439..5fda7e45de 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -1431,7 +1431,7 @@ ScriptContext *LingoCompiler::compileLingoV4(Common::SeekableReadStreamEndian &s
 		Symbol sym;
 		if (!functionName.empty()) {
 			debugC(5, kDebugLoading, "Function %d binding: %s()", i, functionName.c_str());
-			sym = _assemblyContext->define(functionName, argCount, _currentAssembly, argNames, varNames);
+			sym = _assemblyContext->define(functionName, _currentAssembly, argNames, varNames);
 		} else {
 			warning("Function has unknown name id %d, skipping define", nameIndex);
 			sym.name = new Common::String();
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index da25a5c835..28c7e87b87 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -139,11 +139,7 @@ ScriptContext *LingoCompiler::compileLingo(const char *code, LingoArchive *archi
 		currentFunc.ctx = _assemblyContext;
 		currentFunc.archive = archive;
 		currentFunc.anonymous = anonymous;
-		// arg names should be empty, but just in case
 		Common::Array<Common::String> *argNames = new Common::Array<Common::String>;
-		for (uint i = 0; i < _argstack.size(); i++) {
-			argNames->push_back(Common::String(_argstack[i]->c_str()));
-		}
 		Common::Array<Common::String> *varNames = new Common::Array<Common::String>;
 		for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = _methodVars->begin(); it != _methodVars->end(); ++it) {
 			if (it->_value == kVarLocal)
@@ -179,18 +175,18 @@ ScriptContext *LingoCompiler::compileLingo(const char *code, LingoArchive *archi
 	return mainContext;
 }
 
-Symbol LingoCompiler::codeDefine(Common::String &name, int start, int nargs, int end, bool removeCode) {
+Symbol LingoCompiler::codeDefine(const Common::String &name, const Common::Array<Common::String *> &args, int start, int end, bool removeCode) {
 	if (debugChannelSet(-1, kDebugFewFramesOnly) || debugChannelSet(1, kDebugCompile))
 		debug("codeDefine(\"%s\"(len: %d), %d, %d, %d)",
-			name.c_str(), _currentAssembly->size() - 1, start, nargs, end);
+			name.c_str(), _currentAssembly->size() - 1, args.size(), start, end);
 
 	if (end == -1)
 		end = _currentAssembly->size();
 
 	ScriptData *code = new ScriptData(&(*_currentAssembly)[start], end - start);
 	Common::Array<Common::String> *argNames = new Common::Array<Common::String>;
-	for (uint i = 0; i < _argstack.size(); i++) {
-		argNames->push_back(Common::String(_argstack[i]->c_str()));
+	for (uint i = 0; i < args.size(); i++) {
+		argNames->push_back(Common::String(*args[i]));
 	}
 	Common::Array<Common::String> *varNames = new Common::Array<Common::String>;
 	for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = _methodVars->begin(); it != _methodVars->end(); ++it) {
@@ -198,7 +194,7 @@ Symbol LingoCompiler::codeDefine(Common::String &name, int start, int nargs, int
 			varNames->push_back(Common::String(it->_key));
 	}
 
-	Symbol sym = _assemblyContext->define(name, nargs, code, argNames, varNames);
+	Symbol sym = _assemblyContext->define(name, code, argNames, varNames);
 
 	if (debugChannelSet(1, kDebugCompile)) {
 		debug("Function vars");
@@ -265,25 +261,6 @@ int LingoCompiler::codeInt(int val) {
 	return _currentAssembly->size();
 }
 
-bool LingoCompiler::isInArgStack(Common::String *s) {
-	for (uint i = 0; i < _argstack.size(); i++)
-		if (_argstack[i]->equalsIgnoreCase(*s))
-			return true;
-
-	return false;
-}
-
-void LingoCompiler::codeArg(Common::String *s) {
-	_argstack.push_back(new Common::String(*s));
-}
-
-void LingoCompiler::clearArgStack() {
-	for (uint i = 0; i < _argstack.size(); i++)
-		delete _argstack[i];
-
-	_argstack.clear();
-}
-
 int LingoCompiler::codeCmd(Common::String *s, int numpar) {
 	// Insert current line number to our asserts
 	if (s->equalsIgnoreCase("scummvmAssert") || s->equalsIgnoreCase("scummvmAssertEqual")) {
@@ -415,19 +392,14 @@ void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 		}
 	}
 
-	for (uint i = 0; i < node->args->size(); i++) { // TODO: eliminate argstack
-		codeArg((*node->args)[i]);
-	}
-
 	uint start = _currentAssembly->size(); // TODO: should always be zero
 	for (uint i = 0; i < node->stmts->size(); i++) {
 		(*node->stmts)[i]->accept(this);
 	}
 
 	code1(LC::c_procret);
-	codeDefine(*node->name, start, node->args->size());
+	codeDefine(*node->name, *node->args, start);
 
-	clearArgStack();
 	_indef = false;
 	delete _methodVars;
 	_methodVars = mainMethodVars;
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index a74673e5c9..92c4147562 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -38,16 +38,12 @@ public:
 	ScriptContext *compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonyomous = false);
 	ScriptContext *compileLingoV4(Common::SeekableReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName, uint16 version);
 
-	bool isInArgStack(Common::String *s);
-	void clearArgStack();
-
 	int code1(inst code) { _currentAssembly->push_back(code); return _currentAssembly->size() - 1; }
 	int code2(inst code_1, inst code_2) { int o = code1(code_1); code1(code_2); return o; }
 	int code3(inst code_1, inst code_2, inst code_3) { int o = code1(code_1); code1(code_2); code1(code_3); return o; }
 	int code4(inst code_1, inst code_2, inst code_3, inst code_4) { int o = code1(code_1); code1(code_2); code1(code_3); code1(code_4); return o; }
-	void codeArg(Common::String *s);
 	int codeCmd(Common::String *s, int numpar);
-	Symbol codeDefine(Common::String &s, int start, int nargs, int end = -1, bool removeCode = true);
+	Symbol codeDefine(const Common::String &s, const Common::Array<Common::String *> &args, int start, int end = -1, bool removeCode = true);
 	void codeFactory(Common::String &s);
 	int codeFloat(double f);
 	int codeFunc(Common::String *s, int numpar);
@@ -68,7 +64,6 @@ public:
 	const char *_lines[3];
 	bool _inFactory;
 
-	Common::Array<Common::String *> _argstack;
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVarsStash;
 
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 13d7805362..875f52816f 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -201,13 +201,13 @@ Common::String ScriptContext::asString() {
 	return Common::String::format("script: #%s %d %p", _name.c_str(), _inheritanceLevel, (void *)this);
 }
 
-Symbol ScriptContext::define(Common::String &name, int nargs, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames) {
+Symbol ScriptContext::define(const Common::String &name, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames) {
 	Symbol sym;
 	sym.name = new Common::String(name);
 	sym.type = HANDLER;
 	sym.u.defn = code;
-	sym.nargs = nargs;
-	sym.maxArgs = nargs;
+	sym.nargs = argNames->size();
+	sym.maxArgs = argNames->size();
 	sym.argNames = argNames;
 	sym.varNames = varNames;
 	sym.ctx = this;
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
index f2c36387d7..0cf4e8f641 100644
--- a/engines/director/lingo/lingo-object.h
+++ b/engines/director/lingo/lingo-object.h
@@ -211,7 +211,7 @@ public:
 	Datum getProp(const Common::String &propName) override;
 	bool setProp(const Common::String &propName, const Datum &value) override;
 
-	Symbol define(Common::String &name, int nargs, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames);
+	Symbol define(const Common::String &name, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames);
 };
 
 namespace LM {


Commit: 220d4adac74c66e7fe617a419be28615e77f5c96
    https://github.com/scummvm/scummvm/commit/220d4adac74c66e7fe617a419be28615e77f5c96
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Eliminate codeDefine

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 28c7e87b87..b42cf940cb 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -163,6 +163,8 @@ ScriptContext *LingoCompiler::compileLingo(const char *code, LingoArchive *archi
 		currentFunc.argNames = argNames;
 		currentFunc.varNames = varNames;
 		_assemblyContext->_eventHandlers[kEventGeneric] = currentFunc;
+	} else {
+		delete _currentAssembly;
 	}
 
 	delete _methodVars;
@@ -175,50 +177,6 @@ ScriptContext *LingoCompiler::compileLingo(const char *code, LingoArchive *archi
 	return mainContext;
 }
 
-Symbol LingoCompiler::codeDefine(const Common::String &name, const Common::Array<Common::String *> &args, int start, int end, bool removeCode) {
-	if (debugChannelSet(-1, kDebugFewFramesOnly) || debugChannelSet(1, kDebugCompile))
-		debug("codeDefine(\"%s\"(len: %d), %d, %d, %d)",
-			name.c_str(), _currentAssembly->size() - 1, args.size(), start, end);
-
-	if (end == -1)
-		end = _currentAssembly->size();
-
-	ScriptData *code = new ScriptData(&(*_currentAssembly)[start], end - start);
-	Common::Array<Common::String> *argNames = new Common::Array<Common::String>;
-	for (uint i = 0; i < args.size(); i++) {
-		argNames->push_back(Common::String(*args[i]));
-	}
-	Common::Array<Common::String> *varNames = new Common::Array<Common::String>;
-	for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = _methodVars->begin(); it != _methodVars->end(); ++it) {
-		if (it->_value == kVarLocal)
-			varNames->push_back(Common::String(it->_key));
-	}
-
-	Symbol sym = _assemblyContext->define(name, code, argNames, varNames);
-
-	if (debugChannelSet(1, kDebugCompile)) {
-		debug("Function vars");
-		debugN("  Args: ");
-		for (uint i = 0; i < argNames->size(); i++) {
-			debugN("%s, ", (*argNames)[i].c_str());
-		}
-		debugN("\n");
-		debugN("  Local vars: ");
-		for (uint i = 0; i < varNames->size(); i++) {
-			debugN("%s, ", (*varNames)[i].c_str());
-		}
-		debugN("\n");
-	}
-
-	// Now remove all defined code from the _currentAssembly
-	if (removeCode)
-		for (int i = end - 1; i >= start; i--) {
-			_currentAssembly->remove_at(i);
-		}
-
-	return sym;
-}
-
 int LingoCompiler::codeString(const char *str) {
 	int numInsts = calcStringAlignment(str);
 
@@ -379,6 +337,8 @@ void LingoCompiler::visitFactoryNode(FactoryNode *node) {
 
 void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 	_indef = true;
+	ScriptData *mainAssembly = _currentAssembly;
+	_currentAssembly = new ScriptData;
 	VarTypeHash *mainMethodVars = _methodVars;
 	_methodVars = new VarTypeHash;
 
@@ -392,15 +352,42 @@ void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 		}
 	}
 
-	uint start = _currentAssembly->size(); // TODO: should always be zero
 	for (uint i = 0; i < node->stmts->size(); i++) {
 		(*node->stmts)[i]->accept(this);
 	}
-
 	code1(LC::c_procret);
-	codeDefine(*node->name, *node->args, start);
+
+	if (debugChannelSet(-1, kDebugFewFramesOnly) || debugChannelSet(1, kDebugCompile))
+		debug("define handler \"%s\" (len: %d)", node->name->c_str(), _currentAssembly->size() - 1);
+
+	Common::Array<Common::String> *argNames = new Common::Array<Common::String>;
+	for (uint i = 0; i < node->args->size(); i++) {
+		argNames->push_back(Common::String((*node->args)[i]->c_str()));
+	}
+	Common::Array<Common::String> *varNames = new Common::Array<Common::String>;
+	for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = _methodVars->begin(); it != _methodVars->end(); ++it) {
+		if (it->_value == kVarLocal)
+			varNames->push_back(Common::String(it->_key));
+	}
+
+	if (debugChannelSet(1, kDebugCompile)) {
+		debug("Function vars");
+		debugN("  Args: ");
+		for (uint i = 0; i < argNames->size(); i++) {
+			debugN("%s, ", (*argNames)[i].c_str());
+		}
+		debugN("\n");
+		debugN("  Local vars: ");
+		for (uint i = 0; i < varNames->size(); i++) {
+			debugN("%s, ", (*varNames)[i].c_str());
+		}
+		debugN("\n");
+	}
+
+	_assemblyContext->define(*node->name, _currentAssembly, argNames, varNames);
 
 	_indef = false;
+	_currentAssembly = mainAssembly;
 	delete _methodVars;
 	_methodVars = mainMethodVars;
 }
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 92c4147562..0bddfb1153 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -43,7 +43,6 @@ public:
 	int code3(inst code_1, inst code_2, inst code_3) { int o = code1(code_1); code1(code_2); code1(code_3); return o; }
 	int code4(inst code_1, inst code_2, inst code_3, inst code_4) { int o = code1(code_1); code1(code_2); code1(code_3); code1(code_4); return o; }
 	int codeCmd(Common::String *s, int numpar);
-	Symbol codeDefine(const Common::String &s, const Common::Array<Common::String *> &args, int start, int end = -1, bool removeCode = true);
 	void codeFactory(Common::String &s);
 	int codeFloat(double f);
 	int codeFunc(Common::String *s, int numpar);


Commit: 6b756b3213d5545098d518146e8810d3f3324c9a
    https://github.com/scummvm/scummvm/commit/6b756b3213d5545098d518146e8810d3f3324c9a
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Rename codeFactory to registerFactory

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 5fda7e45de..1c887706c5 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -943,7 +943,7 @@ ScriptContext *LingoCompiler::compileLingoV4(Common::SeekableReadStreamEndian &s
 		debugC(1, kDebugCompile, "Add V4 script %d: factory '%s'", scriptId, factoryName.c_str());
 
 		sc = _assemblyContext = new ScriptContext(factoryName, _assemblyArchive, scriptType, castId);
-		codeFactory(factoryName);
+		registerFactory(factoryName);
 	} else {
 		debugC(1, kDebugCompile, "Add V4 script %d: %s %d", scriptId, scriptType2str(scriptType), castId);
 
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index b42cf940cb..663eec9016 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -293,7 +293,7 @@ void LingoCompiler::registerMethodVar(const Common::String &name, VarType type)
 	}
 }
 
-void LingoCompiler::codeFactory(Common::String &name) {
+void LingoCompiler::registerFactory(Common::String &name) {
 	// FIXME: The factory's context should not be tied to the LingoArchive
 	// but bytecode needs it to resolve names
 	_assemblyContext->setName(name);
@@ -324,10 +324,10 @@ void LingoCompiler::visitFactoryNode(FactoryNode *node) {
 	ScriptContext *mainContext = _assemblyContext;
 	_assemblyContext = new ScriptContext(mainContext->getName(), mainContext->_archive, mainContext->_scriptType, mainContext->_id);
 
-	codeFactory(*node->name);
 	for (uint i = 0; i < node->methods->size(); i++) {
 		(*node->methods)[i]->accept(this);
 	}
+	registerFactory(*node->name);
 
 	_inFactory = false;
 	_assemblyContext = mainContext;
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 0bddfb1153..c9f9f50e6d 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -43,13 +43,13 @@ public:
 	int code3(inst code_1, inst code_2, inst code_3) { int o = code1(code_1); code1(code_2); code1(code_3); return o; }
 	int code4(inst code_1, inst code_2, inst code_3, inst code_4) { int o = code1(code_1); code1(code_2); code1(code_3); code1(code_4); return o; }
 	int codeCmd(Common::String *s, int numpar);
-	void codeFactory(Common::String &s);
 	int codeFloat(double f);
 	int codeFunc(Common::String *s, int numpar);
 	int codeInt(int val);
 	void codeLabel(int label);
 	int codeString(const char *s);
 	void processIf(int toplabel, int endlabel);
+	void registerFactory(Common::String &s);
 	void registerMethodVar(const Common::String &name, VarType type);
 
 	LingoArchive *_assemblyArchive;


Commit: 52a056f91c8f7fa798d2affb87768a7b96f8814a
    https://github.com/scummvm/scummvm/commit/52a056f91c8f7fa798d2affb87768a7b96f8814a
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement if statements

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index ca2eded8ed..3a0411ff92 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -33,6 +33,8 @@ struct CmdNode;
 struct GlobalNode;
 struct PropertyNode;
 struct InstanceNode;
+struct IfStmtNode;
+struct IfElseStmtNode;
 struct IntNode;
 struct FloatNode;
 struct SymbolNode;
@@ -64,6 +66,8 @@ enum NodeType {
 	kGlobalNode,
 	kPropertyNode,
 	kInstanceNode,
+	kIfStmtNode,
+	kIfElseStmtNode,
 	kIntNode,
 	kFloatNode,
 	kSymbolNode,
@@ -89,6 +93,8 @@ public:
 	virtual void visitGlobalNode(GlobalNode *node) = 0;
 	virtual void visitPropertyNode(PropertyNode *node) = 0;
 	virtual void visitInstanceNode(InstanceNode *node) = 0;
+	virtual void visitIfStmtNode(IfStmtNode *node) = 0;
+	virtual void visitIfElseStmtNode(IfElseStmtNode *node) = 0;
 	virtual void visitIntNode(IntNode *node) = 0;
 	virtual void visitFloatNode(FloatNode *node) = 0;
 	virtual void visitSymbolNode(SymbolNode *node) = 0;
@@ -239,6 +245,42 @@ struct InstanceNode : StmtNode {
 	}
 };
 
+/* IfStmtNode */
+
+struct IfStmtNode : StmtNode {
+	Node *cond;
+	NodeList *stmts;
+
+	IfStmtNode(Node *condIn, NodeList *stmtsIn)
+		: StmtNode(kIfStmtNode), cond(condIn), stmts(stmtsIn) {}
+	virtual ~IfStmtNode() {
+		delete cond;
+		deleteList(stmts);
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitIfStmtNode(this);
+	}
+};
+
+/* IfElseStmtNode */
+
+struct IfElseStmtNode : StmtNode {
+	Node *cond;
+	NodeList *stmts1;
+	NodeList *stmts2;
+
+	IfElseStmtNode(Node *condIn, NodeList *stmts1In, NodeList *stmts2In)
+		: StmtNode(kIfElseStmtNode), cond(condIn), stmts1(stmts1In), stmts2(stmts2In) {}
+	virtual ~IfElseStmtNode() {
+		delete cond;
+		deleteList(stmts1);
+		deleteList(stmts2);
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitIfElseStmtNode(this);
+	}
+};
+
 /* IntNode */
 
 struct IntNode : ExprNode {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 663eec9016..4dc1859836 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -425,6 +425,49 @@ void LingoCompiler::visitInstanceNode(InstanceNode *node) {
 	}
 }
 
+/* IfStmtNode */
+
+void LingoCompiler::visitIfStmtNode(IfStmtNode *node) {
+	node->cond->accept(this);
+	uint jzPos = _currentAssembly->size();
+	code2(LC::c_jumpifz, 0);
+	for (uint i = 0; i < node->stmts->size(); i++) {
+		(*node->stmts)[i]->accept(this);
+	}
+	uint endPos = _currentAssembly->size();
+
+	inst jzOffset = 0;
+	WRITE_UINT32(&jzOffset, endPos - jzPos);
+	(*_currentAssembly)[jzPos + 1] = jzOffset;
+}
+
+/* IfElseStmtNode */
+
+void LingoCompiler::visitIfElseStmtNode(IfElseStmtNode *node) {
+	node->cond->accept(this);
+	uint jzPos = _currentAssembly->size();
+	code2(LC::c_jumpifz, 0);
+	for (uint i = 0; i < node->stmts1->size(); i++) {
+		(*node->stmts1)[i]->accept(this);
+	}
+
+	uint jmpPos = _currentAssembly->size();
+	code2(LC::c_jump, 0);
+	uint block2StartPos = _currentAssembly->size();
+	for (uint i = 0; i < node->stmts2->size(); i++) {
+		(*node->stmts2)[i]->accept(this);
+	}
+	uint endPos = _currentAssembly->size();
+
+	inst jzOffset = 0;
+	WRITE_UINT32(&jzOffset, block2StartPos - jzPos);
+	(*_currentAssembly)[jzPos + 1] = jzOffset;
+
+	inst jmpOffset = 0;
+	WRITE_UINT32(&jmpOffset, endPos - jmpPos);
+	(*_currentAssembly)[jmpPos + 1] = jmpOffset;
+}
+
 /* IntNode */
 
 void LingoCompiler::visitIntNode(IntNode *node) {
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index c9f9f50e6d..020b0906db 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -78,6 +78,8 @@ public:
 	virtual void visitGlobalNode(GlobalNode *node);
 	virtual void visitPropertyNode(PropertyNode *node);
 	virtual void visitInstanceNode(InstanceNode *node);
+	virtual void visitIfStmtNode(IfStmtNode *node);
+	virtual void visitIfElseStmtNode(IfElseStmtNode *node);
 	virtual void visitIntNode(IntNode *node);
 	virtual void visitFloatNode(FloatNode *node);
 	virtual void visitSymbolNode(SymbolNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 6316cc508e..e0b8a3da49 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -261,14 +261,16 @@ enum yysymbol_kind_t
   YYSYMBOL_stmtoneliner = 106,             /* stmtoneliner  */
   YYSYMBOL_proc = 107,                     /* proc  */
   YYSYMBOL_definevars = 108,               /* definevars  */
-  YYSYMBOL_stmtlist = 109,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 110,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 111,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 112,       /* simpleexprnoparens  */
-  YYSYMBOL_simpleexpr = 113,               /* simpleexpr  */
-  YYSYMBOL_expr = 114,                     /* expr  */
-  YYSYMBOL_exprlist = 115,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 116          /* nonemptyexprlist  */
+  YYSYMBOL_ifstmt = 109,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 110,               /* ifelsestmt  */
+  YYSYMBOL_stmtlist = 111,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 112,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 113,             /* stmtlistline  */
+  YYSYMBOL_simpleexprnoparens = 114,       /* simpleexprnoparens  */
+  YYSYMBOL_simpleexpr = 115,               /* simpleexpr  */
+  YYSYMBOL_expr = 116,                     /* expr  */
+  YYSYMBOL_exprlist = 117,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 118          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -588,18 +590,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  66
+#define YYFINAL  81
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   567
+#define YYLAST   1016
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  90
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  27
+#define YYNNTS  29
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  113
+#define YYNRULES  121
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  164
+#define YYNSTATES  189
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -662,12 +664,13 @@ static const yytype_int16 yyrline[] =
      290,   293,   295,   298,   300,   301,   302,   303,   306,   307,
      308,   309,   310,   312,   313,   314,   315,   316,   318,   319,
      320,   321,   322,   323,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   336,   337,   340,   344,   351,   353,   354,
-     357,   358,   361,   362,   363,   366,   367,   371,   377,   384,
-     385,   390,   391,   392,   393,   394,   395,   396,   397,   398,
-     401,   402,   405,   406,   407,   408,   409,   410,   411,   412,
-     413,   414,   415,   416,   417,   418,   419,   420,   421,   422,
-     425,   426,   429,   433
+     331,   332,   333,   336,   337,   340,   344,   351,   352,   353,
+     356,   357,   360,   361,   364,   365,   366,   369,   373,   377,
+     383,   387,   391,   395,   396,   400,   406,   413,   414,   419,
+     420,   421,   422,   423,   424,   425,   426,   427,   430,   431,
+     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   450,   451,   454,   455,
+     458,   462
 };
 #endif
 
@@ -701,8 +704,9 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "scriptpart", "macro", "factory", "method", "methodlist",
   "nonemptymethodlist", "methodlistline", "handler", "endargdef", "ID",
   "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "definevars",
-  "stmtlist", "nonemptystmtlist", "stmtlistline", "simpleexprnoparens",
-  "simpleexpr", "expr", "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "ifstmt", "ifelsestmt", "stmtlist", "nonemptystmtlist", "stmtlistline",
+  "simpleexprnoparens", "simpleexpr", "expr", "exprlist",
+  "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -725,7 +729,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-140)
+#define YYPACT_NINF (-91)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -739,23 +743,25 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     293,  -140,  -140,  -140,  -140,  -140,  -140,  -140,  -140,   414,
-    -140,  -140,   414,  -140,  -140,  -140,  -140,  -140,  -140,  -140,
-    -140,  -140,  -140,  -140,   414,  -140,  -140,   414,  -140,  -140,
-    -140,  -140,  -140,  -140,  -140,  -140,  -140,  -140,  -140,  -140,
-    -140,  -140,  -140,   414,   414,  -140,  -140,    16,   293,  -140,
-    -140,  -140,  -140,   153,   -66,  -140,  -140,  -140,  -140,  -140,
-     -62,   414,   -60,  -140,  -140,   414,  -140,  -140,  -140,  -140,
-    -140,  -140,   223,   223,   223,   223,   -51,  -140,  -140,   448,
-    -140,   -49,  -140,   414,   -45,   -63,   -44,   223,  -140,  -140,
-    -140,   435,   -53,   223,   223,   223,   223,   223,   223,   223,
-     223,   223,   223,   223,   223,   223,   223,   223,   223,   223,
-     223,   223,  -140,    32,   414,  -140,  -140,   -40,  -140,  -140,
-      32,   435,  -140,  -140,   -42,   -52,   -52,   -52,   -52,   483,
-     483,  -140,    60,   -52,   -52,   -52,   -52,    60,   -50,   -50,
-    -140,  -140,   448,  -140,   -30,    32,  -140,  -140,   414,   -63,
-     355,  -140,  -140,  -140,   -29,  -140,   414,    32,   -68,  -140,
-      32,  -140,   414,  -140
+     313,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   863,
+     173,   -91,   -91,   863,   -91,   -91,   -91,   -91,   -91,   -91,
+     -91,   -91,   -91,   -91,   -91,   863,   -91,   -91,   863,   -91,
+     -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,
+     -91,   -91,   -91,   -91,   863,   863,   -91,   -91,     4,   313,
+     -91,   -91,   -91,   -91,   243,   -91,   -91,   -91,   -91,   -91,
+     -91,   -91,   -76,   -66,   -91,   -91,   -91,   -91,   173,   173,
+     173,   173,   -73,   -91,   -91,   -21,   863,   -64,   -63,   -60,
+     863,   -91,   -91,   173,   897,   -59,   -52,   -91,   863,   -91,
+     -91,   -91,   884,   173,   621,   173,   173,   173,   173,   173,
+     173,   173,   173,   173,   173,   173,   173,   173,   173,   173,
+     173,   173,   -44,   -72,   -91,   -91,   -40,   884,   -65,   -91,
+     173,   -91,   -91,   -42,   682,    24,    38,    38,    38,    38,
+     932,   932,   -91,   -14,    38,    38,    38,    38,   -14,   -46,
+     -46,   -91,   -91,   682,   863,   -91,   -91,   -36,   -91,   -91,
+     682,   -34,   897,   -91,   -91,   -91,   374,   -91,   -91,   743,
+     682,   863,   -72,   436,   -91,   804,   -33,   -91,   682,   -91,
+     -30,   -91,   863,   682,   -91,   -91,   497,   682,   -69,   -91,
+     559,   -22,   682,   -91,   863,   -15,   -91,   -91,   -91
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -764,38 +770,40 @@ static const yytype_int16 yypact[] =
 static const yytype_int8 yydefact[] =
 {
        0,    24,    46,    28,    32,    50,    59,    30,    31,    63,
-      33,    35,     0,    39,    40,    42,    47,    48,    49,    51,
-      54,    57,    60,    58,     0,    43,    45,    63,    26,    44,
-      41,    38,    25,    27,    52,    29,    36,    37,    62,    56,
-      34,    61,    53,    63,     0,    55,     5,     0,     2,     3,
-       6,     7,     8,   110,     0,    67,    68,    69,    65,    72,
-      64,    63,     0,    74,    73,    63,     1,     4,    81,    82,
-      84,    83,    41,     0,     0,   110,    89,    90,    92,   112,
-      71,   111,     9,     0,     0,    13,     0,     0,    87,    85,
-      86,   112,     0,   110,     0,     0,     0,     0,     0,     0,
+       0,    33,    35,     0,    39,    40,    42,    47,    48,    49,
+      51,    54,    57,    60,    58,     0,    43,    45,    63,    26,
+      44,    41,    38,    25,    27,    52,    29,    36,    37,    62,
+      56,    34,    61,    53,    63,     0,    55,     5,     0,     2,
+       3,     6,     7,     8,   118,     9,    67,    70,    71,    68,
+      69,    65,     0,    64,    89,    90,    92,    91,    41,     0,
+       0,     0,    97,    98,   100,     0,    63,     0,     0,     0,
+      63,     1,     4,   118,   120,     0,   119,    74,     0,    95,
+      93,    94,     0,   118,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    66,    75,     0,    17,    18,    11,    14,    15,
-      75,     0,    91,    70,     0,   102,   103,   100,   101,   104,
-     105,    97,   107,   108,   109,    99,    98,   106,    93,    94,
-      95,    96,   113,    79,     0,    10,    76,    77,    63,     0,
-      20,    88,    80,    78,     0,    16,    21,    75,     0,    22,
-      12,    19,     0,    23
+       0,     0,     0,    13,    76,    75,     0,   120,     0,    73,
+       0,    66,    99,     0,    83,    77,   110,   111,   108,   109,
+     112,   113,   105,   115,   116,   117,   107,   106,   114,   101,
+     102,   103,   104,    83,     0,    17,    18,    11,    14,    15,
+      83,     0,   121,    96,    87,    88,     0,    84,    85,     0,
+      10,    63,     0,    20,    72,     0,     0,    86,    83,    79,
+       0,    16,    21,    83,    81,    78,     0,    83,     0,    22,
+       0,     0,    12,    19,     0,     0,    80,    23,    82
 };
 
   /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
+static const yytype_int8 yypgoto[] =
 {
-    -140,  -140,  -140,    12,  -140,  -140,  -140,  -140,  -140,   -87,
-    -140,  -140,     0,   -26,  -140,     2,  -140,  -140,  -140,  -117,
-    -140,  -139,  -140,   -59,    29,   -71,  -140
+     -91,   -91,   -91,    16,   -91,   -91,   -91,   -91,   -91,   -90,
+     -91,   -91,     0,   -25,   -91,     5,   -91,   -91,   -91,   -91,
+     -91,   -77,   -91,   -31,   -91,   -62,     6,   -81,   -91
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,    47,    48,    49,    50,    51,   116,   117,   118,   119,
-      52,   158,    76,    59,    60,   144,    55,    56,    57,   145,
-     146,   147,    77,    78,    79,    80,    81
+       0,    48,    49,    50,    51,    52,   146,   147,   148,   149,
+      53,   178,    72,    62,    63,   155,    56,    57,    58,    59,
+      60,   156,   157,   158,    73,    74,    84,    85,    86
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -803,84 +811,131 @@ static const yytype_uint8 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      53,    63,    54,   150,    92,   100,   153,   100,   101,    58,
-     114,   153,    61,    88,    89,    90,    66,    64,   161,   162,
-      82,   153,   124,   115,    62,    83,    85,    58,   106,   107,
-     108,   109,   110,   109,   110,    84,   123,    93,   111,    86,
-     160,   113,   120,    58,    65,     1,   149,   151,    53,     2,
-      54,     3,     4,     5,     6,     7,   152,   157,     8,     9,
-      67,    58,   155,    10,    11,    58,    13,    14,    15,    16,
-      17,    18,    19,     0,    20,    21,    22,    23,     0,    25,
-      26,    27,     0,   112,     0,     0,    28,    29,    30,    31,
-      32,    33,     0,     0,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    91,     0,     0,     0,     0,    45,
-       0,     0,     0,    53,   148,     0,   121,   100,   143,     0,
-      53,     0,   154,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   107,   108,   109,   110,    53,     0,     0,    58,     0,
-      53,     0,     0,     0,     0,     0,   159,    53,    68,     0,
-      53,     0,   163,    69,     0,     0,     1,    70,    71,     0,
+      54,   144,   118,    78,    81,    55,    89,    90,    91,    61,
+      87,   101,   123,    76,   145,    93,    75,   183,   184,    79,
+      94,    88,   113,   114,   151,    77,   115,   119,    61,    95,
+      96,    97,    98,    99,   100,   120,   101,   110,   111,   102,
+     103,   104,   143,   101,    61,    80,   150,   153,   159,    54,
+     162,   112,   164,   175,    55,   116,   177,   105,   106,   107,
+     108,   109,   110,   111,   186,    82,   160,   108,   109,   110,
+     111,   188,   171,   163,     0,     0,    61,    92,     0,     0,
+      61,     0,     0,     0,     0,     0,     0,     0,   121,   117,
+       0,   176,     0,     0,    54,   101,   180,     0,   102,   125,
+     182,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   107,   108,
+     109,   110,   111,     0,    54,   167,   152,     0,     0,   167,
+       0,     0,   167,     0,     0,     0,   170,     0,     0,     0,
+       0,     0,     0,    54,   161,   167,     0,     0,     0,   167,
+      54,   167,     0,     0,     0,     0,    54,     0,     0,    54,
+      54,    61,     0,    54,   169,    54,     0,     0,    54,     0,
+     174,     0,   179,    54,     0,     0,    54,    54,    64,     0,
+      54,     0,    54,    65,   187,     0,     1,    66,    67,     0,
        2,     0,     3,     4,     5,     6,     7,     0,     0,     8,
-       0,     0,     0,     0,    10,    11,     0,    13,    14,    15,
-      16,    17,    18,    19,     0,    20,    21,    22,    23,     0,
-      25,    26,     0,     0,     0,     0,     0,    28,    29,    72,
-      31,    32,    33,     0,     0,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,     0,     0,     0,     0,    68,     0,
-      45,     0,     0,    69,    73,    74,     1,    70,    71,     0,
-       2,    75,     3,     4,     5,     6,     7,     0,     0,     8,
-       0,     0,     0,     0,    10,    11,     0,    13,    14,    15,
-      16,    17,    18,    19,     0,    20,    21,    22,    23,     0,
-      25,    26,     0,     0,     0,     0,     0,    28,    29,    72,
-      31,    32,    33,     0,     0,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,     0,     0,     0,     0,     0,     0,
-      45,     0,     0,     0,    73,    74,     1,     0,     0,     0,
-       2,    87,     3,     4,     5,     6,     7,     0,     0,     8,
-       9,     0,     0,     0,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,     0,    20,    21,    22,    23,    24,
-      25,    26,    27,     0,     0,     0,     0,    28,    29,    30,
-      31,    32,    33,     0,     0,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,     1,     0,
-      45,   156,     2,     0,     3,     4,     5,     6,     7,    46,
-       0,     8,     9,     0,     0,     0,    10,    11,     0,    13,
-      14,    15,    16,    17,    18,    19,     0,    20,    21,    22,
-      23,     0,    25,    26,    27,     0,     0,     0,     0,    28,
-      29,    30,    31,    32,    33,     0,     0,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,     1,     0,     0,
-       0,     2,    45,     3,     4,     5,     6,     7,     0,     0,
-       8,   143,     0,     0,     0,    10,    11,     0,    13,    14,
-      15,    16,    17,    18,    19,     0,    20,    21,    22,    23,
-       0,    25,    26,     0,     0,     0,     0,     0,    28,    29,
-      30,    31,    32,    33,     0,     0,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    94,    95,    96,    97,    98,
-      99,    45,   100,     0,     0,   101,   102,   103,    94,    95,
-      96,    97,    98,    99,     0,   100,     0,     0,   101,   102,
-     103,     0,     0,   104,   105,   106,   107,   108,   109,   110,
-       0,     0,     0,     0,   122,     0,   104,   105,   106,   107,
-     108,   109,   110,    94,    95,    96,    97,     0,     0,     0,
-     100,     0,     0,   101,   102,   103,     0,     0,     0,     0,
+       0,     0,     0,     0,    11,    12,     0,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
+      26,    27,     0,     0,     0,     0,     0,    29,    30,    68,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,     0,     0,     0,     0,    64,     0,
+      46,     0,     0,    65,    69,    70,     1,    66,    67,     0,
+       2,    71,     3,     4,     5,     6,     7,     0,     0,     8,
+       0,     0,     0,     0,    11,    12,     0,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
+      26,    27,     0,     0,     0,     0,     0,    29,    30,    68,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,     0,     0,     0,     0,     0,     0,
+      46,     0,     0,     0,    69,    70,     1,     0,     0,     0,
+       2,    83,     3,     4,     5,     6,     7,     0,     0,     8,
+       9,     0,     0,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     1,     0,     0,
+      46,     2,     0,     3,     4,     5,     6,     7,   165,    47,
+       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
+      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
+       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,     0,     0,   166,     1,
+       0,    46,   172,     2,     0,     3,     4,     5,     6,     7,
+     154,     0,     8,     9,     0,     0,    10,    11,    12,     0,
+      14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
+      23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
+       1,     0,     0,    46,     2,     0,     3,     4,     5,     6,
+       7,     0,   154,     8,     9,     0,     0,    10,    11,    12,
+       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
+      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
+       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
+       0,   181,     1,     0,    46,     0,     2,     0,     3,     4,
+       5,     6,     7,   154,     0,     8,     9,     0,     0,    10,
+      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
+       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,     0,     0,   185,     1,     0,    46,     0,     2,     0,
+       3,     4,     5,     6,     7,   154,     0,     8,     9,     0,
+       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
+      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
+      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,     1,     0,     0,    46,     2,
+       0,     3,     4,     5,     6,     7,     0,   124,     8,     9,
+       0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
+      18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
+      27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,     0,     0,     1,     0,     0,    46,
+       2,     0,     3,     4,     5,     6,     7,     0,   154,     8,
+       9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
+      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,     0,     0,     1,     0,     0,
+      46,     2,     0,     3,     4,     5,     6,     7,     0,   168,
+       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
+      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
+       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,     1,     0,     0,     0,
+       2,    46,     3,     4,     5,     6,     7,     0,     0,     8,
+     173,     0,     0,     0,    11,    12,     0,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
+      26,    27,     0,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    95,    96,    97,    98,    99,   100,
+      46,   101,     0,     0,   102,   103,   104,    95,    96,    97,
+      98,    99,   100,     0,   101,     0,     0,   102,   103,   104,
+       0,     0,   105,   106,   107,   108,   109,   110,   111,     0,
+       0,     0,     0,   122,     0,   105,   106,   107,   108,   109,
+     110,   111,    95,    96,    97,    98,     0,     0,     0,   101,
+       0,     0,   102,   103,   104,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   104,   105,   106,   107,   108,   109,   110
+     105,   106,   107,   108,   109,   110,   111
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    27,     0,   120,    75,    57,   145,    57,    60,     9,
-      73,   150,    12,    72,    73,    74,     0,    43,    86,    87,
-      86,   160,    93,    86,    24,    87,    86,    27,    80,    81,
-      82,    83,    84,    83,    84,    61,    89,    88,    87,    65,
-     157,    86,    86,    43,    44,    13,    86,    89,    48,    17,
-      48,    19,    20,    21,    22,    23,    86,    86,    26,    27,
-      48,    61,   149,    31,    32,    65,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    83,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    75,    -1,    -1,    -1,    -1,    77,
-      -1,    -1,    -1,   113,   114,    -1,    87,    57,    86,    -1,
-     120,    -1,   148,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,    81,    82,    83,    84,   145,    -1,    -1,   148,    -1,
-     150,    -1,    -1,    -1,    -1,    -1,   156,   157,     5,    -1,
-     160,    -1,   162,    10,    -1,    -1,    13,    14,    15,    -1,
+       0,    73,    83,    28,     0,     0,    68,    69,    70,     9,
+      86,    57,    93,    13,    86,    88,    10,    86,    87,    44,
+      41,    87,    86,    86,    89,    25,    86,    86,    28,    50,
+      51,    52,    53,    54,    55,    87,    57,    83,    84,    60,
+      61,    62,    86,    57,    44,    45,    86,    89,    24,    49,
+      86,    76,    86,    86,    49,    80,    86,    78,    79,    80,
+      81,    82,    83,    84,    86,    49,   143,    81,    82,    83,
+      84,    86,   162,   150,    -1,    -1,    76,    71,    -1,    -1,
+      80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    83,
+      -1,   168,    -1,    -1,    94,    57,   173,    -1,    60,    94,
+     177,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,    80,    81,
+      82,    83,    84,    -1,   124,   156,   120,    -1,    -1,   160,
+      -1,    -1,   163,    -1,    -1,    -1,   161,    -1,    -1,    -1,
+      -1,    -1,    -1,   143,   144,   176,    -1,    -1,    -1,   180,
+     150,   182,    -1,    -1,    -1,    -1,   156,    -1,    -1,   159,
+     160,   161,    -1,   163,   159,   165,    -1,    -1,   168,    -1,
+     165,    -1,   172,   173,    -1,    -1,   176,   177,     5,    -1,
+     180,    -1,   182,    10,   184,    -1,    13,    14,    15,    -1,
       17,    -1,    19,    20,    21,    22,    23,    -1,    -1,    26,
       -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
@@ -896,31 +951,74 @@ static const yytype_int16 yycheck[] =
       67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
       77,    -1,    -1,    -1,    81,    82,    13,    -1,    -1,    -1,
       17,    88,    19,    20,    21,    22,    23,    -1,    -1,    26,
-      27,    -1,    -1,    -1,    31,    32,    33,    34,    35,    36,
+      27,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    46,
       47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
       57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    -1,    13,    -1,
-      77,    16,    17,    -1,    19,    20,    21,    22,    23,    86,
-      -1,    26,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    13,    -1,    -1,
-      -1,    17,    77,    19,    20,    21,    22,    23,    -1,    -1,
-      26,    86,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      67,    68,    69,    70,    71,    72,    -1,    13,    -1,    -1,
+      77,    17,    -1,    19,    20,    21,    22,    23,    24,    86,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    74,    13,
+      -1,    77,    16,    17,    -1,    19,    20,    21,    22,    23,
+      86,    -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      13,    -1,    -1,    77,    17,    -1,    19,    20,    21,    22,
+      23,    -1,    86,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    74,    13,    -1,    77,    -1,    17,    -1,    19,    20,
+      21,    22,    23,    86,    -1,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    74,    13,    -1,    77,    -1,    17,    -1,
+      19,    20,    21,    22,    23,    86,    -1,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    17,
+      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
+      17,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
+      77,    17,    -1,    19,    20,    21,    22,    23,    -1,    86,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
       36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
       56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    50,    51,    52,    53,    54,
-      55,    77,    57,    -1,    -1,    60,    61,    62,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    89,    -1,    78,    79,    80,    81,
-      82,    83,    84,    50,    51,    52,    53,    -1,    -1,    -1,
-      57,    -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,
+      66,    67,    68,    69,    70,    71,    13,    -1,    -1,    -1,
+      17,    77,    19,    20,    21,    22,    23,    -1,    -1,    26,
+      86,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    50,    51,    52,    53,    54,    55,
+      77,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      -1,    -1,    -1,    89,    -1,    78,    79,    80,    81,    82,
+      83,    84,    50,    51,    52,    53,    -1,    -1,    -1,    57,
+      -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84
+      78,    79,    80,    81,    82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -928,22 +1026,24 @@ static const yytype_int16 yycheck[] =
 static const yytype_int8 yystos[] =
 {
        0,    13,    17,    19,    20,    21,    22,    23,    26,    27,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      42,    43,    44,    45,    46,    47,    48,    49,    54,    55,
-      56,    57,    58,    59,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    77,    86,    91,    92,    93,
-      94,    95,   100,   102,   105,   106,   107,   108,   102,   103,
-     104,   102,   102,   103,   103,   102,     0,    93,     5,    10,
-      14,    15,    56,    81,    82,    88,   102,   112,   113,   114,
-     115,   116,    86,    87,   103,    86,   103,    88,   113,   113,
-     113,   114,   115,    88,    50,    51,    52,    53,    54,    55,
-      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
-      84,    87,   102,    86,    73,    86,    96,    97,    98,    99,
-      86,   114,    89,    89,   115,   114,   114,   114,   114,   114,
-     114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
-     114,   114,   114,    86,   105,   109,   110,   111,   102,    86,
-     109,    89,    86,   111,   103,    99,    16,    86,   101,   102,
-     109,    86,    87,   102
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    42,    43,    44,    45,    46,    47,    48,    49,    54,
+      55,    56,    57,    58,    59,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    77,    86,    91,    92,
+      93,    94,    95,   100,   102,   105,   106,   107,   108,   109,
+     110,   102,   103,   104,     5,    10,    14,    15,    56,    81,
+      82,    88,   102,   114,   115,   116,   102,   102,   103,   103,
+     102,     0,    93,    88,   116,   117,   118,    86,    87,   115,
+     115,   115,   116,    88,    41,    50,    51,    52,    53,    54,
+      55,    57,    60,    61,    62,    78,    79,    80,    81,    82,
+      83,    84,   103,    86,    86,    86,   103,   116,   117,    86,
+      87,   102,    89,   117,    86,   105,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,    86,    73,    86,    96,    97,    98,    99,
+      86,    89,   116,    89,    86,   105,   111,   112,   113,    24,
+     111,   102,    86,   111,    86,    24,    74,   113,    86,   105,
+     103,    99,    16,    86,   105,    86,   111,    86,   101,   102,
+     111,    74,   111,    86,    87,    74,    86,   102,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -955,29 +1055,31 @@ static const yytype_int8 yyr1[] =
      102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
      102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
      102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   103,   103,   104,   104,   105,   106,   106,
-     107,   107,   108,   108,   108,   109,   109,   110,   110,   111,
-     111,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     113,   113,   114,   114,   114,   114,   114,   114,   114,   114,
-     114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
-     115,   115,   116,   116
+     102,   102,   102,   103,   103,   104,   104,   105,   105,   105,
+     106,   106,   107,   107,   108,   108,   108,   109,   109,   110,
+     110,   110,   110,   111,   111,   112,   112,   113,   113,   114,
+     114,   114,   114,   114,   114,   114,   114,   114,   115,   115,
+     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   116,   116,   117,   117,
+     118,   118
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int8 yyr2[] =
 {
-       0,     2,     1,     1,     2,     1,     1,     1,     1,     2,
+       0,     2,     1,     1,     2,     1,     1,     1,     1,     1,
        5,     4,     5,     0,     1,     1,     3,     1,     1,     8,
        5,     0,     1,     3,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     0,     1,     1,     3,     1,     1,     1,
-       4,     2,     2,     2,     2,     0,     1,     1,     2,     1,
-       2,     1,     1,     1,     1,     2,     2,     2,     4,     1,
-       1,     3,     1,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       0,     1,     1,     3
+       1,     1,     5,     3,     3,     3,     3,     4,     7,     6,
+       9,     7,    10,     0,     1,     1,     2,     1,     1,     1,
+       1,     1,     1,     2,     2,     2,     4,     1,     1,     3,
+       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     0,     1,
+       1,     3
 };
 
 
@@ -1251,49 +1353,49 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1255 "engines/director/lingo/lingo-gr.cpp"
+#line 1357 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1261 "engines/director/lingo/lingo-gr.cpp"
+#line 1363 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1267 "engines/director/lingo/lingo-gr.cpp"
+#line 1369 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1273 "engines/director/lingo/lingo-gr.cpp"
+#line 1375 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1279 "engines/director/lingo/lingo-gr.cpp"
+#line 1381 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1285 "engines/director/lingo/lingo-gr.cpp"
+#line 1387 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1291 "engines/director/lingo/lingo-gr.cpp"
+#line 1393 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1297 "engines/director/lingo/lingo-gr.cpp"
+#line 1399 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -1561,7 +1663,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 190 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 1565 "engines/director/lingo/lingo-gr.cpp"
+#line 1667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -1572,7 +1674,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1576 "engines/director/lingo/lingo-gr.cpp"
+#line 1678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -1582,37 +1684,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1586 "engines/director/lingo/lingo-gr.cpp"
+#line 1688 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 205 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 1592 "engines/director/lingo/lingo-gr.cpp"
+#line 1694 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 238 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1598 "engines/director/lingo/lingo-gr.cpp"
+#line 1700 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 242 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 1604 "engines/director/lingo/lingo-gr.cpp"
+#line 1706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1610 "engines/director/lingo/lingo-gr.cpp"
+#line 1712 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 246 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 1616 "engines/director/lingo/lingo-gr.cpp"
+#line 1718 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -1623,7 +1725,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1627 "engines/director/lingo/lingo-gr.cpp"
+#line 1729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -1633,13 +1735,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 1637 "engines/director/lingo/lingo-gr.cpp"
+#line 1739 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 263 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 1643 "engines/director/lingo/lingo-gr.cpp"
+#line 1745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -1648,260 +1750,260 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 1652 "engines/director/lingo/lingo-gr.cpp"
+#line 1754 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 273 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1659 "engines/director/lingo/lingo-gr.cpp"
+#line 1761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 1665 "engines/director/lingo/lingo-gr.cpp"
+#line 1767 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 279 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 1671 "engines/director/lingo/lingo-gr.cpp"
+#line 1773 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 1677 "engines/director/lingo/lingo-gr.cpp"
+#line 1779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
 #line 286 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 1683 "engines/director/lingo/lingo-gr.cpp"
+#line 1785 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
 #line 287 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 1689 "engines/director/lingo/lingo-gr.cpp"
+#line 1791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
 #line 288 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 1695 "engines/director/lingo/lingo-gr.cpp"
+#line 1797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
 #line 289 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 1701 "engines/director/lingo/lingo-gr.cpp"
+#line 1803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
 #line 290 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 1707 "engines/director/lingo/lingo-gr.cpp"
+#line 1809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tEXIT  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 1713 "engines/director/lingo/lingo-gr.cpp"
+#line 1815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFIELD  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 1719 "engines/director/lingo/lingo-gr.cpp"
+#line 1821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 1725 "engines/director/lingo/lingo-gr.cpp"
+#line 1827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 1731 "engines/director/lingo/lingo-gr.cpp"
+#line 1833 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 1737 "engines/director/lingo/lingo-gr.cpp"
+#line 1839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 1743 "engines/director/lingo/lingo-gr.cpp"
+#line 1845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 1749 "engines/director/lingo/lingo-gr.cpp"
+#line 1851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 1755 "engines/director/lingo/lingo-gr.cpp"
+#line 1857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 1761 "engines/director/lingo/lingo-gr.cpp"
+#line 1863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 1767 "engines/director/lingo/lingo-gr.cpp"
+#line 1869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 1773 "engines/director/lingo/lingo-gr.cpp"
+#line 1875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 1779 "engines/director/lingo/lingo-gr.cpp"
+#line 1881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 1785 "engines/director/lingo/lingo-gr.cpp"
+#line 1887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 1791 "engines/director/lingo/lingo-gr.cpp"
+#line 1893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPLAY  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 1797 "engines/director/lingo/lingo-gr.cpp"
+#line 1899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tPLAYACCEL  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("playAccel"); }
-#line 1803 "engines/director/lingo/lingo-gr.cpp"
+#line 1905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tPREVIOUS  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 1809 "engines/director/lingo/lingo-gr.cpp"
+#line 1911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tPUT  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 1815 "engines/director/lingo/lingo-gr.cpp"
+#line 1917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tREPEAT  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 1821 "engines/director/lingo/lingo-gr.cpp"
+#line 1923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tSCRIPT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 1827 "engines/director/lingo/lingo-gr.cpp"
+#line 1929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tSET  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 1833 "engines/director/lingo/lingo-gr.cpp"
+#line 1935 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tSTARTS  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 1839 "engines/director/lingo/lingo-gr.cpp"
+#line 1941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tTELL  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 1845 "engines/director/lingo/lingo-gr.cpp"
+#line 1947 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tTO  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 1851 "engines/director/lingo/lingo-gr.cpp"
+#line 1953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tASSERTERROR  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 1857 "engines/director/lingo/lingo-gr.cpp"
+#line 1959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tSPRITE  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 1863 "engines/director/lingo/lingo-gr.cpp"
+#line 1965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWHEN  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 1869 "engines/director/lingo/lingo-gr.cpp"
+#line 1971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWHILE  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 1875 "engines/director/lingo/lingo-gr.cpp"
+#line 1977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWINDOW  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 1881 "engines/director/lingo/lingo-gr.cpp"
+#line 1983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* ID: tWITH  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 1887 "engines/director/lingo/lingo-gr.cpp"
+#line 1989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* ID: tWITHIN  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 1893 "engines/director/lingo/lingo-gr.cpp"
+#line 1995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* ID: tWORD  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 1899 "engines/director/lingo/lingo-gr.cpp"
+#line 2001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* idlist: %empty  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 1905 "engines/director/lingo/lingo-gr.cpp"
+#line 2007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* nonemptyidlist: ID  */
@@ -1910,7 +2012,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 1914 "engines/director/lingo/lingo-gr.cpp"
+#line 2016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -1918,265 +2020,317 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 1922 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 70: /* proc: ID '(' exprlist ')'  */
-#line 357 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new CmdNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 1928 "engines/director/lingo/lingo-gr.cpp"
+#line 2024 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71: /* proc: ID exprlist  */
-#line 358 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new CmdNode((yyvsp[-1].s), (yyvsp[0].nodelist)); }
-#line 1934 "engines/director/lingo/lingo-gr.cpp"
+  case 72: /* proc: ID '(' exprlist ')' '\n'  */
+#line 360 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new CmdNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
+#line 2030 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* definevars: tGLOBAL idlist  */
+  case 73: /* proc: ID exprlist '\n'  */
 #line 361 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new GlobalNode((yyvsp[0].idlist)); }
-#line 1940 "engines/director/lingo/lingo-gr.cpp"
+                                                        { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
+#line 2036 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* definevars: tPROPERTY idlist  */
-#line 362 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new PropertyNode((yyvsp[0].idlist)); }
-#line 1946 "engines/director/lingo/lingo-gr.cpp"
+  case 74: /* definevars: tGLOBAL idlist '\n'  */
+#line 364 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
+#line 2042 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* definevars: tINSTANCE idlist  */
-#line 363 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new InstanceNode((yyvsp[0].idlist)); }
-#line 1952 "engines/director/lingo/lingo-gr.cpp"
+  case 75: /* definevars: tPROPERTY idlist '\n'  */
+#line 365 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
+#line 2048 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* stmtlist: %empty  */
+  case 76: /* definevars: tINSTANCE idlist '\n'  */
 #line 366 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
+#line 2054 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 77: /* ifstmt: tIF expr tTHEN stmt  */
+#line 369 "engines/director/lingo/lingo-gr.y"
+                            {
+		NodeList *stmtlist = new NodeList;
+		stmtlist->push_back((yyvsp[0].node));
+		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
+#line 2063 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 78: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 373 "engines/director/lingo/lingo-gr.y"
+                                                   {
+		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
+#line 2070 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 79: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 377 "engines/director/lingo/lingo-gr.y"
+                                                         {
+		NodeList *stmtlist1 = new NodeList;
+		stmtlist1->push_back((yyvsp[-2].node));
+		NodeList *stmtlist2 = new NodeList;
+		stmtlist2->push_back((yyvsp[0].node));
+		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
+#line 2081 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 80: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 383 "engines/director/lingo/lingo-gr.y"
+                                                                                {
+		NodeList *stmtlist1 = new NodeList;
+		stmtlist1->push_back((yyvsp[-5].node));
+		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
+#line 2090 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 81: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 387 "engines/director/lingo/lingo-gr.y"
+                                                                    {
+		NodeList *stmtlist2 = new NodeList;
+		stmtlist2->push_back((yyvsp[0].node));
+		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
+#line 2099 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 82: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 391 "engines/director/lingo/lingo-gr.y"
+                                                                                             {
+		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
+#line 2106 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 83: /* stmtlist: %empty  */
+#line 395 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 1958 "engines/director/lingo/lingo-gr.cpp"
+#line 2112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* nonemptystmtlist: stmtlistline  */
-#line 371 "engines/director/lingo/lingo-gr.y"
+  case 85: /* nonemptystmtlist: stmtlistline  */
+#line 400 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1969 "engines/director/lingo/lingo-gr.cpp"
+#line 2123 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+  case 86: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 406 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1979 "engines/director/lingo/lingo-gr.cpp"
+#line 2133 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* stmtlistline: '\n'  */
-#line 384 "engines/director/lingo/lingo-gr.y"
+  case 87: /* stmtlistline: '\n'  */
+#line 413 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 1985 "engines/director/lingo/lingo-gr.cpp"
+#line 2139 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* simpleexprnoparens: tINT  */
-#line 390 "engines/director/lingo/lingo-gr.y"
+  case 89: /* simpleexprnoparens: tINT  */
+#line 419 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 1991 "engines/director/lingo/lingo-gr.cpp"
+#line 2145 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* simpleexprnoparens: tFLOAT  */
-#line 391 "engines/director/lingo/lingo-gr.y"
+  case 90: /* simpleexprnoparens: tFLOAT  */
+#line 420 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 1997 "engines/director/lingo/lingo-gr.cpp"
+#line 2151 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* simpleexprnoparens: tSYMBOL  */
-#line 392 "engines/director/lingo/lingo-gr.y"
+  case 91: /* simpleexprnoparens: tSYMBOL  */
+#line 421 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2003 "engines/director/lingo/lingo-gr.cpp"
+#line 2157 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* simpleexprnoparens: tSTRING  */
-#line 393 "engines/director/lingo/lingo-gr.y"
+  case 92: /* simpleexprnoparens: tSTRING  */
+#line 422 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2009 "engines/director/lingo/lingo-gr.cpp"
+#line 2163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* simpleexprnoparens: '+' simpleexpr  */
-#line 394 "engines/director/lingo/lingo-gr.y"
+  case 93: /* simpleexprnoparens: '+' simpleexpr  */
+#line 423 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[0].node); }
-#line 2015 "engines/director/lingo/lingo-gr.cpp"
+#line 2169 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* simpleexprnoparens: '-' simpleexpr  */
-#line 395 "engines/director/lingo/lingo-gr.y"
+  case 94: /* simpleexprnoparens: '-' simpleexpr  */
+#line 424 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2021 "engines/director/lingo/lingo-gr.cpp"
+#line 2175 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 396 "engines/director/lingo/lingo-gr.y"
+  case 95: /* simpleexprnoparens: tNOT simpleexpr  */
+#line 425 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2027 "engines/director/lingo/lingo-gr.cpp"
+#line 2181 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* simpleexprnoparens: ID '(' exprlist ')'  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+  case 96: /* simpleexprnoparens: ID '(' exprlist ')'  */
+#line 426 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2033 "engines/director/lingo/lingo-gr.cpp"
+#line 2187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* simpleexprnoparens: ID  */
-#line 398 "engines/director/lingo/lingo-gr.y"
+  case 97: /* simpleexprnoparens: ID  */
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2039 "engines/director/lingo/lingo-gr.cpp"
+#line 2193 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* simpleexpr: '(' expr ')'  */
-#line 402 "engines/director/lingo/lingo-gr.y"
+  case 99: /* simpleexpr: '(' expr ')'  */
+#line 431 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2045 "engines/director/lingo/lingo-gr.cpp"
+#line 2199 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* expr: simpleexpr  */
-#line 405 "engines/director/lingo/lingo-gr.y"
+  case 100: /* expr: simpleexpr  */
+#line 434 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2051 "engines/director/lingo/lingo-gr.cpp"
+#line 2205 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* expr: expr '+' expr  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+  case 101: /* expr: expr '+' expr  */
+#line 435 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2057 "engines/director/lingo/lingo-gr.cpp"
+#line 2211 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* expr: expr '-' expr  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+  case 102: /* expr: expr '-' expr  */
+#line 436 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2063 "engines/director/lingo/lingo-gr.cpp"
+#line 2217 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* expr: expr '*' expr  */
-#line 408 "engines/director/lingo/lingo-gr.y"
+  case 103: /* expr: expr '*' expr  */
+#line 437 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2069 "engines/director/lingo/lingo-gr.cpp"
+#line 2223 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* expr: expr '/' expr  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+  case 104: /* expr: expr '/' expr  */
+#line 438 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2075 "engines/director/lingo/lingo-gr.cpp"
+#line 2229 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* expr: expr tMOD expr  */
-#line 410 "engines/director/lingo/lingo-gr.y"
+  case 105: /* expr: expr tMOD expr  */
+#line 439 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2081 "engines/director/lingo/lingo-gr.cpp"
+#line 2235 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* expr: expr '>' expr  */
-#line 411 "engines/director/lingo/lingo-gr.y"
+  case 106: /* expr: expr '>' expr  */
+#line 440 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2087 "engines/director/lingo/lingo-gr.cpp"
+#line 2241 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* expr: expr '<' expr  */
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 107: /* expr: expr '<' expr  */
+#line 441 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2093 "engines/director/lingo/lingo-gr.cpp"
+#line 2247 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* expr: expr tEQ expr  */
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 108: /* expr: expr tEQ expr  */
+#line 442 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2099 "engines/director/lingo/lingo-gr.cpp"
+#line 2253 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* expr: expr tNEQ expr  */
-#line 414 "engines/director/lingo/lingo-gr.y"
+  case 109: /* expr: expr tNEQ expr  */
+#line 443 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2105 "engines/director/lingo/lingo-gr.cpp"
+#line 2259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* expr: expr tGE expr  */
-#line 415 "engines/director/lingo/lingo-gr.y"
+  case 110: /* expr: expr tGE expr  */
+#line 444 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2111 "engines/director/lingo/lingo-gr.cpp"
+#line 2265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* expr: expr tLE expr  */
-#line 416 "engines/director/lingo/lingo-gr.y"
+  case 111: /* expr: expr tLE expr  */
+#line 445 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2117 "engines/director/lingo/lingo-gr.cpp"
+#line 2271 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* expr: expr tAND expr  */
-#line 417 "engines/director/lingo/lingo-gr.y"
+  case 112: /* expr: expr tAND expr  */
+#line 446 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2123 "engines/director/lingo/lingo-gr.cpp"
+#line 2277 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* expr: expr tOR expr  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+  case 113: /* expr: expr tOR expr  */
+#line 447 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2129 "engines/director/lingo/lingo-gr.cpp"
+#line 2283 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* expr: expr '&' expr  */
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 114: /* expr: expr '&' expr  */
+#line 448 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2135 "engines/director/lingo/lingo-gr.cpp"
+#line 2289 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* expr: expr tCONCAT expr  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+  case 115: /* expr: expr tCONCAT expr  */
+#line 449 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2141 "engines/director/lingo/lingo-gr.cpp"
+#line 2295 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* expr: expr tCONTAINS expr  */
-#line 421 "engines/director/lingo/lingo-gr.y"
+  case 116: /* expr: expr tCONTAINS expr  */
+#line 450 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2147 "engines/director/lingo/lingo-gr.cpp"
+#line 2301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* expr: expr tSTARTS expr  */
-#line 422 "engines/director/lingo/lingo-gr.y"
+  case 117: /* expr: expr tSTARTS expr  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2153 "engines/director/lingo/lingo-gr.cpp"
+#line 2307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* exprlist: %empty  */
-#line 425 "engines/director/lingo/lingo-gr.y"
+  case 118: /* exprlist: %empty  */
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 2159 "engines/director/lingo/lingo-gr.cpp"
+#line 2313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* nonemptyexprlist: expr  */
-#line 429 "engines/director/lingo/lingo-gr.y"
+  case 120: /* nonemptyexprlist: expr  */
+#line 458 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2168 "engines/director/lingo/lingo-gr.cpp"
+#line 2322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 121: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 462 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2176 "engines/director/lingo/lingo-gr.cpp"
+#line 2330 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 2180 "engines/director/lingo/lingo-gr.cpp"
+#line 2334 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -2375,7 +2529,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 438 "engines/director/lingo/lingo-gr.y"
+#line 467 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 28838519be..73f4e4e801 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -164,7 +164,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<idlist> idlist nonemptyidlist
 
 // STATEMENT
-%type<node> stmt stmtoneliner proc definevars
+%type<node> stmt stmtoneliner proc definevars ifstmt ifelsestmt
 %type<nodelist> stmtlist nonemptystmtlist
 %type<node> stmtlistline
 
@@ -206,7 +206,7 @@ scriptpart:	'\n'						{ $$ = nullptr; }
 	| macro
 	| factory
 	| handler
-	| stmt '\n'
+	| stmt
 	;
 
 // MACRO
@@ -347,20 +347,52 @@ nonemptyidlist: ID[item]					{
 	;
 
 // STATEMENT
+// N.B. A statement must always be terminated by a '\n' symbol.
+// Sometimes this '\n' is in a nested statement (e.g. tIF expr tTHEN stmt).
+// It may not look like there's a '\n', but it's there.
 
-stmt: stmtoneliner ;
+stmt: stmtoneliner
+	| ifstmt
+	| ifelsestmt
+	;
 
 stmtoneliner: proc
 	| definevars
 	;
 
-proc: ID '(' exprlist[args] ')'		{ $$ = new CmdNode($ID, $args); }
-	| ID exprlist[args]				{ $$ = new CmdNode($ID, $args); }
+proc: ID '(' exprlist[args] ')' '\n'	{ $$ = new CmdNode($ID, $args); }
+	| ID exprlist[args] '\n'			{ $$ = new CmdNode($ID, $args); }
+	;
+
+definevars: tGLOBAL idlist '\n'			{ $$ = new GlobalNode($idlist); }
+	| tPROPERTY idlist '\n'				{ $$ = new PropertyNode($idlist); }
+	| tINSTANCE idlist '\n'				{ $$ = new InstanceNode($idlist); }
+	;
+
+ifstmt: tIF expr tTHEN stmt {
+		NodeList *stmtlist = new NodeList;
+		stmtlist->push_back($stmt);
+		$$ = new IfStmtNode($expr, stmtlist); }
+	| tIF expr tTHEN '\n' stmtlist tENDIF '\n' {
+		$$ = new IfStmtNode($expr, $stmtlist); }
 	;
 
-definevars: tGLOBAL idlist			{ $$ = new GlobalNode($idlist); }
-	| tPROPERTY idlist				{ $$ = new PropertyNode($idlist); }
-	| tINSTANCE idlist				{ $$ = new InstanceNode($idlist); }
+ifelsestmt: tIF expr tTHEN stmt[stmt1] tELSE stmt[stmt2] {
+		NodeList *stmtlist1 = new NodeList;
+		stmtlist1->push_back($stmt1);
+		NodeList *stmtlist2 = new NodeList;
+		stmtlist2->push_back($stmt2);
+		$$ = new IfElseStmtNode($expr, stmtlist1, stmtlist2); }
+	| tIF expr tTHEN stmt[stmt1] tELSE '\n' stmtlist[stmtlist2] tENDIF '\n' {
+		NodeList *stmtlist1 = new NodeList;
+		stmtlist1->push_back($stmt1);
+		$$ = new IfElseStmtNode($expr, stmtlist1, $stmtlist2); }
+	| tIF expr tTHEN '\n' stmtlist[stmtlist1] tELSE stmt[stmt2] {
+		NodeList *stmtlist2 = new NodeList;
+		stmtlist2->push_back($stmt2);
+		$$ = new IfElseStmtNode($expr, $stmtlist1, stmtlist2); }
+	| tIF expr tTHEN '\n' stmtlist[stmtlist1] tELSE '\n' stmtlist[stmtlist2] tENDIF '\n' {
+		$$ = new IfElseStmtNode($expr, $stmtlist1, $stmtlist2); }
 	;
 
 stmtlist: /* empty */				{ $$ = new NodeList; }
@@ -382,7 +414,7 @@ nonemptystmtlist:
 	;
 
 stmtlistline: '\n'					{ $$ = nullptr; }
-	| stmt '\n'
+	| stmt
 	;
 
 // EXPRESSION
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index cfaccbaa00..63462ed4e2 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -355,8 +355,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 75
-#define YY_END_OF_BUFFER 76
+#define YY_NUM_RULES 74
+#define YY_END_OF_BUFFER 75
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -364,44 +364,44 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[330] =
+static const flex_int16_t yy_accept[327] =
     {   0,
-        0,    0,   76,   74,    1,   72,   72,   74,   74,   71,
-       71,   70,   71,   67,   71,   68,   68,   68,   68,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       68,   68,   68,    1,   68,    1,   72,    0,   73,    2,
-       66,   69,   70,   65,   63,   64,   68,   68,   68,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       10,   24,   68,   68,   68,   68,   68,   68,   68,   33,
-       34,   68,   36,   68,   68,   68,   68,   68,   68,   68,
-       68,   68,   68,   54,   68,   68,   68,    1,    0,   68,
-        2,   69,   68,    4,   68,   68,   68,   68,   68,   68,
-
-       13,   68,   68,   68,   19,   68,   68,   68,   68,   68,
-       68,   29,   68,   68,   32,   68,   68,   68,   68,   42,
-       68,   68,   68,   45,   68,   68,   68,   68,   68,   68,
-       68,   68,   68,    0,   68,   68,   68,    6,    7,   68,
-        9,   12,    0,   15,   68,   68,    0,    0,    0,   68,
-       68,   23,   25,   26,   68,   68,   68,   31,   35,   38,
-       68,   68,   68,   68,   68,   68,   68,   47,    0,   53,
-       59,   68,   68,   57,   62,    0,   68,    3,   68,   68,
-        0,   13,   16,   68,    0,    0,   19,   68,   68,   27,
-       68,   30,    0,   68,   68,   68,   68,   68,   68,   68,
-
-       68,   52,   52,   52,   60,   68,   68,    0,   68,    5,
-       68,    0,   13,   17,    0,    0,    0,   68,   68,   28,
-        0,   68,   68,   68,   43,   44,   68,   56,   46,    0,
-       52,   52,   61,   58,    0,   68,   68,   11,    0,   20,
-       68,   68,    0,   68,   68,   68,   68,    0,    0,    0,
-       52,   52,    0,   14,    8,   18,   21,   68,    0,   68,
-       40,   41,   68,    0,    0,    0,   52,   52,   14,   68,
-        0,   39,   68,    0,    0,    0,    0,   52,   22,   37,
-       68,   51,   50,   51,    0,    0,    0,    0,   52,   68,
-       50,    0,    0,    0,    0,    0,   68,    0,    0,    0,
-
-        0,    0,    0,   68,    0,    0,   51,   50,   50,   51,
-        0,   68,   49,   50,   50,    0,   68,   50,   68,    0,
-       50,   68,    0,    0,   55,    0,    0,   48,    0
+        0,    0,   75,   73,    1,   71,   71,   73,   73,   70,
+       70,   69,   70,   66,   70,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,    1,   67,    1,   71,    0,   72,    2,
+       65,   68,   69,   64,   62,   63,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       10,   23,   67,   67,   67,   67,   67,   67,   67,   32,
+       33,   67,   35,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   53,   67,   67,   67,    1,    0,   67,
+        2,   68,   67,    4,   67,   67,   67,   67,   67,   67,
+
+       12,   67,   67,   67,   18,   67,   67,   67,   67,   67,
+       67,   28,   67,   67,   31,   67,   67,   67,   67,   41,
+       67,   67,   67,   44,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,    0,   67,   67,   67,    6,    7,   67,
+        9,   11,    0,   14,   67,   67,    0,    0,    0,   67,
+       67,   22,   24,   25,   67,   67,   67,   30,   34,   37,
+       67,   67,   67,   67,   67,   67,   67,   46,    0,   52,
+       58,   67,   67,   56,   61,    0,   67,    3,   67,   67,
+       12,   15,   67,    0,    0,   18,   67,   67,   26,   67,
+       29,    0,   67,   67,   67,   67,   67,   67,   67,   67,
+
+       51,   51,   51,   59,   67,   67,    0,   67,    5,   67,
+       12,   16,    0,    0,    0,   67,   67,   27,    0,   67,
+       67,   67,   42,   43,   67,   55,   45,    0,   51,   51,
+       60,   57,    0,   67,   67,    0,   19,   67,   67,    0,
+       67,   67,   67,   67,    0,    0,    0,   51,   51,    0,
+       13,    8,   17,   20,   67,    0,   67,   39,   40,   67,
+        0,    0,    0,   51,   51,   13,   67,    0,   38,   67,
+        0,    0,    0,    0,   51,   21,   36,   67,   50,   49,
+       50,    0,    0,    0,    0,   51,   67,   49,    0,    0,
+        0,    0,    0,   67,    0,    0,    0,    0,    0,    0,
+
+       67,    0,    0,   50,   49,   49,   50,    0,   67,   48,
+       49,   49,    0,   67,   49,   67,    0,   49,   67,    0,
+        0,   54,    0,    0,   47,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -446,91 +446,89 @@ static const YY_CHAR yy_meta[60] =
         5,    5,    5,    5,    5,    5,    5,    5,    5
     } ;
 
-static const flex_int16_t yy_base[342] =
+static const flex_int16_t yy_base[339] =
     {   0,
-        0,   58,  661,  727,   59,  727,  727,  654,    0,  727,
-      648,   55,   54,  727,  643,   49,   51,   57,   46,   50,
+        0,   58,  655,  720,   59,  720,  720,  647,    0,  720,
+      643,   55,   54,  720,  638,   49,   51,   57,   46,   50,
        48,   56,    0,   85,   59,   95,   73,   98,  106,   68,
-      124,  138,   98,  165,  148,   85,  727,  647,  727,    0,
-      727,  640,  122,  727,  727,  727,    0,  120,   73,   93,
-      124,  143,  146,  139,  146,  146,  157,  164,  162,  644,
+      124,  138,   98,  165,  148,   85,  720,  644,  720,    0,
+      720,  638,  122,  720,  720,  720,    0,  120,   73,   93,
+      124,  143,  146,  139,  146,  146,  157,  164,  162,  641,
         0,  160,  167,  166,  177,  166,  183,  163,  171,    0,
         0,  186,    0,  191,  192,  176,  190,  194,  191,  198,
       197,  207,  214,    0,  215,  217,  207,  249,  224,  224,
-        0,  635,  237,    0,  217,  216,  229,  229,  237,  247,
+        0,  632,  237,    0,  217,  216,  229,  229,  237,  247,
 
-      638,  241,  249,  254,  275,  243,  258,  250,  260,  251,
+      639,  241,  249,  254,  275,  243,  258,  250,  260,  251,
       266,    0,  266,  251,    0,  258,  254,  258,  273,    0,
       286,  287,  290,    0,  288,  287,  293,  317,  295,  299,
       308,  305,  310,  314,  301,  306,  307,    0,    0,  323,
-        0,  637,  622,    0,  324,  331,  318,  321,  325,  339,
+        0,    0,  637,    0,  324,  331,  318,  321,  325,  339,
       327,    0,    0,    0,  330,  333,  344,    0,    0,  362,
       341,  349,  354,  344,  348,  343,  347,    0,  379,    0,
         0,  364,  357,  363,    0,  357,  362,    0,  372,  371,
-      396,    0,    0,  375,  394,  375,  579,  378,  380,    0,
-      396,    0,  417,  399,  393,  392,  392,  393,  396,  398,
-
-      400,  512,  436,  429,    0,  400,  409,  414,  416,    0,
-      422,  430,    0,    0,  429,  427,  457,  435,  438,    0,
-      433,  447,  433,  435,    0,    0,  442,    0,    0,  477,
-      467,  468,    0,    0,  443,  446,  453,  727,  468,  727,
-      473,  482,  485,  483,  466,  467,  495,  497,  493,  491,
-      490,  515,  488,    0,    0,  727,    0,  497,  504,  508,
-        0,    0,  504,  507,  505,  514,  500,  538,  727,  511,
-      524,    0,  515,  525,  479,  528,  546,  547,    0,  727,
-      532,  727,    0,  727,  392,  551,  567,  556,  340,  530,
-        0,  570,  573,  329,  558,  588,  540,  558,  560,  583,
-
-      586,  591,  579,  593,  318,  199,  169,  565,  598,  158,
-      144,  566,  127,  119,  116,  610,  592,  621,  599,  626,
-      641,  605,  611,  611,    0,   80,   77,   70,  727,  678,
-      680,  683,  686,  691,  696,  698,  703,  708,  710,  715,
-      720
+        0,    0,  374,  380,  372,  635,  376,  374,    0,  391,
+        0,  411,  394,  388,  387,  388,  389,  390,  406,  399,
+
+      631,  431,  429,    0,  401,  410,  410,  411,    0,  415,
+        0,    0,  419,  419,  447,  434,  433,    0,  424,  439,
+      425,  431,    0,    0,  440,    0,    0,  466,  469,  470,
+        0,    0,  444,  441,  448,  463,  720,  464,  470,  473,
+      471,  461,  456,  488,  489,  485,  486,  492,  510,  462,
+        0,    0,  720,    0,  486,  494,  500,    0,    0,  499,
+      499,  627,  506,  606,  532,  720,  503,  517,    0,  507,
+      520,  580,  521,  534,  539,    0,  720,  525,  720,    0,
+      720,  454,  543,  553,  556,  340,  519,    0,  567,  562,
+      329,  574,  578,  546,  557,  547,  568,  585,  583,  554,
+
+      561,  318,  199,  169,  566,  595,  158,  144,  569,  127,
+      119,  116,  507,  575,  616,  584,  618,  634,  594,  598,
+      611,    0,   80,   77,   70,  720,  671,  673,  676,  679,
+      684,  689,  691,  696,  701,  703,  708,  713
     } ;
 
-static const flex_int16_t yy_def[342] =
+static const flex_int16_t yy_def[339] =
     {   0,
-      329,    1,  329,  329,  329,  329,  329,  330,  331,  329,
-      329,  329,  329,  329,  329,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  329,  332,  329,  329,  330,  329,  333,
-      329,  329,  329,  329,  329,  329,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  329,  329,  332,
-      333,  329,  332,  332,  332,  332,  332,  332,  332,  332,
-
-      332,  332,  332,  332,  329,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  329,  332,  332,  332,  332,  332,  332,
-      332,  332,  334,  332,  332,  332,  329,  329,  329,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
-      332,  332,  332,  332,  332,  332,  332,  332,  335,  332,
-      332,  332,  332,  332,  332,  329,  332,  332,  332,  332,
-      329,  336,  332,  332,  329,  329,  329,  332,  332,  332,
-      332,  332,  329,  332,  332,  332,  332,  332,  332,  332,
-
-      332,  335,  335,  335,  332,  332,  332,  329,  332,  332,
-      332,  329,  336,  332,  329,  329,  329,  332,  332,  332,
-      329,  332,  332,  332,  332,  332,  332,  332,  332,  329,
-      335,  335,  332,  332,  329,  332,  332,  329,  329,  329,
-      332,  332,  329,  332,  332,  332,  332,  329,  329,  329,
-      335,  335,  329,  332,  332,  329,  332,  332,  329,  332,
-      332,  332,  332,  329,  329,  329,  335,  335,  329,  332,
-      329,  332,  332,  329,  337,  329,  338,  335,  332,  329,
-      332,  329,  339,  329,  338,  338,  338,  338,  335,  332,
-      339,  329,  338,  338,  338,  329,  332,  329,  329,  338,
-
-      337,  338,  329,  332,  329,  329,  338,  339,  339,  338,
-      329,  332,  329,  339,  339,  340,  332,  341,  332,  329,
-      341,  332,  329,  329,  332,  329,  329,  329,    0,  329,
+      326,    1,  326,  326,  326,  326,  326,  327,  328,  326,
+      326,  326,  326,  326,  326,  329,  329,  329,  329,  329,
       329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329
+      329,  329,  329,  326,  329,  326,  326,  327,  326,  330,
+      326,  326,  326,  326,  326,  326,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  326,  326,  329,
+      330,  326,  329,  329,  329,  329,  329,  329,  329,  329,
+
+      329,  329,  329,  329,  326,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  326,  329,  329,  329,  329,  329,  329,
+      329,  329,  331,  329,  329,  329,  326,  326,  326,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
+      329,  329,  329,  329,  329,  329,  329,  329,  332,  329,
+      329,  329,  329,  329,  329,  326,  329,  329,  329,  329,
+      333,  329,  329,  326,  326,  326,  329,  329,  329,  329,
+      329,  326,  329,  329,  329,  329,  329,  329,  329,  329,
+
+      332,  332,  332,  329,  329,  329,  326,  329,  329,  329,
+      333,  329,  326,  326,  326,  329,  329,  329,  326,  329,
+      329,  329,  329,  329,  329,  329,  329,  326,  332,  332,
+      329,  329,  326,  329,  329,  326,  326,  329,  329,  326,
+      329,  329,  329,  329,  326,  326,  326,  332,  332,  326,
+      329,  329,  326,  329,  329,  326,  329,  329,  329,  329,
+      326,  326,  326,  332,  332,  326,  329,  326,  329,  329,
+      326,  334,  326,  335,  332,  329,  326,  329,  326,  336,
+      326,  335,  335,  335,  335,  332,  329,  336,  326,  335,
+      335,  335,  326,  329,  326,  326,  335,  334,  335,  326,
+
+      329,  326,  326,  335,  336,  336,  335,  326,  329,  326,
+      336,  336,  337,  329,  338,  329,  326,  338,  329,  326,
+      326,  329,  326,  326,  326,    0,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326
     } ;
 
-static const flex_int16_t yy_nxt[787] =
+static const flex_int16_t yy_nxt[780] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,    4,   12,
        13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
@@ -539,22 +537,22 @@ static const flex_int16_t yy_nxt[787] =
        19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
        29,   30,   31,   32,   23,   23,   33,   23,   23,   34,
        36,   37,   37,   42,   43,   44,   45,   48,   50,   58,
-       51,  328,   54,   55,   49,   56,   35,   52,  328,   59,
-       64,  328,   60,   53,   57,   77,   36,   37,   37,   94,
+       51,  325,   54,   55,   49,   56,   35,   52,  325,   59,
+       64,  325,   60,   53,   57,   77,   36,   37,   37,   94,
        68,   48,   50,   58,   51,   54,   55,   49,   56,   69,
 
        35,   52,   59,   61,   64,   60,   53,   57,   65,   77,
-       62,   95,   66,   94,   68,   63,   70,  313,   85,   86,
-      313,   67,   69,   71,   87,   72,   73,   61,  313,   74,
+       62,   95,   66,   94,   68,   63,   70,  310,   85,   86,
+      310,   67,   69,   71,   87,   72,   73,   61,  310,   74,
        42,   43,   65,   62,   75,   95,   66,   76,   63,   78,
-       70,   79,   85,   86,   67,  316,   71,   87,   72,   73,
-       93,   80,   74,   96,   81,   82,   97,   75,   83,  292,
+       70,   79,   85,   86,   67,  313,   71,   87,   72,   73,
+       93,   80,   74,   96,   81,   82,   97,   75,   83,  289,
        76,   90,  101,   78,   84,   79,   88,   37,   37,   58,
-      292,   98,   99,   93,   80,  100,   96,   81,  102,   82,
+      289,   98,   99,   93,   80,  100,   96,   81,  102,   82,
        97,  103,   83,   89,  108,   90,  101,   84,  104,  106,
       107,  109,  110,   58,   98,   99,  111,  114,  100,  112,
 
-      313,  115,  102,  116,  117,  103,  120,   89,  108,  118,
+      310,  115,  102,  116,  117,  103,  120,   89,  108,  118,
       126,  104,  106,  107,  109,  113,  110,  121,  119,  111,
       114,  124,  122,  112,  115,  123,  125,  116,  117,  120,
       127,  128,  129,  118,  126,  133,  130,  134,  113,  135,
@@ -566,61 +564,60 @@ static const flex_int16_t yy_nxt[787] =
       161,   89,  146,  147,  144,  145,  150,  153,  148,  151,
 
       162,  154,  155,  163,  158,  149,  159,  152,  164,  166,
-      156,  157,  160,  161,  165,  167,  168,  147,  169,  313,
+      156,  157,  160,  161,  165,  167,  168,  147,  169,  310,
       171,  148,  172,  162,  173,  174,  175,  163,  149,  176,
-      301,  177,  164,  166,  178,  179,  180,  165,  167,  168,
-      183,  296,  170,  171,  184,  172,  185,  186,  173,  174,
-      175,  187,  188,  176,  177,  189,  190,  178,  179,  191,
-      180,  192,  195,  193,  183,  170,  196,  197,  184,  185,
-      186,  198,  199,  200,  187,  194,  188,  201,  189,  190,
-      169,  205,  191,  206,  207,  192,  195,  208,  209,  210,
-      196,  197,  211,  292,  198,  199,  200,  181,  214,  194,
-
-      201,  216,  203,  218,  204,  205,  206,  215,  207,  219,
-      208,  209,  220,  210,  222,  228,  211,  212,  193,  223,
-      224,  214,  225,  226,  216,  203,  218,  204,  227,  229,
-      230,  215,  219,  233,  234,  221,  220,  230,  222,  228,
-      235,  212,  223,  224,  236,  225,  226,  237,  238,  231,
-      241,  227,  229,  239,  240,  242,  233,  234,  217,  221,
-      232,  243,  244,  235,  245,  246,  247,  236,  230,  230,
-      237,  253,  238,  231,  241,  147,  239,  240,  230,  242,
-      275,  254,  255,  232,  243,  256,  244,  245,  246,  247,
-      257,  230,  252,  248,  253,  261,  251,  258,  259,  147,
-
-      260,  277,  262,  249,  254,  255,  275,  250,  263,  256,
-      264,  265,  266,  230,  257,  252,  230,  248,  261,  251,
-      267,  258,  259,  269,  260,  262,  249,  270,  271,  268,
-      250,  272,  263,  273,  264,  265,  266,  274,  276,  230,
-      279,  280,  282,  267,  281,  284,  269,  277,  230,  290,
-      270,  271,  292,  268,  272,  278,  273,  292,  297,  292,
-      274,  276,  286,  279,  293,  280,  282,  281,  292,  284,
-      304,  292,  287,  290,  292,  289,  288,  295,  306,  278,
-      217,  297,  302,  305,  292,  294,  286,  301,  293,  296,
-      314,  298,  292,  304,  317,  287,  299,  311,  289,  288,
-
-      307,  295,  306,  300,  248,  302,  305,  308,  310,  294,
-      312,  316,  309,  314,  303,  298,  315,  317,  250,  299,
-      319,  311,  320,  143,  307,  322,  300,  320,  248,  327,
-      291,  308,  310,  325,  312,  309,  326,  303,  181,  143,
-      315,  250,  320,  319,   92,  105,  283,  323,  322,   92,
-      291,   39,  324,  327,   46,   41,  325,  291,   39,  326,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  323,  329,  329,  329,  324,  329,  291,   38,   38,
-      329,   38,   38,   38,   40,   40,   47,   47,   47,   91,
-       91,   91,  182,  329,  329,  182,  182,  202,  329,  329,
-
-      202,  213,  213,  213,  283,  329,  329,  283,  283,  285,
-      329,  329,  285,  291,  291,  291,  318,  329,  329,  318,
-      318,  321,  329,  321,  321,  321,    3,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329
+      298,  177,  164,  166,  178,  179,  180,  165,  167,  168,
+      182,  293,  170,  171,  183,  172,  184,  185,  173,  174,
+      175,  186,  187,  176,  177,  188,  189,  178,  179,  190,
+      180,  191,  194,  192,  182,  170,  195,  196,  183,  184,
+      185,  197,  198,  199,  186,  193,  187,  200,  188,  189,
+      169,  204,  190,  205,  206,  191,  194,  207,  208,  209,
+      195,  196,  210,  213,  197,  198,  199,  212,  214,  193,
+
+      200,  216,  202,  217,  203,  204,  205,  218,  206,  220,
+      207,  208,  192,  209,  221,  222,  210,  213,  223,  224,
+      212,  214,  225,  226,  216,  202,  217,  203,  227,  219,
+      228,  218,  228,  220,  231,  232,  233,  221,  222,  234,
+      235,  223,  224,  236,  229,  225,  237,  226,  215,  238,
+      239,  227,  240,  219,  241,  289,  242,  231,  232,  233,
+      230,  243,  234,  235,  244,  147,  236,  228,  229,  237,
+      228,  228,  250,  238,  239,  240,  251,  252,  241,  242,
+      253,  254,  245,  230,  243,  255,  256,  244,  257,  147,
+      258,  259,  246,  228,  249,  250,  247,  266,  248,  251,
+
+      252,  260,  261,  262,  253,  254,  245,  263,  313,  255,
+      256,  228,  257,  258,  259,  246,  267,  249,  268,  247,
+      266,  248,  264,  269,  265,  260,  261,  262,  270,  271,
+      273,  263,  276,  228,  277,  274,  278,  279,  281,  267,
+      228,  268,  287,  280,  289,  264,  269,  294,  265,  275,
+      283,  270,  271,  273,  289,  276,  290,  289,  277,  278,
+      284,  279,  281,  289,  285,  303,  287,  286,  289,  289,
+      294,  291,  308,  275,  283,  289,  301,  292,  309,  293,
+      290,  272,  302,  284,  289,  304,  298,  285,  295,  303,
+      286,  311,  297,  296,  245,  291,  308,  314,  299,  301,
+
+      307,  292,  309,  316,  300,  302,  305,  274,  247,  304,
+      319,  306,  295,  312,  311,  297,  296,  317,  245,  317,
+      314,  299,  322,  323,  307,  288,  316,  300,  272,  324,
+      305,  247,  228,  319,  306,  317,  215,  312,  143,  320,
+      143,   92,  105,  288,  321,  322,  323,   92,   39,   46,
+       41,   39,  288,  324,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  320,  326,  326,  326,  321,  326,  326,
+      288,   38,   38,  326,   38,   38,   38,   40,   40,   47,
+       47,   47,   91,   91,   91,  181,  326,  326,  181,  181,
+      201,  326,  326,  201,  211,  211,  211,  280,  326,  326,
+
+      280,  280,  282,  326,  326,  282,  288,  288,  288,  315,
+      326,  326,  315,  315,  318,  326,  318,  318,  318,    3,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326
     } ;
 
-static const flex_int16_t yy_chk[787] =
+static const flex_int16_t yy_chk[780] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -629,22 +626,22 @@ static const flex_int16_t yy_chk[787] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
         5,    5,    5,   12,   12,   13,   13,   16,   17,   21,
-       18,  328,   19,   20,   16,   20,    2,   18,  327,   22,
-       25,  326,   22,   18,   20,   30,   36,   36,   36,   49,
+       18,  325,   19,   20,   16,   20,    2,   18,  324,   22,
+       25,  323,   22,   18,   20,   30,   36,   36,   36,   49,
        27,   16,   17,   21,   18,   19,   20,   16,   20,   27,
 
         2,   18,   22,   24,   25,   22,   18,   20,   26,   30,
-       24,   50,   26,   49,   27,   24,   28,  315,   33,   33,
-      314,   26,   27,   28,   33,   28,   28,   24,  313,   29,
+       24,   50,   26,   49,   27,   24,   28,  312,   33,   33,
+      311,   26,   27,   28,   33,   28,   28,   24,  310,   29,
        43,   43,   26,   24,   29,   50,   26,   29,   24,   31,
-       28,   31,   33,   33,   26,  311,   28,   33,   28,   28,
-       48,   31,   29,   51,   31,   32,   52,   29,   32,  310,
+       28,   31,   33,   33,   26,  308,   28,   33,   28,   28,
+       48,   31,   29,   51,   31,   32,   52,   29,   32,  307,
        29,   35,   56,   31,   32,   31,   34,   34,   34,   35,
-      307,   53,   54,   48,   31,   55,   51,   31,   57,   32,
+      304,   53,   54,   48,   31,   55,   51,   31,   57,   32,
        52,   58,   32,   34,   63,   35,   56,   32,   59,   62,
        62,   64,   65,   35,   53,   54,   66,   68,   55,   67,
 
-      306,   69,   57,   72,   74,   58,   76,   34,   63,   75,
+      303,   69,   57,   72,   74,   58,   76,   34,   63,   75,
        81,   59,   62,   62,   64,   67,   65,   77,   75,   66,
        68,   79,   78,   67,   69,   78,   80,   72,   74,   76,
        82,   83,   85,   75,   81,   87,   85,   89,   67,   90,
@@ -656,58 +653,57 @@ static const flex_int16_t yy_chk[787] =
       118,   88,  104,  105,  102,  103,  106,  108,  105,  107,
 
       119,  109,  110,  121,  114,  105,  116,  107,  122,  125,
-      111,  113,  117,  118,  123,  126,  127,  105,  128,  305,
+      111,  113,  117,  118,  123,  126,  127,  105,  128,  302,
       129,  105,  130,  119,  131,  132,  133,  121,  105,  134,
-      294,  135,  122,  125,  136,  137,  140,  123,  126,  127,
-      145,  289,  128,  129,  146,  130,  147,  148,  131,  132,
+      291,  135,  122,  125,  136,  137,  140,  123,  126,  127,
+      145,  286,  128,  129,  146,  130,  147,  148,  131,  132,
       133,  149,  150,  134,  135,  151,  155,  136,  137,  156,
       140,  157,  161,  160,  145,  128,  162,  163,  146,  147,
       148,  164,  165,  166,  149,  160,  150,  167,  151,  155,
       169,  172,  156,  173,  174,  157,  161,  176,  177,  179,
-      162,  163,  180,  285,  164,  165,  166,  181,  184,  160,
-
-      167,  186,  169,  188,  169,  172,  173,  185,  174,  189,
-      176,  177,  191,  179,  194,  200,  180,  181,  193,  195,
-      196,  184,  197,  198,  186,  169,  188,  169,  199,  201,
-      204,  185,  189,  206,  207,  193,  191,  203,  194,  200,
-      208,  181,  195,  196,  209,  197,  198,  211,  212,  203,
-      218,  199,  201,  215,  216,  219,  206,  207,  217,  193,
-      204,  221,  222,  208,  223,  224,  227,  209,  231,  232,
-      211,  235,  212,  203,  218,  217,  215,  216,  230,  219,
-      275,  236,  237,  204,  221,  239,  222,  223,  224,  227,
-      241,  251,  232,  230,  235,  245,  231,  242,  243,  217,
-
-      244,  267,  246,  230,  236,  237,  265,  230,  247,  239,
-      248,  249,  250,  202,  241,  232,  252,  230,  245,  231,
-      251,  242,  243,  253,  244,  246,  230,  258,  259,  252,
-      230,  260,  247,  263,  248,  249,  250,  264,  266,  268,
-      270,  271,  274,  251,  273,  276,  253,  277,  278,  281,
-      258,  259,  286,  252,  260,  268,  263,  288,  290,  295,
-      264,  266,  277,  270,  286,  271,  274,  273,  287,  276,
-      297,  292,  277,  281,  293,  278,  277,  288,  299,  268,
-      187,  290,  295,  298,  300,  287,  277,  301,  286,  296,
-      308,  292,  302,  297,  312,  277,  292,  303,  278,  277,
-
-      300,  288,  299,  293,  296,  295,  298,  301,  302,  287,
-      304,  316,  301,  308,  296,  292,  309,  312,  296,  292,
-      317,  303,  318,  143,  300,  319,  293,  320,  296,  324,
-      318,  301,  302,  322,  304,  301,  323,  296,  142,  101,
-      309,  296,  321,  317,   92,   60,  316,  320,  319,   42,
-      321,   38,  320,  324,   15,   11,  322,  318,    8,  323,
-        3,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  320,    0,    0,    0,  320,    0,  321,  330,  330,
-        0,  330,  330,  330,  331,  331,  332,  332,  332,  333,
-      333,  333,  334,    0,    0,  334,  334,  335,    0,    0,
-
-      335,  336,  336,  336,  337,    0,    0,  337,  337,  338,
-        0,    0,  338,  339,  339,  339,  340,    0,    0,  340,
-      340,  341,    0,  341,  341,  341,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329
+      162,  163,  180,  184,  164,  165,  166,  183,  185,  160,
+
+      167,  187,  169,  188,  169,  172,  173,  190,  174,  193,
+      176,  177,  192,  179,  194,  195,  180,  184,  196,  197,
+      183,  185,  198,  199,  187,  169,  188,  169,  200,  192,
+      203,  190,  202,  193,  205,  206,  207,  194,  195,  208,
+      210,  196,  197,  213,  202,  198,  214,  199,  215,  216,
+      217,  200,  219,  192,  220,  282,  221,  205,  206,  207,
+      203,  222,  208,  210,  225,  215,  213,  228,  202,  214,
+      229,  230,  233,  216,  217,  219,  234,  235,  220,  221,
+      236,  238,  228,  203,  222,  239,  240,  225,  241,  215,
+      242,  243,  228,  248,  230,  233,  228,  250,  229,  234,
+
+      235,  244,  245,  246,  236,  238,  228,  247,  313,  239,
+      240,  249,  241,  242,  243,  228,  255,  230,  256,  228,
+      250,  229,  248,  257,  249,  244,  245,  246,  260,  261,
+      263,  247,  267,  265,  268,  274,  270,  271,  273,  255,
+      275,  256,  278,  313,  283,  248,  257,  287,  249,  265,
+      274,  260,  261,  263,  284,  267,  283,  285,  268,  270,
+      274,  271,  273,  290,  274,  296,  278,  275,  289,  297,
+      287,  284,  300,  265,  274,  292,  294,  285,  301,  293,
+      283,  272,  295,  274,  299,  297,  298,  274,  289,  296,
+      275,  305,  290,  289,  293,  284,  300,  309,  292,  294,
+
+      299,  285,  301,  314,  293,  295,  298,  264,  293,  297,
+      316,  298,  289,  306,  305,  290,  289,  315,  293,  317,
+      309,  292,  319,  320,  299,  315,  314,  293,  262,  321,
+      298,  293,  201,  316,  298,  318,  186,  306,  143,  317,
+      101,   92,   60,  318,  317,  319,  320,   42,   38,   15,
+       11,    8,  315,  321,    3,    0,    0,    0,    0,    0,
+        0,    0,    0,  317,    0,    0,    0,  317,    0,    0,
+      318,  327,  327,    0,  327,  327,  327,  328,  328,  329,
+      329,  329,  330,  330,  330,  331,    0,    0,  331,  331,
+      332,    0,    0,  332,  333,  333,  333,  334,    0,    0,
+
+      334,  334,  335,    0,    0,  335,  336,  336,  336,  337,
+        0,    0,  337,  337,  338,    0,  338,  338,  338,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -818,8 +814,8 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-#line 821 "engines/director/lingo/lingo-lex.cpp"
-#line 822 "engines/director/lingo/lingo-lex.cpp"
+#line 817 "engines/director/lingo/lingo-lex.cpp"
+#line 818 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1042,7 +1038,7 @@ YY_DECL
 #line 111 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1045 "engines/director/lingo/lingo-lex.cpp"
+#line 1041 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1070,13 +1066,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 330 )
+				if ( yy_current_state >= 327 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 329 );
+		while ( yy_current_state != 326 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1149,16 +1145,11 @@ YY_RULE_SETUP
 case 11:
 YY_RULE_SETUP
 #line 125 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSIF; }
+{ count(); return tELSE; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 126 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSE; }
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 127 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1178,25 +1169,30 @@ YY_RULE_SETUP
 		return tENDCLAUSE;
 	}
 	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 144 "engines/director/lingo/lingo-lex.l"
+{ count(); return tFACTORY; }
+	YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 145 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFACTORY; }
+{ count(); return tEXIT; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 146 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEXIT; }
+{ count(); return tFIELD; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 147 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFIELD; }
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 148 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+{ count(); return tGO; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
@@ -1206,92 +1202,92 @@ YY_RULE_SETUP
 case 19:
 YY_RULE_SETUP
 #line 150 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tGOLOOP; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 151 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGOLOOP; }
+{ count(); return tINSTANCE; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 152 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINSTANCE; }
+{ count(); return tINTERSECTS;}
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 153 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS;}
+{ count(); return tINTO; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 154 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tIN; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 155 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIN; }
+{ count(); return tITEM; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 156 "engines/director/lingo/lingo-lex.l"
-{ count(); return tITEM; }
+{ count(); return tLINE; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 157 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLINE; }
+{ count(); return tMACRO;; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 158 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO;; }
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 159 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMETHOD; }
+{ count(); return tMOD;}
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 160 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOD;}
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 161 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tNEXT; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 162 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 163 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tOF; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tON; }		// D3
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tON; }		// D3
+{ count(); return tOPEN; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOPEN; }
+{ count(); return tOR; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 167 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tPLAY; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
@@ -1301,56 +1297,51 @@ YY_RULE_SETUP
 case 38:
 YY_RULE_SETUP
 #line 169 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAY; }
+{ count(); return tPLAYACCEL; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 170 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAYACCEL; }
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 171 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 172 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPROPERTY; }	// D4
+{ count(); return tPUT; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 173 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tREPEAT; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 174 "engines/director/lingo/lingo-lex.l"
-{ count(); return tREPEAT; }
+{ count(); return tSCRIPT; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 175 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSCRIPT; }
+{ count(); return tSET; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 176 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 177 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tTELL; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 178 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTELL; }
-	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 179 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1387,9 +1378,9 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 49:
+case 48:
 YY_RULE_SETUP
-#line 214 "engines/director/lingo/lingo-lex.l"
+#line 213 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1413,9 +1404,9 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 50:
+case 49:
 YY_RULE_SETUP
-#line 236 "engines/director/lingo/lingo-lex.l"
+#line 235 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1490,9 +1481,9 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s', field '%s'", ptr, field.c_str());
 	}
 	YY_BREAK
-case 51:
+case 50:
 YY_RULE_SETUP
-#line 309 "engines/director/lingo/lingo-lex.l"
+#line 308 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1528,9 +1519,9 @@ YY_RULE_SETUP
 			return tTHEENTITY;
 	}
 	YY_BREAK
-case 52:
+case 51:
 YY_RULE_SETUP
-#line 343 "engines/director/lingo/lingo-lex.l"
+#line 342 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1558,84 +1549,84 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s'", ptr);
 	}
 	YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 368 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTHEN; }
+	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 369 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
+{ count(); return tTO; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 370 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+{ count(); return tASSERTERROR; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 371 "engines/director/lingo/lingo-lex.l"
-{ count(); return tASSERTERROR; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 372 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 373 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 374 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tWHEN; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 375 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWHILE; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 376 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWINDOW; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 377 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWINDOW; }
+{ count(); return tWORD; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 378 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+#line 379 "engines/director/lingo/lingo-lex.l"
+{ count(); return tNEQ; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 380 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+{ count(); return tGE; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 381 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tLE; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 382 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tCONCAT; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 383 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
-	YY_BREAK
-case 67:
-YY_RULE_SETUP
-#line 384 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
-case 68:
+case 67:
 YY_RULE_SETUP
-#line 386 "engines/director/lingo/lingo-lex.l"
+#line 385 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1643,43 +1634,43 @@ YY_RULE_SETUP
 		return tVARID;
 	}
 	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 391 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.f = atof(yytext); return tFLOAT; }
+	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 392 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return tFLOAT; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 393 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 71:
+/* rule 71 can match eol */
 YY_RULE_SETUP
 #line 394 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); return '\n'; }
 	YY_BREAK
 case 72:
-/* rule 72 can match eol */
 YY_RULE_SETUP
 #line 395 "engines/director/lingo/lingo-lex.l"
-{ count(); return '\n'; }
+{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 396 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
-	YY_BREAK
-case 74:
-YY_RULE_SETUP
-#line 397 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
-case 75:
+case 74:
 YY_RULE_SETUP
-#line 399 "engines/director/lingo/lingo-lex.l"
+#line 398 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1682 "engines/director/lingo/lingo-lex.cpp"
+#line 1673 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1978,7 +1969,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 330 )
+			if ( yy_current_state >= 327 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -2006,11 +1997,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 330 )
+		if ( yy_current_state >= 327 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 329);
+	yy_is_jam = (yy_current_state == 326);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2688,7 +2679,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 399 "engines/director/lingo/lingo-lex.l"
+#line 398 "engines/director/lingo/lingo-lex.l"
 
 
 extern int yydebug;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index d92895bdcf..ed3a6d3322 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -122,7 +122,6 @@ char		{ count(); return tCHAR; }		// D3
 contains	{ count(); return tCONTAINS; }
 down		{ count(); return tDOWN; }
 if			{ count(); return tIF; }
-else{spc}+if { count(); return tELSIF; }
 else		{ count(); return tELSE; }
 end({spc}+{identifier})?	{
 		count();


Commit: e23e46c6680e8bb2f75f3a6aa5af8e9f251348f4
    https://github.com/scummvm/scummvm/commit/e23e46c6680e8bb2f75f3a6aa5af8e9f251348f4
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Remove if preprocessor

Changed paths:
    engines/director/lingo/lingo-preprocessor.cpp


diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index e3609344fe..7131ddd190 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -64,40 +64,6 @@ static Common::String nexttok(const char *s, const char **newP = nullptr) {
 	return res;
 }
 
-static Common::String prevtok(const char *s, const char *lineStart, const char **newP = nullptr) {
-	Common::String res;
-
-	// Scan first non-whitespace
-	while (s >= lineStart && (*s == ' ' || *s == '\t' || *s == '\xC2')) // If we see a whitespace
-		if (s > lineStart) {
-			s--;
-		} else {
-			break;
-		}
-
-	if (*s == '"') { // If it is a string then scan till end quote
-		res += *s--;
-
-		while (s >= lineStart && *s != '"')
-			res = *s-- + res;
-
-		if (*s == '"')
-			res = *s-- + res;
-	} else if (Common::isAlnum(*s)) { 	// Now copy everything till whitespace
-		// Now copy everything till whitespace
-		while (s >= lineStart && (Common::isAlnum(*s) || *s == '.' || *s == '#' || *s == '_'))
-			res = *s-- + res;
-	} else {
-		while (s >= lineStart && isspec(*s))
-			res = *s-- + res;
-	}
-
-	if (newP)
-		*newP = s;
-
-	return res;
-}
-
 static const char *findtokstart(const char *start, const char *token) {
 	// First, determine, if we sit inside of a string
 	//
@@ -209,8 +175,6 @@ Common::String LingoCompiler::codePreprocessor(const char *s, LingoArchive *arch
 	// Here we add ' end if' at end of each statement, which lets us
 	// make the grammar very straightforward
 	Common::String line, tok, res1;
-	const char *lineStart, *prevEnd;
-	int iflevel = 0;
 	int linenumber = 1;
 	bool defFound = false;
 
@@ -226,7 +190,7 @@ Common::String LingoCompiler::codePreprocessor(const char *s, LingoArchive *arch
 			if (*s == '\xc2')
 				linenumber++;
 		}
-		debugC(2, kDebugParse | kDebugPreprocess, "line: %d                         '%s'", iflevel, line.c_str());
+		debugC(2, kDebugParse | kDebugPreprocess, "line: '%s'", line.c_str());
 
 		if (!defFound && (type == kMovieScript || type == kCastScript) && (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo)) {
 			tok = nexttok(line.c_str());
@@ -255,167 +219,10 @@ Common::String LingoCompiler::codePreprocessor(const char *s, LingoArchive *arch
 
 		linenumber++;	// We do it here because of 'continue' statements
 
-		if (line.size() < 4 || changed) { // If line is too small, then skip it
-			if (*s)	// copy newline symbol
-				res += *s++;
-
-			debugC(2, kDebugParse | kDebugPreprocess, "too small");
-
-			continue;
-		}
-
-		tok = nexttok(line.c_str(), &lineStart);
-		if (tok.equals("if")) {
-			tok = prevtok(&line.c_str()[line.size() - 1], lineStart, &prevEnd);
-			debugC(2, kDebugParse | kDebugPreprocess, "start-if <%s>", tok.c_str());
-
-			if (tok.equals("if")) {
-				debugC(2, kDebugParse | kDebugPreprocess, "end-if");
-				tok = prevtok(prevEnd, lineStart);
-
-				if (tok.equals("end")) {
-					// do nothing, we open and close same line
-					debugC(2, kDebugParse | kDebugPreprocess, "end-end");
-				} else {
-					iflevel++;
-				}
-			} else if (tok.equals("then")) {
-				debugC(2, kDebugParse | kDebugPreprocess, "last-then");
-				iflevel++;
-			} else if (tok.equals("else")) {
-				debugC(2, kDebugParse | kDebugPreprocess, "last-else");
-				iflevel++;
-			} else { // other token
-				// Now check if we have tNLELSE
-				if (!*s) {
-					iflevel++;	// end, we have to add 'end if'
-					break;
-				}
-				const char *s1 = s + 1;
-
-				while (*s1 && *s1 == '\n')
-					s1++;
-				tok = nexttok(s1);
-
-				if (tok.equalsIgnoreCase("else")) { // ignore case because it is look-ahead
-					debugC(2, kDebugParse | kDebugPreprocess, "tNLELSE");
-					iflevel++;
-				} else {
-					debugC(2, kDebugParse | kDebugPreprocess, "++++ end if (no nlelse after single liner)");
-					res += " end if";
-				}
-			}
-		} else if (tok.equals("else")) {
-			debugC(2, kDebugParse | kDebugPreprocess, "start-else");
-			bool elseif = false;
-
-			tok = nexttok(lineStart);
-			if (tok.equals("if")) {
-				debugC(2, kDebugParse | kDebugPreprocess, "second-if");
-				elseif = true;
-			} else if (tok.empty()) {
-				debugC(2, kDebugParse | kDebugPreprocess, "lonely-else");
-
-				if (*s)	// copy newline symbol
-					res += *s++;
-
-				continue;
-			}
-
-			tok = prevtok(&line.c_str()[line.size() - 1], lineStart, &prevEnd);
-			debugC(2, kDebugParse | kDebugPreprocess, "last: '%s'", tok.c_str());
-
-			if (tok.equals("if")) {
-				debugC(2, kDebugParse | kDebugPreprocess, "end-if");
-				tok = prevtok(prevEnd, lineStart);
-
-				if (tok.equals("end")) {
-					debugC(2, kDebugParse | kDebugPreprocess, "end-end");
-					iflevel--;
-				}
-			} else if (tok.equals("then")) {
-				debugC(2, kDebugParse | kDebugPreprocess, "last-then");
-
-				if (elseif == false) {
-					warning("Badly nested then");
-				}
-			} else if (tok.equals("else")) {
-				debugC(2, kDebugParse | kDebugPreprocess, "last-else");
-				if (elseif == false) {
-					warning("Badly nested else");
-				}
-			} else { // check if we have tNLELSE or \nEND
-				if (!*s) {
-					break;
-				}
-				const char *s1 = s + 1;
-
-				while (*s1 && *s1 == '\n')
-					s1++;
-				tok = nexttok(s1, &s1);
-
-				if (tok.equalsIgnoreCase("else") && elseif) {
-					// Nothing to do here, same level
-					debugC(2, kDebugParse | kDebugPreprocess, "tNLELSE");
-				} else if (tok.equalsIgnoreCase("end") && elseif) {
-					tok = nexttok(s1);
-
-					if (tok.equalsIgnoreCase("if")) {
-						// Nothing to do here
-						debugC(2, kDebugParse | kDebugPreprocess, "see-end-if");
-					} else {
-						debugC(2, kDebugParse | kDebugPreprocess, "++++ end if (no tNLELSE 2)");
-						res += " end if";
-						iflevel--;
-					}
-				} else {
-					debugC(2, kDebugParse | kDebugPreprocess, "++++ end if (no tNLELSE)");
-					res += " end if";
-					iflevel--;
-				}
-			}
-		} else if (tok.equals("end")) {
-			debugC(2, kDebugParse | kDebugPreprocess, "start-end");
-
-			tok = nexttok(lineStart);
-			if (tok.equals("if")) {
-				debugC(2, kDebugParse | kDebugPreprocess, "second-if");
-				iflevel--;
-			}
-		} else if (tok.equals("when")) {
-			debugC(2, kDebugParse | kDebugPreprocess, "start-when");
-
-			if (strstr(lineStart, "if") && strstr(lineStart, "then")) {
-				tok = prevtok(&line.c_str()[line.size() - 1], lineStart, &prevEnd);
-				debugC(2, kDebugParse | kDebugPreprocess, "when-start-if <%s>", tok.c_str());
-
-				if (tok.equals("if")) {
-					debugC(2, kDebugParse | kDebugPreprocess, "when-end-if");
-					tok = prevtok(prevEnd, lineStart);
-
-					if (tok.equals("end")) {
-						// do nothing, we open and close same line
-						debugC(2, kDebugParse | kDebugPreprocess, "when-end-end");
-					} else {
-						res += " end if";
-					}
-				} else {
-					res += " end if";
-				}
-			}
-		} else {
-			debugC(2, kDebugParse | kDebugPreprocess, "nothing");
-		}
-
 		if (*s)	// copy newline symbol
 			res += *s++;
 	}
 
-	for (int i = 0; i < iflevel; i++) {
-		debugC(2, kDebugParse | kDebugPreprocess, "++++ end if (unclosed)");
-		res += "\nend if";
-	}
-
 	// Make the parser happier when there is no newline at the end
 	res += '\n';
 


Commit: dac5b6230c6b5ae3c80156d497f635205394ab05
    https://github.com/scummvm/scummvm/commit/dac5b6230c6b5ae3c80156d497f635205394ab05
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Create compile convenience funcs

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 4dc1859836..3555a86886 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -103,7 +103,7 @@ ScriptContext *LingoCompiler::compileLingo(const char *code, LingoArchive *archi
 
 	// Generate bytecode
 	if (_assemblyAST) {
-		_assemblyAST->accept(this);
+		compile(_assemblyAST);
 	}
 
 	// for D4 and above, there usually won't be any code left.
@@ -309,12 +309,20 @@ void LingoCompiler::parseMenu(const char *code) {
 	warning("STUB: parseMenu");
 }
 
+void LingoCompiler::compile(Node *node) {
+	node->accept(this);
+}
+
+void LingoCompiler::compileList(NodeList *nodes) {
+	for (uint i = 0; i < nodes->size(); i++) {
+		compile((*nodes)[i]);
+	}
+}
+
 /* ScriptNode */
 
 void LingoCompiler::visitScriptNode(ScriptNode *node) {
-	for (uint i = 0; i < node->children->size(); i++) {
-		(*node->children)[i]->accept(this);
-	}
+	compileList(node->children);
 }
 
 /* FactoryNode */
@@ -324,9 +332,7 @@ void LingoCompiler::visitFactoryNode(FactoryNode *node) {
 	ScriptContext *mainContext = _assemblyContext;
 	_assemblyContext = new ScriptContext(mainContext->getName(), mainContext->_archive, mainContext->_scriptType, mainContext->_id);
 
-	for (uint i = 0; i < node->methods->size(); i++) {
-		(*node->methods)[i]->accept(this);
-	}
+	compileList(node->methods);
 	registerFactory(*node->name);
 
 	_inFactory = false;
@@ -352,9 +358,7 @@ void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 		}
 	}
 
-	for (uint i = 0; i < node->stmts->size(); i++) {
-		(*node->stmts)[i]->accept(this);
-	}
+	compileList(node->stmts);
 	code1(LC::c_procret);
 
 	if (debugChannelSet(-1, kDebugFewFramesOnly) || debugChannelSet(1, kDebugCompile))
@@ -395,9 +399,7 @@ void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 /* CmdNode */
 
 void LingoCompiler::visitCmdNode(CmdNode *node) {
-	for (uint i = 0; i < node->args->size(); i++) {
-		(*node->args)[i]->accept(this);
-	}
+	compileList(node->args);
 	codeCmd(node->name, node->args->size());
 }
 
@@ -428,12 +430,10 @@ void LingoCompiler::visitInstanceNode(InstanceNode *node) {
 /* IfStmtNode */
 
 void LingoCompiler::visitIfStmtNode(IfStmtNode *node) {
-	node->cond->accept(this);
+	compile(node->cond);
 	uint jzPos = _currentAssembly->size();
 	code2(LC::c_jumpifz, 0);
-	for (uint i = 0; i < node->stmts->size(); i++) {
-		(*node->stmts)[i]->accept(this);
-	}
+	compileList(node->stmts);
 	uint endPos = _currentAssembly->size();
 
 	inst jzOffset = 0;
@@ -444,19 +444,15 @@ void LingoCompiler::visitIfStmtNode(IfStmtNode *node) {
 /* IfElseStmtNode */
 
 void LingoCompiler::visitIfElseStmtNode(IfElseStmtNode *node) {
-	node->cond->accept(this);
+	compile(node->cond);
 	uint jzPos = _currentAssembly->size();
 	code2(LC::c_jumpifz, 0);
-	for (uint i = 0; i < node->stmts1->size(); i++) {
-		(*node->stmts1)[i]->accept(this);
-	}
+	compileList(node->stmts1);
 
 	uint jmpPos = _currentAssembly->size();
 	code2(LC::c_jump, 0);
 	uint block2StartPos = _currentAssembly->size();
-	for (uint i = 0; i < node->stmts2->size(); i++) {
-		(*node->stmts2)[i]->accept(this);
-	}
+	compileList(node->stmts2);
 	uint endPos = _currentAssembly->size();
 
 	inst jzOffset = 0;
@@ -499,9 +495,7 @@ void LingoCompiler::visitStringNode(StringNode *node) {
 /* FuncNode */
 
 void LingoCompiler::visitFuncNode(FuncNode *node) {
-	for (uint i = 0; i < node->args->size(); i++) {
-		(*node->args)[i]->accept(this);
-	}
+	compileList(node->args);
 	codeFunc(node->name, node->args->size());
 }
 
@@ -519,21 +513,21 @@ void LingoCompiler::visitVarNode(VarNode *node) {
 /* ParensNode */
 
 void LingoCompiler::visitParensNode(ParensNode *node) {
-	node->expr->accept(this);
+	compile(node->expr);
 }
 
 /* UnaryOpNode */
 
 void LingoCompiler::visitUnaryOpNode(UnaryOpNode *node) {
-	node->arg->accept(this);
+	compile(node->arg);
 	code1(node->op);
 }
 
 /* BinaryOpNode */
 
 void LingoCompiler::visitBinaryOpNode(BinaryOpNode *node) {
-	node->a->accept(this);
-	node->b->accept(this);
+	compile(node->a);
+	compile(node->b);
 	code1(node->op);
 }
 
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 020b0906db..33c51f228f 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -71,6 +71,9 @@ public:
 	bool _hadError;
 
 public:
+	void compile(Node *node);
+	void compileList(NodeList *nodes);
+
 	virtual void visitScriptNode(ScriptNode *node);
 	virtual void visitFactoryNode(FactoryNode *node);
 	virtual void visitHandlerNode(HandlerNode *node);


Commit: 03e6a56c5ce4fdc59e57b1c9b221539621b19fba
    https://github.com/scummvm/scummvm/commit/03e6a56c5ce4fdc59e57b1c9b221539621b19fba
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Remove old if code

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 3555a86886..6a946bb852 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -251,37 +251,6 @@ int LingoCompiler::codeFunc(Common::String *s, int numpar) {
 	return ret;
 }
 
-void LingoCompiler::codeLabel(int label) {
-	_labelstack.push_back(label);
-	debugC(4, kDebugCompile, "codeLabel: Added label %d", label);
-}
-
-void LingoCompiler::processIf(int toplabel, int endlabel) {
-	inst iend;
-
-	debugC(4, kDebugCompile, "processIf(%d, %d)", toplabel, endlabel);
-
-	while (true) {
-		if (_labelstack.empty()) {
-			warning("Lingo::processIf(): Label stack underflow");
-			break;
-		}
-
-		int label = _labelstack.back();
-		_labelstack.pop_back();
-
-		// This is beginning of our if()
-		if (!label)
-			break;
-
-		debugC(4, kDebugCompile, "processIf: label at %d", label);
-
-		WRITE_UINT32(&iend, endlabel - label + 1);
-
-		(*_currentAssembly)[label] = iend;	/* end, if cond fails */
-	}
-}
-
 void LingoCompiler::registerMethodVar(const Common::String &name, VarType type) {
 	if (!_methodVars->contains(name)) {
 		(*_methodVars)[name] = type;
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 33c51f228f..9d2b9425b9 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -46,9 +46,7 @@ public:
 	int codeFloat(double f);
 	int codeFunc(Common::String *s, int numpar);
 	int codeInt(int val);
-	void codeLabel(int label);
 	int codeString(const char *s);
-	void processIf(int toplabel, int endlabel);
 	void registerFactory(Common::String &s);
 	void registerMethodVar(const Common::String &name, VarType type);
 
@@ -66,8 +64,6 @@ public:
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVarsStash;
 
-	Common::Array<int> _labelstack;
-
 	bool _hadError;
 
 public:


Commit: d9a1057cd6892ca25b687f1a4c42b3cc8f1896e9
    https://github.com/scummvm/scummvm/commit/d9a1057cd6892ca25b687f1a4c42b3cc8f1896e9
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement loops

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index 3a0411ff92..c5546a2d0f 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -35,6 +35,10 @@ struct PropertyNode;
 struct InstanceNode;
 struct IfStmtNode;
 struct IfElseStmtNode;
+struct RepeatWhileNode;
+struct RepeatWithToNode;
+struct NextRepeatNode;
+struct ExitRepeatNode;
 struct IntNode;
 struct FloatNode;
 struct SymbolNode;
@@ -68,6 +72,10 @@ enum NodeType {
 	kInstanceNode,
 	kIfStmtNode,
 	kIfElseStmtNode,
+	kRepeatWhileNode,
+	kRepeatWithToNode,
+	kNextRepeatNode,
+	kExitRepeatNode,
 	kIntNode,
 	kFloatNode,
 	kSymbolNode,
@@ -95,6 +103,10 @@ public:
 	virtual void visitInstanceNode(InstanceNode *node) = 0;
 	virtual void visitIfStmtNode(IfStmtNode *node) = 0;
 	virtual void visitIfElseStmtNode(IfElseStmtNode *node) = 0;
+	virtual void visitRepeatWhileNode(RepeatWhileNode *node) = 0;
+	virtual void visitRepeatWithToNode(RepeatWithToNode *node) = 0;
+	virtual void visitNextRepeatNode(NextRepeatNode *node) = 0;
+	virtual void visitExitRepeatNode(ExitRepeatNode *node) = 0;
 	virtual void visitIntNode(IntNode *node) = 0;
 	virtual void visitFloatNode(FloatNode *node) = 0;
 	virtual void visitSymbolNode(SymbolNode *node) = 0;
@@ -112,8 +124,9 @@ struct Node {
 	NodeType type;
 	bool isExpression;
 	bool isStatement;
+	bool isLoop;
 
-	Node(NodeType t) : type(t), isExpression(false), isStatement(false) {}
+	Node(NodeType t) : type(t), isExpression(false), isStatement(false), isLoop(false) {}
 	virtual ~Node() {}
 	virtual void accept(NodeVisitor *visitor) = 0;
 };
@@ -136,6 +149,18 @@ struct StmtNode : Node {
 	virtual ~StmtNode() {}
 };
 
+/* LoopNode */
+
+struct LoopNode : StmtNode {
+	Common::Array<uint> nextRepeats;
+	Common::Array<uint> exitRepeats;
+
+	LoopNode(NodeType t) : StmtNode(t) {
+		isLoop = true;
+	}
+	virtual ~LoopNode() {}
+};
+
 /* ScriptNode */
 
 struct ScriptNode : Node {
@@ -281,6 +306,65 @@ struct IfElseStmtNode : StmtNode {
 	}
 };
 
+/* RepeatWhileNode */
+
+struct RepeatWhileNode : LoopNode {
+	Node *cond;
+	NodeList *stmts;
+
+	RepeatWhileNode(Node *condIn, NodeList *stmtsIn)
+		: LoopNode(kRepeatWhileNode), cond(condIn), stmts(stmtsIn) {}
+	virtual ~RepeatWhileNode() {
+		delete cond;
+		deleteList(stmts);
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitRepeatWhileNode(this);
+	}
+};
+
+/* RepeatWithToNode */
+
+struct RepeatWithToNode : LoopNode {
+	Common::String *var;
+	Node *start;
+	bool down;
+	Node *end;
+	NodeList *stmts;
+
+	RepeatWithToNode(Common::String *varIn, Node *startIn, bool downIn, Node *endIn, NodeList *stmtsIn)
+		: LoopNode(kRepeatWithToNode), var(varIn), start(startIn), down(downIn), end(endIn), stmts(stmtsIn) {}
+	virtual ~RepeatWithToNode() {
+		delete var;
+		delete start;
+		delete end;
+		deleteList(stmts);
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitRepeatWithToNode(this);
+	}
+};
+
+/* NextRepeatNode */
+
+struct NextRepeatNode : StmtNode {
+	NextRepeatNode() : StmtNode(kNextRepeatNode) {}
+	virtual ~NextRepeatNode() {}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitNextRepeatNode(this);
+	}
+};
+
+/* ExitRepeatNode */
+
+struct ExitRepeatNode : StmtNode {
+	ExitRepeatNode() : StmtNode(kExitRepeatNode) {}
+	virtual ~ExitRepeatNode() {}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitExitRepeatNode(this);
+	}
+};
+
 /* IntNode */
 
 struct IntNode : ExprNode {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 6a946bb852..3a178b3cdd 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -66,6 +66,7 @@ LingoCompiler::LingoCompiler() {
 	_lines[0] = _lines[1] = _lines[2] = nullptr;
 
 	_inFactory = false;
+	_currentLoop = nullptr;
 
 	_hadError = false;
 }
@@ -251,6 +252,15 @@ int LingoCompiler::codeFunc(Common::String *s, int numpar) {
 	return ret;
 }
 
+VarType LingoCompiler::globalCheck() {
+	// If in a definition, assume variables are local unless
+	// they were declared global with `global varname`
+	if (_indef) {
+		return kVarLocal;
+	}
+	return kVarGlobal;
+}
+
 void LingoCompiler::registerMethodVar(const Common::String &name, VarType type) {
 	if (!_methodVars->contains(name)) {
 		(*_methodVars)[name] = type;
@@ -274,6 +284,24 @@ void LingoCompiler::registerFactory(Common::String &name) {
 	}
 }
 
+void LingoCompiler::updateLoopJumps(uint nextTargetPos, uint exitTargetPos) {
+	if (!_currentLoop)
+		return;
+	
+	for (uint i = 0; i < _currentLoop->nextRepeats.size(); i++) {
+		uint nextRepeatPos = _currentLoop->nextRepeats[i];
+		inst jmpOffset = 0;
+		WRITE_UINT32(&jmpOffset, nextTargetPos - nextRepeatPos);
+		(*_currentAssembly)[nextRepeatPos + 1] = jmpOffset; 
+	}
+	for (uint i = 0; i < _currentLoop->exitRepeats.size(); i++) {
+		uint exitRepeatPos = _currentLoop->exitRepeats[i];
+		inst jmpOffset = 0;
+		WRITE_UINT32(&jmpOffset, exitTargetPos - exitRepeatPos);
+		(*_currentAssembly)[exitRepeatPos + 1] = jmpOffset; 
+	}
+}
+
 void LingoCompiler::parseMenu(const char *code) {
 	warning("STUB: parseMenu");
 }
@@ -433,6 +461,112 @@ void LingoCompiler::visitIfElseStmtNode(IfElseStmtNode *node) {
 	(*_currentAssembly)[jmpPos + 1] = jmpOffset;
 }
 
+/* RepeatWhileNode */
+
+void LingoCompiler::visitRepeatWhileNode(RepeatWhileNode *node) {
+	LoopNode *prevLoop = _currentLoop;
+	_currentLoop = node;
+
+	uint startPos = _currentAssembly->size();
+	compile(node->cond);
+	uint jzPos = _currentAssembly->size();
+	code2(LC::c_jumpifz, 0);
+	compileList(node->stmts);
+	uint jmpPos = _currentAssembly->size();
+	code2(LC::c_jump, 0);
+	uint endPos = _currentAssembly->size();
+
+	inst jzOffset = 0;
+	WRITE_UINT32(&jzOffset, endPos - jzPos);
+	(*_currentAssembly)[jzPos + 1] = jzOffset;
+
+	inst jmpOffset = 0;
+	WRITE_UINT32(&jmpOffset, startPos - jmpPos);
+	(*_currentAssembly)[jmpPos + 1] = jmpOffset;
+
+	updateLoopJumps(jmpPos, endPos);
+	_currentLoop = prevLoop;
+}
+
+/* RepeatWithToNode */
+
+void LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
+	LoopNode *prevLoop = _currentLoop;
+	_currentLoop = node;
+
+	registerMethodVar(*node->var, globalCheck());
+
+	compile(node->start);
+	code1(LC::c_varpush);
+	codeString(node->var->c_str());
+	code1(LC::c_assign);
+
+	uint startPos = _currentAssembly->size();
+	code1(LC::c_eval);
+	codeString(node->var->c_str());
+	compile(node->end);
+	if (node->down) {
+		code1(LC::c_ge);
+	} else {
+		code1(LC::c_le);
+	}
+	uint jzPos = _currentAssembly->size();
+	code2(LC::c_jumpifz, 0);
+
+	compileList(node->stmts);
+
+	uint incrementPos = _currentAssembly->size();
+	code1(LC::c_eval);
+	codeString(node->var->c_str());
+	code1(LC::c_intpush);
+	codeInt(1);
+	if (node->down) {
+		code1(LC::c_sub);
+	} else {
+		code1(LC::c_add);
+	}
+	code1(LC::c_varpush);
+	codeString(node->var->c_str());
+	code1(LC::c_assign);
+
+	uint jmpPos = _currentAssembly->size();
+	code2(LC::c_jump, 0);
+	uint endPos = _currentAssembly->size();
+
+	inst jzOffset = 0;
+	WRITE_UINT32(&jzOffset, endPos - jzPos);
+	(*_currentAssembly)[jzPos + 1] = jzOffset;
+
+	inst jmpOffset = 0;
+	WRITE_UINT32(&jmpOffset, startPos - jmpPos);
+	(*_currentAssembly)[jmpPos + 1] = jmpOffset;
+
+	updateLoopJumps(incrementPos, endPos);
+	_currentLoop = prevLoop;
+}
+
+/* NextRepeatNode */
+
+void LingoCompiler::visitNextRepeatNode(NextRepeatNode *node) {
+	if (_currentLoop) {
+		_currentLoop->nextRepeats.push_back(_currentAssembly->size());
+		code2(LC::c_jump, 0);
+	} else {
+		warning("# LINGO: next repeat not inside repeat loop");
+	}
+}
+
+/* ExitRepeatNode */
+
+void LingoCompiler::visitExitRepeatNode(ExitRepeatNode *node) {
+	if (_currentLoop) {
+		_currentLoop->exitRepeats.push_back(_currentAssembly->size());
+		code2(LC::c_jump, 0);
+	} else {
+		warning("# LINGO: exit repeat not inside repeat loop");
+	}
+}
+
 /* IntNode */
 
 void LingoCompiler::visitIntNode(IntNode *node) {
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 9d2b9425b9..5f70560120 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -48,7 +48,9 @@ public:
 	int codeInt(int val);
 	int codeString(const char *s);
 	void registerFactory(Common::String &s);
+	VarType globalCheck();
 	void registerMethodVar(const Common::String &name, VarType type);
+	void updateLoopJumps(uint nextTargetPos, uint exitTargetPos);
 
 	LingoArchive *_assemblyArchive;
 	ScriptContext *_assemblyContext;
@@ -60,6 +62,7 @@ public:
 	uint _bytenumber;
 	const char *_lines[3];
 	bool _inFactory;
+	LoopNode *_currentLoop;
 
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVarsStash;
@@ -79,6 +82,10 @@ public:
 	virtual void visitInstanceNode(InstanceNode *node);
 	virtual void visitIfStmtNode(IfStmtNode *node);
 	virtual void visitIfElseStmtNode(IfElseStmtNode *node);
+	virtual void visitRepeatWhileNode(RepeatWhileNode *node);
+	virtual void visitRepeatWithToNode(RepeatWithToNode *node);
+	virtual void visitNextRepeatNode(NextRepeatNode *node);
+	virtual void visitExitRepeatNode(ExitRepeatNode *node);
 	virtual void visitIntNode(IntNode *node);
 	virtual void visitFloatNode(FloatNode *node);
 	virtual void visitSymbolNode(SymbolNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index e0b8a3da49..ee6f7077dd 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -263,14 +263,15 @@ enum yysymbol_kind_t
   YYSYMBOL_definevars = 108,               /* definevars  */
   YYSYMBOL_ifstmt = 109,                   /* ifstmt  */
   YYSYMBOL_ifelsestmt = 110,               /* ifelsestmt  */
-  YYSYMBOL_stmtlist = 111,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 112,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 113,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 114,       /* simpleexprnoparens  */
-  YYSYMBOL_simpleexpr = 115,               /* simpleexpr  */
-  YYSYMBOL_expr = 116,                     /* expr  */
-  YYSYMBOL_exprlist = 117,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 118          /* nonemptyexprlist  */
+  YYSYMBOL_loop = 111,                     /* loop  */
+  YYSYMBOL_stmtlist = 112,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 113,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 114,             /* stmtlistline  */
+  YYSYMBOL_simpleexprnoparens = 115,       /* simpleexprnoparens  */
+  YYSYMBOL_simpleexpr = 116,               /* simpleexpr  */
+  YYSYMBOL_expr = 117,                     /* expr  */
+  YYSYMBOL_exprlist = 118,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 119          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -590,18 +591,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  81
+#define YYFINAL  89
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1016
+#define YYLAST   1362
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  90
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  29
+#define YYNNTS  30
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  121
+#define YYNRULES  127
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  189
+#define YYNSTATES  218
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -664,13 +665,13 @@ static const yytype_int16 yyrline[] =
      290,   293,   295,   298,   300,   301,   302,   303,   306,   307,
      308,   309,   310,   312,   313,   314,   315,   316,   318,   319,
      320,   321,   322,   323,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   336,   337,   340,   344,   351,   352,   353,
-     356,   357,   360,   361,   364,   365,   366,   369,   373,   377,
-     383,   387,   391,   395,   396,   400,   406,   413,   414,   419,
-     420,   421,   422,   423,   424,   425,   426,   427,   430,   431,
-     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
-     444,   445,   446,   447,   448,   449,   450,   451,   454,   455,
-     458,   462
+     331,   332,   333,   336,   337,   340,   344,   354,   355,   356,
+     357,   360,   361,   364,   365,   366,   367,   370,   371,   372,
+     375,   379,   383,   389,   393,   397,   401,   403,   405,   409,
+     410,   414,   420,   427,   428,   433,   434,   435,   436,   437,
+     438,   439,   440,   441,   444,   445,   448,   449,   450,   451,
+     452,   453,   454,   455,   456,   457,   458,   459,   460,   461,
+     462,   463,   464,   465,   468,   469,   472,   476
 };
 #endif
 
@@ -704,8 +705,8 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "scriptpart", "macro", "factory", "method", "methodlist",
   "nonemptymethodlist", "methodlistline", "handler", "endargdef", "ID",
   "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "definevars",
-  "ifstmt", "ifelsestmt", "stmtlist", "nonemptystmtlist", "stmtlistline",
-  "simpleexprnoparens", "simpleexpr", "expr", "exprlist",
+  "ifstmt", "ifelsestmt", "loop", "stmtlist", "nonemptystmtlist",
+  "stmtlistline", "simpleexprnoparens", "simpleexpr", "expr", "exprlist",
   "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
@@ -729,7 +730,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-91)
+#define YYPACT_NINF (-158)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -743,25 +744,28 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     313,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   863,
-     173,   -91,   -91,   863,   -91,   -91,   -91,   -91,   -91,   -91,
-     -91,   -91,   -91,   -91,   -91,   863,   -91,   -91,   863,   -91,
-     -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,
-     -91,   -91,   -91,   -91,   863,   863,   -91,   -91,     4,   313,
-     -91,   -91,   -91,   -91,   243,   -91,   -91,   -91,   -91,   -91,
-     -91,   -91,   -76,   -66,   -91,   -91,   -91,   -91,   173,   173,
-     173,   173,   -73,   -91,   -91,   -21,   863,   -64,   -63,   -60,
-     863,   -91,   -91,   173,   897,   -59,   -52,   -91,   863,   -91,
-     -91,   -91,   884,   173,   621,   173,   173,   173,   173,   173,
-     173,   173,   173,   173,   173,   173,   173,   173,   173,   173,
-     173,   173,   -44,   -72,   -91,   -91,   -40,   884,   -65,   -91,
-     173,   -91,   -91,   -42,   682,    24,    38,    38,    38,    38,
-     932,   932,   -91,   -14,    38,    38,    38,    38,   -14,   -46,
-     -46,   -91,   -91,   682,   863,   -91,   -91,   -36,   -91,   -91,
-     682,   -34,   897,   -91,   -91,   -91,   374,   -91,   -91,   743,
-     682,   863,   -72,   436,   -91,   804,   -33,   -91,   682,   -91,
-     -30,   -91,   863,   682,   -91,   -91,   497,   682,   -69,   -91,
-     559,   -22,   682,   -91,   863,   -15,   -91,   -91,   -91
+     346,  -158,  -158,  -158,  -158,  -158,  -158,  -158,   -35,  1086,
+     206,  -158,  -158,  1086,  -158,   -32,  -158,  -158,  -158,   -18,
+    -158,  -158,  -158,  -158,  -158,  1086,  -158,  -158,  1086,  -158,
+    -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,
+    -158,  -158,  -158,  -158,  1086,  1086,  -158,  -158,    12,   346,
+    -158,  -158,  -158,  -158,   276,  -158,  -158,  -158,  -158,  -158,
+    -158,  -158,  -158,  -158,  -158,  -158,  -158,   -76,   -68,  -158,
+    -158,  -158,  -158,   206,   206,   206,   206,   -67,  -158,  -158,
+    1130,  1086,  -158,  1086,   206,   -44,   -40,   -38,  1086,  -158,
+    -158,   206,  1265,   -34,   -37,  -158,  1086,  -158,  -158,  -158,
+    1165,   206,   844,   206,   206,   206,   206,   206,   206,   206,
+     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
+     -29,     6,  1178,   -72,  -158,  -158,   -25,  1165,   -24,  -158,
+     206,  -158,  -158,   -21,   905,    36,    10,    10,    10,    10,
+    1278,  1278,  -158,   -49,    10,    10,    10,    10,   -49,   -54,
+     -54,  -158,  -158,   905,   206,   905,  1086,  -158,  -158,   -23,
+    -158,  -158,   905,   -22,  1265,  -158,  -158,  -158,   407,  -158,
+    -158,   966,   905,  1115,   469,  1086,   -72,   537,  -158,  1027,
+     -17,  -158,   905,  -158,    29,   206,   -13,   -12,  -158,  1086,
+     905,  -158,  -158,   598,   206,  1215,  -158,   905,   -46,  -158,
+     660,   -11,  1228,   905,   905,  -158,  1086,   -10,  -158,   905,
+     722,  -158,  -158,   783,    -9,    -7,  -158,  -158
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -774,36 +778,39 @@ static const yytype_int8 yydefact[] =
       51,    54,    57,    60,    58,     0,    43,    45,    63,    26,
       44,    41,    38,    25,    27,    52,    29,    36,    37,    62,
       56,    34,    61,    53,    63,     0,    55,     5,     0,     2,
-       3,     6,     7,     8,   118,     9,    67,    70,    71,    68,
-      69,    65,     0,    64,    89,    90,    92,    91,    41,     0,
-       0,     0,    97,    98,   100,     0,    63,     0,     0,     0,
-      63,     1,     4,   118,   120,     0,   119,    74,     0,    95,
-      93,    94,     0,   118,     0,     0,     0,     0,     0,     0,
+       3,     6,     7,     8,   124,     9,    67,    71,    72,    68,
+      69,    70,    76,    31,    40,    49,    65,     0,    64,    95,
+      96,    98,    97,    41,     0,     0,     0,   103,   104,   106,
+       0,    63,    75,     0,     0,     0,     0,     0,    63,     1,
+       4,   124,   126,     0,   125,    77,     0,   101,    99,   100,
+       0,   124,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    13,    76,    75,     0,   120,     0,    73,
-       0,    66,    99,     0,    83,    77,   110,   111,   108,   109,
-     112,   113,   105,   115,   116,   117,   107,   106,   114,   101,
-     102,   103,   104,    83,     0,    17,    18,    11,    14,    15,
-      83,     0,   121,    96,    87,    88,     0,    84,    85,     0,
-      10,    63,     0,    20,    72,     0,     0,    86,    83,    79,
-       0,    16,    21,    83,    81,    78,     0,    83,     0,    22,
-       0,     0,    12,    19,     0,     0,    80,    23,    82
+       0,     0,     0,    13,    79,    78,     0,   126,     0,    74,
+       0,    66,   105,     0,    89,    80,   116,   117,   114,   115,
+     118,   119,   111,   121,   122,   123,   113,   112,   120,   107,
+     108,   109,   110,    89,     0,    89,     0,    17,    18,    11,
+      14,    15,    89,     0,   127,   102,    93,    94,     0,    90,
+      91,     0,    10,     0,     0,    63,     0,    20,    73,     0,
+       0,    92,    89,    82,     0,     0,     0,     0,    16,    21,
+      89,    84,    81,     0,     0,     0,    86,    89,     0,    22,
+       0,     0,     0,    89,    12,    19,     0,     0,    83,    89,
+       0,    23,    85,     0,     0,     0,    87,    88
 };
 
   /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
+static const yytype_int16 yypgoto[] =
 {
-     -91,   -91,   -91,    16,   -91,   -91,   -91,   -91,   -91,   -90,
-     -91,   -91,     0,   -25,   -91,     5,   -91,   -91,   -91,   -91,
-     -91,   -77,   -91,   -31,   -91,   -62,     6,   -81,   -91
+    -158,  -158,  -158,    31,  -158,  -158,  -158,  -158,  -158,   -94,
+    -158,  -158,     0,   -26,  -158,     5,  -158,  -158,  -158,  -158,
+    -158,  -158,  -131,  -158,  -157,  -158,   -36,    13,   -85,  -158
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,    48,    49,    50,    51,    52,   146,   147,   148,   149,
-      53,   178,    72,    62,    63,   155,    56,    57,    58,    59,
-      60,   156,   157,   158,    73,    74,    84,    85,    86
+       0,    48,    49,    50,    51,    52,   158,   159,   160,   161,
+      53,   198,    77,    67,    68,   167,    56,    57,    58,    59,
+      60,    61,   168,   169,   170,    78,    79,    92,    93,    94
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -811,165 +818,191 @@ static const yytype_uint8 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      54,   144,   118,    78,    81,    55,    89,    90,    91,    61,
-      87,   101,   123,    76,   145,    93,    75,   183,   184,    79,
-      94,    88,   113,   114,   151,    77,   115,   119,    61,    95,
-      96,    97,    98,    99,   100,   120,   101,   110,   111,   102,
-     103,   104,   143,   101,    61,    80,   150,   153,   159,    54,
-     162,   112,   164,   175,    55,   116,   177,   105,   106,   107,
-     108,   109,   110,   111,   186,    82,   160,   108,   109,   110,
-     111,   188,   171,   163,     0,     0,    61,    92,     0,     0,
-      61,     0,     0,     0,     0,     0,     0,     0,   121,   117,
-       0,   176,     0,     0,    54,   101,   180,     0,   102,   125,
-     182,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   107,   108,
-     109,   110,   111,     0,    54,   167,   152,     0,     0,   167,
-       0,     0,   167,     0,     0,     0,   170,     0,     0,     0,
-       0,     0,     0,    54,   161,   167,     0,     0,     0,   167,
-      54,   167,     0,     0,     0,     0,    54,     0,     0,    54,
-      54,    61,     0,    54,   169,    54,     0,     0,    54,     0,
-     174,     0,   179,    54,     0,     0,    54,    54,    64,     0,
-      54,     0,    54,    65,   187,     0,     1,    66,    67,     0,
-       2,     0,     3,     4,     5,     6,     7,     0,     0,     8,
-       0,     0,     0,     0,    11,    12,     0,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
-      26,    27,     0,     0,     0,     0,     0,    29,    30,    68,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,     0,     0,     0,     0,    64,     0,
-      46,     0,     0,    65,    69,    70,     1,    66,    67,     0,
-       2,    71,     3,     4,     5,     6,     7,     0,     0,     8,
-       0,     0,     0,     0,    11,    12,     0,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
-      26,    27,     0,     0,     0,     0,     0,    29,    30,    68,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,     0,     0,     0,     0,     0,     0,
-      46,     0,     0,     0,    69,    70,     1,     0,     0,     0,
-       2,    83,     3,     4,     5,     6,     7,     0,     0,     8,
-       9,     0,     0,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     1,     0,     0,
-      46,     2,     0,     3,     4,     5,     6,     7,   165,    47,
-       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
-      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
-       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
-      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,   166,     1,
-       0,    46,   172,     2,     0,     3,     4,     5,     6,     7,
-     154,     0,     8,     9,     0,     0,    10,    11,    12,     0,
+      54,   156,    86,   109,    62,    55,   128,    82,   109,    66,
+      95,   181,    89,    81,   157,   181,   133,   181,    87,    96,
+     181,   101,   172,    80,   174,    85,    83,    84,    66,   118,
+     119,   177,   116,   117,   118,   119,   181,    97,    98,    99,
+     205,   206,   123,   181,    66,    88,   124,   181,   125,    54,
+     130,   193,   129,   181,    55,   120,   181,   153,   154,   200,
+     171,   162,   126,   176,   178,   163,   204,   109,   165,   192,
+     110,   194,   210,   196,   197,   208,   212,   216,   213,   217,
+      90,    66,   188,   121,     0,     0,     0,     0,    66,   100,
+     115,   116,   117,   118,   119,     0,   131,   122,     0,     0,
+       0,     0,    54,     0,   127,     0,     0,   135,     0,     0,
+       0,     0,     0,     0,     0,     0,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,     0,    54,     0,     0,     0,     0,     0,
+       0,     0,     0,   164,     0,     0,     0,     0,     0,   187,
+       0,     0,     0,    54,     0,    54,   175,     0,     0,     0,
+       0,     0,    54,     0,     0,     0,     0,   173,    54,     0,
+       0,    54,    54,     0,    54,    66,   183,    54,     0,    54,
+       0,     0,    54,     0,   191,     0,     0,     0,     0,   199,
+      54,     0,     0,    54,     0,     0,     0,    54,   195,     0,
+      54,     0,     0,    54,    54,     0,   211,   202,     0,    54,
+      54,    69,     0,    54,     0,     0,    70,     0,     0,     1,
+      71,    72,     0,     2,     0,     3,     4,     5,     6,     7,
+       0,     0,    63,     0,     0,     0,     0,    11,    12,     0,
+      14,    64,    16,    17,    18,    65,    20,     0,    21,    22,
+      23,    24,     0,    26,    27,     0,     0,     0,     0,     0,
+      29,    30,    73,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
+       0,    69,     0,    46,     0,     0,    70,    74,    75,     1,
+      71,    72,     0,     2,    76,     3,     4,     5,     6,     7,
+       0,     0,    63,     0,     0,     0,     0,    11,    12,     0,
+      14,    64,    16,    17,    18,    65,    20,     0,    21,    22,
+      23,    24,     0,    26,    27,     0,     0,     0,     0,     0,
+      29,    30,    73,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
+       0,     0,     0,    46,     0,     0,     0,    74,    75,     1,
+       0,     0,     0,     2,    91,     3,     4,     5,     6,     7,
+       0,     0,     8,     9,     0,     0,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
-      23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,     0,     0,     0,     0,
       29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
        1,     0,     0,    46,     2,     0,     3,     4,     5,     6,
-       7,     0,   154,     8,     9,     0,     0,    10,    11,    12,
+       7,   179,    47,     8,     9,     0,     0,    10,    11,    12,
        0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
       22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
        0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,   181,     1,     0,    46,     0,     2,     0,     3,     4,
-       5,     6,     7,   154,     0,     8,     9,     0,     0,    10,
+       0,   180,     1,     0,    46,     0,     2,     0,     3,     4,
+       5,     6,     7,   166,     0,     8,     9,     0,     0,    10,
       11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
        0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
        0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
        0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,   185,     1,     0,    46,     0,     2,     0,
-       3,     4,     5,     6,     7,   154,     0,     8,     9,     0,
-       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
-      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
-      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     1,     0,     0,    46,     2,
-       0,     3,     4,     5,     6,     7,     0,   124,     8,     9,
+      44,     0,     0,     0,   186,     0,    46,     0,     0,     0,
+       1,     0,     0,   189,     2,   166,     3,     4,     5,     6,
+       7,     0,     0,     8,     9,     0,     0,    10,    11,    12,
+       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
+      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
+       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
+       0,     1,     0,     0,    46,     2,     0,     3,     4,     5,
+       6,     7,     0,   166,     8,     9,     0,     0,    10,    11,
+      12,     0,    14,    15,    16,    17,    18,    19,    20,     0,
+      21,    22,    23,    24,     0,    26,    27,    28,     0,     0,
+       0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+       0,     0,   201,     1,     0,    46,     0,     2,     0,     3,
+       4,     5,     6,     7,   166,     0,     8,     9,     0,     0,
+      10,    11,    12,     0,    14,    15,    16,    17,    18,    19,
+      20,     0,    21,    22,    23,    24,     0,    26,    27,    28,
+       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,   207,     1,     0,    46,     0,     2,
+       0,     3,     4,     5,     6,     7,   166,     0,     8,     9,
        0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
       18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
       27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
       33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,     1,     0,     0,    46,
-       2,     0,     3,     4,     5,     6,     7,     0,   154,     8,
+      41,    42,    43,    44,     0,     0,     1,   214,     0,    46,
+       2,     0,     3,     4,     5,     6,     7,     0,   166,     8,
        9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
       17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
       26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
       32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,     0,     0,     1,     0,     0,
-      46,     2,     0,     3,     4,     5,     6,     7,     0,   168,
+      40,    41,    42,    43,    44,     0,     0,     1,   215,     0,
+      46,     2,     0,     3,     4,     5,     6,     7,     0,   166,
        8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
       16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
        0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
       31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     1,     0,     0,     0,
-       2,    46,     3,     4,     5,     6,     7,     0,     0,     8,
-     173,     0,     0,     0,    11,    12,     0,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
-      26,    27,     0,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    95,    96,    97,    98,    99,   100,
-      46,   101,     0,     0,   102,   103,   104,    95,    96,    97,
-      98,    99,   100,     0,   101,     0,     0,   102,   103,   104,
-       0,     0,   105,   106,   107,   108,   109,   110,   111,     0,
-       0,     0,     0,   122,     0,   105,   106,   107,   108,   109,
-     110,   111,    95,    96,    97,    98,     0,     0,     0,   101,
-       0,     0,   102,   103,   104,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     105,   106,   107,   108,   109,   110,   111
+      39,    40,    41,    42,    43,    44,     0,     0,     1,     0,
+       0,    46,     2,     0,     3,     4,     5,     6,     7,     0,
+     134,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
+      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,     1,
+       0,     0,    46,     2,     0,     3,     4,     5,     6,     7,
+       0,   166,     8,     9,     0,     0,    10,    11,    12,     0,
+      14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
+      23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
+       1,     0,     0,    46,     2,     0,     3,     4,     5,     6,
+       7,     0,   182,     8,     9,     0,     0,    10,    11,    12,
+       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
+      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
+       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,     1,
+       0,     0,     0,     2,    46,     3,     4,     5,     6,     7,
+       0,     0,    63,   190,     0,     0,     0,    11,    12,     0,
+      14,    64,    16,    17,    18,    65,    20,     0,    21,    22,
+      23,    24,     0,    26,    27,     0,     0,     0,   184,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,   185,     0,     0,
+       0,     0,     0,    46,     0,   103,   104,   105,   106,   107,
+     108,   102,   109,     0,     0,   110,   111,   112,     0,     0,
+     103,   104,   105,   106,   107,   108,     0,   109,     0,     0,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+       0,     0,     0,     0,     0,     0,     0,     0,   113,   114,
+     115,   116,   117,   118,   119,   103,   104,   105,   106,   107,
+     108,     0,   109,     0,     0,   110,   111,   112,   103,   104,
+     105,   106,   107,   108,     0,   109,     0,     0,   110,   111,
+     112,     0,     0,   113,   114,   115,   116,   117,   118,   119,
+       0,     0,     0,     0,   132,     0,   113,   114,   115,   116,
+     117,   118,   119,     0,   155,   103,   104,   105,   106,   107,
+     108,     0,   109,     0,     0,   110,   111,   112,   103,   104,
+     105,   106,   107,   108,     0,   109,     0,     0,   110,   111,
+     112,     0,     0,   113,   114,   115,   116,   117,   118,   119,
+       0,   203,     0,     0,     0,     0,   113,   114,   115,   116,
+     117,   118,   119,     0,   209,   103,   104,   105,   106,   107,
+     108,     0,   109,     0,     0,   110,   111,   112,   103,   104,
+     105,   106,     0,     0,     0,   109,     0,     0,   110,   111,
+     112,     0,     0,   113,   114,   115,   116,   117,   118,   119,
+       0,     0,     0,     0,     0,     0,   113,   114,   115,   116,
+     117,   118,   119
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    73,    83,    28,     0,     0,    68,    69,    70,     9,
-      86,    57,    93,    13,    86,    88,    10,    86,    87,    44,
-      41,    87,    86,    86,    89,    25,    86,    86,    28,    50,
-      51,    52,    53,    54,    55,    87,    57,    83,    84,    60,
-      61,    62,    86,    57,    44,    45,    86,    89,    24,    49,
-      86,    76,    86,    86,    49,    80,    86,    78,    79,    80,
-      81,    82,    83,    84,    86,    49,   143,    81,    82,    83,
-      84,    86,   162,   150,    -1,    -1,    76,    71,    -1,    -1,
-      80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    83,
-      -1,   168,    -1,    -1,    94,    57,   173,    -1,    60,    94,
-     177,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,    80,    81,
-      82,    83,    84,    -1,   124,   156,   120,    -1,    -1,   160,
-      -1,    -1,   163,    -1,    -1,    -1,   161,    -1,    -1,    -1,
-      -1,    -1,    -1,   143,   144,   176,    -1,    -1,    -1,   180,
-     150,   182,    -1,    -1,    -1,    -1,   156,    -1,    -1,   159,
-     160,   161,    -1,   163,   159,   165,    -1,    -1,   168,    -1,
-     165,    -1,   172,   173,    -1,    -1,   176,   177,     5,    -1,
-     180,    -1,   182,    10,   184,    -1,    13,    14,    15,    -1,
-      17,    -1,    19,    20,    21,    22,    23,    -1,    -1,    26,
-      -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    -1,    -1,     5,    -1,
-      77,    -1,    -1,    10,    81,    82,    13,    14,    15,    -1,
-      17,    88,    19,    20,    21,    22,    23,    -1,    -1,    26,
-      -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    -1,    -1,    -1,    81,    82,    13,    -1,    -1,    -1,
-      17,    88,    19,    20,    21,    22,    23,    -1,    -1,    26,
-      27,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    46,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    13,    -1,    -1,
-      77,    17,    -1,    19,    20,    21,    22,    23,    24,    86,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    74,    13,
-      -1,    77,    16,    17,    -1,    19,    20,    21,    22,    23,
-      86,    -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+       0,    73,    28,    57,    39,     0,    91,    39,    57,     9,
+      86,   168,     0,    13,    86,   172,   101,   174,    44,    87,
+     177,    88,   153,    10,   155,    25,    44,    45,    28,    83,
+      84,   162,    81,    82,    83,    84,   193,    73,    74,    75,
+      86,    87,    86,   200,    44,    45,    86,   204,    86,    49,
+      87,   182,    86,   210,    49,    81,   213,    86,    52,   190,
+      24,    86,    88,    86,    86,    89,   197,    57,    89,    86,
+      60,    42,   203,    86,    86,    86,    86,    86,   209,    86,
+      49,    81,   176,    83,    -1,    -1,    -1,    -1,    88,    76,
+      80,    81,    82,    83,    84,    -1,    96,    84,    -1,    -1,
+      -1,    -1,   102,    -1,    91,    -1,    -1,   102,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,    -1,   134,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   130,    -1,    -1,    -1,    -1,    -1,   175,
+      -1,    -1,    -1,   153,    -1,   155,   156,    -1,    -1,    -1,
+      -1,    -1,   162,    -1,    -1,    -1,    -1,   154,   168,    -1,
+      -1,   171,   172,    -1,   174,   175,   171,   177,    -1,   179,
+      -1,    -1,   182,    -1,   179,    -1,    -1,    -1,    -1,   189,
+     190,    -1,    -1,   193,    -1,    -1,    -1,   197,   185,    -1,
+     200,    -1,    -1,   203,   204,    -1,   206,   194,    -1,   209,
+     210,     5,    -1,   213,    -1,    -1,    10,    -1,    -1,    13,
+      14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,    -1,
       34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,
       54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,     5,    -1,    77,    -1,    -1,    10,    81,    82,    13,
+      14,    15,    -1,    17,    88,    19,    20,    21,    22,    23,
+      -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    13,
+      -1,    -1,    -1,    17,    88,    19,    20,    21,    22,    23,
+      -1,    -1,    26,    27,    -1,    -1,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    46,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
       13,    -1,    -1,    77,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    86,    26,    27,    -1,    -1,    30,    31,    32,
+      23,    24,    86,    26,    27,    -1,    -1,    30,    31,    32,
       -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
@@ -980,45 +1013,89 @@ static const yytype_int16 yycheck[] =
       -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
       -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
       -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    74,    13,    -1,    77,    -1,    17,    -1,
-      19,    20,    21,    22,    23,    86,    -1,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    17,
-      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
+      71,    -1,    -1,    -1,    75,    -1,    77,    -1,    -1,    -1,
+      13,    -1,    -1,    16,    17,    86,    19,    20,    21,    22,
+      23,    -1,    -1,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    13,    -1,    -1,    77,    17,    -1,    19,    20,    21,
+      22,    23,    -1,    86,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    74,    13,    -1,    77,    -1,    17,    -1,    19,
+      20,    21,    22,    23,    86,    -1,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,    17,
+      -1,    19,    20,    21,    22,    23,    86,    -1,    26,    27,
       -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
       38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
       48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
       58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
+      68,    69,    70,    71,    -1,    -1,    13,    75,    -1,    77,
       17,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
       27,    -1,    -1,    30,    31,    32,    -1,    34,    35,    36,
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
       47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
       57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
+      67,    68,    69,    70,    71,    -1,    -1,    13,    75,    -1,
       77,    17,    -1,    19,    20,    21,    22,    23,    -1,    86,
       26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
       36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
       -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
       56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    13,    -1,    -1,    -1,
-      17,    77,    19,    20,    21,    22,    23,    -1,    -1,    26,
-      86,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    50,    51,    52,    53,    54,    55,
-      77,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      -1,    -1,    -1,    89,    -1,    78,    79,    80,    81,    82,
-      83,    84,    50,    51,    52,    53,    -1,    -1,    -1,    57,
-      -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    84
+      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
+      -1,    77,    17,    -1,    19,    20,    21,    22,    23,    -1,
+      86,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
+      -1,    -1,    77,    17,    -1,    19,    20,    21,    22,    23,
+      -1,    86,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      13,    -1,    -1,    77,    17,    -1,    19,    20,    21,    22,
+      23,    -1,    86,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    13,
+      -1,    -1,    -1,    17,    77,    19,    20,    21,    22,    23,
+      -1,    -1,    26,    86,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    -1,    -1,    -1,    23,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    42,    -1,    -1,
+      -1,    -1,    -1,    77,    -1,    50,    51,    52,    53,    54,
+      55,    41,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    -1,    89,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1031,19 +1108,22 @@ static const yytype_int8 yystos[] =
       55,    56,    57,    58,    59,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    77,    86,    91,    92,
       93,    94,    95,   100,   102,   105,   106,   107,   108,   109,
-     110,   102,   103,   104,     5,    10,    14,    15,    56,    81,
-      82,    88,   102,   114,   115,   116,   102,   102,   103,   103,
-     102,     0,    93,    88,   116,   117,   118,    86,    87,   115,
-     115,   115,   116,    88,    41,    50,    51,    52,    53,    54,
-      55,    57,    60,    61,    62,    78,    79,    80,    81,    82,
-      83,    84,   103,    86,    86,    86,   103,   116,   117,    86,
-      87,   102,    89,   117,    86,   105,   116,   116,   116,   116,
-     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,    86,    73,    86,    96,    97,    98,    99,
-      86,    89,   116,    89,    86,   105,   111,   112,   113,    24,
-     111,   102,    86,   111,    86,    24,    74,   113,    86,   105,
-     103,    99,    16,    86,   105,    86,   111,    86,   101,   102,
-     111,    74,   111,    86,    87,    74,    86,   102,    86
+     110,   111,    39,    26,    35,    39,   102,   103,   104,     5,
+      10,    14,    15,    56,    81,    82,    88,   102,   115,   116,
+     117,   102,    39,    44,    45,   102,   103,   103,   102,     0,
+      93,    88,   117,   118,   119,    86,    87,   116,   116,   116,
+     117,    88,    41,    50,    51,    52,    53,    54,    55,    57,
+      60,    61,    62,    78,    79,    80,    81,    82,    83,    84,
+     103,   102,   117,    86,    86,    86,   103,   117,   118,    86,
+      87,   102,    89,   118,    86,   105,   117,   117,   117,   117,
+     117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
+     117,   117,   117,    86,    52,    86,    73,    86,    96,    97,
+      98,    99,    86,    89,   117,    89,    86,   105,   112,   113,
+     114,    24,   112,   117,   112,   102,    86,   112,    86,    24,
+      74,   114,    86,   105,    23,    42,    75,   103,    99,    16,
+      86,   105,    86,   112,    42,   117,    86,    86,   101,   102,
+     112,    74,   117,    86,   112,    86,    87,    74,    86,    86,
+     112,   102,    86,   112,    75,    75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1056,12 +1136,12 @@ static const yytype_int8 yyr1[] =
      102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
      102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
      102,   102,   102,   103,   103,   104,   104,   105,   105,   105,
-     106,   106,   107,   107,   108,   108,   108,   109,   109,   110,
-     110,   110,   110,   111,   111,   112,   112,   113,   113,   114,
-     114,   114,   114,   114,   114,   114,   114,   114,   115,   115,
-     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,   116,   116,   116,   116,   116,   117,   117,
-     118,   118
+     105,   106,   106,   107,   107,   107,   107,   108,   108,   108,
+     109,   109,   110,   110,   110,   110,   111,   111,   111,   112,
+     112,   113,   113,   114,   114,   115,   115,   115,   115,   115,
+     115,   115,   115,   115,   116,   116,   117,   117,   117,   117,
+     117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
+     117,   117,   117,   117,   118,   118,   119,   119
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1074,12 +1154,12 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     0,     1,     1,     3,     1,     1,     1,
-       1,     1,     5,     3,     3,     3,     3,     4,     7,     6,
-       9,     7,    10,     0,     1,     1,     2,     1,     1,     1,
-       1,     1,     1,     2,     2,     2,     4,     1,     1,     3,
-       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     0,     1,
-       1,     3
+       1,     1,     1,     5,     3,     2,     2,     3,     3,     3,
+       4,     7,     6,     9,     7,    10,     7,    11,    12,     0,
+       1,     1,     2,     1,     1,     1,     1,     1,     1,     2,
+       2,     2,     4,     1,     1,     3,     1,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     0,     1,     1,     3
 };
 
 
@@ -1353,49 +1433,49 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1357 "engines/director/lingo/lingo-gr.cpp"
+#line 1437 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1363 "engines/director/lingo/lingo-gr.cpp"
+#line 1443 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1369 "engines/director/lingo/lingo-gr.cpp"
+#line 1449 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1375 "engines/director/lingo/lingo-gr.cpp"
+#line 1455 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1381 "engines/director/lingo/lingo-gr.cpp"
+#line 1461 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1387 "engines/director/lingo/lingo-gr.cpp"
+#line 1467 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1393 "engines/director/lingo/lingo-gr.cpp"
+#line 1473 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 184 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1399 "engines/director/lingo/lingo-gr.cpp"
+#line 1479 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -1663,7 +1743,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 190 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 1667 "engines/director/lingo/lingo-gr.cpp"
+#line 1747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -1674,7 +1754,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1678 "engines/director/lingo/lingo-gr.cpp"
+#line 1758 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -1684,37 +1764,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1688 "engines/director/lingo/lingo-gr.cpp"
+#line 1768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 205 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 1694 "engines/director/lingo/lingo-gr.cpp"
+#line 1774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 238 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1700 "engines/director/lingo/lingo-gr.cpp"
+#line 1780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 242 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 1706 "engines/director/lingo/lingo-gr.cpp"
+#line 1786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1712 "engines/director/lingo/lingo-gr.cpp"
+#line 1792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 246 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 1718 "engines/director/lingo/lingo-gr.cpp"
+#line 1798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -1725,7 +1805,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1729 "engines/director/lingo/lingo-gr.cpp"
+#line 1809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -1735,13 +1815,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 1739 "engines/director/lingo/lingo-gr.cpp"
+#line 1819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 263 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 1745 "engines/director/lingo/lingo-gr.cpp"
+#line 1825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -1750,260 +1830,260 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 1754 "engines/director/lingo/lingo-gr.cpp"
+#line 1834 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 273 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1761 "engines/director/lingo/lingo-gr.cpp"
+#line 1841 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 1767 "engines/director/lingo/lingo-gr.cpp"
+#line 1847 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 279 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 1773 "engines/director/lingo/lingo-gr.cpp"
+#line 1853 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 1779 "engines/director/lingo/lingo-gr.cpp"
+#line 1859 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
 #line 286 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 1785 "engines/director/lingo/lingo-gr.cpp"
+#line 1865 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
 #line 287 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 1791 "engines/director/lingo/lingo-gr.cpp"
+#line 1871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
 #line 288 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 1797 "engines/director/lingo/lingo-gr.cpp"
+#line 1877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
 #line 289 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 1803 "engines/director/lingo/lingo-gr.cpp"
+#line 1883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
 #line 290 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 1809 "engines/director/lingo/lingo-gr.cpp"
+#line 1889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tEXIT  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 1815 "engines/director/lingo/lingo-gr.cpp"
+#line 1895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFIELD  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 1821 "engines/director/lingo/lingo-gr.cpp"
+#line 1901 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 1827 "engines/director/lingo/lingo-gr.cpp"
+#line 1907 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 1833 "engines/director/lingo/lingo-gr.cpp"
+#line 1913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 1839 "engines/director/lingo/lingo-gr.cpp"
+#line 1919 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 1845 "engines/director/lingo/lingo-gr.cpp"
+#line 1925 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 1851 "engines/director/lingo/lingo-gr.cpp"
+#line 1931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 1857 "engines/director/lingo/lingo-gr.cpp"
+#line 1937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 1863 "engines/director/lingo/lingo-gr.cpp"
+#line 1943 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 1869 "engines/director/lingo/lingo-gr.cpp"
+#line 1949 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 1875 "engines/director/lingo/lingo-gr.cpp"
+#line 1955 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 1881 "engines/director/lingo/lingo-gr.cpp"
+#line 1961 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 1887 "engines/director/lingo/lingo-gr.cpp"
+#line 1967 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 1893 "engines/director/lingo/lingo-gr.cpp"
+#line 1973 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPLAY  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 1899 "engines/director/lingo/lingo-gr.cpp"
+#line 1979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tPLAYACCEL  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("playAccel"); }
-#line 1905 "engines/director/lingo/lingo-gr.cpp"
+#line 1985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tPREVIOUS  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 1911 "engines/director/lingo/lingo-gr.cpp"
+#line 1991 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tPUT  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 1917 "engines/director/lingo/lingo-gr.cpp"
+#line 1997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tREPEAT  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 1923 "engines/director/lingo/lingo-gr.cpp"
+#line 2003 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tSCRIPT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 1929 "engines/director/lingo/lingo-gr.cpp"
+#line 2009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tSET  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 1935 "engines/director/lingo/lingo-gr.cpp"
+#line 2015 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tSTARTS  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 1941 "engines/director/lingo/lingo-gr.cpp"
+#line 2021 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tTELL  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 1947 "engines/director/lingo/lingo-gr.cpp"
+#line 2027 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tTO  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 1953 "engines/director/lingo/lingo-gr.cpp"
+#line 2033 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tASSERTERROR  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 1959 "engines/director/lingo/lingo-gr.cpp"
+#line 2039 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tSPRITE  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 1965 "engines/director/lingo/lingo-gr.cpp"
+#line 2045 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWHEN  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 1971 "engines/director/lingo/lingo-gr.cpp"
+#line 2051 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWHILE  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 1977 "engines/director/lingo/lingo-gr.cpp"
+#line 2057 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWINDOW  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 1983 "engines/director/lingo/lingo-gr.cpp"
+#line 2063 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* ID: tWITH  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 1989 "engines/director/lingo/lingo-gr.cpp"
+#line 2069 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* ID: tWITHIN  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 1995 "engines/director/lingo/lingo-gr.cpp"
+#line 2075 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* ID: tWORD  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2001 "engines/director/lingo/lingo-gr.cpp"
+#line 2081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* idlist: %empty  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2007 "engines/director/lingo/lingo-gr.cpp"
+#line 2087 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* nonemptyidlist: ID  */
@@ -2012,7 +2092,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2016 "engines/director/lingo/lingo-gr.cpp"
+#line 2096 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2020,317 +2100,350 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2024 "engines/director/lingo/lingo-gr.cpp"
+#line 2104 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* proc: ID '(' exprlist ')' '\n'  */
-#line 360 "engines/director/lingo/lingo-gr.y"
+  case 73: /* proc: ID '(' exprlist ')' '\n'  */
+#line 364 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new CmdNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
-#line 2030 "engines/director/lingo/lingo-gr.cpp"
+#line 2110 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* proc: ID exprlist '\n'  */
-#line 361 "engines/director/lingo/lingo-gr.y"
+  case 74: /* proc: ID exprlist '\n'  */
+#line 365 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2036 "engines/director/lingo/lingo-gr.cpp"
+#line 2116 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* definevars: tGLOBAL idlist '\n'  */
-#line 364 "engines/director/lingo/lingo-gr.y"
+  case 75: /* proc: tNEXT tREPEAT  */
+#line 366 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new NextRepeatNode(); }
+#line 2122 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 76: /* proc: tEXIT tREPEAT  */
+#line 367 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new ExitRepeatNode(); }
+#line 2128 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 77: /* definevars: tGLOBAL idlist '\n'  */
+#line 370 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2042 "engines/director/lingo/lingo-gr.cpp"
+#line 2134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* definevars: tPROPERTY idlist '\n'  */
-#line 365 "engines/director/lingo/lingo-gr.y"
+  case 78: /* definevars: tPROPERTY idlist '\n'  */
+#line 371 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2048 "engines/director/lingo/lingo-gr.cpp"
+#line 2140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* definevars: tINSTANCE idlist '\n'  */
-#line 366 "engines/director/lingo/lingo-gr.y"
+  case 79: /* definevars: tINSTANCE idlist '\n'  */
+#line 372 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2054 "engines/director/lingo/lingo-gr.cpp"
+#line 2146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* ifstmt: tIF expr tTHEN stmt  */
-#line 369 "engines/director/lingo/lingo-gr.y"
+  case 80: /* ifstmt: tIF expr tTHEN stmt  */
+#line 375 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2063 "engines/director/lingo/lingo-gr.cpp"
+#line 2155 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 373 "engines/director/lingo/lingo-gr.y"
+  case 81: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 379 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2070 "engines/director/lingo/lingo-gr.cpp"
+#line 2162 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+  case 82: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 383 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2081 "engines/director/lingo/lingo-gr.cpp"
+#line 2173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 383 "engines/director/lingo/lingo-gr.y"
+  case 83: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 389 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2090 "engines/director/lingo/lingo-gr.cpp"
+#line 2182 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 387 "engines/director/lingo/lingo-gr.y"
+  case 84: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 393 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2099 "engines/director/lingo/lingo-gr.cpp"
+#line 2191 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 391 "engines/director/lingo/lingo-gr.y"
+  case 85: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 397 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2106 "engines/director/lingo/lingo-gr.cpp"
+#line 2198 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* stmtlist: %empty  */
-#line 395 "engines/director/lingo/lingo-gr.y"
+  case 86: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 401 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
+#line 2205 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 87: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 403 "engines/director/lingo/lingo-gr.y"
+                                                                                       {
+		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
+#line 2212 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 88: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 405 "engines/director/lingo/lingo-gr.y"
+                                                                                             {
+		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
+#line 2219 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 89: /* stmtlist: %empty  */
+#line 409 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2112 "engines/director/lingo/lingo-gr.cpp"
+#line 2225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* nonemptystmtlist: stmtlistline  */
-#line 400 "engines/director/lingo/lingo-gr.y"
+  case 91: /* nonemptystmtlist: stmtlistline  */
+#line 414 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2123 "engines/director/lingo/lingo-gr.cpp"
+#line 2236 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+  case 92: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 420 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2133 "engines/director/lingo/lingo-gr.cpp"
+#line 2246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* stmtlistline: '\n'  */
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 93: /* stmtlistline: '\n'  */
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2139 "engines/director/lingo/lingo-gr.cpp"
+#line 2252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* simpleexprnoparens: tINT  */
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 95: /* simpleexprnoparens: tINT  */
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2145 "engines/director/lingo/lingo-gr.cpp"
+#line 2258 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* simpleexprnoparens: tFLOAT  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+  case 96: /* simpleexprnoparens: tFLOAT  */
+#line 434 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2151 "engines/director/lingo/lingo-gr.cpp"
+#line 2264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* simpleexprnoparens: tSYMBOL  */
-#line 421 "engines/director/lingo/lingo-gr.y"
+  case 97: /* simpleexprnoparens: tSYMBOL  */
+#line 435 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2157 "engines/director/lingo/lingo-gr.cpp"
+#line 2270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* simpleexprnoparens: tSTRING  */
-#line 422 "engines/director/lingo/lingo-gr.y"
+  case 98: /* simpleexprnoparens: tSTRING  */
+#line 436 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2163 "engines/director/lingo/lingo-gr.cpp"
+#line 2276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* simpleexprnoparens: '+' simpleexpr  */
-#line 423 "engines/director/lingo/lingo-gr.y"
+  case 99: /* simpleexprnoparens: '+' simpleexpr  */
+#line 437 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[0].node); }
-#line 2169 "engines/director/lingo/lingo-gr.cpp"
+#line 2282 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* simpleexprnoparens: '-' simpleexpr  */
-#line 424 "engines/director/lingo/lingo-gr.y"
+  case 100: /* simpleexprnoparens: '-' simpleexpr  */
+#line 438 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2175 "engines/director/lingo/lingo-gr.cpp"
+#line 2288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 425 "engines/director/lingo/lingo-gr.y"
+  case 101: /* simpleexprnoparens: tNOT simpleexpr  */
+#line 439 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2181 "engines/director/lingo/lingo-gr.cpp"
+#line 2294 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* simpleexprnoparens: ID '(' exprlist ')'  */
-#line 426 "engines/director/lingo/lingo-gr.y"
+  case 102: /* simpleexprnoparens: ID '(' exprlist ')'  */
+#line 440 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2187 "engines/director/lingo/lingo-gr.cpp"
+#line 2300 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* simpleexprnoparens: ID  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 103: /* simpleexprnoparens: ID  */
+#line 441 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2193 "engines/director/lingo/lingo-gr.cpp"
+#line 2306 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* simpleexpr: '(' expr ')'  */
-#line 431 "engines/director/lingo/lingo-gr.y"
+  case 105: /* simpleexpr: '(' expr ')'  */
+#line 445 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2199 "engines/director/lingo/lingo-gr.cpp"
+#line 2312 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* expr: simpleexpr  */
-#line 434 "engines/director/lingo/lingo-gr.y"
+  case 106: /* expr: simpleexpr  */
+#line 448 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2205 "engines/director/lingo/lingo-gr.cpp"
+#line 2318 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* expr: expr '+' expr  */
-#line 435 "engines/director/lingo/lingo-gr.y"
+  case 107: /* expr: expr '+' expr  */
+#line 449 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2211 "engines/director/lingo/lingo-gr.cpp"
+#line 2324 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* expr: expr '-' expr  */
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 108: /* expr: expr '-' expr  */
+#line 450 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2217 "engines/director/lingo/lingo-gr.cpp"
+#line 2330 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* expr: expr '*' expr  */
-#line 437 "engines/director/lingo/lingo-gr.y"
+  case 109: /* expr: expr '*' expr  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2223 "engines/director/lingo/lingo-gr.cpp"
+#line 2336 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* expr: expr '/' expr  */
-#line 438 "engines/director/lingo/lingo-gr.y"
+  case 110: /* expr: expr '/' expr  */
+#line 452 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2229 "engines/director/lingo/lingo-gr.cpp"
+#line 2342 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* expr: expr tMOD expr  */
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 111: /* expr: expr tMOD expr  */
+#line 453 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2235 "engines/director/lingo/lingo-gr.cpp"
+#line 2348 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* expr: expr '>' expr  */
-#line 440 "engines/director/lingo/lingo-gr.y"
+  case 112: /* expr: expr '>' expr  */
+#line 454 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2241 "engines/director/lingo/lingo-gr.cpp"
+#line 2354 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* expr: expr '<' expr  */
-#line 441 "engines/director/lingo/lingo-gr.y"
+  case 113: /* expr: expr '<' expr  */
+#line 455 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2247 "engines/director/lingo/lingo-gr.cpp"
+#line 2360 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* expr: expr tEQ expr  */
-#line 442 "engines/director/lingo/lingo-gr.y"
+  case 114: /* expr: expr tEQ expr  */
+#line 456 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2253 "engines/director/lingo/lingo-gr.cpp"
+#line 2366 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* expr: expr tNEQ expr  */
-#line 443 "engines/director/lingo/lingo-gr.y"
+  case 115: /* expr: expr tNEQ expr  */
+#line 457 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2259 "engines/director/lingo/lingo-gr.cpp"
+#line 2372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* expr: expr tGE expr  */
-#line 444 "engines/director/lingo/lingo-gr.y"
+  case 116: /* expr: expr tGE expr  */
+#line 458 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2265 "engines/director/lingo/lingo-gr.cpp"
+#line 2378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* expr: expr tLE expr  */
-#line 445 "engines/director/lingo/lingo-gr.y"
+  case 117: /* expr: expr tLE expr  */
+#line 459 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2271 "engines/director/lingo/lingo-gr.cpp"
+#line 2384 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* expr: expr tAND expr  */
-#line 446 "engines/director/lingo/lingo-gr.y"
+  case 118: /* expr: expr tAND expr  */
+#line 460 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2277 "engines/director/lingo/lingo-gr.cpp"
+#line 2390 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* expr: expr tOR expr  */
-#line 447 "engines/director/lingo/lingo-gr.y"
+  case 119: /* expr: expr tOR expr  */
+#line 461 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2283 "engines/director/lingo/lingo-gr.cpp"
+#line 2396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* expr: expr '&' expr  */
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 120: /* expr: expr '&' expr  */
+#line 462 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2289 "engines/director/lingo/lingo-gr.cpp"
+#line 2402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* expr: expr tCONCAT expr  */
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 121: /* expr: expr tCONCAT expr  */
+#line 463 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2295 "engines/director/lingo/lingo-gr.cpp"
+#line 2408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* expr: expr tCONTAINS expr  */
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 122: /* expr: expr tCONTAINS expr  */
+#line 464 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2301 "engines/director/lingo/lingo-gr.cpp"
+#line 2414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* expr: expr tSTARTS expr  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 123: /* expr: expr tSTARTS expr  */
+#line 465 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2307 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* exprlist: %empty  */
-#line 454 "engines/director/lingo/lingo-gr.y"
+  case 124: /* exprlist: %empty  */
+#line 468 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 2313 "engines/director/lingo/lingo-gr.cpp"
+#line 2426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* nonemptyexprlist: expr  */
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 126: /* nonemptyexprlist: expr  */
+#line 472 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2322 "engines/director/lingo/lingo-gr.cpp"
+#line 2435 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 127: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 476 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2330 "engines/director/lingo/lingo-gr.cpp"
+#line 2443 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 2334 "engines/director/lingo/lingo-gr.cpp"
+#line 2447 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -2529,7 +2642,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 467 "engines/director/lingo/lingo-gr.y"
+#line 481 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 73f4e4e801..4030e5758d 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -164,7 +164,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<idlist> idlist nonemptyidlist
 
 // STATEMENT
-%type<node> stmt stmtoneliner proc definevars ifstmt ifelsestmt
+%type<node> stmt stmtoneliner proc definevars ifstmt ifelsestmt loop
 %type<nodelist> stmtlist nonemptystmtlist
 %type<node> stmtlistline
 
@@ -354,6 +354,7 @@ nonemptyidlist: ID[item]					{
 stmt: stmtoneliner
 	| ifstmt
 	| ifelsestmt
+	| loop
 	;
 
 stmtoneliner: proc
@@ -362,6 +363,8 @@ stmtoneliner: proc
 
 proc: ID '(' exprlist[args] ')' '\n'	{ $$ = new CmdNode($ID, $args); }
 	| ID exprlist[args] '\n'			{ $$ = new CmdNode($ID, $args); }
+	| tNEXT tREPEAT						{ $$ = new NextRepeatNode(); }
+	| tEXIT tREPEAT						{ $$ = new ExitRepeatNode(); }
 	;
 
 definevars: tGLOBAL idlist '\n'			{ $$ = new GlobalNode($idlist); }
@@ -395,6 +398,14 @@ ifelsestmt: tIF expr tTHEN stmt[stmt1] tELSE stmt[stmt2] {
 		$$ = new IfElseStmtNode($expr, $stmtlist1, $stmtlist2); }
 	;
 
+loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n' {
+		$$ = new RepeatWhileNode($expr, $stmtlist); }
+	| tREPEAT tWITH ID tEQ expr[start] tTO expr[end] '\n' stmtlist tENDREPEAT '\n' {
+		$$ = new RepeatWithToNode($ID, $start, false, $end, $stmtlist); }
+	| tREPEAT tWITH ID tEQ expr[start] tDOWN tTO expr[end] '\n' stmtlist tENDREPEAT '\n' {
+		$$ = new RepeatWithToNode($ID, $start, true, $end, $stmtlist); }
+	;
+
 stmtlist: /* empty */				{ $$ = new NodeList; }
 	| nonemptystmtlist
 	;


Commit: 2b19132d971b7af247646a5ad57b423faedd343b
    https://github.com/scummvm/scummvm/commit/2b19132d971b7af247646a5ad57b423faedd343b
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add global, local, prop reference types

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h
    engines/director/types.h


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 2377334092..f228fe8c22 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -506,15 +506,19 @@ void LB::b_delete(int nargs) {
 
 	Datum field;
 	int start, end;
-	if (d.type == FIELDREF || d.type == VAR) {
+	if (d.type == CHUNKREF) {
+		if (d.u.cref->source.isVarRef()) {
+			field = d.u.cref->source;
+			start = d.u.cref->start;
+			end = d.u.cref->end;
+		} else {
+			warning("b_delete: bad chunk ref field type: %s", d.type2str());
+			return;
+		}
+	} else if (d.isRef()) {
 		field = d;
 		start = 0;
 		end = -1;
-	} else if (d.type == CHUNKREF) {
-		TYPECHECK2(d.u.cref->source, FIELDREF, VAR);
-		field = d.u.cref->source;
-		start = d.u.cref->start;
-		end = d.u.cref->end;
 	} else {
 		warning("b_delete: bad field type: %s", d.type2str());
 		return;
@@ -1511,8 +1515,8 @@ void LB::b_startTimer(int nargs) {
 ///////////////////
 void LB::b_factory(int nargs) {
 	Datum factoryName = g_lingo->pop();
-	factoryName.type = VAR;
-	Datum o = g_lingo->varFetch(factoryName, true);
+	factoryName.type = GLOBALREF;
+	Datum o = g_lingo->varFetch(factoryName);
 	if (o.type == OBJECT && (o.u.obj->getObjType() & (kFactoryObj | kXObj))
 			&& o.u.obj->getName().equalsIgnoreCase(*factoryName.u.s) && o.u.obj->getInheritanceLevel() == 1) {
 		g_lingo->push(o);
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 1c887706c5..e6a75491f7 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -312,10 +312,11 @@ Datum Lingo::findVarV4(int varType, const Datum &id) {
 	case 1: // global
 	case 2: // global
 	case 3: // property/instance
-		if (id.type == VAR) {
+		if (id.type == SYMBOL) {
 			res = id;
+			res.type = (varType == 3) ? PROPREF : GLOBALREF;
 		} else {
-			warning("BUILDBOT: findVarV4: expected ID for var type %d to be VAR, got %s", varType, id.type2str());
+			warning("BUILDBOT: findVarV4: expected ID for var type %d to be SYMBOL, got %s", varType, id.type2str());
 		}
 		break;
 	case 4: // arg
@@ -336,7 +337,7 @@ Datum Lingo::findVarV4(int varType, const Datum &id) {
 
 			if (varIndex < (int)varNames->size()) {
 				res = (*varNames)[varIndex];
-				res.type = VAR;
+				res.type = LOCALREF;
 			} else {
 				warning("BUILDBOT: findVarV4: invalid var ID %d for var type %d (too high)", id.asInt(), varType);
 			}
@@ -409,7 +410,7 @@ void LC::cb_objectcall() {
 	Datum nargs = g_lingo->pop();
 
 	Datum var = g_lingo->findVarV4(varType, varId);
-	if (var.type != VAR) {
+	if (var.isVarRef()) {
 		warning("cb_objectcall: first arg did not resolve to variable");
 		return;
 	}
@@ -423,7 +424,7 @@ void LC::cb_objectcall() {
 		Datum &firstArg = g_lingo->_stack[g_lingo->_stack.size() - nargs.u.i];
 		// The first arg could be either a method name or a variable name
 		if (firstArg.type == SYMBOL) {
-			firstArg.type = VAR;
+			firstArg.type = VARREF;
 		}
 	}
 
@@ -519,9 +520,9 @@ void LC::cb_globalpush() {
 	int nameId = g_lingo->readInt();
 	Common::String name = g_lingo->_currentArchive->getName(nameId);
 	Datum target(name);
-	target.type = VAR;
+	target.type = GLOBALREF;
 	debugC(3, kDebugLingoExec, "cb_globalpush: pushing %s to stack", name.c_str());
-	Datum result = g_lingo->varFetch(target, true);
+	Datum result = g_lingo->varFetch(target);
 	g_lingo->push(result);
 }
 
@@ -530,16 +531,10 @@ void LC::cb_globalassign() {
 	int nameId = g_lingo->readInt();
 	Common::String name = g_lingo->_currentArchive->getName(nameId);
 	Datum target(name);
-	target.type = VAR;
+	target.type = GLOBALREF;
 	debugC(3, kDebugLingoExec, "cb_globalassign: assigning to %s", name.c_str());
 	Datum source = g_lingo->pop();
-	// Lingo lets you declare globals inside a method.
-	// This doesn't define them in the script list, but you can still
-	// read and write to them???
-	if (!g_lingo->_globalvars.contains(name)) {
-		g_lingo->_globalvars[name] = Datum();
-	}
-	g_lingo->varAssign(target, source, true);
+	g_lingo->varAssign(target, source);
 }
 
 void LC::cb_objectfieldassign() {
@@ -561,7 +556,7 @@ void LC::cb_varrefpush() {
 	int nameId = g_lingo->readInt();
 	Common::String name = g_lingo->_currentArchive->getName(nameId);
 	Datum result(name);
-	result.type = VAR;
+	result.type = SYMBOL;
 	g_lingo->push(result);
 }
 
@@ -626,9 +621,9 @@ void LC::cb_varpush() {
 	int nameId = g_lingo->readInt();
 	Common::String name = g_lingo->_currentArchive->getName(nameId);
 	Datum target(name);
-	target.type = VAR;
+	target.type = LOCALREF;
 	debugC(3, kDebugLingoExec, "cb_varpush: pushing %s to stack", name.c_str());
-	Datum result = g_lingo->varFetch(target, false);
+	Datum result = g_lingo->varFetch(target);
 	g_lingo->push(result);
 }
 
@@ -637,11 +632,11 @@ void LC::cb_varassign() {
 	int nameId = g_lingo->readInt();
 	Common::String name = g_lingo->_currentArchive->getName(nameId);
 	Datum target(name);
-	target.type = VAR;
+	target.type = LOCALREF;
 	debugC(3, kDebugLingoExec, "cb_varassign: assigning to %s", name.c_str());
 	Datum source = g_lingo->pop();
 	// Local variables should be initialised by the script, no varCreate here
-	g_lingo->varAssign(target, source, false);
+	g_lingo->varAssign(target, source);
 }
 
 
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index db3b064c22..eddb105606 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -263,11 +263,8 @@ void Lingo::pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRet
 		for (int i = symNArgs - 1; i >= 0; i--) {
 			Common::String name = (*funcSym.argNames)[i];
 			if (!localvars->contains(name)) {
-				(*localvars)[name] = Datum();
-				Datum arg(name);
-				arg.type = VAR;
 				Datum value = g_lingo->pop();
-				g_lingo->varAssign(arg, value, false, localvars);
+				(*localvars)[name] = value;
 			} else {
 				warning("Argument %s already defined", name.c_str());
 				g_lingo->pop();
@@ -458,7 +455,7 @@ void LC::c_varpush() {
 	}
 
 	d = Datum(Common::String(name));
-	d.type = VAR;
+	d.type = VARREF;
 	g_lingo->push(d);
 }
 
@@ -493,7 +490,7 @@ void LC::c_eval() {
 	Datum d;
 	d = g_lingo->pop(false);
 
-	if (d.type != VAR) { // It could be cast ref
+	if (d.type.isVarRef()) { // It could be cast ref
 		g_lingo->push(d);
 		return;
 	}
@@ -556,7 +553,7 @@ void LC::c_themenuitementityassign() {
 
 void LC::c_objectproppush() {
 	Datum objName(g_lingo->readString());
-	objName.type = VAR;
+	objName.type = VARREF;
 	Datum obj = g_lingo->varFetch(objName);
 	Common::String propName = g_lingo->readString();
 
@@ -565,7 +562,7 @@ void LC::c_objectproppush() {
 
 void LC::c_objectpropassign() {
 	Datum objName(g_lingo->readString());
-	objName.type = VAR;
+	objName.type = VARREF;
 	Datum obj = g_lingo->varFetch(objName);
 	Common::String propName = g_lingo->readString();
 
@@ -1034,8 +1031,7 @@ void LC::c_charOf() {
 	Datum src = g_lingo->pop(false);
 	Datum index = g_lingo->pop();
 
-	if ((index.type != INT && index.type != FLOAT)
-			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && src.isRef())) {
 		g_lingo->lingoError("LC::c_charOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1050,7 +1046,7 @@ void LC::c_charToOf() {
 	Datum indexFrom = g_lingo->pop();
 
 	if ((indexTo.type != INT && indexTo.type != FLOAT) || (indexFrom.type != INT && indexFrom.type != FLOAT)
-			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+			|| (src.type != STRING && src.isRef())) {
 		warning("LC::c_charToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1063,8 +1059,7 @@ void LC::c_itemOf() {
 	Datum src = g_lingo->pop(false);
 	Datum index = g_lingo->pop();
 
-	if ((index.type != INT && index.type != FLOAT)
-			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && src.isRef())) {
 		warning("LC::c_itemOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1079,7 +1074,7 @@ void LC::c_itemToOf() {
 	Datum indexFrom = g_lingo->pop();
 
 	if ((indexTo.type != INT && indexTo.type != FLOAT) || (indexFrom.type != INT && indexFrom.type != FLOAT)
-			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+			|| (src.type != STRING && src.isRef())) {
 		warning("LC::c_itemToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1092,8 +1087,7 @@ void LC::c_lineOf() {
 	Datum src = g_lingo->pop(false);
 	Datum index = g_lingo->pop();
 
-	if ((index.type != INT && index.type != FLOAT)
-			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && src.isRef())) {
 		warning("LC::c_lineOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1108,7 +1102,7 @@ void LC::c_lineToOf() {
 	Datum indexFrom = g_lingo->pop();
 
 	if ((indexTo.type != INT && indexTo.type != FLOAT) || (indexFrom.type != INT && indexFrom.type != FLOAT)
-			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+			|| (src.type != STRING && src.isRef())) {
 		warning("LC::c_lineToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1121,8 +1115,7 @@ void LC::c_wordOf() {
 	Datum src = g_lingo->pop(false);
 	Datum index = g_lingo->pop();
 
-	if ((index.type != INT && index.type != FLOAT)
-			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && src.isRef())) {
 		warning("LC::c_wordOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1137,7 +1130,7 @@ void LC::c_wordToOf() {
 	Datum indexFrom = g_lingo->pop();
 
 	if ((indexTo.type != INT && indexTo.type != FLOAT) || (indexFrom.type != INT && indexFrom.type != FLOAT)
-			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+			|| (src.type != STRING && src.isRef())) {
 		warning("LC::c_wordToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1460,10 +1453,10 @@ void LC::call(const Common::String &name, int nargs, bool allowRetVal) {
 		Datum firstArg = g_lingo->_stack[g_lingo->_stack.size() - nargs];
 
 		// Factory/XObject method call
-		if (firstArg.type == VAR) { // first arg could be method name
+		if (firstArg.type == VARREF) { // first arg could be method name
 			Datum objName(name);
-			objName.type = VAR;
-			Datum obj = g_lingo->varFetch(objName, false, nullptr, true);
+			objName.type = VARREF;
+			Datum obj = g_lingo->varFetch(objName, nullptr, true);
 			if (obj.type == OBJECT && (obj.u.obj->getObjType() & (kFactoryObj | kXObj))) {
 				debugC(3, kDebugLingoExec, "Method called on object: <%s>", obj.asString(true).c_str());
 				AbstractObject *target = obj.u.obj;
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 3a178b3cdd..af42868983 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -252,17 +252,11 @@ int LingoCompiler::codeFunc(Common::String *s, int numpar) {
 	return ret;
 }
 
-VarType LingoCompiler::globalCheck() {
-	// If in a definition, assume variables are local unless
-	// they were declared global with `global varname`
-	if (_indef) {
-		return kVarLocal;
-	}
-	return kVarGlobal;
-}
-
 void LingoCompiler::registerMethodVar(const Common::String &name, VarType type) {
 	if (!_methodVars->contains(name)) {
+		if (_indef && type == kVarGeneric) {
+			type = kVarLocal;
+		}
 		(*_methodVars)[name] = type;
 		if (type == kVarProperty || type == kVarInstance) {
 			_assemblyContext->_properties[name] = Datum();
@@ -494,7 +488,7 @@ void LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
 	LoopNode *prevLoop = _currentLoop;
 	_currentLoop = node;
 
-	registerMethodVar(*node->var, globalCheck());
+	registerMethodVar(*node->var);
 
 	compile(node->start);
 	code1(LC::c_varpush);
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 5f70560120..b61363fff2 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -48,8 +48,7 @@ public:
 	int codeInt(int val);
 	int codeString(const char *s);
 	void registerFactory(Common::String &s);
-	VarType globalCheck();
-	void registerMethodVar(const Common::String &name, VarType type);
+	void registerMethodVar(const Common::String &name, VarType type = kVarGeneric);
 	void updateLoopJumps(uint nextTargetPos, uint exitTargetPos);
 
 	LingoArchive *_assemblyArchive;
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 760e5dd767..d47f197677 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -636,7 +636,10 @@ void Datum::reset() {
 #ifndef __COVERITY__
 	if (*refCount <= 0) {
 		switch (type) {
-		case VAR:
+		case VARREF:
+		case GLOBALREF:
+		case LOCALREF:
+		case PROPREF:
 		case STRING:
 		case SYMBOL:
 			delete u.s;
@@ -671,7 +674,7 @@ void Datum::reset() {
 }
 
 Datum Datum::eval() const {
-	if (type == VAR || type == FIELDREF || type == CHUNKREF) {
+	if (isRef()) {
 		return g_lingo->varFetch(*this);
 	}
 
@@ -786,9 +789,18 @@ Common::String Datum::asString(bool printonly) const {
 	case VOID:
 		s = "#void";
 		break;
-	case VAR:
+	case VARREF:
 		s = Common::String::format("var: #%s", u.s->c_str());
 		break;
+	case GLOBALREF:
+		s = Common::String::format("global: #%s", u.s->c_str());
+		break;
+	case LOCALREF:
+		s = Common::String::format("local: #%s", u.s->c_str());
+		break;
+	case PROPREF:
+		s = Common::String::format("property: #%s", u.s->c_str());
+		break;
 	case CASTREF:
 		s = Common::String::format("cast %d", u.i);
 		break;
@@ -899,6 +911,18 @@ int Datum::asCastId() const {
 	return castId;
 }
 
+bool Datum::isRef() const {
+	return (isVarRef() || isCastRef() || type == CHUNKREF);
+}
+
+bool Datum::isVarRef() const {
+	return (type == VARREF || type == GLOBALREF || type == LOCALREF || type == PROPREF);
+}
+
+bool Datum::isCastRef() const {
+	return (type == CASTREF || type == FIELDREF);
+}
+
 const char *Datum::type2str(bool isk) const {
 	static char res[20];
 
@@ -923,8 +947,14 @@ const char *Datum::type2str(bool isk) const {
 		return "FIELDREF";
 	case CHUNKREF:
 		return "CHUNKREF";
-	case VAR:
-		return isk ? "#var" : "VAR";
+	case VARREF:
+		return "VARREF";
+	case GLOBALREF:
+		return "GLOBALREF";
+	case LOCALREF:
+		return "LOCALREF";
+	case PROPREF:
+		return "PROPREF";
 	default:
 		snprintf(res, 20, "-- (%d) --", type);
 		return res;
@@ -1108,120 +1138,180 @@ int Lingo::getInt(uint pc) {
 	return (int)READ_UINT32(&((*_currentScript)[pc]));
 }
 
-void Lingo::varAssign(const Datum &var, Datum &value, bool global, DatumHash *localvars) {
+void Lingo::varAssign(const Datum &var, Datum &value, DatumHash *localvars) {
 	if (localvars == nullptr) {
 		localvars = _localvars;
 	}
 
-	if (var.type == VAR) {
-		Common::String name = *var.u.s;
-
-		if (localvars && localvars->contains(name)) {
-			(*localvars)[name] = value;
-			if (global)
-				warning("varAssign: variable %s is local, not global", name.c_str());
-			return;
-		}
-		if (_currentMe.type == OBJECT && _currentMe.u.obj->hasProp(name)) {
-			_currentMe.u.obj->setProp(name, value);
-			if (global)
-				warning("varAssign: variable %s is instance or property, not global", name.c_str());
-			return;
-		}
-		if (_globalvars.contains(name)) {
+	switch (var.type) {
+	case VARREF:
+		{
+			Common::String name = *var.u.s;
+			if (localvars && localvars->contains(name)) {
+				(*localvars)[name] = value;
+				return;
+			}
+			if (_currentMe.type == OBJECT && _currentMe.u.obj->hasProp(name)) {
+				_currentMe.u.obj->setProp(name, value);
+				return;
+			}
 			_globalvars[name] = value;
-			if (!global)
-				warning("varAssign: variable %s is global, not local", name.c_str());
-			return;
 		}
-
-		warning("varAssign: variable %s not defined", name.c_str());
-	} else if (var.type == FIELDREF || var.type == CASTREF) {
-		Movie *movie = g_director->getCurrentMovie();
-		if (!movie) {
-			warning("varAssign: Assigning to a reference to an empty movie");
-			return;
+		break;
+	case GLOBALREF:
+		// Global variables declared by `global varname` within a handler are not listed anywhere
+		// in Lscr, unlike globals declared outside of a handler and every other variable type.
+		// So while we require other variable types to be initialized before assigning to them,
+		// let's not enforce that for globals.
+		_globalvars[*var.u.s] = value;
+		break;
+	case LOCALREF:
+		{
+			Common::String name = *var.u.s;
+			if (localvars && localvars->contains(name)) {
+				(*localvars)[name] = value;
+			} else {
+				warning("varAssign: local variable %s not defined", name.c_str());
+			}
 		}
-		int castId = var.u.i;
-		CastMember *member = movie->getCastMember(castId);
-		if (!member) {
-			warning("varAssign: Unknown cast id %d", castId);
-			return;
+		break;
+	case PROPREF:
+		{
+			Common::String name = *var.u.s;
+			if (_currentMe.type == OBJECT && _currentMe.u.obj->hasProp(name)) {
+				_currentMe.u.obj->setProp(name, value);
+			} else {
+				warning("varAssign: property %s not defined", name.c_str());
+			}
 		}
-		switch (member->_type) {
-		case kCastText:
-			((TextCastMember *)member)->setText(value.asString().c_str());
-			break;
-		default:
-			warning("varAssign: Unhandled cast type %d", member->_type);
-			break;
+		break;
+	case FIELDREF:
+	case CASTREF:
+		{
+			Movie *movie = g_director->getCurrentMovie();
+			if (!movie) {
+				warning("varAssign: Assigning to a reference to an empty movie");
+				return;
+			}
+			int castId = var.u.i;
+			CastMember *member = movie->getCastMember(castId);
+			if (!member) {
+				warning("varAssign: Unknown cast id %d", castId);
+				return;
+			}
+			switch (member->_type) {
+			case kCastText:
+				((TextCastMember *)member)->setText(value.asString().c_str());
+				break;
+			default:
+				warning("varAssign: Unhandled cast type %d", member->_type);
+				break;
+			}
 		}
-	} else {
+		break;
+	default:
 		warning("varAssign: assignment to non-variable");
+		break;
 	}
 }
 
-Datum Lingo::varFetch(const Datum &var, bool global, DatumHash *localvars, bool silent) {
+Datum Lingo::varFetch(const Datum &var, DatumHash *localvars, bool silent) {
 	if (localvars == nullptr) {
 		localvars = _localvars;
 	}
 
 	Datum result;
 
-	if (var.type == VAR) {
-		Datum d;
-		Common::String name = *var.u.s;
+	switch (var.type) {
+	case VARREF:
+		{
+			Datum d;
+			Common::String name = *var.u.s;
+
+			if (localvars && localvars->contains(name)) {
+				return (*localvars)[name];
+			}
+			if (_currentMe.type == OBJECT && _currentMe.u.obj->hasProp(name)) {
+				return _currentMe.u.obj->getProp(name);
+			}
+			if (_globalvars.contains(name)) {
+				return _globalvars[name];
+			}
 
-		if (localvars && localvars->contains(name)) {
-			if (global)
-				warning("varFetch: variable %s is local, not global", name.c_str());
-			return (*localvars)[name];
-		}
-		if (_currentMe.type == OBJECT && _currentMe.u.obj->hasProp(name)) {
-			if (global)
-				warning("varFetch: variable %s is instance or property, not global", name.c_str());
-			return _currentMe.u.obj->getProp(name);
+			if (!silent)
+				warning("varFetch: variable %s not found", name.c_str());
+			return result;
 		}
-		if (_globalvars.contains(name)) {
-			if (!global)
-				warning("varFetch: variable %s is global, not local", name.c_str());
-			return _globalvars[name];
+		break;
+	case GLOBALREF:
+		{
+			Common::String name = *var.u.s;
+			if (_globalvars.contains(name)) {
+				return _globalvars[name];
+			}
+			warning("varAssign: global variable %s not defined", name.c_str());
+			return result;
 		}
-
-		if (!silent)
-			warning("varFetch: variable %s not found", name.c_str());
-		return result;
-	} else if (var.type == FIELDREF || var.type == CASTREF) {
-		Movie *movie = g_director->getCurrentMovie();
-		if (!movie) {
-			warning("varFetch: Assigning to a reference to an empty movie");
+		break;
+	case LOCALREF:
+		{
+			Common::String name = *var.u.s;
+			if (localvars && localvars->contains(name)) {
+				return (*localvars)[name];
+			}
+			warning("varAssign: local variable %s not defined", name.c_str());
 			return result;
 		}
-		int castId = var.u.i;
-		CastMember *member = movie->getCastMember(castId);
-		if (!member) {
-			warning("varFetch: Unknown cast id %d", castId);
+		break;
+	case PROPREF:
+		{
+			Common::String name = *var.u.s;
+			if (_currentMe.type == OBJECT && _currentMe.u.obj->hasProp(name)) {
+				return _currentMe.u.obj->getProp(name);
+			}
+			warning("varAssign: property %s not defined", name.c_str());
 			return result;
 		}
-		switch (member->_type) {
-		case kCastText:
-			result.type = STRING;
-			result.u.s = new Common::String(((TextCastMember *)member)->getText());
-			break;
-		default:
-			warning("varFetch: Unhandled cast type %d", member->_type);
-			break;
+		break;
+	case FIELDREF:
+	case CASTREF:
+		{
+			Movie *movie = g_director->getCurrentMovie();
+			if (!movie) {
+				warning("varFetch: Assigning to a reference to an empty movie");
+				return result;
+			}
+			int castId = var.u.i;
+			CastMember *member = movie->getCastMember(castId);
+			if (!member) {
+				warning("varFetch: Unknown cast id %d", castId);
+				return result;
+			}
+			switch (member->_type) {
+			case kCastText:
+				result.type = STRING;
+				result.u.s = new Common::String(((TextCastMember *)member)->getText());
+				break;
+			default:
+				warning("varFetch: Unhandled cast type %d", member->_type);
+				break;
+			}
 		}
-	} else if (var.type == CHUNKREF) {
-		Common::String src = var.u.cref->source.eval().asString();
-		result.type = STRING;
-		if (var.u.cref->start == -1) {
-			result.u.s = new Common::String("");
-		} else {
-			result.u.s = new Common::String(src.substr(var.u.cref->start, var.u.cref->end - var.u.cref->start));
+		break;
+	case CHUNKREF:
+		{
+			Common::String src = var.u.cref->source.eval().asString();
+			result.type = STRING;
+			if (var.u.cref->start == -1) {
+				result.u.s = new Common::String("");
+			} else {
+				result.u.s = new Common::String(src.substr(var.u.cref->start, var.u.cref->end - var.u.cref->start));
+			}
 		}
-	} else {
+		break;
+	default:
 		warning("varFetch: fetch from non-variable");
+		break;
 	}
 
 	return result;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 4e74b5f9e3..13b71e2fe8 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -107,7 +107,7 @@ struct Datum {	/* interpreter stack type */
 	union {
 		int	i;				/* INT, ARGC, ARGCNORET */
 		double f;			/* FLOAT */
-		Common::String *s;	/* STRING, VAR, OBJECT */
+		Common::String *s;	/* STRING, VARREF, OBJECT */
 		DatumArray *farr;	/* ARRAY, POINT, RECT */
 		PropertyArray *parr; /* PARRAY */
 		AbstractObject *obj; /* OBJECT */
@@ -135,6 +135,10 @@ struct Datum {	/* interpreter stack type */
 	Common::String asString(bool printonly = false) const;
 	int asCastId() const;
 
+	bool isRef() const;
+	bool isVarRef() const;
+	bool isCastRef() const;
+
 	const char *type2str(bool isk = false) const;
 
 	int equalTo(Datum &d, bool ignoreCase = false) const;
@@ -273,8 +277,8 @@ public:
 	void pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRetVal);
 	void popContext();
 	void cleanLocalVars();
-	void varAssign(const Datum &var, Datum &value, bool global = false, DatumHash *localvars = nullptr);
-	Datum varFetch(const Datum &var, bool global = false, DatumHash *localvars = nullptr, bool silent = false);
+	void varAssign(const Datum &var, Datum &value, DatumHash *localvars = nullptr);
+	Datum varFetch(const Datum &var, DatumHash *localvars = nullptr, bool silent = false);
 	Datum findVarV4(int varType, const Datum &id);
 
 	int getAlignedType(const Datum &d1, const Datum &d2, bool numsOnly);
diff --git a/engines/director/types.h b/engines/director/types.h
index 3b3e544c53..fa64f4c11b 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -346,12 +346,16 @@ enum DatumType {
 	POINT,
 	STRING,
 	SYMBOL,
-	VAR,
+	VARREF,
+	GLOBALREF,
+	LOCALREF,
+	PROPREF,
 	VOID,
 	RECT
 };
 
 enum VarType {
+	kVarGeneric,
 	kVarArgument,
 	kVarProperty,
 	kVarInstance,


Commit: 6a1829a7d5fec6c3b7d40010ce774cf241b7c122
    https://github.com/scummvm/scummvm/commit/6a1829a7d5fec6c3b7d40010ce774cf241b7c122
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Alphabetize putafter & putbefore

Changed paths:
    engines/director/lingo/lingo-code.cpp


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index eddb105606..933600b1c9 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -68,14 +68,12 @@ static struct FuncDescr {
 	{ LC::c_asserterror,	"c_asserterror",	"" },
 	{ LC::c_asserterrordone,"c_asserterrordone","" },
 	{ LC::c_add,			"c_add",			"" },
-	{ LC::c_putafter,		"c_putafter",		"" },	// D3
 	{ LC::c_ampersand,		"c_ampersand",		"" },
 	{ LC::c_and,			"c_and",			"" },
 	{ LC::c_argcnoretpush,	"c_argcnoretpush",	"i" },
 	{ LC::c_argcpush,		"c_argcpush",		"i" },
 	{ LC::c_arraypush,		"c_arraypush",		"i" },
 	{ LC::c_assign,			"c_assign",			""  },
-	{ LC::c_putbefore,		"c_putbefore",		"" },	// D3
 	{ LC::c_callcmd,		"c_callcmd",		"si" },
 	{ LC::c_callfunc,		"c_callfunc",		"si" },
 	{ LC::c_charOf,			"c_charOf",			"" },	// D3
@@ -85,7 +83,6 @@ static struct FuncDescr {
 	{ LC::c_contains,		"c_contains",		"" },
 	{ LC::c_div,			"c_div",			"" },
 	{ LC::c_eq,				"c_eq",				"" },
-	{ LC::c_eval,			"c_eval",			"s" },
 	{ LC::c_floatpush,		"c_floatpush",		"f" },
 	{ LC::c_ge,				"c_ge",				"" },
 	{ LC::c_goto,			"c_goto",			"" },
@@ -117,6 +114,8 @@ static struct FuncDescr {
 	{ LC::c_play,			"c_play",			"" },
 	{ LC::c_procret,		"c_procret",		"" },
 	{ LC::c_proparraypush,	"c_proparraypush",	"i" },
+	{ LC::c_putafter,		"c_putafter",		"" },	// D3
+	{ LC::c_putbefore,		"c_putbefore",		"" },	// D3
 	{ LC::c_starts,			"c_starts",			"" },
 	{ LC::c_stringpush,		"c_stringpush",		"s" },
 	{ LC::c_sub,			"c_sub",			"" },


Commit: ad934d5960d759a1c903b1a96e089cf31991fe01
    https://github.com/scummvm/scummvm/commit/ad934d5960d759a1c903b1a96e089cf31991fe01
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add missing newlines

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index ee6f7077dd..0bf0f17553 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -593,7 +593,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  89
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1362
+#define YYLAST   1360
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  90
@@ -602,7 +602,7 @@ union yyalloc
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  127
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  218
+#define YYNSTATES  220
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -730,7 +730,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-158)
+#define YYPACT_NINF (-161)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -744,28 +744,28 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     346,  -158,  -158,  -158,  -158,  -158,  -158,  -158,   -35,  1086,
-     206,  -158,  -158,  1086,  -158,   -32,  -158,  -158,  -158,   -18,
-    -158,  -158,  -158,  -158,  -158,  1086,  -158,  -158,  1086,  -158,
-    -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,
-    -158,  -158,  -158,  -158,  1086,  1086,  -158,  -158,    12,   346,
-    -158,  -158,  -158,  -158,   276,  -158,  -158,  -158,  -158,  -158,
-    -158,  -158,  -158,  -158,  -158,  -158,  -158,   -76,   -68,  -158,
-    -158,  -158,  -158,   206,   206,   206,   206,   -67,  -158,  -158,
-    1130,  1086,  -158,  1086,   206,   -44,   -40,   -38,  1086,  -158,
-    -158,   206,  1265,   -34,   -37,  -158,  1086,  -158,  -158,  -158,
-    1165,   206,   844,   206,   206,   206,   206,   206,   206,   206,
-     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
-     -29,     6,  1178,   -72,  -158,  -158,   -25,  1165,   -24,  -158,
-     206,  -158,  -158,   -21,   905,    36,    10,    10,    10,    10,
-    1278,  1278,  -158,   -49,    10,    10,    10,    10,   -49,   -54,
-     -54,  -158,  -158,   905,   206,   905,  1086,  -158,  -158,   -23,
-    -158,  -158,   905,   -22,  1265,  -158,  -158,  -158,   407,  -158,
-    -158,   966,   905,  1115,   469,  1086,   -72,   537,  -158,  1027,
-     -17,  -158,   905,  -158,    29,   206,   -13,   -12,  -158,  1086,
-     905,  -158,  -158,   598,   206,  1215,  -158,   905,   -46,  -158,
-     660,   -11,  1228,   905,   905,  -158,  1086,   -10,  -158,   905,
-     722,  -158,  -158,   783,    -9,    -7,  -158,  -158
+     344,  -161,  -161,  -161,  -161,  -161,  -161,  -161,   -33,  1084,
+     204,  -161,  -161,  1084,  -161,   -31,  -161,  -161,  -161,   -21,
+    -161,  -161,  -161,  -161,  -161,  1084,  -161,  -161,  1084,  -161,
+    -161,  -161,  -161,  -161,  -161,  -161,  -161,  -161,  -161,  -161,
+    -161,  -161,  -161,  -161,  1084,  1084,  -161,  -161,    15,   344,
+    -161,  -161,  -161,  -161,   274,  -161,  -161,  -161,  -161,  -161,
+    -161,  -161,   -68,  -161,  -161,  -161,  -161,   -57,   -54,  -161,
+    -161,  -161,  -161,   204,   204,   204,   204,   -52,  -161,  -161,
+    1128,  1084,   -49,  1084,   204,   -47,   -45,   -43,  1084,  -161,
+    -161,   204,  1263,   -38,   -37,  -161,  -161,  1084,  -161,  -161,
+    -161,  1163,   204,   842,   204,   204,   204,   204,   204,   204,
+     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+     204,   -26,  -161,   -18,  1176,   -66,  -161,  -161,   -16,  1163,
+     -22,  -161,   204,  -161,  -161,   -15,   903,    44,     9,     9,
+       9,     9,  1276,  1276,  -161,   -19,     9,     9,     9,     9,
+     -19,   -53,   -53,  -161,  -161,   903,   204,   903,  1084,  -161,
+    -161,   -14,  -161,  -161,   903,   -13,  1263,  -161,  -161,  -161,
+     405,  -161,  -161,   964,   903,  1113,   467,  1084,   -66,   535,
+    -161,  1025,   -11,  -161,   903,  -161,    29,   204,   -10,    -9,
+    -161,  1084,   903,  -161,  -161,   596,   204,  1213,  -161,   903,
+     -60,  -161,   658,    -8,  1226,   903,   903,  -161,  1084,    -7,
+    -161,   903,   720,  -161,  -161,   781,    -6,    -4,  -161,  -161
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -779,38 +779,38 @@ static const yytype_int8 yydefact[] =
       44,    41,    38,    25,    27,    52,    29,    36,    37,    62,
       56,    34,    61,    53,    63,     0,    55,     5,     0,     2,
        3,     6,     7,     8,   124,     9,    67,    71,    72,    68,
-      69,    70,    76,    31,    40,    49,    65,     0,    64,    95,
+      69,    70,     0,    31,    40,    49,    65,     0,    64,    95,
       96,    98,    97,    41,     0,     0,     0,   103,   104,   106,
-       0,    63,    75,     0,     0,     0,     0,     0,    63,     1,
-       4,   124,   126,     0,   125,    77,     0,   101,    99,   100,
-       0,   124,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    63,     0,     0,     0,     0,     0,     0,    63,     1,
+       4,   124,   126,     0,   125,    76,    77,     0,   101,    99,
+     100,     0,   124,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    13,    79,    78,     0,   126,     0,    74,
-       0,    66,   105,     0,    89,    80,   116,   117,   114,   115,
-     118,   119,   111,   121,   122,   123,   113,   112,   120,   107,
-     108,   109,   110,    89,     0,    89,     0,    17,    18,    11,
-      14,    15,    89,     0,   127,   102,    93,    94,     0,    90,
-      91,     0,    10,     0,     0,    63,     0,    20,    73,     0,
-       0,    92,    89,    82,     0,     0,     0,     0,    16,    21,
-      89,    84,    81,     0,     0,     0,    86,    89,     0,    22,
-       0,     0,     0,    89,    12,    19,     0,     0,    83,    89,
-       0,    23,    85,     0,     0,     0,    87,    88
+       0,     0,    75,     0,     0,    13,    79,    78,     0,   126,
+       0,    74,     0,    66,   105,     0,    89,    80,   116,   117,
+     114,   115,   118,   119,   111,   121,   122,   123,   113,   112,
+     120,   107,   108,   109,   110,    89,     0,    89,     0,    17,
+      18,    11,    14,    15,    89,     0,   127,   102,    93,    94,
+       0,    90,    91,     0,    10,     0,     0,    63,     0,    20,
+      73,     0,     0,    92,    89,    82,     0,     0,     0,     0,
+      16,    21,    89,    84,    81,     0,     0,     0,    86,    89,
+       0,    22,     0,     0,     0,    89,    12,    19,     0,     0,
+      83,    89,     0,    23,    85,     0,     0,     0,    87,    88
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -158,  -158,  -158,    31,  -158,  -158,  -158,  -158,  -158,   -94,
-    -158,  -158,     0,   -26,  -158,     5,  -158,  -158,  -158,  -158,
-    -158,  -158,  -131,  -158,  -157,  -158,   -36,    13,   -85,  -158
+    -161,  -161,  -161,    35,  -161,  -161,  -161,  -161,  -161,   -93,
+    -161,  -161,     0,   -27,  -161,     2,  -161,  -161,  -161,  -161,
+    -161,  -161,  -152,  -161,  -160,  -161,   -17,    11,   -80,  -161
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,    48,    49,    50,    51,    52,   158,   159,   160,   161,
-      53,   198,    77,    67,    68,   167,    56,    57,    58,    59,
-      60,    61,   168,   169,   170,    78,    79,    92,    93,    94
+       0,    48,    49,    50,    51,    52,   160,   161,   162,   163,
+      53,   200,    77,    67,    68,   169,    56,    57,    58,    59,
+      60,    61,   170,   171,   172,    78,    79,    92,    93,    94
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -818,210 +818,216 @@ static const yytype_uint8 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      54,   156,    86,   109,    62,    55,   128,    82,   109,    66,
-      95,   181,    89,    81,   157,   181,   133,   181,    87,    96,
-     181,   101,   172,    80,   174,    85,    83,    84,    66,   118,
-     119,   177,   116,   117,   118,   119,   181,    97,    98,    99,
-     205,   206,   123,   181,    66,    88,   124,   181,   125,    54,
-     130,   193,   129,   181,    55,   120,   181,   153,   154,   200,
-     171,   162,   126,   176,   178,   163,   204,   109,   165,   192,
-     110,   194,   210,   196,   197,   208,   212,   216,   213,   217,
-      90,    66,   188,   121,     0,     0,     0,     0,    66,   100,
-     115,   116,   117,   118,   119,     0,   131,   122,     0,     0,
-       0,     0,    54,     0,   127,     0,     0,   135,     0,     0,
-       0,     0,     0,     0,     0,     0,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,     0,    54,     0,     0,     0,     0,     0,
-       0,     0,     0,   164,     0,     0,     0,     0,     0,   187,
-       0,     0,     0,    54,     0,    54,   175,     0,     0,     0,
-       0,     0,    54,     0,     0,     0,     0,   173,    54,     0,
-       0,    54,    54,     0,    54,    66,   183,    54,     0,    54,
-       0,     0,    54,     0,   191,     0,     0,     0,     0,   199,
-      54,     0,     0,    54,     0,     0,     0,    54,   195,     0,
-      54,     0,     0,    54,    54,     0,   211,   202,     0,    54,
-      54,    69,     0,    54,     0,     0,    70,     0,     0,     1,
-      71,    72,     0,     2,     0,     3,     4,     5,     6,     7,
-       0,     0,    63,     0,     0,     0,     0,    11,    12,     0,
-      14,    64,    16,    17,    18,    65,    20,     0,    21,    22,
-      23,    24,     0,    26,    27,     0,     0,     0,     0,     0,
-      29,    30,    73,    32,    33,    34,     0,     0,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
-       0,    69,     0,    46,     0,     0,    70,    74,    75,     1,
-      71,    72,     0,     2,    76,     3,     4,     5,     6,     7,
-       0,     0,    63,     0,     0,     0,     0,    11,    12,     0,
-      14,    64,    16,    17,    18,    65,    20,     0,    21,    22,
-      23,    24,     0,    26,    27,     0,     0,     0,     0,     0,
-      29,    30,    73,    32,    33,    34,     0,     0,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
-       0,     0,     0,    46,     0,     0,     0,    74,    75,     1,
-       0,     0,     0,     2,    91,     3,     4,     5,     6,     7,
-       0,     0,     8,     9,     0,     0,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,     0,     0,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
-       1,     0,     0,    46,     2,     0,     3,     4,     5,     6,
-       7,   179,    47,     8,     9,     0,     0,    10,    11,    12,
-       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
-      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,   180,     1,     0,    46,     0,     2,     0,     3,     4,
-       5,     6,     7,   166,     0,     8,     9,     0,     0,    10,
-      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
-       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,     0,   186,     0,    46,     0,     0,     0,
-       1,     0,     0,   189,     2,   166,     3,     4,     5,     6,
-       7,     0,     0,     8,     9,     0,     0,    10,    11,    12,
+      54,    86,    55,   174,   110,   176,    62,   158,    82,    66,
+     183,   130,   179,    81,   183,    89,   183,    87,    95,   183,
+     159,    80,   135,    83,    84,    85,   207,   208,    66,    96,
+     119,   120,   195,    97,   156,   183,   102,   122,   110,   125,
+     202,   126,   183,   127,    66,    88,   183,   206,   131,    54,
+     132,    55,   183,   212,   121,   183,    98,    99,   100,   215,
+     155,   128,   117,   118,   119,   120,   110,   165,   173,   111,
+     164,   196,   178,   180,   167,   194,   198,   199,   210,   214,
+     218,    66,   219,   123,    90,   190,     0,   101,    66,   116,
+     117,   118,   119,   120,     0,   124,     0,   133,     0,     0,
+       0,     0,   129,    54,     0,   137,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,     0,     0,     0,     0,    54,     0,     0,     0,
+       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
+     189,     0,     0,     0,     0,    54,     0,    54,   177,     0,
+       0,     0,     0,     0,    54,     0,     0,   175,     0,     0,
+      54,     0,     0,    54,    54,   185,    54,    66,     0,    54,
+       0,    54,     0,   193,    54,     0,     0,     0,     0,     0,
+       0,   201,    54,     0,     0,    54,     0,     0,   197,    54,
+       0,     0,    54,     0,     0,    54,    54,   204,   213,    69,
+       0,    54,    54,     0,    70,    54,     0,     1,    71,    72,
+       0,     2,     0,     3,     4,     5,     6,     7,     0,     0,
+      63,     0,     0,     0,     0,    11,    12,     0,    14,    64,
+      16,    17,    18,    65,    20,     0,    21,    22,    23,    24,
+       0,    26,    27,     0,     0,     0,     0,     0,    29,    30,
+      73,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,     0,     0,     0,     0,    69,
+       0,    46,     0,     0,    70,    74,    75,     1,    71,    72,
+       0,     2,    76,     3,     4,     5,     6,     7,     0,     0,
+      63,     0,     0,     0,     0,    11,    12,     0,    14,    64,
+      16,    17,    18,    65,    20,     0,    21,    22,    23,    24,
+       0,    26,    27,     0,     0,     0,     0,     0,    29,    30,
+      73,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,     0,     0,     0,     0,     0,
+       0,    46,     0,     0,     0,    74,    75,     1,     0,     0,
+       0,     2,    91,     3,     4,     5,     6,     7,     0,     0,
+       8,     9,     0,     0,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,     0,     1,     0,
+       0,    46,     2,     0,     3,     4,     5,     6,     7,   181,
+      47,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
+      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,   182,
+       1,     0,    46,     0,     2,     0,     3,     4,     5,     6,
+       7,   168,     0,     8,     9,     0,     0,    10,    11,    12,
        0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
       22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
        0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,     1,     0,     0,    46,     2,     0,     3,     4,     5,
-       6,     7,     0,   166,     8,     9,     0,     0,    10,    11,
+       0,     0,   188,     0,    46,     0,     0,     0,     1,     0,
+       0,   191,     2,   168,     3,     4,     5,     6,     7,     0,
+       0,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
+      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,     1,
+       0,     0,    46,     2,     0,     3,     4,     5,     6,     7,
+       0,   168,     8,     9,     0,     0,    10,    11,    12,     0,
+      14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
+      23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
+     203,     1,     0,    46,     0,     2,     0,     3,     4,     5,
+       6,     7,   168,     0,     8,     9,     0,     0,    10,    11,
       12,     0,    14,    15,    16,    17,    18,    19,    20,     0,
       21,    22,    23,    24,     0,    26,    27,    28,     0,     0,
        0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-       0,     0,   201,     1,     0,    46,     0,     2,     0,     3,
-       4,     5,     6,     7,   166,     0,     8,     9,     0,     0,
+       0,     0,   209,     1,     0,    46,     0,     2,     0,     3,
+       4,     5,     6,     7,   168,     0,     8,     9,     0,     0,
       10,    11,    12,     0,    14,    15,    16,    17,    18,    19,
       20,     0,    21,    22,    23,    24,     0,    26,    27,    28,
        0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
        0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,   207,     1,     0,    46,     0,     2,
-       0,     3,     4,     5,     6,     7,   166,     0,     8,     9,
+      43,    44,     0,     0,     1,   216,     0,    46,     2,     0,
+       3,     4,     5,     6,     7,     0,   168,     8,     9,     0,
+       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
+      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
+      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,     1,   217,     0,    46,     2,
+       0,     3,     4,     5,     6,     7,     0,   168,     8,     9,
        0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
       18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
       27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
       33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,     1,   214,     0,    46,
-       2,     0,     3,     4,     5,     6,     7,     0,   166,     8,
+      41,    42,    43,    44,     0,     0,     1,     0,     0,    46,
+       2,     0,     3,     4,     5,     6,     7,     0,   136,     8,
        9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
       17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
       26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
       32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,     0,     0,     1,   215,     0,
-      46,     2,     0,     3,     4,     5,     6,     7,     0,   166,
+      40,    41,    42,    43,    44,     0,     0,     1,     0,     0,
+      46,     2,     0,     3,     4,     5,     6,     7,     0,   168,
        8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
       16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
        0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
       31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
       39,    40,    41,    42,    43,    44,     0,     0,     1,     0,
        0,    46,     2,     0,     3,     4,     5,     6,     7,     0,
-     134,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+     184,     8,     9,     0,     0,    10,    11,    12,     0,    14,
       15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
       24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
       30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,     1,
-       0,     0,    46,     2,     0,     3,     4,     5,     6,     7,
-       0,   166,     8,     9,     0,     0,    10,    11,    12,     0,
-      14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
-      23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-       1,     0,     0,    46,     2,     0,     3,     4,     5,     6,
-       7,     0,   182,     8,     9,     0,     0,    10,    11,    12,
-       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
-      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,     1,
-       0,     0,     0,     2,    46,     3,     4,     5,     6,     7,
-       0,     0,    63,   190,     0,     0,     0,    11,    12,     0,
-      14,    64,    16,    17,    18,    65,    20,     0,    21,    22,
-      23,    24,     0,    26,    27,     0,     0,     0,   184,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,   185,     0,     0,
-       0,     0,     0,    46,     0,   103,   104,   105,   106,   107,
-     108,   102,   109,     0,     0,   110,   111,   112,     0,     0,
-     103,   104,   105,   106,   107,   108,     0,   109,     0,     0,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-       0,     0,     0,     0,     0,     0,     0,     0,   113,   114,
-     115,   116,   117,   118,   119,   103,   104,   105,   106,   107,
-     108,     0,   109,     0,     0,   110,   111,   112,   103,   104,
-     105,   106,   107,   108,     0,   109,     0,     0,   110,   111,
-     112,     0,     0,   113,   114,   115,   116,   117,   118,   119,
-       0,     0,     0,     0,   132,     0,   113,   114,   115,   116,
-     117,   118,   119,     0,   155,   103,   104,   105,   106,   107,
-     108,     0,   109,     0,     0,   110,   111,   112,   103,   104,
-     105,   106,   107,   108,     0,   109,     0,     0,   110,   111,
-     112,     0,     0,   113,   114,   115,   116,   117,   118,   119,
-       0,   203,     0,     0,     0,     0,   113,   114,   115,   116,
-     117,   118,   119,     0,   209,   103,   104,   105,   106,   107,
-     108,     0,   109,     0,     0,   110,   111,   112,   103,   104,
-     105,   106,     0,     0,     0,   109,     0,     0,   110,   111,
-     112,     0,     0,   113,   114,   115,   116,   117,   118,   119,
-       0,     0,     0,     0,     0,     0,   113,   114,   115,   116,
-     117,   118,   119
+      38,    39,    40,    41,    42,    43,    44,     1,     0,     0,
+       0,     2,    46,     3,     4,     5,     6,     7,     0,     0,
+      63,   192,     0,     0,     0,    11,    12,     0,    14,    64,
+      16,    17,    18,    65,    20,     0,    21,    22,    23,    24,
+       0,    26,    27,     0,     0,     0,   186,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,   187,     0,     0,     0,     0,
+       0,    46,     0,   104,   105,   106,   107,   108,   109,   103,
+     110,     0,     0,   111,   112,   113,     0,     0,   104,   105,
+     106,   107,   108,   109,     0,   110,     0,     0,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,     0,     0,
+       0,     0,     0,     0,     0,     0,   114,   115,   116,   117,
+     118,   119,   120,   104,   105,   106,   107,   108,   109,     0,
+     110,     0,     0,   111,   112,   113,   104,   105,   106,   107,
+     108,   109,     0,   110,     0,     0,   111,   112,   113,     0,
+       0,   114,   115,   116,   117,   118,   119,   120,     0,     0,
+       0,     0,   134,     0,   114,   115,   116,   117,   118,   119,
+     120,     0,   157,   104,   105,   106,   107,   108,   109,     0,
+     110,     0,     0,   111,   112,   113,   104,   105,   106,   107,
+     108,   109,     0,   110,     0,     0,   111,   112,   113,     0,
+       0,   114,   115,   116,   117,   118,   119,   120,     0,   205,
+       0,     0,     0,     0,   114,   115,   116,   117,   118,   119,
+     120,     0,   211,   104,   105,   106,   107,   108,   109,     0,
+     110,     0,     0,   111,   112,   113,   104,   105,   106,   107,
+       0,     0,     0,   110,     0,     0,   111,   112,   113,     0,
+       0,   114,   115,   116,   117,   118,   119,   120,     0,     0,
+       0,     0,     0,     0,   114,   115,   116,   117,   118,   119,
+     120
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    73,    28,    57,    39,     0,    91,    39,    57,     9,
-      86,   168,     0,    13,    86,   172,   101,   174,    44,    87,
-     177,    88,   153,    10,   155,    25,    44,    45,    28,    83,
-      84,   162,    81,    82,    83,    84,   193,    73,    74,    75,
-      86,    87,    86,   200,    44,    45,    86,   204,    86,    49,
-      87,   182,    86,   210,    49,    81,   213,    86,    52,   190,
-      24,    86,    88,    86,    86,    89,   197,    57,    89,    86,
-      60,    42,   203,    86,    86,    86,    86,    86,   209,    86,
-      49,    81,   176,    83,    -1,    -1,    -1,    -1,    88,    76,
-      80,    81,    82,    83,    84,    -1,    96,    84,    -1,    -1,
-      -1,    -1,   102,    -1,    91,    -1,    -1,   102,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,    -1,   134,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   130,    -1,    -1,    -1,    -1,    -1,   175,
-      -1,    -1,    -1,   153,    -1,   155,   156,    -1,    -1,    -1,
-      -1,    -1,   162,    -1,    -1,    -1,    -1,   154,   168,    -1,
-      -1,   171,   172,    -1,   174,   175,   171,   177,    -1,   179,
-      -1,    -1,   182,    -1,   179,    -1,    -1,    -1,    -1,   189,
-     190,    -1,    -1,   193,    -1,    -1,    -1,   197,   185,    -1,
-     200,    -1,    -1,   203,   204,    -1,   206,   194,    -1,   209,
-     210,     5,    -1,   213,    -1,    -1,    10,    -1,    -1,    13,
-      14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,     5,    -1,    77,    -1,    -1,    10,    81,    82,    13,
-      14,    15,    -1,    17,    88,    19,    20,    21,    22,    23,
-      -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    13,
-      -1,    -1,    -1,    17,    88,    19,    20,    21,    22,    23,
-      -1,    -1,    26,    27,    -1,    -1,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    46,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
-      13,    -1,    -1,    77,    17,    -1,    19,    20,    21,    22,
-      23,    24,    86,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    74,    13,    -1,    77,    -1,    17,    -1,    19,    20,
-      21,    22,    23,    86,    -1,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    -1,    75,    -1,    77,    -1,    -1,    -1,
-      13,    -1,    -1,    16,    17,    86,    19,    20,    21,    22,
-      23,    -1,    -1,    26,    27,    -1,    -1,    30,    31,    32,
+       0,    28,     0,   155,    57,   157,    39,    73,    39,     9,
+     170,    91,   164,    13,   174,     0,   176,    44,    86,   179,
+      86,    10,   102,    44,    45,    25,    86,    87,    28,    86,
+      83,    84,   184,    87,    52,   195,    88,    86,    57,    86,
+     192,    86,   202,    86,    44,    45,   206,   199,    86,    49,
+      87,    49,   212,   205,    81,   215,    73,    74,    75,   211,
+      86,    88,    81,    82,    83,    84,    57,    89,    24,    60,
+      86,    42,    86,    86,    89,    86,    86,    86,    86,    86,
+      86,    81,    86,    83,    49,   178,    -1,    76,    88,    80,
+      81,    82,    83,    84,    -1,    84,    -1,    97,    -1,    -1,
+      -1,    -1,    91,   103,    -1,   103,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+     177,    -1,    -1,    -1,    -1,   155,    -1,   157,   158,    -1,
+      -1,    -1,    -1,    -1,   164,    -1,    -1,   156,    -1,    -1,
+     170,    -1,    -1,   173,   174,   173,   176,   177,    -1,   179,
+      -1,   181,    -1,   181,   184,    -1,    -1,    -1,    -1,    -1,
+      -1,   191,   192,    -1,    -1,   195,    -1,    -1,   187,   199,
+      -1,    -1,   202,    -1,    -1,   205,   206,   196,   208,     5,
+      -1,   211,   212,    -1,    10,   215,    -1,    13,    14,    15,
+      -1,    17,    -1,    19,    20,    21,    22,    23,    -1,    -1,
+      26,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,     5,
+      -1,    77,    -1,    -1,    10,    81,    82,    13,    14,    15,
+      -1,    17,    88,    19,    20,    21,    22,    23,    -1,    -1,
+      26,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    -1,    -1,    -1,    81,    82,    13,    -1,    -1,
+      -1,    17,    88,    19,    20,    21,    22,    23,    -1,    -1,
+      26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      46,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    13,    -1,
+      -1,    77,    17,    -1,    19,    20,    21,    22,    23,    24,
+      86,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
+      13,    -1,    77,    -1,    17,    -1,    19,    20,    21,    22,
+      23,    86,    -1,    26,    27,    -1,    -1,    30,    31,    32,
       -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    13,    -1,    -1,    77,    17,    -1,    19,    20,    21,
-      22,    23,    -1,    86,    26,    27,    -1,    -1,    30,    31,
+      -1,    -1,    75,    -1,    77,    -1,    -1,    -1,    13,    -1,
+      -1,    16,    17,    86,    19,    20,    21,    22,    23,    -1,
+      -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
+      -1,    -1,    77,    17,    -1,    19,    20,    21,    22,    23,
+      -1,    86,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      74,    13,    -1,    77,    -1,    17,    -1,    19,    20,    21,
+      22,    23,    86,    -1,    26,    27,    -1,    -1,    30,    31,
       32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
       42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
       -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
@@ -1032,19 +1038,25 @@ static const yytype_int16 yycheck[] =
       40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
       -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,    17,
-      -1,    19,    20,    21,    22,    23,    86,    -1,    26,    27,
+      70,    71,    -1,    -1,    13,    75,    -1,    77,    17,    -1,
+      19,    20,    21,    22,    23,    -1,    86,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    13,    75,    -1,    77,    17,
+      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
       -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
       38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
       48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
       58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    75,    -1,    77,
+      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
       17,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
       27,    -1,    -1,    30,    31,    32,    -1,    34,    35,    36,
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
       47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
       57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    13,    75,    -1,
+      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
       77,    17,    -1,    19,    20,    21,    22,    23,    -1,    86,
       26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
       36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
@@ -1056,46 +1068,34 @@ static const yytype_int16 yycheck[] =
       35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
       45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
-      -1,    -1,    77,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    86,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      13,    -1,    -1,    77,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    86,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    13,
-      -1,    -1,    -1,    17,    77,    19,    20,    21,    22,    23,
-      -1,    -1,    26,    86,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    -1,    -1,    -1,    23,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    42,    -1,    -1,
-      -1,    -1,    -1,    77,    -1,    50,    51,    52,    53,    54,
-      55,    41,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    89,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      65,    66,    67,    68,    69,    70,    71,    13,    -1,    -1,
+      -1,    17,    77,    19,    20,    21,    22,    23,    -1,    -1,
+      26,    86,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    -1,    -1,    -1,    23,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    42,    -1,    -1,    -1,    -1,
+      -1,    77,    -1,    50,    51,    52,    53,    54,    55,    41,
+      57,    -1,    -1,    60,    61,    62,    -1,    -1,    50,    51,
       52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
-      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      62,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84
+      82,    83,    84,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
+      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      -1,    -1,    89,    -1,    78,    79,    80,    81,    82,    83,
+      84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
+      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
+      -1,    -1,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1111,19 +1111,19 @@ static const yytype_int8 yystos[] =
      110,   111,    39,    26,    35,    39,   102,   103,   104,     5,
       10,    14,    15,    56,    81,    82,    88,   102,   115,   116,
      117,   102,    39,    44,    45,   102,   103,   103,   102,     0,
-      93,    88,   117,   118,   119,    86,    87,   116,   116,   116,
-     117,    88,    41,    50,    51,    52,    53,    54,    55,    57,
-      60,    61,    62,    78,    79,    80,    81,    82,    83,    84,
-     103,   102,   117,    86,    86,    86,   103,   117,   118,    86,
-      87,   102,    89,   118,    86,   105,   117,   117,   117,   117,
+      93,    88,   117,   118,   119,    86,    86,    87,   116,   116,
+     116,   117,    88,    41,    50,    51,    52,    53,    54,    55,
+      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
+      84,   103,    86,   102,   117,    86,    86,    86,   103,   117,
+     118,    86,    87,   102,    89,   118,    86,   105,   117,   117,
      117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
-     117,   117,   117,    86,    52,    86,    73,    86,    96,    97,
-      98,    99,    86,    89,   117,    89,    86,   105,   112,   113,
-     114,    24,   112,   117,   112,   102,    86,   112,    86,    24,
-      74,   114,    86,   105,    23,    42,    75,   103,    99,    16,
-      86,   105,    86,   112,    42,   117,    86,    86,   101,   102,
-     112,    74,   117,    86,   112,    86,    87,    74,    86,    86,
-     112,   102,    86,   112,    75,    75,    86,    86
+     117,   117,   117,   117,   117,    86,    52,    86,    73,    86,
+      96,    97,    98,    99,    86,    89,   117,    89,    86,   105,
+     112,   113,   114,    24,   112,   117,   112,   102,    86,   112,
+      86,    24,    74,   114,    86,   105,    23,    42,    75,   103,
+      99,    16,    86,   105,    86,   112,    42,   117,    86,    86,
+     101,   102,   112,    74,   117,    86,   112,    86,    87,    74,
+      86,    86,   112,   102,    86,   112,    75,    75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1154,7 +1154,7 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     0,     1,     1,     3,     1,     1,     1,
-       1,     1,     1,     5,     3,     2,     2,     3,     3,     3,
+       1,     1,     1,     5,     3,     3,     3,     3,     3,     3,
        4,     7,     6,     9,     7,    10,     7,    11,    12,     0,
        1,     1,     2,     1,     1,     1,     1,     1,     1,     2,
        2,     2,     4,     1,     1,     3,     1,     3,     3,     3,
@@ -2115,15 +2115,15 @@ yyreduce:
 #line 2116 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tNEXT tREPEAT  */
+  case 75: /* proc: tNEXT tREPEAT '\n'  */
 #line 366 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new NextRepeatNode(); }
+                                                        { (yyval.node) = new NextRepeatNode(); }
 #line 2122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tEXIT tREPEAT  */
+  case 76: /* proc: tEXIT tREPEAT '\n'  */
 #line 367 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new ExitRepeatNode(); }
+                                                        { (yyval.node) = new ExitRepeatNode(); }
 #line 2128 "engines/director/lingo/lingo-gr.cpp"
     break;
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 4030e5758d..97c8ef2dd7 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -363,8 +363,8 @@ stmtoneliner: proc
 
 proc: ID '(' exprlist[args] ')' '\n'	{ $$ = new CmdNode($ID, $args); }
 	| ID exprlist[args] '\n'			{ $$ = new CmdNode($ID, $args); }
-	| tNEXT tREPEAT						{ $$ = new NextRepeatNode(); }
-	| tEXIT tREPEAT						{ $$ = new ExitRepeatNode(); }
+	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
+	| tEXIT tREPEAT '\n'				{ $$ = new ExitRepeatNode(); }
 	;
 
 definevars: tGLOBAL idlist '\n'			{ $$ = new GlobalNode($idlist); }


Commit: 4f29ef7b29cbaf64166f00d0f0c91f7f210c3571
    https://github.com/scummvm/scummvm/commit/4f29ef7b29cbaf64166f00d0f0c91f7f210c3571
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement basic var instructions

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-code.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index c5546a2d0f..630ed4b845 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -30,6 +30,10 @@ struct ScriptNode;
 struct FactoryNode;
 struct HandlerNode;
 struct CmdNode;
+struct PutIntoNode;
+struct PutAfterNode;
+struct PutBeforeNode;
+struct SetNode;
 struct GlobalNode;
 struct PropertyNode;
 struct InstanceNode;
@@ -67,6 +71,10 @@ enum NodeType {
 	kFactoryNode,
 	kHandlerNode,
 	kCmdNode,
+	kPutIntoNode,
+	kPutAfterNode,
+	kPutBeforeNode,
+	kSetNode,
 	kGlobalNode,
 	kPropertyNode,
 	kInstanceNode,
@@ -98,6 +106,10 @@ public:
 	virtual void visitFactoryNode(FactoryNode *node) = 0;
 	virtual void visitHandlerNode(HandlerNode *node) = 0;
 	virtual void visitCmdNode(CmdNode *node) = 0;
+	virtual void visitPutIntoNode(PutIntoNode *node) = 0;
+	virtual void visitPutAfterNode(PutAfterNode *node) = 0;
+	virtual void visitPutBeforeNode(PutBeforeNode *node) = 0;
+	virtual void visitSetNode(SetNode *node) = 0;
 	virtual void visitGlobalNode(GlobalNode *node) = 0;
 	virtual void visitPropertyNode(PropertyNode *node) = 0;
 	virtual void visitInstanceNode(InstanceNode *node) = 0;
@@ -228,6 +240,74 @@ struct CmdNode : StmtNode {
 	}
 };
 
+/* PutIntoNode */
+
+struct PutIntoNode : StmtNode {
+	Node *val;
+	Node *var;
+
+	PutIntoNode(Node *valIn, Node *varIn)
+		: StmtNode(kPutIntoNode), val(valIn), var(varIn) {}
+	virtual ~PutIntoNode() {
+		delete val;
+		delete var;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitPutIntoNode(this);
+	}
+};
+
+/* PutAfterNode */
+
+struct PutAfterNode : StmtNode {
+	Node *val;
+	Node *var;
+
+	PutAfterNode(Node *valIn, Node *varIn)
+		: StmtNode(kPutAfterNode), val(valIn), var(varIn) {}
+	virtual ~PutAfterNode() {
+		delete val;
+		delete var;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitPutAfterNode(this);
+	}
+};
+
+/* PutBeforeNode */
+
+struct PutBeforeNode : StmtNode {
+	Node *val;
+	Node *var;
+
+	PutBeforeNode(Node *valIn, Node *varIn)
+		: StmtNode(kPutBeforeNode), val(valIn), var(varIn) {}
+	virtual ~PutBeforeNode() {
+		delete val;
+		delete var;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitPutBeforeNode(this);
+	}
+};
+
+/* SetNode */
+
+struct SetNode : StmtNode {
+	Node *var;
+	Node *val;
+
+	SetNode(Node *varIn, Node *valIn)
+		: StmtNode(kSetNode), var(varIn), val(valIn) {}
+	virtual ~SetNode() {
+		delete var;
+		delete val;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitSetNode(this);
+	}
+};
+
 /* GlobalNode */
 
 struct GlobalNode : StmtNode {
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 933600b1c9..6c3c960e3f 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -84,6 +84,8 @@ static struct FuncDescr {
 	{ LC::c_div,			"c_div",			"" },
 	{ LC::c_eq,				"c_eq",				"" },
 	{ LC::c_floatpush,		"c_floatpush",		"f" },
+	{ LC::c_globalpush,		"c_globalpush",		"s" },
+	{ LC::c_globalrefpush,	"c_globalrefpush",	"s" },
 	{ LC::c_ge,				"c_ge",				"" },
 	{ LC::c_goto,			"c_goto",			"" },
 	{ LC::c_gotoloop,		"c_gotoloop",		"" },
@@ -100,6 +102,8 @@ static struct FuncDescr {
 	{ LC::c_le,				"c_le",				"" },
 	{ LC::c_lineOf,			"c_lineOf",			"" },	// D3
 	{ LC::c_lineToOf,		"c_lineToOf",		"" },	// D3
+	{ LC::c_localpush,		"c_localpush",		"s" },
+	{ LC::c_localrefpush,	"c_localrefpush",	"s" },
 	{ LC::c_lt,				"c_lt",				"" },
 	{ LC::c_mod,			"c_mod",			"" },
 	{ LC::c_mul,			"c_mul",			"" },
@@ -114,6 +118,8 @@ static struct FuncDescr {
 	{ LC::c_play,			"c_play",			"" },
 	{ LC::c_procret,		"c_procret",		"" },
 	{ LC::c_proparraypush,	"c_proparraypush",	"i" },
+	{ LC::c_proppush,		"c_proppush",		"s" },
+	{ LC::c_proprefpush,	"c_proprefpush",	"s" },
 	{ LC::c_putafter,		"c_putafter",		"" },	// D3
 	{ LC::c_putbefore,		"c_putbefore",		"" },	// D3
 	{ LC::c_starts,			"c_starts",			"" },
@@ -128,6 +134,7 @@ static struct FuncDescr {
 	{ LC::c_themenuentitypush,"c_themenuentitypush","EF" },
 	{ LC::c_themenuitementityassign,"c_themenuitementityassign","EF" },
 	{ LC::c_varpush,		"c_varpush",		"s" },
+	{ LC::c_varrefpush,		"c_varrefpush",		"s" },
 	{ LC::c_voidpush,		"c_voidpush",		""  },
 	{ LC::c_whencode,		"c_whencode",		"s" },
 	{ LC::c_within,			"c_within",			"" },
@@ -437,27 +444,58 @@ void LC::c_proparraypush() {
 	g_lingo->push(d);
 }
 
-void LC::c_varpush() {
+void LC::c_varrefpush() {
 	Common::String name(g_lingo->readString());
-	Datum d;
+	Datum d(name);
+	d.type = VARREF;
+	g_lingo->push(d);
+}
 
-	// Looking for the cast member constants
-	if (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
-		int val = castNumToNum(name.c_str());
+void LC::c_globalrefpush() {
+	Common::String name(g_lingo->readString());
+	Datum d(name);
+	d.type = GLOBALREF;
+	g_lingo->push(d);
+}
 
-		if (val != -1) {
-			d.type = INT;
-			d.u.i = val;
-			g_lingo->push(d);
-			return;
-		}
-	}
+void LC::c_localrefpush() {
+	Common::String name(g_lingo->readString());
+	Datum d(name);
+	d.type = LOCALREF;
+	g_lingo->push(d);
+}
 
-	d = Datum(Common::String(name));
-	d.type = VARREF;
+void LC::c_proprefpush() {
+	Common::String name(g_lingo->readString());
+	Datum d(name);
+	d.type = PROPREF;
 	g_lingo->push(d);
 }
 
+void LC::c_varpush() {
+	LC::c_varrefpush();
+	Datum d = g_lingo->pop(false);
+	g_lingo->push(g_lingo->varFetch(d));
+}
+
+void LC::c_globalpush() {
+	LC::c_globalrefpush();
+	Datum d = g_lingo->pop(false);
+	g_lingo->push(g_lingo->varFetch(d));
+}
+
+void LC::c_localpush() {
+	LC::c_localrefpush();
+	Datum d = g_lingo->pop(false);
+	g_lingo->push(g_lingo->varFetch(d));
+}
+
+void LC::c_proppush() {
+	LC::c_proprefpush();
+	Datum d = g_lingo->pop(false);
+	g_lingo->push(g_lingo->varFetch(d));
+}
+
 void LC::c_stackpeek() {
 	int peekOffset = g_lingo->readInt();
 	g_lingo->push(g_lingo->peek(peekOffset));
@@ -478,28 +516,6 @@ void LC::c_assign() {
 	g_lingo->varAssign(d1, d2);
 }
 
-void LC::c_eval() {
-	LC::c_varpush();
-
-	// HACK: The grammar currently doesn't differentiate between cases
-	// when it should push a reference (e.g. delete char 2 of "abc")
-	// and cases when it should push the value (e.g. put char 2 of "abc")
-	// Until that's fixed, just push the reference, and it will be evaluated by pop.
-#if 0
-	Datum d;
-	d = g_lingo->pop(false);
-
-	if (d.type.isVarRef()) { // It could be cast ref
-		g_lingo->push(d);
-		return;
-	}
-
-	d = g_lingo->varFetch(d);
-
-	g_lingo->push(d);
-#endif
-}
-
 void LC::c_theentitypush() {
 	Datum id = g_lingo->pop();
 
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index aa7616d77c..9bd1d94c75 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -76,7 +76,14 @@ void c_floatpush();
 void c_stringpush();
 void c_symbolpush();
 void c_namepush();
+void c_varrefpush();
+void c_globalrefpush();
+void c_localrefpush();
+void c_proprefpush();
 void c_varpush();
+void c_globalpush();
+void c_localpush();
+void c_proppush();
 void c_argcpush();
 void c_argcnoretpush();
 void c_arraypush();
@@ -85,7 +92,6 @@ void c_stackpeek();
 void c_stackdrop();
 void c_assign();
 bool verify(const Symbol &s);
-void c_eval();
 
 void c_swap();
 
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index af42868983..7116267f03 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -46,6 +46,7 @@
 #include "common/endian.h"
 
 #include "director/director.h"
+#include "director/movie.h"
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-ast.h"
 #include "director/lingo/lingo-code.h"
@@ -67,6 +68,7 @@ LingoCompiler::LingoCompiler() {
 
 	_inFactory = false;
 	_currentLoop = nullptr;
+	_refMode = false;
 
 	_hadError = false;
 }
@@ -252,6 +254,66 @@ int LingoCompiler::codeFunc(Common::String *s, int numpar) {
 	return ret;
 }
 
+void LingoCompiler::codeVarSet(const Common::String &name) {
+	registerMethodVar(name);
+	codeVarRef(name);
+	code1(LC::c_assign);
+}
+
+void LingoCompiler::codeVarRef(const Common::String &name) {
+	VarType type;
+	if (_methodVars->contains(name)) {
+		type = (*_methodVars)[name];
+	} else {
+		warning("LingoCompiler::codeVarRef: var %s referenced before definition", name.c_str());
+		type = kVarGeneric;
+	}
+	switch (type) {
+	case kVarGeneric:
+		code1(LC::c_varrefpush);
+		break;
+	case kVarGlobal:
+		code1(LC::c_globalrefpush);
+		break;
+	case kVarLocal:
+	case kVarArgument:
+		code1(LC::c_localrefpush);
+		break;
+	case kVarProperty:
+	case kVarInstance:
+		code1(LC::c_proprefpush);
+		break;
+	}
+	codeString(name.c_str());
+}
+
+void LingoCompiler::codeVarGet(const Common::String &name) {
+	VarType type;
+	if (_methodVars->contains(name)) {
+		type = (*_methodVars)[name];
+	} else {
+		warning("LingoCompiler::codeVarGet: var %s referenced before definition", name.c_str());
+		type = kVarGeneric;
+	}
+	switch (type) {
+	case kVarGeneric:
+		code1(LC::c_varpush);
+		break;
+	case kVarGlobal:
+		code1(LC::c_globalpush);
+		break;
+	case kVarLocal:
+	case kVarArgument:
+		code1(LC::c_localpush);
+		break;
+	case kVarProperty:
+	case kVarInstance:
+		code1(LC::c_proppush);
+		break;
+	}
+	codeString(name.c_str());
+}
+
 void LingoCompiler::registerMethodVar(const Common::String &name, VarType type) {
 	if (!_methodVars->contains(name)) {
 		if (_indef && type == kVarGeneric) {
@@ -304,6 +366,12 @@ void LingoCompiler::compile(Node *node) {
 	node->accept(this);
 }
 
+void LingoCompiler::compileRef(Node *node) {
+	_refMode = true;
+	node->accept(this);
+	_refMode = false;
+}
+
 void LingoCompiler::compileList(NodeList *nodes) {
 	for (uint i = 0; i < nodes->size(); i++) {
 		compile((*nodes)[i]);
@@ -394,6 +462,50 @@ void LingoCompiler::visitCmdNode(CmdNode *node) {
 	codeCmd(node->name, node->args->size());
 }
 
+/* PutIntoNode */
+
+void LingoCompiler::visitPutIntoNode(PutIntoNode *node) {
+	if (node->var->type == kVarNode) {
+		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
+	}
+	compile(node->val);
+	compileRef(node->var);
+	code1(LC::c_assign);
+}
+
+/* PutAfterNode */
+
+void LingoCompiler::visitPutAfterNode(PutAfterNode *node) {
+	if (node->var->type == kVarNode) {
+		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
+	}
+	compile(node->val);
+	compileRef(node->var);
+	code1(LC::c_putafter);
+}
+
+/* PutBeforeNode */
+
+void LingoCompiler::visitPutBeforeNode(PutBeforeNode *node) {
+	if (node->var->type == kVarNode) {
+		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
+	}
+	compile(node->val);
+	compileRef(node->var);
+	code1(LC::c_putbefore);
+}
+
+/* SetNode */
+
+void LingoCompiler::visitSetNode(SetNode *node) {
+	if (node->var->type == kVarNode) {
+		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
+	}
+	compile(node->val);
+	compileRef(node->var);
+	code1(LC::c_assign);
+}
+
 /* GlobalNode */
 
 void LingoCompiler::visitGlobalNode(GlobalNode *node) {
@@ -488,16 +600,11 @@ void LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
 	LoopNode *prevLoop = _currentLoop;
 	_currentLoop = node;
 
-	registerMethodVar(*node->var);
-
 	compile(node->start);
-	code1(LC::c_varpush);
-	codeString(node->var->c_str());
-	code1(LC::c_assign);
+	codeVarSet(*node->var);
 
 	uint startPos = _currentAssembly->size();
-	code1(LC::c_eval);
-	codeString(node->var->c_str());
+	codeVarGet(*node->var);
 	compile(node->end);
 	if (node->down) {
 		code1(LC::c_ge);
@@ -510,8 +617,7 @@ void LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
 	compileList(node->stmts);
 
 	uint incrementPos = _currentAssembly->size();
-	code1(LC::c_eval);
-	codeString(node->var->c_str());
+	codeVarGet(*node->var);
 	code1(LC::c_intpush);
 	codeInt(1);
 	if (node->down) {
@@ -519,9 +625,7 @@ void LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
 	} else {
 		code1(LC::c_add);
 	}
-	code1(LC::c_varpush);
-	codeString(node->var->c_str());
-	code1(LC::c_assign);
+	codeVarSet(*node->var);
 
 	uint jmpPos = _currentAssembly->size();
 	code2(LC::c_jump, 0);
@@ -599,12 +703,24 @@ void LingoCompiler::visitFuncNode(FuncNode *node) {
 /* VarNode */
 
 void LingoCompiler::visitVarNode(VarNode *node) {
+	if (_refMode) {
+		codeVarRef(*node->name);
+		return;
+	}
 	if (g_lingo->_builtinConsts.contains(*node->name)) {
 		code1(LC::c_constpush);
-	} else {
-		code1(LC::c_eval);
+		codeString(node->name->c_str());
+		return;
+	}
+	if (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
+		int val = castNumToNum(node->name->c_str());
+		if (val != -1) {
+			code1(LC::c_intpush);
+			codeInt(val);
+			return;
+		}
 	}
-	codeString(node->name->c_str());
+	codeVarGet(*node->name);
 }
 
 /* ParensNode */
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index b61363fff2..e84efd67ec 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -47,6 +47,9 @@ public:
 	int codeFunc(Common::String *s, int numpar);
 	int codeInt(int val);
 	int codeString(const char *s);
+	void codeVarSet(const Common::String &name);
+	void codeVarRef(const Common::String &name);
+	void codeVarGet(const Common::String &name);
 	void registerFactory(Common::String &s);
 	void registerMethodVar(const Common::String &name, VarType type = kVarGeneric);
 	void updateLoopJumps(uint nextTargetPos, uint exitTargetPos);
@@ -62,6 +65,7 @@ public:
 	const char *_lines[3];
 	bool _inFactory;
 	LoopNode *_currentLoop;
+	bool _refMode;
 
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVarsStash;
@@ -70,12 +74,17 @@ public:
 
 public:
 	void compile(Node *node);
+	void compileRef(Node *node);
 	void compileList(NodeList *nodes);
 
 	virtual void visitScriptNode(ScriptNode *node);
 	virtual void visitFactoryNode(FactoryNode *node);
 	virtual void visitHandlerNode(HandlerNode *node);
 	virtual void visitCmdNode(CmdNode *node);
+	virtual void visitPutIntoNode(PutIntoNode *node);
+	virtual void visitPutAfterNode(PutAfterNode *node);
+	virtual void visitPutBeforeNode(PutBeforeNode *node);
+	virtual void visitSetNode(SetNode *node);
 	virtual void visitGlobalNode(GlobalNode *node);
 	virtual void visitPropertyNode(PropertyNode *node);
 	virtual void visitInstanceNode(InstanceNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 0bf0f17553..d816255af9 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -260,18 +260,23 @@ enum yysymbol_kind_t
   YYSYMBOL_stmt = 105,                     /* stmt  */
   YYSYMBOL_stmtoneliner = 106,             /* stmtoneliner  */
   YYSYMBOL_proc = 107,                     /* proc  */
-  YYSYMBOL_definevars = 108,               /* definevars  */
-  YYSYMBOL_ifstmt = 109,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 110,               /* ifelsestmt  */
-  YYSYMBOL_loop = 111,                     /* loop  */
-  YYSYMBOL_stmtlist = 112,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 113,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 114,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 115,       /* simpleexprnoparens  */
-  YYSYMBOL_simpleexpr = 116,               /* simpleexpr  */
-  YYSYMBOL_expr = 117,                     /* expr  */
-  YYSYMBOL_exprlist = 118,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 119          /* nonemptyexprlist  */
+  YYSYMBOL_asgn = 108,                     /* asgn  */
+  YYSYMBOL_to = 109,                       /* to  */
+  YYSYMBOL_definevars = 110,               /* definevars  */
+  YYSYMBOL_ifstmt = 111,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 112,               /* ifelsestmt  */
+  YYSYMBOL_loop = 113,                     /* loop  */
+  YYSYMBOL_stmtlist = 114,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 115,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 116,             /* stmtlistline  */
+  YYSYMBOL_simpleexprnoparens = 117,       /* simpleexprnoparens  */
+  YYSYMBOL_var = 118,                      /* var  */
+  YYSYMBOL_varorchunk = 119,               /* varorchunk  */
+  YYSYMBOL_varorthe = 120,                 /* varorthe  */
+  YYSYMBOL_simpleexpr = 121,               /* simpleexpr  */
+  YYSYMBOL_expr = 122,                     /* expr  */
+  YYSYMBOL_exprlist = 123,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 124          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -591,18 +596,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  89
+#define YYFINAL  99
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1360
+#define YYLAST   1520
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  90
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  30
+#define YYNNTS  35
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  127
+#define YYNRULES  138
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  220
+#define YYNSTATES  248
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -659,19 +664,20 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   190,   190,   192,   198,   205,   206,   207,   208,   209,
-     238,   242,   244,   246,   247,   250,   256,   263,   264,   269,
-     273,   277,   278,   279,   284,   285,   286,   287,   288,   289,
-     290,   293,   295,   298,   300,   301,   302,   303,   306,   307,
-     308,   309,   310,   312,   313,   314,   315,   316,   318,   319,
-     320,   321,   322,   323,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   336,   337,   340,   344,   354,   355,   356,
-     357,   360,   361,   364,   365,   366,   367,   370,   371,   372,
-     375,   379,   383,   389,   393,   397,   401,   403,   405,   409,
-     410,   414,   420,   427,   428,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,   444,   445,   448,   449,   450,   451,
-     452,   453,   454,   455,   456,   457,   458,   459,   460,   461,
-     462,   463,   464,   465,   468,   469,   472,   476
+       0,   193,   193,   195,   201,   208,   209,   210,   211,   212,
+     241,   245,   247,   249,   250,   253,   259,   266,   267,   272,
+     276,   280,   281,   282,   287,   288,   289,   290,   291,   292,
+     293,   296,   298,   301,   303,   304,   305,   306,   309,   310,
+     311,   312,   313,   315,   316,   317,   318,   319,   322,   323,
+     324,   325,   326,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   339,   340,   343,   347,   357,   358,   359,   360,
+     363,   364,   365,   368,   369,   370,   371,   372,   373,   376,
+     377,   378,   379,   382,   382,   384,   385,   386,   389,   393,
+     397,   403,   407,   411,   415,   417,   419,   423,   424,   428,
+     434,   441,   442,   447,   448,   449,   450,   451,   452,   453,
+     454,   455,   458,   460,   464,   468,   469,   472,   473,   474,
+     475,   476,   477,   478,   479,   480,   481,   482,   483,   484,
+     485,   486,   487,   488,   489,   492,   493,   496,   500
 };
 #endif
 
@@ -704,9 +710,10 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "'\\n'", "','", "'('", "')'", "$accept", "script", "scriptpartlist",
   "scriptpart", "macro", "factory", "method", "methodlist",
   "nonemptymethodlist", "methodlistline", "handler", "endargdef", "ID",
-  "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "definevars",
-  "ifstmt", "ifelsestmt", "loop", "stmtlist", "nonemptystmtlist",
-  "stmtlistline", "simpleexprnoparens", "simpleexpr", "expr", "exprlist",
+  "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "asgn", "to",
+  "definevars", "ifstmt", "ifelsestmt", "loop", "stmtlist",
+  "nonemptystmtlist", "stmtlistline", "simpleexprnoparens", "var",
+  "varorchunk", "varorthe", "simpleexpr", "expr", "exprlist",
   "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
@@ -730,7 +737,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-161)
+#define YYPACT_NINF (-167)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -744,73 +751,81 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     344,  -161,  -161,  -161,  -161,  -161,  -161,  -161,   -33,  1084,
-     204,  -161,  -161,  1084,  -161,   -31,  -161,  -161,  -161,   -21,
-    -161,  -161,  -161,  -161,  -161,  1084,  -161,  -161,  1084,  -161,
-    -161,  -161,  -161,  -161,  -161,  -161,  -161,  -161,  -161,  -161,
-    -161,  -161,  -161,  -161,  1084,  1084,  -161,  -161,    15,   344,
-    -161,  -161,  -161,  -161,   274,  -161,  -161,  -161,  -161,  -161,
-    -161,  -161,   -68,  -161,  -161,  -161,  -161,   -57,   -54,  -161,
-    -161,  -161,  -161,   204,   204,   204,   204,   -52,  -161,  -161,
-    1128,  1084,   -49,  1084,   204,   -47,   -45,   -43,  1084,  -161,
-    -161,   204,  1263,   -38,   -37,  -161,  -161,  1084,  -161,  -161,
-    -161,  1163,   204,   842,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   -26,  -161,   -18,  1176,   -66,  -161,  -161,   -16,  1163,
-     -22,  -161,   204,  -161,  -161,   -15,   903,    44,     9,     9,
-       9,     9,  1276,  1276,  -161,   -19,     9,     9,     9,     9,
-     -19,   -53,   -53,  -161,  -161,   903,   204,   903,  1084,  -161,
-    -161,   -14,  -161,  -161,   903,   -13,  1263,  -161,  -161,  -161,
-     405,  -161,  -161,   964,   903,  1113,   467,  1084,   -66,   535,
-    -161,  1025,   -11,  -161,   903,  -161,    29,   204,   -10,    -9,
-    -161,  1084,   903,  -161,  -161,   596,   204,  1213,  -161,   903,
-     -60,  -161,   658,    -8,  1226,   903,   903,  -161,  1084,    -7,
-    -161,   903,   720,  -161,  -161,   781,    -6,    -4,  -161,  -161
+     500,  -167,  -167,  -167,  -167,  -167,  -167,  -167,   -32,  1240,
+     281,  -167,  -167,  1240,  -167,   -24,  -167,  -167,   360,   -34,
+    1240,  -167,  -167,  -167,  -167,  1240,  -167,  -167,  1240,  -167,
+    -167,  -167,  -167,  -167,  -167,  -167,  -167,  -167,  -167,  -167,
+    -167,  -167,  -167,  -167,  1240,  1240,  -167,  -167,    12,   500,
+    -167,  -167,  -167,  -167,   430,  -167,  -167,  -167,  -167,  -167,
+    -167,  -167,  -167,   -59,  -167,  -167,  -167,  -167,  -167,   -54,
+     -47,  -167,  -167,  -167,  -167,   281,   281,   281,   281,   -50,
+    -167,  -167,  -167,  1270,  1240,   -45,   281,    42,   -44,   -40,
+    1240,   281,  -167,  -167,   -26,   -38,   -36,   -33,  1240,  -167,
+    -167,   281,  1423,   -31,  -167,  -167,  1240,  -167,  -167,  -167,
+    1283,   281,   998,   281,   281,   281,   281,   281,   281,   281,
+     281,   281,   281,   281,   281,   281,   281,   281,   281,   281,
+     -28,  -167,  1283,   -29,  1240,  1240,  1240,  -167,   281,    11,
+    1323,  -167,  -167,   281,   -65,  -167,  -167,   -22,   -21,  -167,
+    -167,  -167,   -20,  1059,    41,   103,   103,   103,   103,  1436,
+    1436,  -167,    -1,   103,   103,   103,   103,    -1,   -53,   -53,
+    -167,  -167,  1059,   -14,  -167,   -11,    -9,    -8,  1423,   281,
+    1059,  1336,  1240,  -167,  -167,     1,  -167,  -167,  1059,     3,
+    -167,  -167,  -167,   561,  -167,  -167,  1120,  1059,  -167,  -167,
+    -167,  -167,    87,   623,  -167,  1240,   -65,   691,  -167,  1181,
+       5,  -167,  1059,  -167,    43,   281,    19,    21,  -167,  1240,
+    1059,  -167,  -167,   752,   281,  1373,  -167,  1059,   -68,  -167,
+     814,    22,  1386,  1059,  1059,  -167,  1240,    23,  -167,  1059,
+     876,  -167,  -167,   937,    25,    27,  -167,  -167
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
-static const yytype_int8 yydefact[] =
+static const yytype_uint8 yydefact[] =
 {
-       0,    24,    46,    28,    32,    50,    59,    30,    31,    63,
-       0,    33,    35,     0,    39,    40,    42,    47,    48,    49,
-      51,    54,    57,    60,    58,     0,    43,    45,    63,    26,
-      44,    41,    38,    25,    27,    52,    29,    36,    37,    62,
-      56,    34,    61,    53,    63,     0,    55,     5,     0,     2,
-       3,     6,     7,     8,   124,     9,    67,    71,    72,    68,
-      69,    70,     0,    31,    40,    49,    65,     0,    64,    95,
-      96,    98,    97,    41,     0,     0,     0,   103,   104,   106,
-       0,    63,     0,     0,     0,     0,     0,     0,    63,     1,
-       4,   124,   126,     0,   125,    76,    77,     0,   101,    99,
-     100,     0,   124,     0,     0,     0,     0,     0,     0,     0,
+       0,    24,    46,    28,    32,    49,    58,    30,    31,    62,
+       0,    33,    35,     0,    39,    40,    42,    47,   135,    48,
+      50,    53,    56,    59,    57,     0,    43,    45,    62,    26,
+      44,    41,    38,    25,    27,    51,    29,    36,    37,    61,
+      55,    34,    60,    52,    62,     0,    54,     5,     0,     2,
+       3,     6,     7,     8,   135,     9,    66,    70,    71,    72,
+      67,    68,    69,     0,    31,    40,    48,    50,    64,     0,
+      63,   103,   104,   106,   105,    41,     0,     0,     0,   112,
+     115,   111,   117,     0,    62,     0,   135,   137,     0,   136,
+       0,     0,   112,   114,     0,     0,     0,     0,    62,     1,
+       4,   135,   137,     0,    78,    85,     0,   109,   107,   108,
+       0,   135,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    75,     0,     0,    13,    79,    78,     0,   126,
-       0,    74,     0,    66,   105,     0,    89,    80,   116,   117,
-     114,   115,   118,   119,   111,   121,   122,   123,   113,   112,
-     120,   107,   108,   109,   110,    89,     0,    89,     0,    17,
-      18,    11,    14,    15,    89,     0,   127,   102,    93,    94,
-       0,    90,    91,     0,    10,     0,     0,    63,     0,    20,
-      73,     0,     0,    92,    89,    82,     0,     0,     0,     0,
-      16,    21,    89,    84,    81,     0,     0,     0,    86,    89,
-       0,    22,     0,     0,     0,    89,    12,    19,     0,     0,
-      83,    89,     0,    23,    85,     0,     0,     0,    87,    88
+       0,    77,   137,     0,     0,     0,     0,    76,     0,     0,
+       0,    83,    84,     0,    13,    87,    86,     0,     0,    74,
+      65,   116,     0,    97,    88,   127,   128,   125,   126,   129,
+     130,   122,   132,   133,   134,   124,   123,   131,   118,   119,
+     120,   121,    97,     0,   113,     0,     0,     0,   138,     0,
+      97,     0,     0,    17,    18,    11,    14,    15,    97,     0,
+     110,   101,   102,     0,    98,    99,     0,    10,    75,    79,
+      80,    81,     0,     0,    82,    62,     0,    20,    73,     0,
+       0,   100,    97,    90,     0,     0,     0,     0,    16,    21,
+      97,    92,    89,     0,     0,     0,    94,    97,     0,    22,
+       0,     0,     0,    97,    12,    19,     0,     0,    91,    97,
+       0,    23,    93,     0,     0,     0,    95,    96
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -161,  -161,  -161,    35,  -161,  -161,  -161,  -161,  -161,   -93,
-    -161,  -161,     0,   -27,  -161,     2,  -161,  -161,  -161,  -161,
-    -161,  -161,  -152,  -161,  -160,  -161,   -17,    11,   -80,  -161
+    -167,  -167,  -167,    37,  -167,  -167,  -167,  -167,  -167,  -118,
+    -167,  -167,     0,   -27,  -167,     2,  -167,  -167,  -167,  -167,
+    -167,  -167,  -167,  -167,  -166,  -167,  -164,  -167,   -17,  -112,
+    -167,   -41,   140,   -49,  -167
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,    48,    49,    50,    51,    52,   160,   161,   162,   163,
-      53,   200,    77,    67,    68,   169,    56,    57,    58,    59,
-      60,    61,   170,   171,   172,    78,    79,    92,    93,    94
+       0,    48,    49,    50,    51,    52,   184,   185,   186,   187,
+      53,   228,    79,    69,    70,   192,    56,    57,    58,   143,
+      59,    60,    61,    62,   193,   194,   195,    80,    81,   175,
+      94,    82,   102,    88,    89
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -818,273 +833,305 @@ static const yytype_uint8 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      54,    86,    55,   174,   110,   176,    62,   158,    82,    66,
-     183,   130,   179,    81,   183,    89,   183,    87,    95,   183,
-     159,    80,   135,    83,    84,    85,   207,   208,    66,    96,
-     119,   120,   195,    97,   156,   183,   102,   122,   110,   125,
-     202,   126,   183,   127,    66,    88,   183,   206,   131,    54,
-     132,    55,   183,   212,   121,   183,    98,    99,   100,   215,
-     155,   128,   117,   118,   119,   120,   110,   165,   173,   111,
-     164,   196,   178,   180,   167,   194,   198,   199,   210,   214,
-     218,    66,   219,   123,    90,   190,     0,   101,    66,   116,
-     117,   118,   119,   120,     0,   124,     0,   133,     0,     0,
-       0,     0,   129,    54,     0,   137,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,     0,     0,     0,     0,    54,     0,     0,     0,
-       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
-     189,     0,     0,     0,     0,    54,     0,    54,   177,     0,
-       0,     0,     0,     0,    54,     0,     0,   175,     0,     0,
-      54,     0,     0,    54,    54,   185,    54,    66,     0,    54,
-       0,    54,     0,   193,    54,     0,     0,     0,     0,     0,
-       0,   201,    54,     0,     0,    54,     0,     0,   197,    54,
-       0,     0,    54,     0,     0,    54,    54,   204,   213,    69,
-       0,    54,    54,     0,    70,    54,     0,     1,    71,    72,
-       0,     2,     0,     3,     4,     5,     6,     7,     0,     0,
-      63,     0,     0,     0,     0,    11,    12,     0,    14,    64,
-      16,    17,    18,    65,    20,     0,    21,    22,    23,    24,
-       0,    26,    27,     0,     0,     0,     0,     0,    29,    30,
-      73,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,     0,     0,     0,     0,    69,
-       0,    46,     0,     0,    70,    74,    75,     1,    71,    72,
-       0,     2,    76,     3,     4,     5,     6,     7,     0,     0,
-      63,     0,     0,     0,     0,    11,    12,     0,    14,    64,
-      16,    17,    18,    65,    20,     0,    21,    22,    23,    24,
-       0,    26,    27,     0,     0,     0,     0,     0,    29,    30,
-      73,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,     0,     0,     0,     0,     0,
-       0,    46,     0,     0,     0,    74,    75,     1,     0,     0,
-       0,     2,    91,     3,     4,     5,     6,     7,     0,     0,
-       8,     9,     0,     0,    10,    11,    12,    13,    14,    15,
+      54,    96,    55,    93,   119,   103,   197,    63,   182,    68,
+      90,    91,    99,    84,   203,    85,   141,    97,   235,   236,
+      92,   183,   207,   176,   177,    95,   142,   104,    68,   211,
+     128,   129,   105,   211,   107,   108,   109,   133,   111,   211,
+     106,   131,   137,   211,    68,    98,   223,   138,   144,    54,
+     145,    55,   148,   146,   230,   149,   119,   130,   172,   211,
+     173,   234,   152,   179,   188,   196,   211,   240,   189,   190,
+     211,   147,   198,   243,   134,   199,   211,   200,   201,   211,
+     126,   127,   128,   129,    68,   224,   100,   206,   218,   208,
+     139,   222,   113,   114,   115,   116,   117,   118,    68,   119,
+     135,   136,   120,   121,   122,   226,   150,   227,   238,   242,
+     214,   246,    54,   247,   154,     0,     0,   174,   174,   174,
+     123,   124,   125,   126,   127,   128,   129,     0,     0,   215,
+       0,     0,     0,     0,    92,    92,    92,   113,   114,   115,
+     116,   117,   118,     0,   119,     0,     0,   120,   121,   122,
+      83,     0,     0,    54,     0,     0,     0,     0,    87,     0,
+     119,     0,     0,   120,     0,   123,   124,   125,   126,   127,
+     128,   129,    54,     0,     0,     0,     0,     0,   217,     0,
+      54,     0,   205,   125,   126,   127,   128,   129,    54,     0,
+       0,     0,     0,    54,     0,     0,    54,    54,   213,     0,
+       0,     0,     0,    54,     0,    68,     0,    54,     0,    54,
+       0,   221,    54,     0,     0,     0,     0,     0,   110,   229,
+      54,     0,     0,    54,     0,     0,   132,    54,     0,     0,
+      54,   140,     0,    54,    54,     0,   241,     0,     0,    54,
+      54,   132,     0,    54,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+       0,     0,     0,     0,     0,     0,     0,     0,   178,     0,
+       0,     0,     0,   181,     0,     0,    71,     0,     0,     0,
+       0,    72,     0,     0,     1,    73,    74,     0,     2,     0,
+       3,     4,     5,     6,     7,     0,     0,    64,     0,     0,
+       0,     0,    11,    12,     0,    14,    65,    16,    17,   202,
+      66,    67,     0,    21,    22,    23,    24,     0,    26,    27,
+       0,     0,     0,     0,     0,    29,    30,    75,    32,    33,
+      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,     0,     0,     0,   225,     0,     0,    46,     0,
+       0,     0,    76,    77,   232,    71,     0,     0,     0,    78,
+      72,     0,     0,     1,    73,    74,     0,     2,     0,     3,
+       4,     5,     6,     7,     0,     0,    64,     0,     0,     0,
+       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,    27,     0,
+       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,     0,     0,     0,     0,    71,     0,    46,     0,     0,
+      72,    76,    77,     1,    73,    74,     0,     2,    86,     3,
+       4,     5,     6,     7,     0,     0,    64,     0,     0,     0,
+       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,    27,     0,
+       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
+       0,    76,    77,     1,     0,     0,     0,     2,   101,     3,
+       4,     5,     6,     7,     0,     0,     8,     9,     0,     0,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,     0,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,     0,     1,     0,     0,    46,     2,     0,
+       3,     4,     5,     6,     7,   209,    47,     8,     9,     0,
+       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
+      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
+      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,   210,     1,     0,    46,     0,
+       2,     0,     3,     4,     5,     6,     7,   191,     0,     8,
+       9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
+      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,     0,     0,     0,   216,     0,
+      46,     0,     0,     0,     1,     0,     0,   219,     2,   191,
+       3,     4,     5,     6,     7,     0,     0,     8,     9,     0,
+       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
+      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
+      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,     1,     0,     0,    46,     2,
+       0,     3,     4,     5,     6,     7,     0,   191,     8,     9,
+       0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
+      18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
+      27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,     0,     0,   231,     1,     0,    46,
+       0,     2,     0,     3,     4,     5,     6,     7,   191,     0,
+       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
       16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,     0,     0,     0,    29,    30,
+       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
       31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,     0,     1,     0,
-       0,    46,     2,     0,     3,     4,     5,     6,     7,   181,
-      47,     8,     9,     0,     0,    10,    11,    12,     0,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
-      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,   182,
-       1,     0,    46,     0,     2,     0,     3,     4,     5,     6,
-       7,   168,     0,     8,     9,     0,     0,    10,    11,    12,
-       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
-      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,     0,   188,     0,    46,     0,     0,     0,     1,     0,
-       0,   191,     2,   168,     3,     4,     5,     6,     7,     0,
-       0,     8,     9,     0,     0,    10,    11,    12,     0,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
-      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,     1,
-       0,     0,    46,     2,     0,     3,     4,     5,     6,     7,
-       0,   168,     8,     9,     0,     0,    10,    11,    12,     0,
+      39,    40,    41,    42,    43,    44,     0,     0,   237,     1,
+       0,    46,     0,     2,     0,     3,     4,     5,     6,     7,
+     191,     0,     8,     9,     0,     0,    10,    11,    12,     0,
       14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
       23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
       29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-     203,     1,     0,    46,     0,     2,     0,     3,     4,     5,
-       6,     7,   168,     0,     8,     9,     0,     0,    10,    11,
+       1,   244,     0,    46,     2,     0,     3,     4,     5,     6,
+       7,     0,   191,     8,     9,     0,     0,    10,    11,    12,
+       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
+      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
+       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
+       0,     1,   245,     0,    46,     2,     0,     3,     4,     5,
+       6,     7,     0,   191,     8,     9,     0,     0,    10,    11,
       12,     0,    14,    15,    16,    17,    18,    19,    20,     0,
       21,    22,    23,    24,     0,    26,    27,    28,     0,     0,
        0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-       0,     0,   209,     1,     0,    46,     0,     2,     0,     3,
-       4,     5,     6,     7,   168,     0,     8,     9,     0,     0,
+       0,     0,     1,     0,     0,    46,     2,     0,     3,     4,
+       5,     6,     7,     0,   153,     8,     9,     0,     0,    10,
+      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
+       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,     0,     0,     1,     0,     0,    46,     2,     0,     3,
+       4,     5,     6,     7,     0,   191,     8,     9,     0,     0,
       10,    11,    12,     0,    14,    15,    16,    17,    18,    19,
       20,     0,    21,    22,    23,    24,     0,    26,    27,    28,
        0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
        0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     1,   216,     0,    46,     2,     0,
-       3,     4,     5,     6,     7,     0,   168,     8,     9,     0,
+      43,    44,     0,     0,     1,     0,     0,    46,     2,     0,
+       3,     4,     5,     6,     7,     0,   212,     8,     9,     0,
        0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
       19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
       28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
       34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     1,   217,     0,    46,     2,
-       0,     3,     4,     5,     6,     7,     0,   168,     8,     9,
-       0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
-      18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
-      27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
-      33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,     1,     0,     0,    46,
-       2,     0,     3,     4,     5,     6,     7,     0,   136,     8,
-       9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
-      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,     0,     0,     1,     0,     0,
-      46,     2,     0,     3,     4,     5,     6,     7,     0,   168,
-       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
-      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
-       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
-      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,     1,     0,
-       0,    46,     2,     0,     3,     4,     5,     6,     7,     0,
-     184,     8,     9,     0,     0,    10,    11,    12,     0,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
-      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     1,     0,     0,
-       0,     2,    46,     3,     4,     5,     6,     7,     0,     0,
-      63,   192,     0,     0,     0,    11,    12,     0,    14,    64,
-      16,    17,    18,    65,    20,     0,    21,    22,    23,    24,
-       0,    26,    27,     0,     0,     0,   186,     0,    29,    30,
-      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,   187,     0,     0,     0,     0,
-       0,    46,     0,   104,   105,   106,   107,   108,   109,   103,
-     110,     0,     0,   111,   112,   113,     0,     0,   104,   105,
-     106,   107,   108,   109,     0,   110,     0,     0,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,     0,     0,
-       0,     0,     0,     0,     0,     0,   114,   115,   116,   117,
-     118,   119,   120,   104,   105,   106,   107,   108,   109,     0,
-     110,     0,     0,   111,   112,   113,   104,   105,   106,   107,
-     108,   109,     0,   110,     0,     0,   111,   112,   113,     0,
-       0,   114,   115,   116,   117,   118,   119,   120,     0,     0,
-       0,     0,   134,     0,   114,   115,   116,   117,   118,   119,
-     120,     0,   157,   104,   105,   106,   107,   108,   109,     0,
-     110,     0,     0,   111,   112,   113,   104,   105,   106,   107,
-     108,   109,     0,   110,     0,     0,   111,   112,   113,     0,
-       0,   114,   115,   116,   117,   118,   119,   120,     0,   205,
-       0,     0,     0,     0,   114,   115,   116,   117,   118,   119,
-     120,     0,   211,   104,   105,   106,   107,   108,   109,     0,
-     110,     0,     0,   111,   112,   113,   104,   105,   106,   107,
-       0,     0,     0,   110,     0,     0,   111,   112,   113,     0,
-       0,   114,   115,   116,   117,   118,   119,   120,     0,     0,
-       0,     0,     0,     0,   114,   115,   116,   117,   118,   119,
-     120
+      42,    43,    44,     1,     0,     0,     0,     2,    46,     3,
+       4,     5,     6,     7,     0,     0,    64,   220,     0,     0,
+       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,    27,     0,
+       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,   112,     0,     0,     0,     0,     0,    46,     0,     0,
+     113,   114,   115,   116,   117,   118,     0,   119,     0,     0,
+     120,   121,   122,   113,   114,   115,   116,   117,   118,     0,
+     119,     0,     0,   120,   121,   122,     0,     0,   123,   124,
+     125,   126,   127,   128,   129,     0,     0,     0,     0,     0,
+       0,   123,   124,   125,   126,   127,   128,   129,     0,     0,
+       0,     0,   151,   113,   114,   115,   116,   117,   118,     0,
+     119,     0,     0,   120,   121,   122,   113,   114,   115,   116,
+     117,   118,     0,   119,     0,     0,   120,   121,   122,     0,
+       0,   123,   124,   125,   126,   127,   128,   129,     0,   180,
+       0,     0,     0,     0,   123,   124,   125,   126,   127,   128,
+     129,     0,   204,   113,   114,   115,   116,   117,   118,     0,
+     119,     0,     0,   120,   121,   122,   113,   114,   115,   116,
+     117,   118,     0,   119,     0,     0,   120,   121,   122,     0,
+       0,   123,   124,   125,   126,   127,   128,   129,     0,   233,
+       0,     0,     0,     0,   123,   124,   125,   126,   127,   128,
+     129,     0,   239,   113,   114,   115,   116,   117,   118,     0,
+     119,     0,     0,   120,   121,   122,   113,   114,   115,   116,
+       0,     0,     0,   119,     0,     0,   120,   121,   122,     0,
+       0,   123,   124,   125,   126,   127,   128,   129,     0,     0,
+       0,     0,     0,     0,   123,   124,   125,   126,   127,   128,
+     129
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    28,     0,   155,    57,   157,    39,    73,    39,     9,
-     170,    91,   164,    13,   174,     0,   176,    44,    86,   179,
-      86,    10,   102,    44,    45,    25,    86,    87,    28,    86,
-      83,    84,   184,    87,    52,   195,    88,    86,    57,    86,
-     192,    86,   202,    86,    44,    45,   206,   199,    86,    49,
-      87,    49,   212,   205,    81,   215,    73,    74,    75,   211,
-      86,    88,    81,    82,    83,    84,    57,    89,    24,    60,
-      86,    42,    86,    86,    89,    86,    86,    86,    86,    86,
-      86,    81,    86,    83,    49,   178,    -1,    76,    88,    80,
-      81,    82,    83,    84,    -1,    84,    -1,    97,    -1,    -1,
-      -1,    -1,    91,   103,    -1,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,
-      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
-     177,    -1,    -1,    -1,    -1,   155,    -1,   157,   158,    -1,
-      -1,    -1,    -1,    -1,   164,    -1,    -1,   156,    -1,    -1,
-     170,    -1,    -1,   173,   174,   173,   176,   177,    -1,   179,
-      -1,   181,    -1,   181,   184,    -1,    -1,    -1,    -1,    -1,
-      -1,   191,   192,    -1,    -1,   195,    -1,    -1,   187,   199,
-      -1,    -1,   202,    -1,    -1,   205,   206,   196,   208,     5,
-      -1,   211,   212,    -1,    10,   215,    -1,    13,    14,    15,
-      -1,    17,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      26,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,     5,
-      -1,    77,    -1,    -1,    10,    81,    82,    13,    14,    15,
-      -1,    17,    88,    19,    20,    21,    22,    23,    -1,    -1,
-      26,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    -1,    -1,    -1,    81,    82,    13,    -1,    -1,
-      -1,    17,    88,    19,    20,    21,    22,    23,    -1,    -1,
-      26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
+       0,    28,     0,    20,    57,    54,   172,    39,    73,     9,
+      44,    45,     0,    13,   180,    39,    42,    44,    86,    87,
+      20,    86,   188,   135,   136,    25,    52,    86,    28,   193,
+      83,    84,    86,   197,    75,    76,    77,    86,    88,   203,
+      87,    86,    86,   207,    44,    45,   212,    87,    86,    49,
+      86,    49,   101,    86,   220,    86,    57,    84,    86,   223,
+      89,   227,   111,    52,    86,    24,   230,   233,    89,    89,
+     234,    98,    86,   239,    32,    86,   240,    86,    86,   243,
+      81,    82,    83,    84,    84,    42,    49,    86,   206,    86,
+      90,    86,    50,    51,    52,    53,    54,    55,    98,    57,
+      58,    59,    60,    61,    62,    86,   106,    86,    86,    86,
+      23,    86,   112,    86,   112,    -1,    -1,   134,   135,   136,
+      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    42,
+      -1,    -1,    -1,    -1,   134,   135,   136,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
+      10,    -1,    -1,   153,    -1,    -1,    -1,    -1,    18,    -1,
+      57,    -1,    -1,    60,    -1,    78,    79,    80,    81,    82,
+      83,    84,   172,    -1,    -1,    -1,    -1,    -1,   205,    -1,
+     180,    -1,   182,    80,    81,    82,    83,    84,   188,    -1,
+      -1,    -1,    -1,   193,    -1,    -1,   196,   197,   196,    -1,
+      -1,    -1,    -1,   203,    -1,   205,    -1,   207,    -1,   209,
+      -1,   209,   212,    -1,    -1,    -1,    -1,    -1,    78,   219,
+     220,    -1,    -1,   223,    -1,    -1,    86,   227,    -1,    -1,
+     230,    91,    -1,   233,   234,    -1,   236,    -1,    -1,   239,
+     240,   101,    -1,   243,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,
+      -1,    -1,    -1,   143,    -1,    -1,     5,    -1,    -1,    -1,
+      -1,    10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,
+      19,    20,    21,    22,    23,    -1,    -1,    26,    -1,    -1,
+      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,   179,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    -1,    -1,   215,    -1,    -1,    77,    -1,
+      -1,    -1,    81,    82,   224,     5,    -1,    -1,    -1,    88,
+      10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    26,    -1,    -1,    -1,
+      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    -1,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    -1,    -1,    -1,     5,    -1,    77,    -1,    -1,
+      10,    81,    82,    13,    14,    15,    -1,    17,    88,    19,
+      20,    21,    22,    23,    -1,    -1,    26,    -1,    -1,    -1,
+      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    -1,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
+      -1,    81,    82,    13,    -1,    -1,    -1,    17,    88,    19,
+      20,    21,    22,    23,    -1,    -1,    26,    27,    -1,    -1,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    46,    47,    48,    49,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    -1,    13,    -1,    -1,    77,    17,    -1,
+      19,    20,    21,    22,    23,    24,    86,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,
+      17,    -1,    19,    20,    21,    22,    23,    86,    -1,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    -1,    75,    -1,
+      77,    -1,    -1,    -1,    13,    -1,    -1,    16,    17,    86,
+      19,    20,    21,    22,    23,    -1,    -1,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    17,
+      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    74,    13,    -1,    77,
+      -1,    17,    -1,    19,    20,    21,    22,    23,    86,    -1,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
       36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      46,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
       56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    -1,    13,    -1,
-      -1,    77,    17,    -1,    19,    20,    21,    22,    23,    24,
-      86,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
-      13,    -1,    77,    -1,    17,    -1,    19,    20,    21,    22,
-      23,    86,    -1,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    -1,    75,    -1,    77,    -1,    -1,    -1,    13,    -1,
-      -1,    16,    17,    86,    19,    20,    21,    22,    23,    -1,
-      -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
-      -1,    -1,    77,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    86,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    74,    13,
+      -1,    77,    -1,    17,    -1,    19,    20,    21,    22,    23,
+      86,    -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,
       34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
       44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
       54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      74,    13,    -1,    77,    -1,    17,    -1,    19,    20,    21,
-      22,    23,    86,    -1,    26,    27,    -1,    -1,    30,    31,
+      13,    75,    -1,    77,    17,    -1,    19,    20,    21,    22,
+      23,    -1,    86,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    13,    75,    -1,    77,    17,    -1,    19,    20,    21,
+      22,    23,    -1,    86,    26,    27,    -1,    -1,    30,    31,
       32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
       42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
       -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    74,    13,    -1,    77,    -1,    17,    -1,    19,
-      20,    21,    22,    23,    86,    -1,    26,    27,    -1,    -1,
+      -1,    -1,    13,    -1,    -1,    77,    17,    -1,    19,    20,
+      21,    22,    23,    -1,    86,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    13,    -1,    -1,    77,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    86,    26,    27,    -1,    -1,
       30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
       40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
       -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    13,    75,    -1,    77,    17,    -1,
+      70,    71,    -1,    -1,    13,    -1,    -1,    77,    17,    -1,
       19,    20,    21,    22,    23,    -1,    86,    26,    27,    -1,
       -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
       39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
       49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
       59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    13,    75,    -1,    77,    17,
-      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
-      17,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
-      77,    17,    -1,    19,    20,    21,    22,    23,    -1,    86,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
-      -1,    77,    17,    -1,    19,    20,    21,    22,    23,    -1,
-      86,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    13,    -1,    -1,
-      -1,    17,    77,    19,    20,    21,    22,    23,    -1,    -1,
-      26,    86,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    -1,    -1,    -1,    23,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    42,    -1,    -1,    -1,    -1,
-      -1,    77,    -1,    50,    51,    52,    53,    54,    55,    41,
-      57,    -1,    -1,    60,    61,    62,    -1,    -1,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    50,    51,    52,    53,    54,    55,    -1,
+      69,    70,    71,    13,    -1,    -1,    -1,    17,    77,    19,
+      20,    21,    22,    23,    -1,    -1,    26,    86,    -1,    -1,
+      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    -1,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    41,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      -1,    -1,    89,    50,    51,    52,    53,    54,    55,    -1,
       57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
       54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    89,    -1,    78,    79,    80,    81,    82,    83,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
       84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
       57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
       54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
@@ -1107,23 +1154,26 @@ static const yytype_int8 yystos[] =
       40,    42,    43,    44,    45,    46,    47,    48,    49,    54,
       55,    56,    57,    58,    59,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    77,    86,    91,    92,
-      93,    94,    95,   100,   102,   105,   106,   107,   108,   109,
-     110,   111,    39,    26,    35,    39,   102,   103,   104,     5,
-      10,    14,    15,    56,    81,    82,    88,   102,   115,   116,
-     117,   102,    39,    44,    45,   102,   103,   103,   102,     0,
-      93,    88,   117,   118,   119,    86,    86,    87,   116,   116,
-     116,   117,    88,    41,    50,    51,    52,    53,    54,    55,
-      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
-      84,   103,    86,   102,   117,    86,    86,    86,   103,   117,
-     118,    86,    87,   102,    89,   118,    86,   105,   117,   117,
-     117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
-     117,   117,   117,   117,   117,    86,    52,    86,    73,    86,
-      96,    97,    98,    99,    86,    89,   117,    89,    86,   105,
-     112,   113,   114,    24,   112,   117,   112,   102,    86,   112,
-      86,    24,    74,   114,    86,   105,    23,    42,    75,   103,
-      99,    16,    86,   105,    86,   112,    42,   117,    86,    86,
-     101,   102,   112,    74,   117,    86,   112,    86,    87,    74,
-      86,    86,   112,   102,    86,   112,    75,    75,    86,    86
+      93,    94,    95,   100,   102,   105,   106,   107,   108,   110,
+     111,   112,   113,    39,    26,    35,    39,    40,   102,   103,
+     104,     5,    10,    14,    15,    56,    81,    82,    88,   102,
+     117,   118,   121,   122,   102,    39,    88,   122,   123,   124,
+      44,    45,   102,   118,   120,   102,   103,   103,   102,     0,
+      93,    88,   122,   123,    86,    86,    87,   121,   121,   121,
+     122,    88,    41,    50,    51,    52,    53,    54,    55,    57,
+      60,    61,    62,    78,    79,    80,    81,    82,    83,    84,
+     103,    86,   122,   123,    32,    58,    59,    86,    87,   102,
+     122,    42,    52,   109,    86,    86,    86,   103,   123,    86,
+     102,    89,   123,    86,   105,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,    86,    89,   118,   119,   119,   119,   122,    52,
+      86,   122,    73,    86,    96,    97,    98,    99,    86,    89,
+      89,    86,   105,   114,   115,   116,    24,   114,    86,    86,
+      86,    86,   122,   114,    86,   102,    86,   114,    86,    24,
+      74,   116,    86,   105,    23,    42,    75,   103,    99,    16,
+      86,   105,    86,   114,    42,   122,    86,    86,   101,   102,
+     114,    74,   122,    86,   114,    86,    87,    74,    86,    86,
+     114,   102,    86,   114,    75,    75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1135,13 +1185,14 @@ static const yytype_int8 yyr1[] =
      102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
      102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
      102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   103,   103,   104,   104,   105,   105,   105,
-     105,   106,   106,   107,   107,   107,   107,   108,   108,   108,
-     109,   109,   110,   110,   110,   110,   111,   111,   111,   112,
-     112,   113,   113,   114,   114,   115,   115,   115,   115,   115,
-     115,   115,   115,   115,   116,   116,   117,   117,   117,   117,
-     117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
-     117,   117,   117,   117,   118,   118,   119,   119
+     102,   102,   103,   103,   104,   104,   105,   105,   105,   105,
+     106,   106,   106,   107,   107,   107,   107,   107,   107,   108,
+     108,   108,   108,   109,   109,   110,   110,   110,   111,   111,
+     112,   112,   112,   112,   113,   113,   113,   114,   114,   115,
+     115,   116,   116,   117,   117,   117,   117,   117,   117,   117,
+     117,   117,   118,   119,   120,   121,   121,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   123,   123,   124,   124
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1153,13 +1204,14 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     1,     1,     3,     1,     1,     1,
-       1,     1,     1,     5,     3,     3,     3,     3,     3,     3,
-       4,     7,     6,     9,     7,    10,     7,    11,    12,     0,
-       1,     1,     2,     1,     1,     1,     1,     1,     1,     2,
-       2,     2,     4,     1,     1,     3,     1,     3,     3,     3,
+       1,     1,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     5,     3,     5,     3,     3,     3,     5,
+       5,     5,     5,     1,     1,     3,     3,     3,     4,     7,
+       6,     9,     7,    10,     7,    11,    12,     0,     1,     1,
+       2,     1,     1,     1,     1,     1,     1,     2,     2,     2,
+       4,     1,     1,     1,     1,     1,     3,     1,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     0,     1,     1,     3
+       3,     3,     3,     3,     3,     0,     1,     1,     3
 };
 
 
@@ -1431,51 +1483,51 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 187 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1437 "engines/director/lingo/lingo-gr.cpp"
+#line 1489 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 187 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1443 "engines/director/lingo/lingo-gr.cpp"
+#line 1495 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 187 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1449 "engines/director/lingo/lingo-gr.cpp"
+#line 1501 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 187 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1455 "engines/director/lingo/lingo-gr.cpp"
+#line 1507 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 187 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1461 "engines/director/lingo/lingo-gr.cpp"
+#line 1513 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 187 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1467 "engines/director/lingo/lingo-gr.cpp"
+#line 1519 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 187 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1473 "engines/director/lingo/lingo-gr.cpp"
+#line 1525 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 187 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1479 "engines/director/lingo/lingo-gr.cpp"
+#line 1531 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -1741,709 +1793,739 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* script: scriptpartlist  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 1747 "engines/director/lingo/lingo-gr.cpp"
+#line 1799 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 195 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1758 "engines/director/lingo/lingo-gr.cpp"
+#line 1810 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
-#line 198 "engines/director/lingo/lingo-gr.y"
+#line 201 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1768 "engines/director/lingo/lingo-gr.cpp"
+#line 1820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
-#line 205 "engines/director/lingo/lingo-gr.y"
+#line 208 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 1774 "engines/director/lingo/lingo-gr.cpp"
+#line 1826 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
-#line 238 "engines/director/lingo/lingo-gr.y"
+#line 241 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1780 "engines/director/lingo/lingo-gr.cpp"
+#line 1832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
-#line 242 "engines/director/lingo/lingo-gr.y"
+#line 245 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 1786 "engines/director/lingo/lingo-gr.cpp"
+#line 1838 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
-#line 244 "engines/director/lingo/lingo-gr.y"
+#line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1792 "engines/director/lingo/lingo-gr.cpp"
+#line 1844 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
-#line 246 "engines/director/lingo/lingo-gr.y"
+#line 249 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 1798 "engines/director/lingo/lingo-gr.cpp"
+#line 1850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
-#line 250 "engines/director/lingo/lingo-gr.y"
+#line 253 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1809 "engines/director/lingo/lingo-gr.cpp"
+#line 1861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
-#line 256 "engines/director/lingo/lingo-gr.y"
+#line 259 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 1819 "engines/director/lingo/lingo-gr.cpp"
+#line 1871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
-#line 263 "engines/director/lingo/lingo-gr.y"
+#line 266 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 1825 "engines/director/lingo/lingo-gr.cpp"
+#line 1877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
-#line 269 "engines/director/lingo/lingo-gr.y"
+#line 272 "engines/director/lingo/lingo-gr.y"
                                                                {	// D3
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 1834 "engines/director/lingo/lingo-gr.cpp"
+#line 1886 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
-#line 273 "engines/director/lingo/lingo-gr.y"
+#line 276 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1841 "engines/director/lingo/lingo-gr.cpp"
+#line 1893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
-#line 278 "engines/director/lingo/lingo-gr.y"
+#line 281 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 1847 "engines/director/lingo/lingo-gr.cpp"
+#line 1899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
-#line 279 "engines/director/lingo/lingo-gr.y"
+#line 282 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 1853 "engines/director/lingo/lingo-gr.cpp"
+#line 1905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
-#line 285 "engines/director/lingo/lingo-gr.y"
+#line 288 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 1859 "engines/director/lingo/lingo-gr.cpp"
+#line 1911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
-#line 286 "engines/director/lingo/lingo-gr.y"
+#line 289 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 1865 "engines/director/lingo/lingo-gr.cpp"
+#line 1917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
-#line 287 "engines/director/lingo/lingo-gr.y"
+#line 290 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 1871 "engines/director/lingo/lingo-gr.cpp"
+#line 1923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
-#line 288 "engines/director/lingo/lingo-gr.y"
+#line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 1877 "engines/director/lingo/lingo-gr.cpp"
+#line 1929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
-#line 289 "engines/director/lingo/lingo-gr.y"
+#line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 1883 "engines/director/lingo/lingo-gr.cpp"
+#line 1935 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
-#line 290 "engines/director/lingo/lingo-gr.y"
+#line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 1889 "engines/director/lingo/lingo-gr.cpp"
+#line 1941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tEXIT  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 1895 "engines/director/lingo/lingo-gr.cpp"
+#line 1947 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFIELD  */
-#line 295 "engines/director/lingo/lingo-gr.y"
+#line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 1901 "engines/director/lingo/lingo-gr.cpp"
+#line 1953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
-#line 298 "engines/director/lingo/lingo-gr.y"
+#line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 1907 "engines/director/lingo/lingo-gr.cpp"
+#line 1959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
-#line 300 "engines/director/lingo/lingo-gr.y"
+#line 303 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 1913 "engines/director/lingo/lingo-gr.cpp"
+#line 1965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
-#line 301 "engines/director/lingo/lingo-gr.y"
+#line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 1919 "engines/director/lingo/lingo-gr.cpp"
+#line 1971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
-#line 302 "engines/director/lingo/lingo-gr.y"
+#line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 1925 "engines/director/lingo/lingo-gr.cpp"
+#line 1977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 1931 "engines/director/lingo/lingo-gr.cpp"
+#line 1983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
-#line 306 "engines/director/lingo/lingo-gr.y"
+#line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 1937 "engines/director/lingo/lingo-gr.cpp"
+#line 1989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 1943 "engines/director/lingo/lingo-gr.cpp"
+#line 1995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 1949 "engines/director/lingo/lingo-gr.cpp"
+#line 2001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
-#line 309 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 1955 "engines/director/lingo/lingo-gr.cpp"
+#line 2007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 1961 "engines/director/lingo/lingo-gr.cpp"
+#line 2013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 1967 "engines/director/lingo/lingo-gr.cpp"
+#line 2019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 1973 "engines/director/lingo/lingo-gr.cpp"
+#line 2025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPLAY  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 1979 "engines/director/lingo/lingo-gr.cpp"
+#line 2031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tPLAYACCEL  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("playAccel"); }
-#line 1985 "engines/director/lingo/lingo-gr.cpp"
+#line 2037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tPREVIOUS  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 1991 "engines/director/lingo/lingo-gr.cpp"
+#line 2043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 48: /* ID: tPUT  */
-#line 318 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("put"); }
-#line 1997 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 49: /* ID: tREPEAT  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+  case 48: /* ID: tREPEAT  */
+#line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2003 "engines/director/lingo/lingo-gr.cpp"
+#line 2049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50: /* ID: tSCRIPT  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+  case 49: /* ID: tSCRIPT  */
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2009 "engines/director/lingo/lingo-gr.cpp"
+#line 2055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51: /* ID: tSET  */
-#line 321 "engines/director/lingo/lingo-gr.y"
+  case 50: /* ID: tSET  */
+#line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2015 "engines/director/lingo/lingo-gr.cpp"
+#line 2061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 52: /* ID: tSTARTS  */
-#line 322 "engines/director/lingo/lingo-gr.y"
+  case 51: /* ID: tSTARTS  */
+#line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2021 "engines/director/lingo/lingo-gr.cpp"
+#line 2067 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 53: /* ID: tTELL  */
-#line 323 "engines/director/lingo/lingo-gr.y"
+  case 52: /* ID: tTELL  */
+#line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2027 "engines/director/lingo/lingo-gr.cpp"
+#line 2073 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 54: /* ID: tTO  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+  case 53: /* ID: tTO  */
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2033 "engines/director/lingo/lingo-gr.cpp"
+#line 2079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 55: /* ID: tASSERTERROR  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+  case 54: /* ID: tASSERTERROR  */
+#line 329 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2039 "engines/director/lingo/lingo-gr.cpp"
+#line 2085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56: /* ID: tSPRITE  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+  case 55: /* ID: tSPRITE  */
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2045 "engines/director/lingo/lingo-gr.cpp"
+#line 2091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57: /* ID: tWHEN  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+  case 56: /* ID: tWHEN  */
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2051 "engines/director/lingo/lingo-gr.cpp"
+#line 2097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58: /* ID: tWHILE  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+  case 57: /* ID: tWHILE  */
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2057 "engines/director/lingo/lingo-gr.cpp"
+#line 2103 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* ID: tWINDOW  */
-#line 330 "engines/director/lingo/lingo-gr.y"
+  case 58: /* ID: tWINDOW  */
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2063 "engines/director/lingo/lingo-gr.cpp"
+#line 2109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 60: /* ID: tWITH  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+  case 59: /* ID: tWITH  */
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2069 "engines/director/lingo/lingo-gr.cpp"
+#line 2115 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61: /* ID: tWITHIN  */
-#line 332 "engines/director/lingo/lingo-gr.y"
+  case 60: /* ID: tWITHIN  */
+#line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2075 "engines/director/lingo/lingo-gr.cpp"
+#line 2121 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62: /* ID: tWORD  */
-#line 333 "engines/director/lingo/lingo-gr.y"
+  case 61: /* ID: tWORD  */
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2081 "engines/director/lingo/lingo-gr.cpp"
+#line 2127 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63: /* idlist: %empty  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+  case 62: /* idlist: %empty  */
+#line 339 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2087 "engines/director/lingo/lingo-gr.cpp"
+#line 2133 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 65: /* nonemptyidlist: ID  */
-#line 340 "engines/director/lingo/lingo-gr.y"
+  case 64: /* nonemptyidlist: ID  */
+#line 343 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2096 "engines/director/lingo/lingo-gr.cpp"
+#line 2142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 66: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 344 "engines/director/lingo/lingo-gr.y"
+  case 65: /* nonemptyidlist: nonemptyidlist ',' ID  */
+#line 347 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2104 "engines/director/lingo/lingo-gr.cpp"
+#line 2150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* proc: ID '(' exprlist ')' '\n'  */
-#line 364 "engines/director/lingo/lingo-gr.y"
+#line 368 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new CmdNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
-#line 2110 "engines/director/lingo/lingo-gr.cpp"
+#line 2156 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* proc: ID exprlist '\n'  */
-#line 365 "engines/director/lingo/lingo-gr.y"
+#line 369 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2116 "engines/director/lingo/lingo-gr.cpp"
+#line 2162 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 75: /* proc: tPUT '(' exprlist ')' '\n'  */
+#line 370 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-2].nodelist)); }
+#line 2168 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 76: /* proc: tPUT exprlist '\n'  */
+#line 371 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
+#line 2174 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tNEXT tREPEAT '\n'  */
-#line 366 "engines/director/lingo/lingo-gr.y"
+  case 77: /* proc: tNEXT tREPEAT '\n'  */
+#line 372 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2122 "engines/director/lingo/lingo-gr.cpp"
+#line 2180 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tEXIT tREPEAT '\n'  */
-#line 367 "engines/director/lingo/lingo-gr.y"
+  case 78: /* proc: tEXIT tREPEAT '\n'  */
+#line 373 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2128 "engines/director/lingo/lingo-gr.cpp"
+#line 2186 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* definevars: tGLOBAL idlist '\n'  */
-#line 370 "engines/director/lingo/lingo-gr.y"
+  case 79: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 376 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
+#line 2192 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 80: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 377 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
+#line 2198 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 81: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 378 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
+#line 2204 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 82: /* asgn: tSET varorthe to expr '\n'  */
+#line 379 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
+#line 2210 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 85: /* definevars: tGLOBAL idlist '\n'  */
+#line 384 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2134 "engines/director/lingo/lingo-gr.cpp"
+#line 2216 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* definevars: tPROPERTY idlist '\n'  */
-#line 371 "engines/director/lingo/lingo-gr.y"
+  case 86: /* definevars: tPROPERTY idlist '\n'  */
+#line 385 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2140 "engines/director/lingo/lingo-gr.cpp"
+#line 2222 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* definevars: tINSTANCE idlist '\n'  */
-#line 372 "engines/director/lingo/lingo-gr.y"
+  case 87: /* definevars: tINSTANCE idlist '\n'  */
+#line 386 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2146 "engines/director/lingo/lingo-gr.cpp"
+#line 2228 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* ifstmt: tIF expr tTHEN stmt  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+  case 88: /* ifstmt: tIF expr tTHEN stmt  */
+#line 389 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2155 "engines/director/lingo/lingo-gr.cpp"
+#line 2237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+  case 89: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 393 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2162 "engines/director/lingo/lingo-gr.cpp"
+#line 2244 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 383 "engines/director/lingo/lingo-gr.y"
+  case 90: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 397 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2173 "engines/director/lingo/lingo-gr.cpp"
+#line 2255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 389 "engines/director/lingo/lingo-gr.y"
+  case 91: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 403 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2182 "engines/director/lingo/lingo-gr.cpp"
+#line 2264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 393 "engines/director/lingo/lingo-gr.y"
+  case 92: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 407 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2191 "engines/director/lingo/lingo-gr.cpp"
+#line 2273 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+  case 93: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 411 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2198 "engines/director/lingo/lingo-gr.cpp"
+#line 2280 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 401 "engines/director/lingo/lingo-gr.y"
+  case 94: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 415 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2205 "engines/director/lingo/lingo-gr.cpp"
+#line 2287 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+  case 95: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 417 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2212 "engines/director/lingo/lingo-gr.cpp"
+#line 2294 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 405 "engines/director/lingo/lingo-gr.y"
+  case 96: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 419 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2219 "engines/director/lingo/lingo-gr.cpp"
+#line 2301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* stmtlist: %empty  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+  case 97: /* stmtlist: %empty  */
+#line 423 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2225 "engines/director/lingo/lingo-gr.cpp"
+#line 2307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* nonemptystmtlist: stmtlistline  */
-#line 414 "engines/director/lingo/lingo-gr.y"
+  case 99: /* nonemptystmtlist: stmtlistline  */
+#line 428 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2236 "engines/director/lingo/lingo-gr.cpp"
+#line 2318 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+  case 100: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 434 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2246 "engines/director/lingo/lingo-gr.cpp"
+#line 2328 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* stmtlistline: '\n'  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 101: /* stmtlistline: '\n'  */
+#line 441 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2252 "engines/director/lingo/lingo-gr.cpp"
+#line 2334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* simpleexprnoparens: tINT  */
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 103: /* simpleexprnoparens: tINT  */
+#line 447 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2258 "engines/director/lingo/lingo-gr.cpp"
+#line 2340 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* simpleexprnoparens: tFLOAT  */
-#line 434 "engines/director/lingo/lingo-gr.y"
+  case 104: /* simpleexprnoparens: tFLOAT  */
+#line 448 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2264 "engines/director/lingo/lingo-gr.cpp"
+#line 2346 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* simpleexprnoparens: tSYMBOL  */
-#line 435 "engines/director/lingo/lingo-gr.y"
+  case 105: /* simpleexprnoparens: tSYMBOL  */
+#line 449 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2270 "engines/director/lingo/lingo-gr.cpp"
+#line 2352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* simpleexprnoparens: tSTRING  */
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 106: /* simpleexprnoparens: tSTRING  */
+#line 450 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2276 "engines/director/lingo/lingo-gr.cpp"
+#line 2358 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* simpleexprnoparens: '+' simpleexpr  */
-#line 437 "engines/director/lingo/lingo-gr.y"
+  case 107: /* simpleexprnoparens: '+' simpleexpr  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[0].node); }
-#line 2282 "engines/director/lingo/lingo-gr.cpp"
+#line 2364 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* simpleexprnoparens: '-' simpleexpr  */
-#line 438 "engines/director/lingo/lingo-gr.y"
+  case 108: /* simpleexprnoparens: '-' simpleexpr  */
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2288 "engines/director/lingo/lingo-gr.cpp"
+#line 2370 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 109: /* simpleexprnoparens: tNOT simpleexpr  */
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2294 "engines/director/lingo/lingo-gr.cpp"
+#line 2376 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* simpleexprnoparens: ID '(' exprlist ')'  */
-#line 440 "engines/director/lingo/lingo-gr.y"
+  case 110: /* simpleexprnoparens: ID '(' exprlist ')'  */
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2300 "engines/director/lingo/lingo-gr.cpp"
+#line 2382 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* simpleexprnoparens: ID  */
-#line 441 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2306 "engines/director/lingo/lingo-gr.cpp"
+  case 112: /* var: ID  */
+#line 458 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new VarNode((yyvsp[0].s)); }
+#line 2388 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* simpleexpr: '(' expr ')'  */
-#line 445 "engines/director/lingo/lingo-gr.y"
+  case 116: /* simpleexpr: '(' expr ')'  */
+#line 469 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2312 "engines/director/lingo/lingo-gr.cpp"
+#line 2394 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* expr: simpleexpr  */
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 117: /* expr: simpleexpr  */
+#line 472 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2318 "engines/director/lingo/lingo-gr.cpp"
+#line 2400 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* expr: expr '+' expr  */
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 118: /* expr: expr '+' expr  */
+#line 473 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2324 "engines/director/lingo/lingo-gr.cpp"
+#line 2406 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* expr: expr '-' expr  */
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 119: /* expr: expr '-' expr  */
+#line 474 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2330 "engines/director/lingo/lingo-gr.cpp"
+#line 2412 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* expr: expr '*' expr  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 120: /* expr: expr '*' expr  */
+#line 475 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2336 "engines/director/lingo/lingo-gr.cpp"
+#line 2418 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* expr: expr '/' expr  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 121: /* expr: expr '/' expr  */
+#line 476 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2342 "engines/director/lingo/lingo-gr.cpp"
+#line 2424 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* expr: expr tMOD expr  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 122: /* expr: expr tMOD expr  */
+#line 477 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2348 "engines/director/lingo/lingo-gr.cpp"
+#line 2430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* expr: expr '>' expr  */
-#line 454 "engines/director/lingo/lingo-gr.y"
+  case 123: /* expr: expr '>' expr  */
+#line 478 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2354 "engines/director/lingo/lingo-gr.cpp"
+#line 2436 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* expr: expr '<' expr  */
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 124: /* expr: expr '<' expr  */
+#line 479 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2360 "engines/director/lingo/lingo-gr.cpp"
+#line 2442 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* expr: expr tEQ expr  */
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 125: /* expr: expr tEQ expr  */
+#line 480 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2366 "engines/director/lingo/lingo-gr.cpp"
+#line 2448 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* expr: expr tNEQ expr  */
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 126: /* expr: expr tNEQ expr  */
+#line 481 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2372 "engines/director/lingo/lingo-gr.cpp"
+#line 2454 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* expr: expr tGE expr  */
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 127: /* expr: expr tGE expr  */
+#line 482 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2378 "engines/director/lingo/lingo-gr.cpp"
+#line 2460 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* expr: expr tLE expr  */
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 128: /* expr: expr tLE expr  */
+#line 483 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2384 "engines/director/lingo/lingo-gr.cpp"
+#line 2466 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* expr: expr tAND expr  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 129: /* expr: expr tAND expr  */
+#line 484 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2390 "engines/director/lingo/lingo-gr.cpp"
+#line 2472 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* expr: expr tOR expr  */
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 130: /* expr: expr tOR expr  */
+#line 485 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2396 "engines/director/lingo/lingo-gr.cpp"
+#line 2478 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* expr: expr '&' expr  */
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 131: /* expr: expr '&' expr  */
+#line 486 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2402 "engines/director/lingo/lingo-gr.cpp"
+#line 2484 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* expr: expr tCONCAT expr  */
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 132: /* expr: expr tCONCAT expr  */
+#line 487 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2408 "engines/director/lingo/lingo-gr.cpp"
+#line 2490 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* expr: expr tCONTAINS expr  */
-#line 464 "engines/director/lingo/lingo-gr.y"
+  case 133: /* expr: expr tCONTAINS expr  */
+#line 488 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2414 "engines/director/lingo/lingo-gr.cpp"
+#line 2496 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* expr: expr tSTARTS expr  */
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 134: /* expr: expr tSTARTS expr  */
+#line 489 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2420 "engines/director/lingo/lingo-gr.cpp"
+#line 2502 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* exprlist: %empty  */
-#line 468 "engines/director/lingo/lingo-gr.y"
+  case 135: /* exprlist: %empty  */
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 2426 "engines/director/lingo/lingo-gr.cpp"
+#line 2508 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* nonemptyexprlist: expr  */
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 137: /* nonemptyexprlist: expr  */
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2435 "engines/director/lingo/lingo-gr.cpp"
+#line 2517 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 138: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 500 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2443 "engines/director/lingo/lingo-gr.cpp"
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 2447 "engines/director/lingo/lingo-gr.cpp"
+#line 2529 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -2642,7 +2724,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 481 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 97c8ef2dd7..e8966441d9 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -164,12 +164,15 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<idlist> idlist nonemptyidlist
 
 // STATEMENT
-%type<node> stmt stmtoneliner proc definevars ifstmt ifelsestmt loop
+%type<node> stmt stmtoneliner
+%type<node> proc asgn definevars
+%type<node> ifstmt ifelsestmt loop
 %type<nodelist> stmtlist nonemptystmtlist
 %type<node> stmtlistline
 
 // EXPRESSION
 %type<node> simpleexprnoparens simpleexpr expr
+%type<node> var varorchunk varorthe
 %type<nodelist> exprlist nonemptyexprlist
 
 %left tAND tOR
@@ -315,7 +318,7 @@ ID: tVARID
 	| tPLAYACCEL	{ $$ = new Common::String("playAccel"); }
 	| tPREVIOUS		{ $$ = new Common::String("previous"); }
 	// | tPROPERTY		{ $$ = new Common::String("property"); }
-	| tPUT			{ $$ = new Common::String("put"); }
+	// | tPUT			{ $$ = new Common::String("put"); }
 	| tREPEAT		{ $$ = new Common::String("repeat"); }
 	| tSCRIPT		{ $$ = new Common::String("script"); }
 	| tSET			{ $$ = new Common::String("set"); }
@@ -358,15 +361,26 @@ stmt: stmtoneliner
 	;
 
 stmtoneliner: proc
+	| asgn
 	| definevars
 	;
 
 proc: ID '(' exprlist[args] ')' '\n'	{ $$ = new CmdNode($ID, $args); }
 	| ID exprlist[args] '\n'			{ $$ = new CmdNode($ID, $args); }
+	| tPUT '(' exprlist[args] ')' '\n'	{ $$ = new CmdNode(new Common::String("put"), $args); }
+	| tPUT exprlist[args] '\n'			{ $$ = new CmdNode(new Common::String("put"), $args); }
 	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
 	| tEXIT tREPEAT '\n'				{ $$ = new ExitRepeatNode(); }
 	;
 
+asgn: tPUT expr tINTO varorchunk '\n'	{ $$ = new PutIntoNode($expr, $varorchunk); }
+	| tPUT expr tAFTER varorchunk '\n'	{ $$ = new PutAfterNode($expr, $varorchunk); }
+	| tPUT expr tBEFORE varorchunk '\n'	{ $$ = new PutBeforeNode($expr, $varorchunk); }
+	| tSET varorthe to expr '\n'		{ $$ = new SetNode($varorthe, $expr); }
+	;
+
+to: tTO | tEQ ;
+
 definevars: tGLOBAL idlist '\n'			{ $$ = new GlobalNode($idlist); }
 	| tPROPERTY idlist '\n'				{ $$ = new PropertyNode($idlist); }
 	| tINSTANCE idlist '\n'				{ $$ = new InstanceNode($idlist); }
@@ -438,7 +452,17 @@ simpleexprnoparens: tINT			{ $$ = new IntNode($tINT); }
 	| '-' simpleexpr[arg]  %prec tUNARY		{ $$ = new UnaryOpNode(LC::c_negate, $arg); }
 	| tNOT simpleexpr[arg]  %prec tUNARY	{ $$ = new UnaryOpNode(LC::c_not, $arg); }
 	| ID '(' exprlist[args] ')'		{ $$ = new FuncNode($ID, $args); }
-	| ID							{ $$ = new VarNode($ID); }
+	| var
+	;
+
+var: ID							{ $$ = new VarNode($ID); } ;
+
+varorchunk: var
+	// TODO: chunk ref
+	;
+
+varorthe: var
+	// TODO: the
 	;
 
 simpleexpr: simpleexprnoparens


Commit: cb7d578a5534f83d6a2da3be7f7800a76e69b0fd
    https://github.com/scummvm/scummvm/commit/cb7d578a5534f83d6a2da3be7f7800a76e69b0fd
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix ExprNode superclass

Changed paths:
    engines/director/lingo/lingo-ast.h


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index 630ed4b845..c15658b9b9 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -499,12 +499,12 @@ struct StringNode : ExprNode {
 
 /* FuncNode */
 
-struct FuncNode : StmtNode {
+struct FuncNode : ExprNode {
 	Common::String *name;
 	NodeList *args;
 
 	FuncNode(Common::String *nameIn, NodeList *argsIn)
-		: StmtNode(kFuncNode), name(nameIn), args(argsIn) {}
+		: ExprNode(kFuncNode), name(nameIn), args(argsIn) {}
 	virtual ~FuncNode() {
 		delete name;
 		deleteList(args);


Commit: ced5aaeb3f4d8c897413f78cc3042a682a9af243
    https://github.com/scummvm/scummvm/commit/ced5aaeb3f4d8c897413f78cc3042a682a9af243
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix symbol token type

Changed paths:
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 63462ed4e2..c850233aa7 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1100,7 +1100,7 @@ YY_RULE_SETUP
 case 2:
 YY_RULE_SETUP
 #line 115 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
+{ count(); yylval.s = new Common::String(yytext + 1); return tSYMBOL; }	// D3, skip '#'
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index ed3a6d3322..49511cd61a 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -112,7 +112,7 @@ spc [ \t\xC2]
 
 {spc}+		{ count(); }
 
-[#]{identifier}	{ count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
+[#]{identifier}	{ count(); yylval.s = new Common::String(yytext + 1); return tSYMBOL; }	// D3, skip '#'
 
 after		{ count(); return tAFTER; }		// D3
 and			{ count(); return tAND; }


Commit: 38c0d5fddd75aa770689542747620f84954e5ade
    https://github.com/scummvm/scummvm/commit/38c0d5fddd75aa770689542747620f84954e5ade
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Switch proplist value and prop order

It's the same order as the original now.

Changed paths:
    engines/director/lingo/lingo-code.cpp


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 6c3c960e3f..594fb9cd89 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -434,8 +434,8 @@ void LC::c_proparraypush() {
 	d.u.parr = new PropertyArray;
 
 	for (int i = 0; i < arraySize; i++) {
-		Datum p = g_lingo->pop();
 		Datum v = g_lingo->pop();
+		Datum p = g_lingo->pop();
 
 		PCell cell = PCell(p, v);
 		d.u.parr->insert_at(0, cell);


Commit: a6cfb4e2757841bfacd3695f624bbee5e543927c
    https://github.com/scummvm/scummvm/commit/a6cfb4e2757841bfacd3695f624bbee5e543927c
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement lists

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index c15658b9b9..f39882280a 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -47,6 +47,9 @@ struct IntNode;
 struct FloatNode;
 struct SymbolNode;
 struct StringNode;
+struct ListNode;
+struct PropListNode;
+struct PropPairNode;
 struct FuncNode;
 struct VarNode;
 struct ParensNode;
@@ -88,6 +91,9 @@ enum NodeType {
 	kFloatNode,
 	kSymbolNode,
 	kStringNode,
+	kListNode,
+	kPropListNode,
+	kPropPairNode,
 	kFuncNode,
 	kVarNode,
 	kParensNode,
@@ -123,6 +129,9 @@ public:
 	virtual void visitFloatNode(FloatNode *node) = 0;
 	virtual void visitSymbolNode(SymbolNode *node) = 0;
 	virtual void visitStringNode(StringNode *node) = 0;
+	virtual void visitListNode(ListNode *node) = 0;
+	virtual void visitPropListNode(PropListNode *node) = 0;
+	virtual void visitPropPairNode(PropPairNode *node) = 0;
 	virtual void visitFuncNode(FuncNode *node) = 0;
 	virtual void visitVarNode(VarNode *node) = 0;
 	virtual void visitParensNode(ParensNode *node) = 0;
@@ -497,6 +506,51 @@ struct StringNode : ExprNode {
 	}
 };
 
+/* ListNode */
+
+struct ListNode : ExprNode {
+	NodeList *items;
+
+	ListNode(NodeList *itemsIn) : ExprNode(kListNode), items(itemsIn) {}
+	virtual ~ListNode() {
+		deleteList(items);
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitListNode(this);
+	}
+};
+
+/* PropListNode */
+
+struct PropListNode : ExprNode {
+	NodeList *items;
+
+	PropListNode(NodeList *itemsIn) : ExprNode(kListNode), items(itemsIn) {}
+	virtual ~PropListNode() {
+		deleteList(items);
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitPropListNode(this);
+	}
+};
+
+/* PropPairNode */
+
+struct PropPairNode : ExprNode {
+	Node *key;
+	Node *val;
+
+	PropPairNode(Node *keyIn, Node *valIn)
+		: ExprNode(kPropPairNode), key(keyIn), val(valIn) {}
+	virtual ~PropPairNode() {
+		delete key;
+		delete val;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitPropPairNode(this);
+	}
+};
+
 /* FuncNode */
 
 struct FuncNode : ExprNode {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 7116267f03..ecce15946e 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -693,6 +693,29 @@ void LingoCompiler::visitStringNode(StringNode *node) {
 	codeString(node->val->c_str());
 }
 
+/* ListNode */
+
+void LingoCompiler::visitListNode(ListNode *node) {
+	compileList(node->items);
+	code1(LC::c_arraypush);
+	codeInt(node->items->size());
+}
+
+/* PropListNode */
+
+void LingoCompiler::visitPropListNode(PropListNode *node) {
+	compileList(node->items);
+	code1(LC::c_proparraypush);
+	codeInt(node->items->size());
+}
+
+/* PropPairNode */
+
+void LingoCompiler::visitPropPairNode(PropPairNode *node) {
+	compile(node->key);
+	compile(node->val);
+}
+
 /* FuncNode */
 
 void LingoCompiler::visitFuncNode(FuncNode *node) {
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index e84efd67ec..a6e73dcc3a 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -98,6 +98,9 @@ public:
 	virtual void visitFloatNode(FloatNode *node);
 	virtual void visitSymbolNode(SymbolNode *node);
 	virtual void visitStringNode(StringNode *node);
+	virtual void visitListNode(ListNode *node);
+	virtual void visitPropListNode(PropListNode *node);
+	virtual void visitPropPairNode(PropPairNode *node);
 	virtual void visitFuncNode(FuncNode *node);
 	virtual void visitVarNode(VarNode *node);
 	virtual void visitParensNode(ParensNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index d816255af9..0c7923eb10 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -242,41 +242,47 @@ enum yysymbol_kind_t
   YYSYMBOL_87_ = 87,                       /* ','  */
   YYSYMBOL_88_ = 88,                       /* '('  */
   YYSYMBOL_89_ = 89,                       /* ')'  */
-  YYSYMBOL_YYACCEPT = 90,                  /* $accept  */
-  YYSYMBOL_script = 91,                    /* script  */
-  YYSYMBOL_scriptpartlist = 92,            /* scriptpartlist  */
-  YYSYMBOL_scriptpart = 93,                /* scriptpart  */
-  YYSYMBOL_macro = 94,                     /* macro  */
-  YYSYMBOL_factory = 95,                   /* factory  */
-  YYSYMBOL_method = 96,                    /* method  */
-  YYSYMBOL_methodlist = 97,                /* methodlist  */
-  YYSYMBOL_nonemptymethodlist = 98,        /* nonemptymethodlist  */
-  YYSYMBOL_methodlistline = 99,            /* methodlistline  */
-  YYSYMBOL_handler = 100,                  /* handler  */
-  YYSYMBOL_endargdef = 101,                /* endargdef  */
-  YYSYMBOL_ID = 102,                       /* ID  */
-  YYSYMBOL_idlist = 103,                   /* idlist  */
-  YYSYMBOL_nonemptyidlist = 104,           /* nonemptyidlist  */
-  YYSYMBOL_stmt = 105,                     /* stmt  */
-  YYSYMBOL_stmtoneliner = 106,             /* stmtoneliner  */
-  YYSYMBOL_proc = 107,                     /* proc  */
-  YYSYMBOL_asgn = 108,                     /* asgn  */
-  YYSYMBOL_to = 109,                       /* to  */
-  YYSYMBOL_definevars = 110,               /* definevars  */
-  YYSYMBOL_ifstmt = 111,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 112,               /* ifelsestmt  */
-  YYSYMBOL_loop = 113,                     /* loop  */
-  YYSYMBOL_stmtlist = 114,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 115,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 116,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 117,       /* simpleexprnoparens  */
-  YYSYMBOL_var = 118,                      /* var  */
-  YYSYMBOL_varorchunk = 119,               /* varorchunk  */
-  YYSYMBOL_varorthe = 120,                 /* varorthe  */
-  YYSYMBOL_simpleexpr = 121,               /* simpleexpr  */
-  YYSYMBOL_expr = 122,                     /* expr  */
-  YYSYMBOL_exprlist = 123,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 124          /* nonemptyexprlist  */
+  YYSYMBOL_90_ = 90,                       /* '['  */
+  YYSYMBOL_91_ = 91,                       /* ']'  */
+  YYSYMBOL_92_ = 92,                       /* ':'  */
+  YYSYMBOL_YYACCEPT = 93,                  /* $accept  */
+  YYSYMBOL_script = 94,                    /* script  */
+  YYSYMBOL_scriptpartlist = 95,            /* scriptpartlist  */
+  YYSYMBOL_scriptpart = 96,                /* scriptpart  */
+  YYSYMBOL_macro = 97,                     /* macro  */
+  YYSYMBOL_factory = 98,                   /* factory  */
+  YYSYMBOL_method = 99,                    /* method  */
+  YYSYMBOL_methodlist = 100,               /* methodlist  */
+  YYSYMBOL_nonemptymethodlist = 101,       /* nonemptymethodlist  */
+  YYSYMBOL_methodlistline = 102,           /* methodlistline  */
+  YYSYMBOL_handler = 103,                  /* handler  */
+  YYSYMBOL_endargdef = 104,                /* endargdef  */
+  YYSYMBOL_ID = 105,                       /* ID  */
+  YYSYMBOL_idlist = 106,                   /* idlist  */
+  YYSYMBOL_nonemptyidlist = 107,           /* nonemptyidlist  */
+  YYSYMBOL_stmt = 108,                     /* stmt  */
+  YYSYMBOL_stmtoneliner = 109,             /* stmtoneliner  */
+  YYSYMBOL_proc = 110,                     /* proc  */
+  YYSYMBOL_asgn = 111,                     /* asgn  */
+  YYSYMBOL_to = 112,                       /* to  */
+  YYSYMBOL_definevars = 113,               /* definevars  */
+  YYSYMBOL_ifstmt = 114,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 115,               /* ifelsestmt  */
+  YYSYMBOL_loop = 116,                     /* loop  */
+  YYSYMBOL_stmtlist = 117,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 118,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 119,             /* stmtlistline  */
+  YYSYMBOL_simpleexprnoparens = 120,       /* simpleexprnoparens  */
+  YYSYMBOL_var = 121,                      /* var  */
+  YYSYMBOL_varorchunk = 122,               /* varorchunk  */
+  YYSYMBOL_varorthe = 123,                 /* varorthe  */
+  YYSYMBOL_simpleexpr = 124,               /* simpleexpr  */
+  YYSYMBOL_list = 125,                     /* list  */
+  YYSYMBOL_proplist = 126,                 /* proplist  */
+  YYSYMBOL_proppair = 127,                 /* proppair  */
+  YYSYMBOL_expr = 128,                     /* expr  */
+  YYSYMBOL_exprlist = 129,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 130          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -393,7 +399,7 @@ typedef int yytype_uint16;
 
 
 /* Stored state numbers (used for stacks). */
-typedef yytype_uint8 yy_state_t;
+typedef yytype_int16 yy_state_t;
 
 /* State numbers in computations.  */
 typedef int yy_state_fast_t;
@@ -596,18 +602,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  99
+#define YYFINAL  101
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1520
+#define YYLAST   1688
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  90
+#define YYNTOKENS  93
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  35
+#define YYNNTS  38
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  138
+#define YYNRULES  147
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  248
+#define YYNSTATES  271
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -629,11 +635,11 @@ static const yytype_int8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,    85,    80,     2,
       88,    89,    83,    81,    87,    82,     2,    84,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    92,     2,
       78,     2,    79,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    90,     2,    91,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -664,20 +670,21 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   193,   193,   195,   201,   208,   209,   210,   211,   212,
-     241,   245,   247,   249,   250,   253,   259,   266,   267,   272,
-     276,   280,   281,   282,   287,   288,   289,   290,   291,   292,
-     293,   296,   298,   301,   303,   304,   305,   306,   309,   310,
-     311,   312,   313,   315,   316,   317,   318,   319,   322,   323,
-     324,   325,   326,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   339,   340,   343,   347,   357,   358,   359,   360,
-     363,   364,   365,   368,   369,   370,   371,   372,   373,   376,
-     377,   378,   379,   382,   382,   384,   385,   386,   389,   393,
-     397,   403,   407,   411,   415,   417,   419,   423,   424,   428,
-     434,   441,   442,   447,   448,   449,   450,   451,   452,   453,
-     454,   455,   458,   460,   464,   468,   469,   472,   473,   474,
-     475,   476,   477,   478,   479,   480,   481,   482,   483,   484,
-     485,   486,   487,   488,   489,   492,   493,   496,   500
+       0,   194,   194,   196,   202,   209,   210,   211,   212,   213,
+     242,   246,   248,   250,   251,   254,   260,   267,   268,   273,
+     277,   281,   282,   283,   288,   289,   290,   291,   292,   293,
+     294,   297,   299,   302,   304,   305,   306,   307,   310,   311,
+     312,   313,   314,   316,   317,   318,   319,   320,   323,   324,
+     325,   326,   327,   329,   330,   331,   332,   333,   334,   335,
+     336,   337,   340,   341,   344,   348,   358,   359,   360,   361,
+     364,   365,   366,   369,   370,   371,   372,   373,   374,   377,
+     378,   379,   380,   383,   383,   385,   386,   387,   390,   394,
+     398,   404,   408,   412,   416,   418,   420,   424,   425,   429,
+     435,   442,   443,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   460,   462,   466,   470,   471,   474,   475,
+     476,   479,   483,   488,   489,   490,   493,   494,   495,   496,
+     497,   498,   499,   500,   501,   502,   503,   504,   505,   506,
+     507,   508,   509,   510,   513,   514,   517,   521
 };
 #endif
 
@@ -707,14 +714,14 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
   "tPROPERTY", "tON", "tMETHOD", "tENDIF", "tENDREPEAT", "tENDTELL",
   "tASSERTERROR", "'<'", "'>'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
-  "'\\n'", "','", "'('", "')'", "$accept", "script", "scriptpartlist",
-  "scriptpart", "macro", "factory", "method", "methodlist",
-  "nonemptymethodlist", "methodlistline", "handler", "endargdef", "ID",
-  "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "asgn", "to",
-  "definevars", "ifstmt", "ifelsestmt", "loop", "stmtlist",
-  "nonemptystmtlist", "stmtlistline", "simpleexprnoparens", "var",
-  "varorchunk", "varorthe", "simpleexpr", "expr", "exprlist",
-  "nonemptyexprlist", YY_NULLPTR
+  "'\\n'", "','", "'('", "')'", "'['", "']'", "':'", "$accept", "script",
+  "scriptpartlist", "scriptpart", "macro", "factory", "method",
+  "methodlist", "nonemptymethodlist", "methodlistline", "handler",
+  "endargdef", "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner",
+  "proc", "asgn", "to", "definevars", "ifstmt", "ifelsestmt", "loop",
+  "stmtlist", "nonemptystmtlist", "stmtlistline", "simpleexprnoparens",
+  "var", "varorchunk", "varorthe", "simpleexpr", "list", "proplist",
+  "proppair", "expr", "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -733,11 +740,12 @@ static const yytype_int16 yytoknum[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,    60,    62,
-      38,    43,    45,    42,    47,    37,    10,    44,    40,    41
+      38,    43,    45,    42,    47,    37,    10,    44,    40,    41,
+      91,    93,    58
 };
 #endif
 
-#define YYPACT_NINF (-167)
+#define YYPACT_NINF (-183)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -751,31 +759,34 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     500,  -167,  -167,  -167,  -167,  -167,  -167,  -167,   -32,  1240,
-     281,  -167,  -167,  1240,  -167,   -24,  -167,  -167,   360,   -34,
-    1240,  -167,  -167,  -167,  -167,  1240,  -167,  -167,  1240,  -167,
-    -167,  -167,  -167,  -167,  -167,  -167,  -167,  -167,  -167,  -167,
-    -167,  -167,  -167,  -167,  1240,  1240,  -167,  -167,    12,   500,
-    -167,  -167,  -167,  -167,   430,  -167,  -167,  -167,  -167,  -167,
-    -167,  -167,  -167,   -59,  -167,  -167,  -167,  -167,  -167,   -54,
-     -47,  -167,  -167,  -167,  -167,   281,   281,   281,   281,   -50,
-    -167,  -167,  -167,  1270,  1240,   -45,   281,    42,   -44,   -40,
-    1240,   281,  -167,  -167,   -26,   -38,   -36,   -33,  1240,  -167,
-    -167,   281,  1423,   -31,  -167,  -167,  1240,  -167,  -167,  -167,
-    1283,   281,   998,   281,   281,   281,   281,   281,   281,   281,
-     281,   281,   281,   281,   281,   281,   281,   281,   281,   281,
-     -28,  -167,  1283,   -29,  1240,  1240,  1240,  -167,   281,    11,
-    1323,  -167,  -167,   281,   -65,  -167,  -167,   -22,   -21,  -167,
-    -167,  -167,   -20,  1059,    41,   103,   103,   103,   103,  1436,
-    1436,  -167,    -1,   103,   103,   103,   103,    -1,   -53,   -53,
-    -167,  -167,  1059,   -14,  -167,   -11,    -9,    -8,  1423,   281,
-    1059,  1336,  1240,  -167,  -167,     1,  -167,  -167,  1059,     3,
-    -167,  -167,  -167,   561,  -167,  -167,  1120,  1059,  -167,  -167,
-    -167,  -167,    87,   623,  -167,  1240,   -65,   691,  -167,  1181,
-       5,  -167,  1059,  -167,    43,   281,    19,    21,  -167,  1240,
-    1059,  -167,  -167,   752,   281,  1373,  -167,  1059,   -68,  -167,
-     814,    22,  1386,  1059,  1059,  -167,  1240,    23,  -167,  1059,
-     876,  -167,  -167,   937,    25,    27,  -167,  -167
+     618,  -183,  -183,  -183,  -183,  -183,  -183,  -183,   -21,  1417,
+     388,  -183,  -183,  1417,  -183,   -15,  -183,  -183,   467,     3,
+    1417,  -183,  -183,  -183,  -183,  1417,  -183,  -183,  1417,  -183,
+    -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,
+    -183,  -183,  -183,  -183,  1417,  1417,  -183,  -183,     4,   618,
+    -183,  -183,  -183,  -183,   546,  -183,  -183,  -183,  -183,  -183,
+    -183,  -183,  -183,   -74,  -183,  -183,  -183,  -183,  -183,   -59,
+     -58,  -183,  -183,  -183,  -183,   388,   388,   388,   388,   307,
+     -53,  -183,  -183,  -183,  -183,    96,  1417,   -48,   388,  1438,
+     -43,   -32,  1417,   388,  -183,  -183,   -26,   -34,   -22,   -20,
+    1417,  -183,  -183,   388,  1591,   -19,  -183,  -183,  1417,  -183,
+    -183,  -183,  1451,   -23,   -14,   -10,   -77,   -68,  -183,    -9,
+     388,  1116,   388,   388,   388,   388,   388,   388,   388,   388,
+     388,   388,   388,   388,   388,   388,   388,   388,   388,   -16,
+    -183,  1451,   -24,  1417,  1417,  1417,  -183,   388,    20,  1491,
+    -183,  -183,   388,   -65,  -183,  -183,    -2,   -12,  -183,  -183,
+    -183,   388,   388,  -183,   388,  1358,  -183,  -183,    -4,  1177,
+      64,    58,    58,    58,    58,  1604,  1604,  -183,   -50,    58,
+      58,    58,    58,   -50,   -47,   -47,  -183,  -183,  1177,     5,
+    -183,     9,    11,    12,  1591,   388,  1177,  1504,  1417,  -183,
+    -183,    13,  -183,  -183,  1177,    15,  1591,  1591,  1591,   -23,
+     -14,    -3,  -183,  -183,  -183,  -183,   679,  -183,  -183,  1238,
+    1177,  -183,  -183,  -183,  -183,    52,   741,  -183,  1417,   -65,
+     809,  -183,  1299,    24,  -183,  1177,  -183,    48,   388,    25,
+      30,  -183,  1417,  1177,  -183,  -183,   870,   388,  1541,  -183,
+    1177,   -29,  -183,   932,    31,  1554,  1177,  1177,  -183,  1417,
+      33,  -183,  1177,   994,  -183,  -183,  1055,    34,    36,  -183,
+    -183
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -784,290 +795,327 @@ static const yytype_int16 yypact[] =
 static const yytype_uint8 yydefact[] =
 {
        0,    24,    46,    28,    32,    49,    58,    30,    31,    62,
-       0,    33,    35,     0,    39,    40,    42,    47,   135,    48,
+       0,    33,    35,     0,    39,    40,    42,    47,   144,    48,
       50,    53,    56,    59,    57,     0,    43,    45,    62,    26,
       44,    41,    38,    25,    27,    51,    29,    36,    37,    61,
       55,    34,    60,    52,    62,     0,    54,     5,     0,     2,
-       3,     6,     7,     8,   135,     9,    66,    70,    71,    72,
+       3,     6,     7,     8,   144,     9,    66,    70,    71,    72,
       67,    68,    69,     0,    31,    40,    48,    50,    64,     0,
-      63,   103,   104,   106,   105,    41,     0,     0,     0,   112,
-     115,   111,   117,     0,    62,     0,   135,   137,     0,   136,
-       0,     0,   112,   114,     0,     0,     0,     0,    62,     1,
-       4,   135,   137,     0,    78,    85,     0,   109,   107,   108,
-       0,   135,     0,     0,     0,     0,     0,     0,     0,     0,
+      63,   103,   104,   106,   105,    41,     0,     0,     0,   144,
+     113,   116,   111,   126,   112,     0,    62,     0,   144,   146,
+       0,   145,     0,     0,   113,   115,     0,     0,     0,     0,
+      62,     1,     4,   144,   146,     0,    78,    85,     0,   109,
+     107,   108,     0,   106,   105,     0,   113,     0,   121,     0,
+     144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    77,   137,     0,     0,     0,     0,    76,     0,     0,
-       0,    83,    84,     0,    13,    87,    86,     0,     0,    74,
-      65,   116,     0,    97,    88,   127,   128,   125,   126,   129,
-     130,   122,   132,   133,   134,   124,   123,   131,   118,   119,
-     120,   121,    97,     0,   113,     0,     0,     0,   138,     0,
-      97,     0,     0,    17,    18,    11,    14,    15,    97,     0,
-     110,   101,   102,     0,    98,    99,     0,    10,    75,    79,
-      80,    81,     0,     0,    82,    62,     0,    20,    73,     0,
-       0,   100,    97,    90,     0,     0,     0,     0,    16,    21,
-      97,    92,    89,     0,     0,     0,    94,    97,     0,    22,
-       0,     0,     0,    97,    12,    19,     0,     0,    91,    97,
-       0,    23,    93,     0,     0,     0,    95,    96
+      77,   146,     0,     0,     0,     0,    76,     0,     0,     0,
+      83,    84,     0,    13,    87,    86,     0,     0,    74,    65,
+     117,     0,     0,   119,     0,     0,   120,   118,     0,    97,
+      88,   136,   137,   134,   135,   138,   139,   131,   141,   142,
+     143,   133,   132,   140,   127,   128,   129,   130,    97,     0,
+     114,     0,     0,     0,   147,     0,    97,     0,     0,    17,
+      18,    11,    14,    15,    97,     0,   125,   123,   124,     0,
+       0,     0,   122,   110,   101,   102,     0,    98,    99,     0,
+      10,    75,    79,    80,    81,     0,     0,    82,    62,     0,
+      20,    73,     0,     0,   100,    97,    90,     0,     0,     0,
+       0,    16,    21,    97,    92,    89,     0,     0,     0,    94,
+      97,     0,    22,     0,     0,     0,    97,    12,    19,     0,
+       0,    91,    97,     0,    23,    93,     0,     0,     0,    95,
+      96
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -167,  -167,  -167,    37,  -167,  -167,  -167,  -167,  -167,  -118,
-    -167,  -167,     0,   -27,  -167,     2,  -167,  -167,  -167,  -167,
-    -167,  -167,  -167,  -167,  -166,  -167,  -164,  -167,   -17,  -112,
-    -167,   -41,   140,   -49,  -167
+    -183,  -183,  -183,    75,  -183,  -183,  -183,  -183,  -183,  -104,
+    -183,  -183,     0,   -27,  -183,     2,  -183,  -183,  -183,  -183,
+    -183,  -183,  -183,  -183,  -182,  -183,  -170,  -183,   -17,   -82,
+    -183,   -35,  -183,  -183,   -36,   145,   -49,  -183
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,    48,    49,    50,    51,    52,   184,   185,   186,   187,
-      53,   228,    79,    69,    70,   192,    56,    57,    58,   143,
-      59,    60,    61,    62,   193,   194,   195,    80,    81,   175,
-      94,    82,   102,    88,    89
+       0,    48,    49,    50,    51,    52,   200,   201,   202,   203,
+      53,   251,    80,    69,    70,   215,    56,    57,    58,   152,
+      59,    60,    61,    62,   216,   217,   218,    81,    82,   191,
+      96,    83,    84,   117,   118,   104,    90,    91
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule whose
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_uint8 yytable[] =
+static const yytype_int16 yytable[] =
 {
-      54,    96,    55,    93,   119,   103,   197,    63,   182,    68,
-      90,    91,    99,    84,   203,    85,   141,    97,   235,   236,
-      92,   183,   207,   176,   177,    95,   142,   104,    68,   211,
-     128,   129,   105,   211,   107,   108,   109,   133,   111,   211,
-     106,   131,   137,   211,    68,    98,   223,   138,   144,    54,
-     145,    55,   148,   146,   230,   149,   119,   130,   172,   211,
-     173,   234,   152,   179,   188,   196,   211,   240,   189,   190,
-     211,   147,   198,   243,   134,   199,   211,   200,   201,   211,
-     126,   127,   128,   129,    68,   224,   100,   206,   218,   208,
-     139,   222,   113,   114,   115,   116,   117,   118,    68,   119,
-     135,   136,   120,   121,   122,   226,   150,   227,   238,   242,
-     214,   246,    54,   247,   154,     0,     0,   174,   174,   174,
-     123,   124,   125,   126,   127,   128,   129,     0,     0,   215,
-       0,     0,     0,     0,    92,    92,    92,   113,   114,   115,
-     116,   117,   118,     0,   119,     0,     0,   120,   121,   122,
-      83,     0,     0,    54,     0,     0,     0,     0,    87,     0,
-     119,     0,     0,   120,     0,   123,   124,   125,   126,   127,
-     128,   129,    54,     0,     0,     0,     0,     0,   217,     0,
-      54,     0,   205,   125,   126,   127,   128,   129,    54,     0,
-       0,     0,     0,    54,     0,     0,    54,    54,   213,     0,
-       0,     0,     0,    54,     0,    68,     0,    54,     0,    54,
-       0,   221,    54,     0,     0,     0,     0,     0,   110,   229,
-      54,     0,     0,    54,     0,     0,   132,    54,     0,     0,
-      54,   140,     0,    54,    54,     0,   241,     0,     0,    54,
-      54,   132,     0,    54,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-       0,     0,     0,     0,     0,     0,     0,     0,   178,     0,
-       0,     0,     0,   181,     0,     0,    71,     0,     0,     0,
-       0,    72,     0,     0,     1,    73,    74,     0,     2,     0,
-       3,     4,     5,     6,     7,     0,     0,    64,     0,     0,
-       0,     0,    11,    12,     0,    14,    65,    16,    17,   202,
-      66,    67,     0,    21,    22,    23,    24,     0,    26,    27,
-       0,     0,     0,     0,     0,    29,    30,    75,    32,    33,
-      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,     0,     0,     0,   225,     0,     0,    46,     0,
-       0,     0,    76,    77,   232,    71,     0,     0,     0,    78,
-      72,     0,     0,     1,    73,    74,     0,     2,     0,     3,
-       4,     5,     6,     7,     0,     0,    64,     0,     0,     0,
-       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,    27,     0,
-       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,     0,     0,     0,     0,    71,     0,    46,     0,     0,
-      72,    76,    77,     1,    73,    74,     0,     2,    86,     3,
-       4,     5,     6,     7,     0,     0,    64,     0,     0,     0,
-       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,    27,     0,
-       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
-       0,    76,    77,     1,     0,     0,     0,     2,   101,     3,
-       4,     5,     6,     7,     0,     0,     8,     9,     0,     0,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,     0,    21,    22,    23,    24,    25,    26,    27,    28,
-       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,     0,     1,     0,     0,    46,     2,     0,
-       3,     4,     5,     6,     7,   209,    47,     8,     9,     0,
-       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
-      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
-      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,   210,     1,     0,    46,     0,
-       2,     0,     3,     4,     5,     6,     7,   191,     0,     8,
-       9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
-      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,     0,     0,     0,   216,     0,
-      46,     0,     0,     0,     1,     0,     0,   219,     2,   191,
-       3,     4,     5,     6,     7,     0,     0,     8,     9,     0,
+      54,    98,    55,    95,   101,   105,   220,   128,   198,    68,
+     128,   120,   106,    86,   226,   164,   150,    99,    63,   165,
+      94,   199,   230,   166,    87,    97,   151,   107,    68,   108,
+     119,   135,   136,   137,   138,   120,   137,   138,   140,   142,
+     109,   110,   111,   146,    68,   100,   234,    92,    93,    54,
+     234,    55,   153,   246,   157,   147,   234,   258,   259,   139,
+     234,   253,   192,   193,   154,   189,   155,   158,   257,   161,
+     188,   168,   195,   156,   263,   237,   234,   205,   162,   116,
+     266,   163,   167,   234,   204,   213,    68,   234,   219,   164,
+     247,   221,   148,   234,   238,   222,   234,   223,   224,   229,
+      68,   231,   122,   123,   124,   125,   126,   127,   159,   128,
+     245,   249,   129,   130,   131,   128,   250,   261,   129,   265,
+     269,    54,   270,   170,   102,   241,   190,   190,   190,   212,
+     132,   133,   134,   135,   136,   137,   138,   121,   134,   135,
+     136,   137,   138,    94,    94,    94,   122,   123,   124,   125,
+     126,   127,     0,   128,     0,    85,   129,   130,   131,     0,
+       0,     0,     0,    89,     0,   211,     0,     0,     0,    54,
+       0,     0,     0,     0,   132,   133,   134,   135,   136,   137,
+     138,     0,     0,     0,     0,     0,     0,     0,    54,     0,
+       0,     0,     0,     0,     0,     0,    54,     0,   228,     0,
+       0,   240,     0,     0,    54,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    54,     0,     0,    54,
+      54,   236,     0,   112,     0,     0,    54,     0,    68,     0,
+      54,     0,    54,   141,   244,    54,     0,     0,   149,     0,
+       0,     0,   252,    54,     0,     0,    54,     0,   141,     0,
+      54,     0,     0,    54,     0,     0,    54,    54,     0,   264,
+       0,     0,    54,    54,     0,     0,    54,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,     0,     0,     0,     0,     0,     0,
+       0,     0,   194,     0,     0,     0,     0,   197,     0,     0,
+       0,     0,     0,     0,     0,     0,   206,   207,     0,   208,
+       0,     0,    71,     0,     0,     0,     0,    72,     0,     0,
+       1,   113,   114,     0,     2,     0,     3,     4,     5,     6,
+       7,     0,     0,    64,     0,     0,     0,     0,    11,    12,
+     225,    14,    65,    16,    17,     0,    66,    67,     0,    21,
+      22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
+       0,    29,    30,    75,    32,    33,    34,     0,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,     0,     0,
+       0,     0,     0,   248,    46,     0,     0,     0,    76,    77,
+       0,     0,   255,    71,     0,    78,     0,    79,    72,   115,
+       0,     1,    73,    74,     0,     2,     0,     3,     4,     5,
+       6,     7,     0,     0,    64,     0,     0,     0,     0,    11,
+      12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
+      21,    22,    23,    24,     0,    26,    27,     0,     0,     0,
+       0,     0,    29,    30,    75,    32,    33,    34,     0,     0,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,     0,
+       0,     0,     0,     0,     0,    46,     0,     0,     0,    76,
+      77,     0,    71,     0,     0,     0,    78,    72,    79,     0,
+       1,    73,    74,     0,     2,     0,     3,     4,     5,     6,
+       7,     0,     0,    64,     0,     0,     0,     0,    11,    12,
+       0,    14,    65,    16,    17,     0,    66,    67,     0,    21,
+      22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
+       0,    29,    30,    75,    32,    33,    34,     0,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,     0,     0,
+       0,     0,     0,     0,    46,     0,     0,     0,    76,    77,
+       0,    71,     0,     0,     0,    88,    72,    79,     0,     1,
+      73,    74,     0,     2,     0,     3,     4,     5,     6,     7,
+       0,     0,    64,     0,     0,     0,     0,    11,    12,     0,
+      14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
+      23,    24,     0,    26,    27,     0,     0,     0,     0,     0,
+      29,    30,    75,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
+       0,     0,     0,    46,     0,     0,     0,    76,    77,     0,
+       0,     1,     0,     0,   103,     2,    79,     3,     4,     5,
+       6,     7,     0,     0,     8,     9,     0,     0,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,     0,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,     0,
+       0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,     0,     1,     0,     0,    46,     2,     0,     3,     4,
+       5,     6,     7,   232,    47,     8,     9,     0,     0,    10,
+      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
+       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,     0,     0,   233,     1,     0,    46,     0,     2,     0,
+       3,     4,     5,     6,     7,   214,     0,     8,     9,     0,
        0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
       19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
       28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
       34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     1,     0,     0,    46,     2,
-       0,     3,     4,     5,     6,     7,     0,   191,     8,     9,
+      42,    43,    44,     0,     0,     0,   239,     0,    46,     0,
+       0,     0,     1,     0,     0,   242,     2,   214,     3,     4,
+       5,     6,     7,     0,     0,     8,     9,     0,     0,    10,
+      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
+       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,     0,     0,     1,     0,     0,    46,     2,     0,     3,
+       4,     5,     6,     7,     0,   214,     8,     9,     0,     0,
+      10,    11,    12,     0,    14,    15,    16,    17,    18,    19,
+      20,     0,    21,    22,    23,    24,     0,    26,    27,    28,
+       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,   254,     1,     0,    46,     0,     2,
+       0,     3,     4,     5,     6,     7,   214,     0,     8,     9,
        0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
       18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
       27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
       33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,   231,     1,     0,    46,
-       0,     2,     0,     3,     4,     5,     6,     7,   191,     0,
+      41,    42,    43,    44,     0,     0,   260,     1,     0,    46,
+       0,     2,     0,     3,     4,     5,     6,     7,   214,     0,
        8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
       16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
        0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
       31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,   237,     1,
-       0,    46,     0,     2,     0,     3,     4,     5,     6,     7,
-     191,     0,     8,     9,     0,     0,    10,    11,    12,     0,
+      39,    40,    41,    42,    43,    44,     0,     0,     1,   267,
+       0,    46,     2,     0,     3,     4,     5,     6,     7,     0,
+     214,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
+      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,     1,
+     268,     0,    46,     2,     0,     3,     4,     5,     6,     7,
+       0,   214,     8,     9,     0,     0,    10,    11,    12,     0,
       14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
       23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
       29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-       1,   244,     0,    46,     2,     0,     3,     4,     5,     6,
-       7,     0,   191,     8,     9,     0,     0,    10,    11,    12,
+       1,     0,     0,    46,     2,     0,     3,     4,     5,     6,
+       7,     0,   169,     8,     9,     0,     0,    10,    11,    12,
        0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
       22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
        0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,     1,   245,     0,    46,     2,     0,     3,     4,     5,
-       6,     7,     0,   191,     8,     9,     0,     0,    10,    11,
+       0,     1,     0,     0,    46,     2,     0,     3,     4,     5,
+       6,     7,     0,   214,     8,     9,     0,     0,    10,    11,
       12,     0,    14,    15,    16,    17,    18,    19,    20,     0,
       21,    22,    23,    24,     0,    26,    27,    28,     0,     0,
        0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
        0,     0,     1,     0,     0,    46,     2,     0,     3,     4,
-       5,     6,     7,     0,   153,     8,     9,     0,     0,    10,
+       5,     6,     7,     0,   235,     8,     9,     0,     0,    10,
       11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
        0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
        0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
        0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,     1,     0,     0,    46,     2,     0,     3,
-       4,     5,     6,     7,     0,   191,     8,     9,     0,     0,
-      10,    11,    12,     0,    14,    15,    16,    17,    18,    19,
-      20,     0,    21,    22,    23,    24,     0,    26,    27,    28,
-       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     1,     0,     0,    46,     2,     0,
-       3,     4,     5,     6,     7,     0,   212,     8,     9,     0,
-       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
-      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
-      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     1,     0,     0,     0,     2,    46,     3,
-       4,     5,     6,     7,     0,     0,    64,   220,     0,     0,
-       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,    27,     0,
-       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,   112,     0,     0,     0,     0,     0,    46,     0,     0,
-     113,   114,   115,   116,   117,   118,     0,   119,     0,     0,
-     120,   121,   122,   113,   114,   115,   116,   117,   118,     0,
-     119,     0,     0,   120,   121,   122,     0,     0,   123,   124,
-     125,   126,   127,   128,   129,     0,     0,     0,     0,     0,
-       0,   123,   124,   125,   126,   127,   128,   129,     0,     0,
-       0,     0,   151,   113,   114,   115,   116,   117,   118,     0,
-     119,     0,     0,   120,   121,   122,   113,   114,   115,   116,
-     117,   118,     0,   119,     0,     0,   120,   121,   122,     0,
-       0,   123,   124,   125,   126,   127,   128,   129,     0,   180,
-       0,     0,     0,     0,   123,   124,   125,   126,   127,   128,
-     129,     0,   204,   113,   114,   115,   116,   117,   118,     0,
-     119,     0,     0,   120,   121,   122,   113,   114,   115,   116,
-     117,   118,     0,   119,     0,     0,   120,   121,   122,     0,
-       0,   123,   124,   125,   126,   127,   128,   129,     0,   233,
-       0,     0,     0,     0,   123,   124,   125,   126,   127,   128,
-     129,     0,   239,   113,   114,   115,   116,   117,   118,     0,
-     119,     0,     0,   120,   121,   122,   113,   114,   115,   116,
-       0,     0,     0,   119,     0,     0,   120,   121,   122,     0,
-       0,   123,   124,   125,   126,   127,   128,   129,     0,     0,
-       0,     0,     0,     0,   123,   124,   125,   126,   127,   128,
-     129
+      44,     1,   209,   210,     0,     2,    46,     3,     4,     5,
+       6,     7,     0,     0,    64,   243,     0,     0,     0,    11,
+      12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
+      21,    22,    23,    24,     0,    26,    27,     0,     0,     0,
+       0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,     0,
+       1,     0,     0,     0,     2,    46,     3,     4,     5,     6,
+       7,     0,     0,    64,     0,     0,     0,     0,    11,    12,
+       0,    14,    65,    16,    17,     0,    66,    67,     0,    21,
+      22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
+     143,    29,    30,    31,    32,    33,    34,     0,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,   122,   123,
+     124,   125,   126,   127,    46,   128,   144,   145,   129,   130,
+     131,   122,   123,   124,   125,   126,   127,     0,   128,     0,
+       0,   129,   130,   131,     0,     0,   132,   133,   134,   135,
+     136,   137,   138,     0,     0,     0,     0,     0,     0,   132,
+     133,   134,   135,   136,   137,   138,     0,     0,     0,     0,
+     160,   122,   123,   124,   125,   126,   127,     0,   128,     0,
+       0,   129,   130,   131,   122,   123,   124,   125,   126,   127,
+       0,   128,     0,     0,   129,   130,   131,     0,     0,   132,
+     133,   134,   135,   136,   137,   138,     0,   196,     0,     0,
+       0,     0,   132,   133,   134,   135,   136,   137,   138,     0,
+     227,   122,   123,   124,   125,   126,   127,     0,   128,     0,
+       0,   129,   130,   131,   122,   123,   124,   125,   126,   127,
+       0,   128,     0,     0,   129,   130,   131,     0,     0,   132,
+     133,   134,   135,   136,   137,   138,     0,   256,     0,     0,
+       0,     0,   132,   133,   134,   135,   136,   137,   138,     0,
+     262,   122,   123,   124,   125,   126,   127,     0,   128,     0,
+       0,   129,   130,   131,   122,   123,   124,   125,     0,     0,
+       0,   128,     0,     0,   129,   130,   131,     0,     0,   132,
+     133,   134,   135,   136,   137,   138,     0,     0,     0,     0,
+       0,     0,   132,   133,   134,   135,   136,   137,   138
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    28,     0,    20,    57,    54,   172,    39,    73,     9,
-      44,    45,     0,    13,   180,    39,    42,    44,    86,    87,
-      20,    86,   188,   135,   136,    25,    52,    86,    28,   193,
-      83,    84,    86,   197,    75,    76,    77,    86,    88,   203,
-      87,    86,    86,   207,    44,    45,   212,    87,    86,    49,
-      86,    49,   101,    86,   220,    86,    57,    84,    86,   223,
-      89,   227,   111,    52,    86,    24,   230,   233,    89,    89,
-     234,    98,    86,   239,    32,    86,   240,    86,    86,   243,
-      81,    82,    83,    84,    84,    42,    49,    86,   206,    86,
-      90,    86,    50,    51,    52,    53,    54,    55,    98,    57,
-      58,    59,    60,    61,    62,    86,   106,    86,    86,    86,
-      23,    86,   112,    86,   112,    -1,    -1,   134,   135,   136,
-      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    42,
-      -1,    -1,    -1,    -1,   134,   135,   136,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      10,    -1,    -1,   153,    -1,    -1,    -1,    -1,    18,    -1,
-      57,    -1,    -1,    60,    -1,    78,    79,    80,    81,    82,
-      83,    84,   172,    -1,    -1,    -1,    -1,    -1,   205,    -1,
-     180,    -1,   182,    80,    81,    82,    83,    84,   188,    -1,
-      -1,    -1,    -1,   193,    -1,    -1,   196,   197,   196,    -1,
-      -1,    -1,    -1,   203,    -1,   205,    -1,   207,    -1,   209,
-      -1,   209,   212,    -1,    -1,    -1,    -1,    -1,    78,   219,
-     220,    -1,    -1,   223,    -1,    -1,    86,   227,    -1,    -1,
-     230,    91,    -1,   233,   234,    -1,   236,    -1,    -1,   239,
-     240,   101,    -1,   243,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,
-      -1,    -1,    -1,   143,    -1,    -1,     5,    -1,    -1,    -1,
-      -1,    10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,
-      19,    20,    21,    22,    23,    -1,    -1,    26,    -1,    -1,
-      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,   179,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    -1,    -1,   215,    -1,    -1,    77,    -1,
-      -1,    -1,    81,    82,   224,     5,    -1,    -1,    -1,    88,
-      10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    26,    -1,    -1,    -1,
-      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    -1,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    -1,    -1,    -1,     5,    -1,    77,    -1,    -1,
-      10,    81,    82,    13,    14,    15,    -1,    17,    88,    19,
-      20,    21,    22,    23,    -1,    -1,    26,    -1,    -1,    -1,
-      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    -1,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
-      -1,    81,    82,    13,    -1,    -1,    -1,    17,    88,    19,
-      20,    21,    22,    23,    -1,    -1,    26,    27,    -1,    -1,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    46,    47,    48,    49,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    -1,    13,    -1,    -1,    77,    17,    -1,
-      19,    20,    21,    22,    23,    24,    86,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,
-      17,    -1,    19,    20,    21,    22,    23,    86,    -1,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    -1,    75,    -1,
-      77,    -1,    -1,    -1,    13,    -1,    -1,    16,    17,    86,
-      19,    20,    21,    22,    23,    -1,    -1,    26,    27,    -1,
+       0,    28,     0,    20,     0,    54,   188,    57,    73,     9,
+      57,    88,    86,    13,   196,    92,    42,    44,    39,    87,
+      20,    86,   204,    91,    39,    25,    52,    86,    28,    87,
+      79,    81,    82,    83,    84,    88,    83,    84,    86,    88,
+      75,    76,    77,    86,    44,    45,   216,    44,    45,    49,
+     220,    49,    86,   235,   103,    87,   226,    86,    87,    86,
+     230,   243,   144,   145,    86,    89,    86,    86,   250,    92,
+      86,   120,    52,   100,   256,    23,   246,    89,    92,    79,
+     262,    91,    91,   253,    86,    89,    86,   257,    24,    92,
+      42,    86,    92,   263,    42,    86,   266,    86,    86,    86,
+     100,    86,    50,    51,    52,    53,    54,    55,   108,    57,
+      86,    86,    60,    61,    62,    57,    86,    86,    60,    86,
+      86,   121,    86,   121,    49,   229,   143,   144,   145,   165,
+      78,    79,    80,    81,    82,    83,    84,    41,    80,    81,
+      82,    83,    84,   143,   144,   145,    50,    51,    52,    53,
+      54,    55,    -1,    57,    -1,    10,    60,    61,    62,    -1,
+      -1,    -1,    -1,    18,    -1,   165,    -1,    -1,    -1,   169,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   196,    -1,   198,    -1,
+      -1,   228,    -1,    -1,   204,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   216,    -1,    -1,   219,
+     220,   219,    -1,    78,    -1,    -1,   226,    -1,   228,    -1,
+     230,    -1,   232,    88,   232,   235,    -1,    -1,    93,    -1,
+      -1,    -1,   242,   243,    -1,    -1,   246,    -1,   103,    -1,
+     250,    -1,    -1,   253,    -1,    -1,   256,   257,    -1,   259,
+      -1,    -1,   262,   263,    -1,    -1,   266,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   147,    -1,    -1,    -1,    -1,   152,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   161,   162,    -1,   164,
+      -1,    -1,     5,    -1,    -1,    -1,    -1,    10,    -1,    -1,
+      13,    14,    15,    -1,    17,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,
+     195,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,   238,    77,    -1,    -1,    -1,    81,    82,
+      -1,    -1,   247,     5,    -1,    88,    -1,    90,    10,    92,
+      -1,    13,    14,    15,    -1,    17,    -1,    19,    20,    21,
+      22,    23,    -1,    -1,    26,    -1,    -1,    -1,    -1,    31,
+      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
+      82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
+      13,    14,    15,    -1,    17,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
+      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
+      14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,
+      -1,    13,    -1,    -1,    88,    17,    90,    19,    20,    21,
+      22,    23,    -1,    -1,    26,    27,    -1,    -1,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    -1,
+      42,    43,    44,    45,    46,    47,    48,    49,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    13,    -1,    -1,    77,    17,    -1,    19,    20,
+      21,    22,    23,    24,    86,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    74,    13,    -1,    77,    -1,    17,    -1,
+      19,    20,    21,    22,    23,    86,    -1,    26,    27,    -1,
       -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
       39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
       49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
       59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    17,
-      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
+      69,    70,    71,    -1,    -1,    -1,    75,    -1,    77,    -1,
+      -1,    -1,    13,    -1,    -1,    16,    17,    86,    19,    20,
+      21,    22,    23,    -1,    -1,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    13,    -1,    -1,    77,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    86,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,    17,
+      -1,    19,    20,    21,    22,    23,    86,    -1,    26,    27,
       -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
       38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
       48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
@@ -1078,20 +1126,26 @@ static const yytype_int16 yycheck[] =
       36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
       -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
       56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    74,    13,
-      -1,    77,    -1,    17,    -1,    19,    20,    21,    22,    23,
-      86,    -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    75,
+      -1,    77,    17,    -1,    19,    20,    21,    22,    23,    -1,
+      86,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
+      75,    -1,    77,    17,    -1,    19,    20,    21,    22,    23,
+      -1,    86,    26,    27,    -1,    -1,    30,    31,    32,    -1,
       34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
       44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
       54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      13,    75,    -1,    77,    17,    -1,    19,    20,    21,    22,
+      13,    -1,    -1,    77,    17,    -1,    19,    20,    21,    22,
       23,    -1,    86,    26,    27,    -1,    -1,    30,    31,    32,
       -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    13,    75,    -1,    77,    17,    -1,    19,    20,    21,
+      -1,    13,    -1,    -1,    77,    17,    -1,    19,    20,    21,
       22,    23,    -1,    86,    26,    27,    -1,    -1,    30,    31,
       32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
       42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
@@ -1103,96 +1157,92 @@ static const yytype_int16 yycheck[] =
       -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
       -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
       -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    13,    -1,    -1,    77,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    86,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    13,    -1,    -1,    77,    17,    -1,
-      19,    20,    21,    22,    23,    -1,    86,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    13,    -1,    -1,    -1,    17,    77,    19,
-      20,    21,    22,    23,    -1,    -1,    26,    86,    -1,    -1,
-      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    -1,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    41,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    89,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
-      -1,    -1,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84
+      71,    13,    14,    15,    -1,    17,    77,    19,    20,    21,
+      22,    23,    -1,    -1,    26,    86,    -1,    -1,    -1,    31,
+      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      13,    -1,    -1,    -1,    17,    77,    19,    20,    21,    22,
+      23,    -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
+      32,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    50,    51,
+      52,    53,    54,    55,    77,    57,    58,    59,    60,    61,
+      62,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
+      89,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    86,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      86,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    86,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      86,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    50,    51,    52,    53,    -1,    -1,
+      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
-static const yytype_int8 yystos[] =
+static const yytype_uint8 yystos[] =
 {
        0,    13,    17,    19,    20,    21,    22,    23,    26,    27,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    42,    43,    44,    45,    46,    47,    48,    49,    54,
       55,    56,    57,    58,    59,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    77,    86,    91,    92,
-      93,    94,    95,   100,   102,   105,   106,   107,   108,   110,
-     111,   112,   113,    39,    26,    35,    39,    40,   102,   103,
-     104,     5,    10,    14,    15,    56,    81,    82,    88,   102,
-     117,   118,   121,   122,   102,    39,    88,   122,   123,   124,
-      44,    45,   102,   118,   120,   102,   103,   103,   102,     0,
-      93,    88,   122,   123,    86,    86,    87,   121,   121,   121,
-     122,    88,    41,    50,    51,    52,    53,    54,    55,    57,
-      60,    61,    62,    78,    79,    80,    81,    82,    83,    84,
-     103,    86,   122,   123,    32,    58,    59,    86,    87,   102,
-     122,    42,    52,   109,    86,    86,    86,   103,   123,    86,
-     102,    89,   123,    86,   105,   122,   122,   122,   122,   122,
-     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
-     122,   122,    86,    89,   118,   119,   119,   119,   122,    52,
-      86,   122,    73,    86,    96,    97,    98,    99,    86,    89,
-      89,    86,   105,   114,   115,   116,    24,   114,    86,    86,
-      86,    86,   122,   114,    86,   102,    86,   114,    86,    24,
-      74,   116,    86,   105,    23,    42,    75,   103,    99,    16,
-      86,   105,    86,   114,    42,   122,    86,    86,   101,   102,
-     114,    74,   122,    86,   114,    86,    87,    74,    86,    86,
-     114,   102,    86,   114,    75,    75,    86,    86
+      67,    68,    69,    70,    71,    72,    77,    86,    94,    95,
+      96,    97,    98,   103,   105,   108,   109,   110,   111,   113,
+     114,   115,   116,    39,    26,    35,    39,    40,   105,   106,
+     107,     5,    10,    14,    15,    56,    81,    82,    88,    90,
+     105,   120,   121,   124,   125,   128,   105,    39,    88,   128,
+     129,   130,    44,    45,   105,   121,   123,   105,   106,   106,
+     105,     0,    96,    88,   128,   129,    86,    86,    87,   124,
+     124,   124,   128,    14,    15,    92,   105,   126,   127,   129,
+      88,    41,    50,    51,    52,    53,    54,    55,    57,    60,
+      61,    62,    78,    79,    80,    81,    82,    83,    84,   106,
+      86,   128,   129,    32,    58,    59,    86,    87,   105,   128,
+      42,    52,   112,    86,    86,    86,   106,   129,    86,   105,
+      89,    92,    92,    91,    92,    87,    91,    91,   129,    86,
+     108,   128,   128,   128,   128,   128,   128,   128,   128,   128,
+     128,   128,   128,   128,   128,   128,   128,   128,    86,    89,
+     121,   122,   122,   122,   128,    52,    86,   128,    73,    86,
+      99,   100,   101,   102,    86,    89,   128,   128,   128,    14,
+      15,   105,   127,    89,    86,   108,   117,   118,   119,    24,
+     117,    86,    86,    86,    86,   128,   117,    86,   105,    86,
+     117,    86,    24,    74,   119,    86,   108,    23,    42,    75,
+     106,   102,    16,    86,   108,    86,   117,    42,   128,    86,
+      86,   104,   105,   117,    74,   128,    86,   117,    86,    87,
+      74,    86,    86,   117,   105,    86,   117,    75,    75,    86,
+      86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_int8 yyr1[] =
+static const yytype_uint8 yyr1[] =
 {
-       0,    90,    91,    92,    92,    93,    93,    93,    93,    93,
-      94,    95,    96,    97,    97,    98,    98,    99,    99,   100,
-     100,   101,   101,   101,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     102,   102,   103,   103,   104,   104,   105,   105,   105,   105,
-     106,   106,   106,   107,   107,   107,   107,   107,   107,   108,
-     108,   108,   108,   109,   109,   110,   110,   110,   111,   111,
-     112,   112,   112,   112,   113,   113,   113,   114,   114,   115,
-     115,   116,   116,   117,   117,   117,   117,   117,   117,   117,
-     117,   117,   118,   119,   120,   121,   121,   122,   122,   122,
-     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
-     122,   122,   122,   122,   122,   123,   123,   124,   124
+       0,    93,    94,    95,    95,    96,    96,    96,    96,    96,
+      97,    98,    99,   100,   100,   101,   101,   102,   102,   103,
+     103,   104,   104,   104,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+     105,   105,   106,   106,   107,   107,   108,   108,   108,   108,
+     109,   109,   109,   110,   110,   110,   110,   110,   110,   111,
+     111,   111,   111,   112,   112,   113,   113,   113,   114,   114,
+     115,   115,   115,   115,   116,   116,   116,   117,   117,   118,
+     118,   119,   119,   120,   120,   120,   120,   120,   120,   120,
+     120,   120,   120,   121,   122,   123,   124,   124,   125,   125,
+     125,   126,   126,   127,   127,   127,   128,   128,   128,   128,
+     128,   128,   128,   128,   128,   128,   128,   128,   128,   128,
+     128,   128,   128,   128,   129,   129,   130,   130
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1209,9 +1259,10 @@ static const yytype_int8 yyr2[] =
        5,     5,     5,     1,     1,     3,     3,     3,     4,     7,
        6,     9,     7,    10,     7,    11,    12,     0,     1,     1,
        2,     1,     1,     1,     1,     1,     1,     2,     2,     2,
-       4,     1,     1,     1,     1,     1,     3,     1,     3,     3,
+       4,     1,     1,     1,     1,     1,     1,     3,     3,     3,
+       3,     1,     3,     3,     3,     3,     1,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     0,     1,     1,     3
+       3,     3,     3,     3,     0,     1,     1,     3
 };
 
 
@@ -1483,51 +1534,51 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1489 "engines/director/lingo/lingo-gr.cpp"
+#line 1540 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1495 "engines/director/lingo/lingo-gr.cpp"
+#line 1546 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1501 "engines/director/lingo/lingo-gr.cpp"
+#line 1552 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1507 "engines/director/lingo/lingo-gr.cpp"
+#line 1558 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1513 "engines/director/lingo/lingo-gr.cpp"
+#line 1564 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1519 "engines/director/lingo/lingo-gr.cpp"
+#line 1570 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1525 "engines/director/lingo/lingo-gr.cpp"
+#line 1576 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1531 "engines/director/lingo/lingo-gr.cpp"
+#line 1582 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -1793,739 +1844,792 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* script: scriptpartlist  */
-#line 193 "engines/director/lingo/lingo-gr.y"
+#line 194 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 1799 "engines/director/lingo/lingo-gr.cpp"
+#line 1850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
-#line 195 "engines/director/lingo/lingo-gr.y"
+#line 196 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1810 "engines/director/lingo/lingo-gr.cpp"
+#line 1861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
-#line 201 "engines/director/lingo/lingo-gr.y"
+#line 202 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1820 "engines/director/lingo/lingo-gr.cpp"
+#line 1871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
-#line 208 "engines/director/lingo/lingo-gr.y"
+#line 209 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 1826 "engines/director/lingo/lingo-gr.cpp"
+#line 1877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
-#line 241 "engines/director/lingo/lingo-gr.y"
+#line 242 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1832 "engines/director/lingo/lingo-gr.cpp"
+#line 1883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
-#line 245 "engines/director/lingo/lingo-gr.y"
+#line 246 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 1838 "engines/director/lingo/lingo-gr.cpp"
+#line 1889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
-#line 247 "engines/director/lingo/lingo-gr.y"
+#line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1844 "engines/director/lingo/lingo-gr.cpp"
+#line 1895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
-#line 249 "engines/director/lingo/lingo-gr.y"
+#line 250 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 1850 "engines/director/lingo/lingo-gr.cpp"
+#line 1901 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
-#line 253 "engines/director/lingo/lingo-gr.y"
+#line 254 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1861 "engines/director/lingo/lingo-gr.cpp"
+#line 1912 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
-#line 259 "engines/director/lingo/lingo-gr.y"
+#line 260 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 1871 "engines/director/lingo/lingo-gr.cpp"
+#line 1922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
-#line 266 "engines/director/lingo/lingo-gr.y"
+#line 267 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 1877 "engines/director/lingo/lingo-gr.cpp"
+#line 1928 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
-#line 272 "engines/director/lingo/lingo-gr.y"
+#line 273 "engines/director/lingo/lingo-gr.y"
                                                                {	// D3
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 1886 "engines/director/lingo/lingo-gr.cpp"
+#line 1937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
-#line 276 "engines/director/lingo/lingo-gr.y"
+#line 277 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1893 "engines/director/lingo/lingo-gr.cpp"
+#line 1944 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
-#line 281 "engines/director/lingo/lingo-gr.y"
+#line 282 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 1899 "engines/director/lingo/lingo-gr.cpp"
+#line 1950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
-#line 282 "engines/director/lingo/lingo-gr.y"
+#line 283 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 1905 "engines/director/lingo/lingo-gr.cpp"
+#line 1956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
-#line 288 "engines/director/lingo/lingo-gr.y"
+#line 289 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 1911 "engines/director/lingo/lingo-gr.cpp"
+#line 1962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
-#line 289 "engines/director/lingo/lingo-gr.y"
+#line 290 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 1917 "engines/director/lingo/lingo-gr.cpp"
+#line 1968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
-#line 290 "engines/director/lingo/lingo-gr.y"
+#line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 1923 "engines/director/lingo/lingo-gr.cpp"
+#line 1974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
-#line 291 "engines/director/lingo/lingo-gr.y"
+#line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 1929 "engines/director/lingo/lingo-gr.cpp"
+#line 1980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
-#line 292 "engines/director/lingo/lingo-gr.y"
+#line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 1935 "engines/director/lingo/lingo-gr.cpp"
+#line 1986 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 1941 "engines/director/lingo/lingo-gr.cpp"
+#line 1992 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tEXIT  */
-#line 296 "engines/director/lingo/lingo-gr.y"
+#line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 1947 "engines/director/lingo/lingo-gr.cpp"
+#line 1998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFIELD  */
-#line 298 "engines/director/lingo/lingo-gr.y"
+#line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 1953 "engines/director/lingo/lingo-gr.cpp"
+#line 2004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
-#line 301 "engines/director/lingo/lingo-gr.y"
+#line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 1959 "engines/director/lingo/lingo-gr.cpp"
+#line 2010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 304 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 1965 "engines/director/lingo/lingo-gr.cpp"
+#line 2016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
-#line 304 "engines/director/lingo/lingo-gr.y"
+#line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 1971 "engines/director/lingo/lingo-gr.cpp"
+#line 2022 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
-#line 305 "engines/director/lingo/lingo-gr.y"
+#line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 1977 "engines/director/lingo/lingo-gr.cpp"
+#line 2028 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
-#line 306 "engines/director/lingo/lingo-gr.y"
+#line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 1983 "engines/director/lingo/lingo-gr.cpp"
+#line 2034 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
-#line 309 "engines/director/lingo/lingo-gr.y"
+#line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 1989 "engines/director/lingo/lingo-gr.cpp"
+#line 2040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 1995 "engines/director/lingo/lingo-gr.cpp"
+#line 2046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
-#line 311 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2001 "engines/director/lingo/lingo-gr.cpp"
+#line 2052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2007 "engines/director/lingo/lingo-gr.cpp"
+#line 2058 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2013 "engines/director/lingo/lingo-gr.cpp"
+#line 2064 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2019 "engines/director/lingo/lingo-gr.cpp"
+#line 2070 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2025 "engines/director/lingo/lingo-gr.cpp"
+#line 2076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPLAY  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2031 "engines/director/lingo/lingo-gr.cpp"
+#line 2082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tPLAYACCEL  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("playAccel"); }
-#line 2037 "engines/director/lingo/lingo-gr.cpp"
+#line 2088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tPREVIOUS  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2043 "engines/director/lingo/lingo-gr.cpp"
+#line 2094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tREPEAT  */
-#line 322 "engines/director/lingo/lingo-gr.y"
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2049 "engines/director/lingo/lingo-gr.cpp"
+#line 2100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSCRIPT  */
-#line 323 "engines/director/lingo/lingo-gr.y"
+#line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2055 "engines/director/lingo/lingo-gr.cpp"
+#line 2106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tSET  */
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2061 "engines/director/lingo/lingo-gr.cpp"
+#line 2112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tSTARTS  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2067 "engines/director/lingo/lingo-gr.cpp"
+#line 2118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tTELL  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2073 "engines/director/lingo/lingo-gr.cpp"
+#line 2124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tTO  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2079 "engines/director/lingo/lingo-gr.cpp"
+#line 2130 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tASSERTERROR  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 330 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2085 "engines/director/lingo/lingo-gr.cpp"
+#line 2136 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tSPRITE  */
-#line 330 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2091 "engines/director/lingo/lingo-gr.cpp"
+#line 2142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tWHEN  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2097 "engines/director/lingo/lingo-gr.cpp"
+#line 2148 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWHILE  */
-#line 332 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2103 "engines/director/lingo/lingo-gr.cpp"
+#line 2154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWINDOW  */
-#line 333 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2109 "engines/director/lingo/lingo-gr.cpp"
+#line 2160 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWITH  */
-#line 334 "engines/director/lingo/lingo-gr.y"
+#line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2115 "engines/director/lingo/lingo-gr.cpp"
+#line 2166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* ID: tWITHIN  */
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2121 "engines/director/lingo/lingo-gr.cpp"
+#line 2172 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* ID: tWORD  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2127 "engines/director/lingo/lingo-gr.cpp"
+#line 2178 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* idlist: %empty  */
-#line 339 "engines/director/lingo/lingo-gr.y"
+#line 340 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2133 "engines/director/lingo/lingo-gr.cpp"
+#line 2184 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* nonemptyidlist: ID  */
-#line 343 "engines/director/lingo/lingo-gr.y"
+#line 344 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2142 "engines/director/lingo/lingo-gr.cpp"
+#line 2193 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 347 "engines/director/lingo/lingo-gr.y"
+#line 348 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2150 "engines/director/lingo/lingo-gr.cpp"
+#line 2201 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* proc: ID '(' exprlist ')' '\n'  */
-#line 368 "engines/director/lingo/lingo-gr.y"
+#line 369 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new CmdNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
-#line 2156 "engines/director/lingo/lingo-gr.cpp"
+#line 2207 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* proc: ID exprlist '\n'  */
-#line 369 "engines/director/lingo/lingo-gr.y"
+#line 370 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2162 "engines/director/lingo/lingo-gr.cpp"
+#line 2213 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* proc: tPUT '(' exprlist ')' '\n'  */
-#line 370 "engines/director/lingo/lingo-gr.y"
+#line 371 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-2].nodelist)); }
-#line 2168 "engines/director/lingo/lingo-gr.cpp"
+#line 2219 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* proc: tPUT exprlist '\n'  */
-#line 371 "engines/director/lingo/lingo-gr.y"
+#line 372 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2174 "engines/director/lingo/lingo-gr.cpp"
+#line 2225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* proc: tNEXT tREPEAT '\n'  */
-#line 372 "engines/director/lingo/lingo-gr.y"
+#line 373 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2180 "engines/director/lingo/lingo-gr.cpp"
+#line 2231 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* proc: tEXIT tREPEAT '\n'  */
-#line 373 "engines/director/lingo/lingo-gr.y"
+#line 374 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2186 "engines/director/lingo/lingo-gr.cpp"
+#line 2237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 376 "engines/director/lingo/lingo-gr.y"
+#line 377 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2192 "engines/director/lingo/lingo-gr.cpp"
+#line 2243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2198 "engines/director/lingo/lingo-gr.cpp"
+#line 2249 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 378 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2204 "engines/director/lingo/lingo-gr.cpp"
+#line 2255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* asgn: tSET varorthe to expr '\n'  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2210 "engines/director/lingo/lingo-gr.cpp"
+#line 2261 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* definevars: tGLOBAL idlist '\n'  */
-#line 384 "engines/director/lingo/lingo-gr.y"
+#line 385 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2216 "engines/director/lingo/lingo-gr.cpp"
+#line 2267 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* definevars: tPROPERTY idlist '\n'  */
-#line 385 "engines/director/lingo/lingo-gr.y"
+#line 386 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2222 "engines/director/lingo/lingo-gr.cpp"
+#line 2273 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* definevars: tINSTANCE idlist '\n'  */
-#line 386 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2228 "engines/director/lingo/lingo-gr.cpp"
+#line 2279 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ifstmt: tIF expr tTHEN stmt  */
-#line 389 "engines/director/lingo/lingo-gr.y"
+#line 390 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2237 "engines/director/lingo/lingo-gr.cpp"
+#line 2288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 393 "engines/director/lingo/lingo-gr.y"
+#line 394 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2244 "engines/director/lingo/lingo-gr.cpp"
+#line 2295 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2255 "engines/director/lingo/lingo-gr.cpp"
+#line 2306 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+#line 404 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2264 "engines/director/lingo/lingo-gr.cpp"
+#line 2315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 408 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2273 "engines/director/lingo/lingo-gr.cpp"
+#line 2324 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 412 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2280 "engines/director/lingo/lingo-gr.cpp"
+#line 2331 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 416 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2287 "engines/director/lingo/lingo-gr.cpp"
+#line 2338 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 417 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2294 "engines/director/lingo/lingo-gr.cpp"
+#line 2345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 419 "engines/director/lingo/lingo-gr.y"
+#line 420 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2301 "engines/director/lingo/lingo-gr.cpp"
+#line 2352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* stmtlist: %empty  */
-#line 423 "engines/director/lingo/lingo-gr.y"
+#line 424 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2307 "engines/director/lingo/lingo-gr.cpp"
+#line 2358 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* nonemptystmtlist: stmtlistline  */
-#line 428 "engines/director/lingo/lingo-gr.y"
+#line 429 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2318 "engines/director/lingo/lingo-gr.cpp"
+#line 2369 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 434 "engines/director/lingo/lingo-gr.y"
+#line 435 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2328 "engines/director/lingo/lingo-gr.cpp"
+#line 2379 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* stmtlistline: '\n'  */
-#line 441 "engines/director/lingo/lingo-gr.y"
+#line 442 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2334 "engines/director/lingo/lingo-gr.cpp"
+#line 2385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* simpleexprnoparens: tINT  */
-#line 447 "engines/director/lingo/lingo-gr.y"
+#line 448 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2340 "engines/director/lingo/lingo-gr.cpp"
+#line 2391 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104: /* simpleexprnoparens: tFLOAT  */
-#line 448 "engines/director/lingo/lingo-gr.y"
+#line 449 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2346 "engines/director/lingo/lingo-gr.cpp"
+#line 2397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* simpleexprnoparens: tSYMBOL  */
-#line 449 "engines/director/lingo/lingo-gr.y"
+#line 450 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2352 "engines/director/lingo/lingo-gr.cpp"
+#line 2403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* simpleexprnoparens: tSTRING  */
-#line 450 "engines/director/lingo/lingo-gr.y"
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2358 "engines/director/lingo/lingo-gr.cpp"
+#line 2409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* simpleexprnoparens: '+' simpleexpr  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[0].node); }
-#line 2364 "engines/director/lingo/lingo-gr.cpp"
+#line 2415 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* simpleexprnoparens: '-' simpleexpr  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2370 "engines/director/lingo/lingo-gr.cpp"
+#line 2421 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2376 "engines/director/lingo/lingo-gr.cpp"
+#line 2427 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* simpleexprnoparens: ID '(' exprlist ')'  */
-#line 454 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2382 "engines/director/lingo/lingo-gr.cpp"
+#line 2433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* var: ID  */
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 113: /* var: ID  */
+#line 460 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2388 "engines/director/lingo/lingo-gr.cpp"
+#line 2439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* simpleexpr: '(' expr ')'  */
-#line 469 "engines/director/lingo/lingo-gr.y"
+  case 117: /* simpleexpr: '(' expr ')'  */
+#line 471 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2394 "engines/director/lingo/lingo-gr.cpp"
+#line 2445 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* expr: simpleexpr  */
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 118: /* list: '[' exprlist ']'  */
+#line 474 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
+#line 2451 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 119: /* list: '[' ':' ']'  */
+#line 475 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new PropListNode(new NodeList); }
+#line 2457 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 120: /* list: '[' proplist ']'  */
+#line 476 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
+#line 2463 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 121: /* proplist: proppair  */
+#line 479 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		NodeList *list = new NodeList; 
+		list->push_back((yyvsp[0].node));
+		(yyval.nodelist) = list; }
+#line 2472 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 122: /* proplist: proplist ',' proppair  */
+#line 483 "engines/director/lingo/lingo-gr.y"
+                                                {
+		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
+		(yyval.nodelist) = (yyvsp[-2].nodelist); }
+#line 2480 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 123: /* proppair: tSYMBOL ':' expr  */
+#line 488 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
+#line 2486 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 124: /* proppair: ID ':' expr  */
+#line 489 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
+#line 2492 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 125: /* proppair: tSTRING ':' expr  */
+#line 490 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
+#line 2498 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 126: /* expr: simpleexpr  */
+#line 493 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2400 "engines/director/lingo/lingo-gr.cpp"
+#line 2504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* expr: expr '+' expr  */
-#line 473 "engines/director/lingo/lingo-gr.y"
+  case 127: /* expr: expr '+' expr  */
+#line 494 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2406 "engines/director/lingo/lingo-gr.cpp"
+#line 2510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* expr: expr '-' expr  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+  case 128: /* expr: expr '-' expr  */
+#line 495 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2412 "engines/director/lingo/lingo-gr.cpp"
+#line 2516 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* expr: expr '*' expr  */
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 129: /* expr: expr '*' expr  */
+#line 496 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2418 "engines/director/lingo/lingo-gr.cpp"
+#line 2522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* expr: expr '/' expr  */
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 130: /* expr: expr '/' expr  */
+#line 497 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2424 "engines/director/lingo/lingo-gr.cpp"
+#line 2528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* expr: expr tMOD expr  */
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 131: /* expr: expr tMOD expr  */
+#line 498 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2430 "engines/director/lingo/lingo-gr.cpp"
+#line 2534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* expr: expr '>' expr  */
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 132: /* expr: expr '>' expr  */
+#line 499 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2436 "engines/director/lingo/lingo-gr.cpp"
+#line 2540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* expr: expr '<' expr  */
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 133: /* expr: expr '<' expr  */
+#line 500 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2442 "engines/director/lingo/lingo-gr.cpp"
+#line 2546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* expr: expr tEQ expr  */
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 134: /* expr: expr tEQ expr  */
+#line 501 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2448 "engines/director/lingo/lingo-gr.cpp"
+#line 2552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* expr: expr tNEQ expr  */
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 135: /* expr: expr tNEQ expr  */
+#line 502 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2454 "engines/director/lingo/lingo-gr.cpp"
+#line 2558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* expr: expr tGE expr  */
-#line 482 "engines/director/lingo/lingo-gr.y"
+  case 136: /* expr: expr tGE expr  */
+#line 503 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2460 "engines/director/lingo/lingo-gr.cpp"
+#line 2564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* expr: expr tLE expr  */
-#line 483 "engines/director/lingo/lingo-gr.y"
+  case 137: /* expr: expr tLE expr  */
+#line 504 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2466 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* expr: expr tAND expr  */
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 138: /* expr: expr tAND expr  */
+#line 505 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2472 "engines/director/lingo/lingo-gr.cpp"
+#line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* expr: expr tOR expr  */
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 139: /* expr: expr tOR expr  */
+#line 506 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2478 "engines/director/lingo/lingo-gr.cpp"
+#line 2582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* expr: expr '&' expr  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+  case 140: /* expr: expr '&' expr  */
+#line 507 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2484 "engines/director/lingo/lingo-gr.cpp"
+#line 2588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* expr: expr tCONCAT expr  */
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 141: /* expr: expr tCONCAT expr  */
+#line 508 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2490 "engines/director/lingo/lingo-gr.cpp"
+#line 2594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* expr: expr tCONTAINS expr  */
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 142: /* expr: expr tCONTAINS expr  */
+#line 509 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2496 "engines/director/lingo/lingo-gr.cpp"
+#line 2600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* expr: expr tSTARTS expr  */
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 143: /* expr: expr tSTARTS expr  */
+#line 510 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2502 "engines/director/lingo/lingo-gr.cpp"
+#line 2606 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* exprlist: %empty  */
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 144: /* exprlist: %empty  */
+#line 513 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 2508 "engines/director/lingo/lingo-gr.cpp"
+#line 2612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* nonemptyexprlist: expr  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 146: /* nonemptyexprlist: expr  */
+#line 517 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2517 "engines/director/lingo/lingo-gr.cpp"
+#line 2621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 147: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2629 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 2529 "engines/director/lingo/lingo-gr.cpp"
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -2724,7 +2828,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 505 "engines/director/lingo/lingo-gr.y"
+#line 526 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index e8966441d9..52ce924d55 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -173,7 +173,8 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 // EXPRESSION
 %type<node> simpleexprnoparens simpleexpr expr
 %type<node> var varorchunk varorthe
-%type<nodelist> exprlist nonemptyexprlist
+%type<node> list proppair
+%type<nodelist> proplist exprlist nonemptyexprlist
 
 %left tAND tOR
 %left '<' tLE '>' tGE tEQ tNEQ tCONTAINS tSTARTS
@@ -453,6 +454,7 @@ simpleexprnoparens: tINT			{ $$ = new IntNode($tINT); }
 	| tNOT simpleexpr[arg]  %prec tUNARY	{ $$ = new UnaryOpNode(LC::c_not, $arg); }
 	| ID '(' exprlist[args] ')'		{ $$ = new FuncNode($ID, $args); }
 	| var
+	| list
 	;
 
 var: ID							{ $$ = new VarNode($ID); } ;
@@ -469,6 +471,25 @@ simpleexpr: simpleexprnoparens
 	| '(' expr ')'				{ $$ = $expr; }
 	;
 
+list: '[' exprlist ']'			{ $$ = new ListNode($exprlist); }
+	| '[' ':' ']'				{ $$ = new PropListNode(new NodeList); }
+	| '[' proplist ']'			{ $$ = new PropListNode($proplist); }
+	;
+
+proplist: proppair[item]				{
+		NodeList *list = new NodeList; 
+		list->push_back($item);
+		$$ = list; }
+	| proplist[prev] ',' proppair[item]	{
+		$prev->push_back($item);
+		$$ = $prev; }
+	;
+
+proppair: tSYMBOL ':' expr		{ $$ = new PropPairNode(new SymbolNode($tSYMBOL), $expr); }
+	| ID ':' expr				{ $$ = new PropPairNode(new SymbolNode($ID), $expr); }
+	| tSTRING ':' expr 			{ $$ = new PropPairNode(new StringNode($tSTRING), $expr); }
+	;
+
 expr: simpleexpr				{ $$ = $simpleexpr; }
 	| expr[a] '+' expr[b]		{ $$ = new BinaryOpNode(LC::c_add, $a, $b); }
 	| expr[a] '-' expr[b]		{ $$ = new BinaryOpNode(LC::c_sub, $a, $b); }


Commit: 7649e2d44c2edf561fbeedbfb2df4d2ce5edb0f1
    https://github.com/scummvm/scummvm/commit/7649e2d44c2edf561fbeedbfb2df4d2ce5edb0f1
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement exit

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index f39882280a..bc1635acc5 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -43,6 +43,7 @@ struct RepeatWhileNode;
 struct RepeatWithToNode;
 struct NextRepeatNode;
 struct ExitRepeatNode;
+struct ExitNode;
 struct IntNode;
 struct FloatNode;
 struct SymbolNode;
@@ -87,6 +88,7 @@ enum NodeType {
 	kRepeatWithToNode,
 	kNextRepeatNode,
 	kExitRepeatNode,
+	kExitNode,
 	kIntNode,
 	kFloatNode,
 	kSymbolNode,
@@ -125,6 +127,7 @@ public:
 	virtual void visitRepeatWithToNode(RepeatWithToNode *node) = 0;
 	virtual void visitNextRepeatNode(NextRepeatNode *node) = 0;
 	virtual void visitExitRepeatNode(ExitRepeatNode *node) = 0;
+	virtual void visitExitNode(ExitNode *node) = 0;
 	virtual void visitIntNode(IntNode *node) = 0;
 	virtual void visitFloatNode(FloatNode *node) = 0;
 	virtual void visitSymbolNode(SymbolNode *node) = 0;
@@ -454,6 +457,16 @@ struct ExitRepeatNode : StmtNode {
 	}
 };
 
+/* ExitNode */
+
+struct ExitNode : StmtNode {
+	ExitNode() : StmtNode(kExitNode) {}
+	virtual ~ExitNode() {}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitExitNode(this);
+	}
+};
+
 /* IntNode */
 
 struct IntNode : ExprNode {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index ecce15946e..c5db7e3a95 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -665,6 +665,12 @@ void LingoCompiler::visitExitRepeatNode(ExitRepeatNode *node) {
 	}
 }
 
+/* ExitNode */
+
+void LingoCompiler::visitExitNode(ExitNode *node) {
+	code1(LC::c_procret);
+}
+
 /* IntNode */
 
 void LingoCompiler::visitIntNode(IntNode *node) {
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index a6e73dcc3a..193359741f 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -94,6 +94,7 @@ public:
 	virtual void visitRepeatWithToNode(RepeatWithToNode *node);
 	virtual void visitNextRepeatNode(NextRepeatNode *node);
 	virtual void visitExitRepeatNode(ExitRepeatNode *node);
+	virtual void visitExitNode(ExitNode *node);
 	virtual void visitIntNode(IntNode *node);
 	virtual void visitFloatNode(FloatNode *node);
 	virtual void visitSymbolNode(SymbolNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 0c7923eb10..69af1d1294 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -673,18 +673,18 @@ static const yytype_int16 yyrline[] =
        0,   194,   194,   196,   202,   209,   210,   211,   212,   213,
      242,   246,   248,   250,   251,   254,   260,   267,   268,   273,
      277,   281,   282,   283,   288,   289,   290,   291,   292,   293,
-     294,   297,   299,   302,   304,   305,   306,   307,   310,   311,
-     312,   313,   314,   316,   317,   318,   319,   320,   323,   324,
-     325,   326,   327,   329,   330,   331,   332,   333,   334,   335,
-     336,   337,   340,   341,   344,   348,   358,   359,   360,   361,
-     364,   365,   366,   369,   370,   371,   372,   373,   374,   377,
-     378,   379,   380,   383,   383,   385,   386,   387,   390,   394,
-     398,   404,   408,   412,   416,   418,   420,   424,   425,   429,
-     435,   442,   443,   448,   449,   450,   451,   452,   453,   454,
-     455,   456,   457,   460,   462,   466,   470,   471,   474,   475,
-     476,   479,   483,   488,   489,   490,   493,   494,   495,   496,
-     497,   498,   499,   500,   501,   502,   503,   504,   505,   506,
-     507,   508,   509,   510,   513,   514,   517,   521
+     294,   299,   302,   304,   305,   306,   307,   310,   311,   312,
+     313,   314,   316,   317,   318,   319,   320,   323,   324,   325,
+     326,   327,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   340,   341,   344,   348,   358,   359,   360,   361,   364,
+     365,   366,   369,   370,   371,   372,   373,   374,   375,   378,
+     379,   380,   381,   384,   384,   386,   387,   388,   391,   395,
+     399,   405,   409,   413,   417,   419,   421,   425,   426,   430,
+     436,   443,   444,   449,   450,   451,   452,   453,   454,   455,
+     456,   457,   458,   461,   463,   467,   471,   472,   475,   476,
+     477,   480,   484,   489,   490,   491,   494,   495,   496,   497,
+     498,   499,   500,   501,   502,   503,   504,   505,   506,   507,
+     508,   509,   510,   511,   514,   515,   518,   522
 };
 #endif
 
@@ -759,33 +759,33 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     618,  -183,  -183,  -183,  -183,  -183,  -183,  -183,   -21,  1417,
-     388,  -183,  -183,  1417,  -183,   -15,  -183,  -183,   467,     3,
+     618,  -183,  -183,  -183,  -183,  -183,  -183,  -183,   -31,  1417,
+     388,  -183,  -183,  1417,  -183,   -21,  -183,  -183,   467,     3,
     1417,  -183,  -183,  -183,  -183,  1417,  -183,  -183,  1417,  -183,
     -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,
     -183,  -183,  -183,  -183,  1417,  1417,  -183,  -183,     4,   618,
     -183,  -183,  -183,  -183,   546,  -183,  -183,  -183,  -183,  -183,
-    -183,  -183,  -183,   -74,  -183,  -183,  -183,  -183,  -183,   -59,
+    -183,  -183,  -183,   -74,  -183,  -183,  -183,  -183,  -183,   -65,
      -58,  -183,  -183,  -183,  -183,   388,   388,   388,   388,   307,
      -53,  -183,  -183,  -183,  -183,    96,  1417,   -48,   388,  1438,
-     -43,   -32,  1417,   388,  -183,  -183,   -26,   -34,   -22,   -20,
-    1417,  -183,  -183,   388,  1591,   -19,  -183,  -183,  1417,  -183,
-    -183,  -183,  1451,   -23,   -14,   -10,   -77,   -68,  -183,    -9,
+     -43,   -23,  1417,   388,  -183,  -183,   -26,   -34,   -20,   -19,
+    1417,  -183,  -183,   388,  1591,   -16,  -183,  -183,  1417,  -183,
+    -183,  -183,  1451,   -15,   -14,   -22,   -73,   -64,  -183,   -10,
      388,  1116,   388,   388,   388,   388,   388,   388,   388,   388,
-     388,   388,   388,   388,   388,   388,   388,   388,   388,   -16,
+     388,   388,   388,   388,   388,   388,   388,   388,   388,    -4,
     -183,  1451,   -24,  1417,  1417,  1417,  -183,   388,    20,  1491,
-    -183,  -183,   388,   -65,  -183,  -183,    -2,   -12,  -183,  -183,
-    -183,   388,   388,  -183,   388,  1358,  -183,  -183,    -4,  1177,
-      64,    58,    58,    58,    58,  1604,  1604,  -183,   -50,    58,
+    -183,  -183,   388,   -62,  -183,  -183,    -2,    -1,  -183,  -183,
+    -183,   388,   388,  -183,   388,  1358,  -183,  -183,     1,  1177,
+      61,    58,    58,    58,    58,  1604,  1604,  -183,   -50,    58,
       58,    58,    58,   -50,   -47,   -47,  -183,  -183,  1177,     5,
     -183,     9,    11,    12,  1591,   388,  1177,  1504,  1417,  -183,
-    -183,    13,  -183,  -183,  1177,    15,  1591,  1591,  1591,   -23,
+    -183,    13,  -183,  -183,  1177,    15,  1591,  1591,  1591,   -15,
      -14,    -3,  -183,  -183,  -183,  -183,   679,  -183,  -183,  1238,
-    1177,  -183,  -183,  -183,  -183,    52,   741,  -183,  1417,   -65,
-     809,  -183,  1299,    24,  -183,  1177,  -183,    48,   388,    25,
-      30,  -183,  1417,  1177,  -183,  -183,   870,   388,  1541,  -183,
-    1177,   -29,  -183,   932,    31,  1554,  1177,  1177,  -183,  1417,
-      33,  -183,  1177,   994,  -183,  -183,  1055,    34,    36,  -183,
+    1177,  -183,  -183,  -183,  -183,    52,   741,  -183,  1417,   -62,
+     809,  -183,  1299,    24,  -183,  1177,  -183,    69,   388,    30,
+      31,  -183,  1417,  1177,  -183,  -183,   870,   388,  1541,  -183,
+    1177,   -29,  -183,   932,    33,  1554,  1177,  1177,  -183,  1417,
+      34,  -183,  1177,   994,  -183,  -183,  1055,    36,    38,  -183,
     -183
 };
 
@@ -794,30 +794,30 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,    24,    46,    28,    32,    49,    58,    30,    31,    62,
-       0,    33,    35,     0,    39,    40,    42,    47,   144,    48,
-      50,    53,    56,    59,    57,     0,    43,    45,    62,    26,
-      44,    41,    38,    25,    27,    51,    29,    36,    37,    61,
-      55,    34,    60,    52,    62,     0,    54,     5,     0,     2,
-       3,     6,     7,     8,   144,     9,    66,    70,    71,    72,
-      67,    68,    69,     0,    31,    40,    48,    50,    64,     0,
-      63,   103,   104,   106,   105,    41,     0,     0,     0,   144,
-     113,   116,   111,   126,   112,     0,    62,     0,   144,   146,
+       0,    24,    45,    28,    31,    48,    57,    30,     0,    61,
+       0,    32,    34,     0,    38,    39,    41,    46,   144,    47,
+      49,    52,    55,    58,    56,     0,    42,    44,    61,    26,
+      43,    40,    37,    25,    27,    50,    29,    35,    36,    60,
+      54,    33,    59,    51,    61,     0,    53,     5,     0,     2,
+       3,     6,     7,     8,   144,     9,    65,    69,    70,    71,
+      66,    67,    68,     0,    78,    39,    47,    49,    63,     0,
+      62,   103,   104,   106,   105,    40,     0,     0,     0,   144,
+     113,   116,   111,   126,   112,     0,    61,     0,   144,   146,
        0,   145,     0,     0,   113,   115,     0,     0,     0,     0,
-      62,     1,     4,   144,   146,     0,    78,    85,     0,   109,
+      61,     1,     4,   144,   146,     0,    77,    85,     0,   109,
      107,   108,     0,   106,   105,     0,   113,     0,   121,     0,
      144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      77,   146,     0,     0,     0,     0,    76,     0,     0,     0,
-      83,    84,     0,    13,    87,    86,     0,     0,    74,    65,
+      76,   146,     0,     0,     0,     0,    75,     0,     0,     0,
+      83,    84,     0,    13,    87,    86,     0,     0,    73,    64,
      117,     0,     0,   119,     0,     0,   120,   118,     0,    97,
       88,   136,   137,   134,   135,   138,   139,   131,   141,   142,
      143,   133,   132,   140,   127,   128,   129,   130,    97,     0,
      114,     0,     0,     0,   147,     0,    97,     0,     0,    17,
       18,    11,    14,    15,    97,     0,   125,   123,   124,     0,
        0,     0,   122,   110,   101,   102,     0,    98,    99,     0,
-      10,    75,    79,    80,    81,     0,     0,    82,    62,     0,
-      20,    73,     0,     0,   100,    97,    90,     0,     0,     0,
+      10,    74,    79,    80,    81,     0,     0,    82,    61,     0,
+      20,    72,     0,     0,   100,    97,    90,     0,     0,     0,
        0,    16,    21,    97,    92,    89,     0,     0,     0,    94,
       97,     0,    22,     0,     0,     0,    97,    12,    19,     0,
        0,    91,    97,     0,    23,    93,     0,     0,     0,    95,
@@ -827,10 +827,10 @@ static const yytype_uint8 yydefact[] =
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -183,  -183,  -183,    75,  -183,  -183,  -183,  -183,  -183,  -104,
+    -183,  -183,  -183,    76,  -183,  -183,  -183,  -183,  -183,  -100,
     -183,  -183,     0,   -27,  -183,     2,  -183,  -183,  -183,  -183,
     -183,  -183,  -183,  -183,  -182,  -183,  -170,  -183,   -17,   -82,
-    -183,   -35,  -183,  -183,   -36,   145,   -49,  -183
+    -183,   -35,  -183,  -183,   -13,   145,   -49,  -183
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
@@ -847,22 +847,22 @@ static const yytype_uint8 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      54,    98,    55,    95,   101,   105,   220,   128,   198,    68,
-     128,   120,   106,    86,   226,   164,   150,    99,    63,   165,
-      94,   199,   230,   166,    87,    97,   151,   107,    68,   108,
+      54,    98,    55,    95,   101,   105,   220,   128,    63,    68,
+     128,   198,   106,    86,   226,   120,   150,    99,    87,   164,
+      94,   107,   230,   165,   199,    97,   151,   166,    68,   108,
      119,   135,   136,   137,   138,   120,   137,   138,   140,   142,
      109,   110,   111,   146,    68,   100,   234,    92,    93,    54,
-     234,    55,   153,   246,   157,   147,   234,   258,   259,   139,
-     234,   253,   192,   193,   154,   189,   155,   158,   257,   161,
-     188,   168,   195,   156,   263,   237,   234,   205,   162,   116,
-     266,   163,   167,   234,   204,   213,    68,   234,   219,   164,
-     247,   221,   148,   234,   238,   222,   234,   223,   224,   229,
+     234,    55,   153,   246,   157,    64,   234,   258,   259,   139,
+     234,   253,   192,   193,   147,   189,   154,   155,   257,   163,
+     158,   168,   195,   156,   263,   237,   234,   161,   162,   116,
+     266,   167,   188,   234,   204,   219,    68,   234,   205,   164,
+     213,   221,   148,   234,   238,   222,   234,   223,   224,   229,
       68,   231,   122,   123,   124,   125,   126,   127,   159,   128,
-     245,   249,   129,   130,   131,   128,   250,   261,   129,   265,
-     269,    54,   270,   170,   102,   241,   190,   190,   190,   212,
+     245,   247,   129,   130,   131,   128,   249,   250,   129,   261,
+     265,    54,   269,   170,   270,   102,   190,   190,   190,   241,
      132,   133,   134,   135,   136,   137,   138,   121,   134,   135,
      136,   137,   138,    94,    94,    94,   122,   123,   124,   125,
-     126,   127,     0,   128,     0,    85,   129,   130,   131,     0,
+     126,   127,   212,   128,     0,    85,   129,   130,   131,     0,
        0,     0,     0,    89,     0,   211,     0,     0,     0,    54,
        0,     0,     0,     0,   132,   133,   134,   135,   136,   137,
      138,     0,     0,     0,     0,     0,     0,     0,    54,     0,
@@ -880,7 +880,7 @@ static const yytype_int16 yytable[] =
        0,     0,     0,     0,     0,     0,   206,   207,     0,   208,
        0,     0,    71,     0,     0,     0,     0,    72,     0,     0,
        1,   113,   114,     0,     2,     0,     3,     4,     5,     6,
-       7,     0,     0,    64,     0,     0,     0,     0,    11,    12,
+       7,     0,     0,     0,     0,     0,     0,     0,    11,    12,
      225,    14,    65,    16,    17,     0,    66,    67,     0,    21,
       22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
        0,    29,    30,    75,    32,    33,    34,     0,     0,    35,
@@ -888,7 +888,7 @@ static const yytype_int16 yytable[] =
        0,     0,     0,   248,    46,     0,     0,     0,    76,    77,
        0,     0,   255,    71,     0,    78,     0,    79,    72,   115,
        0,     1,    73,    74,     0,     2,     0,     3,     4,     5,
-       6,     7,     0,     0,    64,     0,     0,     0,     0,    11,
+       6,     7,     0,     0,     0,     0,     0,     0,     0,    11,
       12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
       21,    22,    23,    24,     0,    26,    27,     0,     0,     0,
        0,     0,    29,    30,    75,    32,    33,    34,     0,     0,
@@ -896,7 +896,7 @@ static const yytype_int16 yytable[] =
        0,     0,     0,     0,     0,    46,     0,     0,     0,    76,
       77,     0,    71,     0,     0,     0,    78,    72,    79,     0,
        1,    73,    74,     0,     2,     0,     3,     4,     5,     6,
-       7,     0,     0,    64,     0,     0,     0,     0,    11,    12,
+       7,     0,     0,     0,     0,     0,     0,     0,    11,    12,
        0,    14,    65,    16,    17,     0,    66,    67,     0,    21,
       22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
        0,    29,    30,    75,    32,    33,    34,     0,     0,    35,
@@ -904,7 +904,7 @@ static const yytype_int16 yytable[] =
        0,     0,     0,     0,    46,     0,     0,     0,    76,    77,
        0,    71,     0,     0,     0,    88,    72,    79,     0,     1,
       73,    74,     0,     2,     0,     3,     4,     5,     6,     7,
-       0,     0,    64,     0,     0,     0,     0,    11,    12,     0,
+       0,     0,     0,     0,     0,     0,     0,    11,    12,     0,
       14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
       23,    24,     0,    26,    27,     0,     0,     0,     0,     0,
       29,    30,    75,    32,    33,    34,     0,     0,    35,    36,
@@ -985,13 +985,13 @@ static const yytype_int16 yytable[] =
        0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
        0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,     1,   209,   210,     0,     2,    46,     3,     4,     5,
-       6,     7,     0,     0,    64,   243,     0,     0,     0,    11,
+       6,     7,     0,     0,     0,   243,     0,     0,     0,    11,
       12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
       21,    22,    23,    24,     0,    26,    27,     0,     0,     0,
        0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
       35,    36,    37,    38,    39,    40,    41,    42,    43,     0,
        1,     0,     0,     0,     2,    46,     3,     4,     5,     6,
-       7,     0,     0,    64,     0,     0,     0,     0,    11,    12,
+       7,     0,     0,     0,     0,     0,     0,     0,    11,    12,
        0,    14,    65,    16,    17,     0,    66,    67,     0,    21,
       22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
      143,    29,    30,    31,    32,    33,    34,     0,     0,    35,
@@ -1020,22 +1020,22 @@ static const yytype_int16 yytable[] =
 
 static const yytype_int16 yycheck[] =
 {
-       0,    28,     0,    20,     0,    54,   188,    57,    73,     9,
-      57,    88,    86,    13,   196,    92,    42,    44,    39,    87,
-      20,    86,   204,    91,    39,    25,    52,    86,    28,    87,
+       0,    28,     0,    20,     0,    54,   188,    57,    39,     9,
+      57,    73,    86,    13,   196,    88,    42,    44,    39,    92,
+      20,    86,   204,    87,    86,    25,    52,    91,    28,    87,
       79,    81,    82,    83,    84,    88,    83,    84,    86,    88,
       75,    76,    77,    86,    44,    45,   216,    44,    45,    49,
-     220,    49,    86,   235,   103,    87,   226,    86,    87,    86,
-     230,   243,   144,   145,    86,    89,    86,    86,   250,    92,
-      86,   120,    52,   100,   256,    23,   246,    89,    92,    79,
-     262,    91,    91,   253,    86,    89,    86,   257,    24,    92,
-      42,    86,    92,   263,    42,    86,   266,    86,    86,    86,
+     220,    49,    86,   235,   103,    86,   226,    86,    87,    86,
+     230,   243,   144,   145,    87,    89,    86,    86,   250,    91,
+      86,   120,    52,   100,   256,    23,   246,    92,    92,    79,
+     262,    91,    86,   253,    86,    24,    86,   257,    89,    92,
+      89,    86,    92,   263,    42,    86,   266,    86,    86,    86,
      100,    86,    50,    51,    52,    53,    54,    55,   108,    57,
-      86,    86,    60,    61,    62,    57,    86,    86,    60,    86,
-      86,   121,    86,   121,    49,   229,   143,   144,   145,   165,
+      86,    42,    60,    61,    62,    57,    86,    86,    60,    86,
+      86,   121,    86,   121,    86,    49,   143,   144,   145,   229,
       78,    79,    80,    81,    82,    83,    84,    41,    80,    81,
       82,    83,    84,   143,   144,   145,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    10,    60,    61,    62,    -1,
+      54,    55,   165,    57,    -1,    10,    60,    61,    62,    -1,
       -1,    -1,    -1,    18,    -1,   165,    -1,    -1,    -1,   169,
       -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,
@@ -1053,7 +1053,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,   161,   162,    -1,   164,
       -1,    -1,     5,    -1,    -1,    -1,    -1,    10,    -1,    -1,
       13,    14,    15,    -1,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,
+      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,
      195,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
@@ -1061,7 +1061,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,   238,    77,    -1,    -1,    -1,    81,    82,
       -1,    -1,   247,     5,    -1,    88,    -1,    90,    10,    92,
       -1,    13,    14,    15,    -1,    17,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,    26,    -1,    -1,    -1,    -1,    31,
+      22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,
       32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
       42,    43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,
       -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
@@ -1069,7 +1069,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
       82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
       13,    14,    15,    -1,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,
+      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,
       -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
@@ -1077,7 +1077,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
       -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
       14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,    -1,
       34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
       44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,
       54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
@@ -1158,13 +1158,13 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
       -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    13,    14,    15,    -1,    17,    77,    19,    20,    21,
-      22,    23,    -1,    -1,    26,    86,    -1,    -1,    -1,    31,
+      22,    23,    -1,    -1,    -1,    86,    -1,    -1,    -1,    31,
       32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
       42,    43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,
       -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
       13,    -1,    -1,    -1,    17,    77,    19,    20,    21,    22,
-      23,    -1,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,
+      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,
       -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
       32,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
@@ -1201,7 +1201,7 @@ static const yytype_uint8 yystos[] =
       55,    56,    57,    58,    59,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    77,    86,    94,    95,
       96,    97,    98,   103,   105,   108,   109,   110,   111,   113,
-     114,   115,   116,    39,    26,    35,    39,    40,   105,   106,
+     114,   115,   116,    39,    86,    35,    39,    40,   105,   106,
      107,     5,    10,    14,    15,    56,    81,    82,    88,    90,
      105,   120,   121,   124,   125,   128,   105,    39,    88,   128,
      129,   130,    44,    45,   105,   121,   123,   105,   106,   106,
@@ -1234,8 +1234,8 @@ static const yytype_uint8 yyr1[] =
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   106,   106,   107,   107,   108,   108,   108,   108,
-     109,   109,   109,   110,   110,   110,   110,   110,   110,   111,
+     105,   106,   106,   107,   107,   108,   108,   108,   108,   109,
+     109,   109,   110,   110,   110,   110,   110,   110,   110,   111,
      111,   111,   111,   112,   112,   113,   113,   113,   114,   114,
      115,   115,   115,   115,   116,   116,   116,   117,   117,   118,
      118,   119,   119,   120,   120,   120,   120,   120,   120,   120,
@@ -1254,8 +1254,8 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     1,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     5,     3,     5,     3,     3,     3,     5,
+       1,     0,     1,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     5,     3,     5,     3,     3,     3,     2,     5,
        5,     5,     5,     1,     1,     3,     3,     3,     4,     7,
        6,     9,     7,    10,     7,    11,    12,     0,     1,     1,
        2,     1,     1,     1,     1,     1,     1,     2,     2,     2,
@@ -1991,295 +1991,295 @@ yyreduce:
 #line 1992 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 31: /* ID: tEXIT  */
-#line 297 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("exit"); }
-#line 1998 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 32: /* ID: tFIELD  */
+  case 31: /* ID: tFIELD  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2004 "engines/director/lingo/lingo-gr.cpp"
+#line 1998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 33: /* ID: tIN  */
+  case 32: /* ID: tIN  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2010 "engines/director/lingo/lingo-gr.cpp"
+#line 2004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 34: /* ID: tINTERSECTS  */
+  case 33: /* ID: tINTERSECTS  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2016 "engines/director/lingo/lingo-gr.cpp"
+#line 2010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 35: /* ID: tINTO  */
+  case 34: /* ID: tINTO  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2022 "engines/director/lingo/lingo-gr.cpp"
+#line 2016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 36: /* ID: tITEM  */
+  case 35: /* ID: tITEM  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2028 "engines/director/lingo/lingo-gr.cpp"
+#line 2022 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 37: /* ID: tLINE  */
+  case 36: /* ID: tLINE  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2034 "engines/director/lingo/lingo-gr.cpp"
+#line 2028 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 38: /* ID: tMOD  */
+  case 37: /* ID: tMOD  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2040 "engines/director/lingo/lingo-gr.cpp"
+#line 2034 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 39: /* ID: tMOVIE  */
+  case 38: /* ID: tMOVIE  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2046 "engines/director/lingo/lingo-gr.cpp"
+#line 2040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 40: /* ID: tNEXT  */
+  case 39: /* ID: tNEXT  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2052 "engines/director/lingo/lingo-gr.cpp"
+#line 2046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 41: /* ID: tNOT  */
+  case 40: /* ID: tNOT  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2058 "engines/director/lingo/lingo-gr.cpp"
+#line 2052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 42: /* ID: tOF  */
+  case 41: /* ID: tOF  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2064 "engines/director/lingo/lingo-gr.cpp"
+#line 2058 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 43: /* ID: tOPEN  */
+  case 42: /* ID: tOPEN  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2070 "engines/director/lingo/lingo-gr.cpp"
+#line 2064 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 44: /* ID: tOR  */
+  case 43: /* ID: tOR  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2076 "engines/director/lingo/lingo-gr.cpp"
+#line 2070 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 45: /* ID: tPLAY  */
+  case 44: /* ID: tPLAY  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2082 "engines/director/lingo/lingo-gr.cpp"
+#line 2076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 46: /* ID: tPLAYACCEL  */
+  case 45: /* ID: tPLAYACCEL  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("playAccel"); }
-#line 2088 "engines/director/lingo/lingo-gr.cpp"
+#line 2082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 47: /* ID: tPREVIOUS  */
+  case 46: /* ID: tPREVIOUS  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2094 "engines/director/lingo/lingo-gr.cpp"
+#line 2088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 48: /* ID: tREPEAT  */
+  case 47: /* ID: tREPEAT  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2100 "engines/director/lingo/lingo-gr.cpp"
+#line 2094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 49: /* ID: tSCRIPT  */
+  case 48: /* ID: tSCRIPT  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2106 "engines/director/lingo/lingo-gr.cpp"
+#line 2100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50: /* ID: tSET  */
+  case 49: /* ID: tSET  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2112 "engines/director/lingo/lingo-gr.cpp"
+#line 2106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51: /* ID: tSTARTS  */
+  case 50: /* ID: tSTARTS  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2118 "engines/director/lingo/lingo-gr.cpp"
+#line 2112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 52: /* ID: tTELL  */
+  case 51: /* ID: tTELL  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2124 "engines/director/lingo/lingo-gr.cpp"
+#line 2118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 53: /* ID: tTO  */
+  case 52: /* ID: tTO  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2130 "engines/director/lingo/lingo-gr.cpp"
+#line 2124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 54: /* ID: tASSERTERROR  */
+  case 53: /* ID: tASSERTERROR  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2136 "engines/director/lingo/lingo-gr.cpp"
+#line 2130 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 55: /* ID: tSPRITE  */
+  case 54: /* ID: tSPRITE  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2142 "engines/director/lingo/lingo-gr.cpp"
+#line 2136 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56: /* ID: tWHEN  */
+  case 55: /* ID: tWHEN  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2148 "engines/director/lingo/lingo-gr.cpp"
+#line 2142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57: /* ID: tWHILE  */
+  case 56: /* ID: tWHILE  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2154 "engines/director/lingo/lingo-gr.cpp"
+#line 2148 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58: /* ID: tWINDOW  */
+  case 57: /* ID: tWINDOW  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2160 "engines/director/lingo/lingo-gr.cpp"
+#line 2154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* ID: tWITH  */
+  case 58: /* ID: tWITH  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2166 "engines/director/lingo/lingo-gr.cpp"
+#line 2160 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 60: /* ID: tWITHIN  */
+  case 59: /* ID: tWITHIN  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2172 "engines/director/lingo/lingo-gr.cpp"
+#line 2166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61: /* ID: tWORD  */
+  case 60: /* ID: tWORD  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2178 "engines/director/lingo/lingo-gr.cpp"
+#line 2172 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62: /* idlist: %empty  */
+  case 61: /* idlist: %empty  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2184 "engines/director/lingo/lingo-gr.cpp"
+#line 2178 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 64: /* nonemptyidlist: ID  */
+  case 63: /* nonemptyidlist: ID  */
 #line 344 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2193 "engines/director/lingo/lingo-gr.cpp"
+#line 2187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 65: /* nonemptyidlist: nonemptyidlist ',' ID  */
+  case 64: /* nonemptyidlist: nonemptyidlist ',' ID  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2201 "engines/director/lingo/lingo-gr.cpp"
+#line 2195 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* proc: ID '(' exprlist ')' '\n'  */
+  case 72: /* proc: ID '(' exprlist ')' '\n'  */
 #line 369 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new CmdNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
-#line 2207 "engines/director/lingo/lingo-gr.cpp"
+#line 2201 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* proc: ID exprlist '\n'  */
+  case 73: /* proc: ID exprlist '\n'  */
 #line 370 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2213 "engines/director/lingo/lingo-gr.cpp"
+#line 2207 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tPUT '(' exprlist ')' '\n'  */
+  case 74: /* proc: tPUT '(' exprlist ')' '\n'  */
 #line 371 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-2].nodelist)); }
-#line 2219 "engines/director/lingo/lingo-gr.cpp"
+#line 2213 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tPUT exprlist '\n'  */
+  case 75: /* proc: tPUT exprlist '\n'  */
 #line 372 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2225 "engines/director/lingo/lingo-gr.cpp"
+#line 2219 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* proc: tNEXT tREPEAT '\n'  */
+  case 76: /* proc: tNEXT tREPEAT '\n'  */
 #line 373 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2231 "engines/director/lingo/lingo-gr.cpp"
+#line 2225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* proc: tEXIT tREPEAT '\n'  */
+  case 77: /* proc: tEXIT tREPEAT '\n'  */
 #line 374 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
+#line 2231 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 78: /* proc: tEXIT '\n'  */
+#line 375 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new ExitNode(); }
 #line 2237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 378 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2249 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* asgn: tSET varorthe to expr '\n'  */
-#line 380 "engines/director/lingo/lingo-gr.y"
+#line 381 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2261 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* definevars: tGLOBAL idlist '\n'  */
-#line 385 "engines/director/lingo/lingo-gr.y"
+#line 386 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
 #line 2267 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* definevars: tPROPERTY idlist '\n'  */
-#line 386 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
 #line 2273 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* definevars: tINSTANCE idlist '\n'  */
-#line 387 "engines/director/lingo/lingo-gr.y"
+#line 388 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
 #line 2279 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ifstmt: tIF expr tTHEN stmt  */
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 391 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
@@ -2288,14 +2288,14 @@ yyreduce:
     break;
 
   case 89: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 395 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
 #line 2295 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 398 "engines/director/lingo/lingo-gr.y"
+#line 399 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
@@ -2306,7 +2306,7 @@ yyreduce:
     break;
 
   case 91: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+#line 405 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
@@ -2315,7 +2315,7 @@ yyreduce:
     break;
 
   case 92: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 408 "engines/director/lingo/lingo-gr.y"
+#line 409 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
@@ -2324,41 +2324,41 @@ yyreduce:
     break;
 
   case 93: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 412 "engines/director/lingo/lingo-gr.y"
+#line 413 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
 #line 2331 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 416 "engines/director/lingo/lingo-gr.y"
+#line 417 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2338 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 419 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+#line 421 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* stmtlist: %empty  */
-#line 424 "engines/director/lingo/lingo-gr.y"
+#line 425 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
 #line 2358 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* nonemptystmtlist: stmtlistline  */
-#line 429 "engines/director/lingo/lingo-gr.y"
+#line 430 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
@@ -2369,7 +2369,7 @@ yyreduce:
     break;
 
   case 100: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 435 "engines/director/lingo/lingo-gr.y"
+#line 436 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
@@ -2379,91 +2379,91 @@ yyreduce:
     break;
 
   case 101: /* stmtlistline: '\n'  */
-#line 442 "engines/director/lingo/lingo-gr.y"
+#line 443 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
 #line 2385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* simpleexprnoparens: tINT  */
-#line 448 "engines/director/lingo/lingo-gr.y"
+#line 449 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
 #line 2391 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104: /* simpleexprnoparens: tFLOAT  */
-#line 449 "engines/director/lingo/lingo-gr.y"
+#line 450 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
 #line 2397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* simpleexprnoparens: tSYMBOL  */
-#line 450 "engines/director/lingo/lingo-gr.y"
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
 #line 2403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* simpleexprnoparens: tSTRING  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
 #line 2409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* simpleexprnoparens: '+' simpleexpr  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[0].node); }
 #line 2415 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* simpleexprnoparens: '-' simpleexpr  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
 #line 2421 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 454 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
 #line 2427 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* simpleexprnoparens: ID '(' exprlist ')'  */
-#line 455 "engines/director/lingo/lingo-gr.y"
+#line 456 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
 #line 2433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* var: ID  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 461 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
 #line 2439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* simpleexpr: '(' expr ')'  */
-#line 471 "engines/director/lingo/lingo-gr.y"
+#line 472 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
 #line 2445 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* list: '[' exprlist ']'  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 475 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
 #line 2451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* list: '[' ':' ']'  */
-#line 475 "engines/director/lingo/lingo-gr.y"
+#line 476 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
 #line 2457 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* list: '[' proplist ']'  */
-#line 476 "engines/director/lingo/lingo-gr.y"
+#line 477 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
 #line 2463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* proplist: proppair  */
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
@@ -2472,7 +2472,7 @@ yyreduce:
     break;
 
   case 122: /* proplist: proplist ',' proppair  */
-#line 483 "engines/director/lingo/lingo-gr.y"
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
@@ -2480,139 +2480,139 @@ yyreduce:
     break;
 
   case 123: /* proppair: tSYMBOL ':' expr  */
-#line 488 "engines/director/lingo/lingo-gr.y"
+#line 489 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2486 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* proppair: ID ':' expr  */
-#line 489 "engines/director/lingo/lingo-gr.y"
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* proppair: tSTRING ':' expr  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* expr: simpleexpr  */
-#line 493 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
 #line 2504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* expr: expr '+' expr  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 495 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* expr: expr '-' expr  */
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 496 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2516 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* expr: expr '*' expr  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+#line 497 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130: /* expr: expr '/' expr  */
-#line 497 "engines/director/lingo/lingo-gr.y"
+#line 498 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131: /* expr: expr tMOD expr  */
-#line 498 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* expr: expr '>' expr  */
-#line 499 "engines/director/lingo/lingo-gr.y"
+#line 500 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* expr: expr '<' expr  */
-#line 500 "engines/director/lingo/lingo-gr.y"
+#line 501 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* expr: expr tEQ expr  */
-#line 501 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* expr: expr tNEQ expr  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* expr: expr tGE expr  */
-#line 503 "engines/director/lingo/lingo-gr.y"
+#line 504 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* expr: expr tLE expr  */
-#line 504 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* expr: expr tAND expr  */
-#line 505 "engines/director/lingo/lingo-gr.y"
+#line 506 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* expr: expr tOR expr  */
-#line 506 "engines/director/lingo/lingo-gr.y"
+#line 507 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* expr: expr '&' expr  */
-#line 507 "engines/director/lingo/lingo-gr.y"
+#line 508 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141: /* expr: expr tCONCAT expr  */
-#line 508 "engines/director/lingo/lingo-gr.y"
+#line 509 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142: /* expr: expr tCONTAINS expr  */
-#line 509 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* expr: expr tSTARTS expr  */
-#line 510 "engines/director/lingo/lingo-gr.y"
+#line 511 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2606 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* exprlist: %empty  */
-#line 513 "engines/director/lingo/lingo-gr.y"
+#line 514 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
 #line 2612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* nonemptyexprlist: expr  */
-#line 517 "engines/director/lingo/lingo-gr.y"
+#line 518 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
@@ -2621,7 +2621,7 @@ yyreduce:
     break;
 
   case 147: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 521 "engines/director/lingo/lingo-gr.y"
+#line 522 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
@@ -2828,7 +2828,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 526 "engines/director/lingo/lingo-gr.y"
+#line 527 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 52ce924d55..447ae6257a 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -294,7 +294,7 @@ ID: tVARID
 	| tDOWN			{ $$ = new Common::String("down"); }
 	// tENDCLAUSE
 	// tELSE
-	| tEXIT			{ $$ = new Common::String("exit"); }
+	// | tEXIT			{ $$ = new Common::String("exit"); }
 	// tFACTORY
 	| tFIELD		{ $$ = new Common::String("field"); }
 	// | tGLOBAL		{ $$ = new Common::String("global"); }
@@ -372,6 +372,7 @@ proc: ID '(' exprlist[args] ')' '\n'	{ $$ = new CmdNode($ID, $args); }
 	| tPUT exprlist[args] '\n'			{ $$ = new CmdNode(new Common::String("put"), $args); }
 	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
 	| tEXIT tREPEAT '\n'				{ $$ = new ExitRepeatNode(); }
+	| tEXIT '\n'						{ $$ = new ExitNode(); }
 	;
 
 asgn: tPUT expr tINTO varorchunk '\n'	{ $$ = new PutIntoNode($expr, $varorchunk); }


Commit: 25b606c9b121adc201629945f1270e9460969611
    https://github.com/scummvm/scummvm/commit/25b606c9b121adc201629945f1270e9460969611
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Parse all variants of cmd args

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 69af1d1294..e5ec2d4e70 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -263,26 +263,31 @@ enum yysymbol_kind_t
   YYSYMBOL_stmt = 108,                     /* stmt  */
   YYSYMBOL_stmtoneliner = 109,             /* stmtoneliner  */
   YYSYMBOL_proc = 110,                     /* proc  */
-  YYSYMBOL_asgn = 111,                     /* asgn  */
-  YYSYMBOL_to = 112,                       /* to  */
-  YYSYMBOL_definevars = 113,               /* definevars  */
-  YYSYMBOL_ifstmt = 114,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 115,               /* ifelsestmt  */
-  YYSYMBOL_loop = 116,                     /* loop  */
-  YYSYMBOL_stmtlist = 117,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 118,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 119,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 120,       /* simpleexprnoparens  */
-  YYSYMBOL_var = 121,                      /* var  */
-  YYSYMBOL_varorchunk = 122,               /* varorchunk  */
-  YYSYMBOL_varorthe = 123,                 /* varorthe  */
-  YYSYMBOL_simpleexpr = 124,               /* simpleexpr  */
+  YYSYMBOL_cmdargs = 111,                  /* cmdargs  */
+  YYSYMBOL_asgn = 112,                     /* asgn  */
+  YYSYMBOL_to = 113,                       /* to  */
+  YYSYMBOL_definevars = 114,               /* definevars  */
+  YYSYMBOL_ifstmt = 115,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 116,               /* ifelsestmt  */
+  YYSYMBOL_loop = 117,                     /* loop  */
+  YYSYMBOL_stmtlist = 118,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 119,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 120,             /* stmtlistline  */
+  YYSYMBOL_simpleexpr_noparens_nounarymath = 121, /* simpleexpr_noparens_nounarymath  */
+  YYSYMBOL_var = 122,                      /* var  */
+  YYSYMBOL_varorchunk = 123,               /* varorchunk  */
+  YYSYMBOL_varorthe = 124,                 /* varorthe  */
   YYSYMBOL_list = 125,                     /* list  */
   YYSYMBOL_proplist = 126,                 /* proplist  */
   YYSYMBOL_proppair = 127,                 /* proppair  */
-  YYSYMBOL_expr = 128,                     /* expr  */
-  YYSYMBOL_exprlist = 129,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 130          /* nonemptyexprlist  */
+  YYSYMBOL_parens = 128,                   /* parens  */
+  YYSYMBOL_unarymath = 129,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 130,               /* simpleexpr  */
+  YYSYMBOL_simpleexpr_nounarymath = 131,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_expr = 132,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 133,         /* expr_nounarymath  */
+  YYSYMBOL_exprlist = 134,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 135          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -602,18 +607,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  101
+#define YYFINAL  102
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1688
+#define YYLAST   2152
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  93
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  38
+#define YYNNTS  43
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  147
+#define YYNRULES  174
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  271
+#define YYNSTATES  317
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -670,21 +675,24 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   194,   194,   196,   202,   209,   210,   211,   212,   213,
-     242,   246,   248,   250,   251,   254,   260,   267,   268,   273,
-     277,   281,   282,   283,   288,   289,   290,   291,   292,   293,
-     294,   299,   302,   304,   305,   306,   307,   310,   311,   312,
-     313,   314,   316,   317,   318,   319,   320,   323,   324,   325,
-     326,   327,   329,   330,   331,   332,   333,   334,   335,   336,
-     337,   340,   341,   344,   348,   358,   359,   360,   361,   364,
-     365,   366,   369,   370,   371,   372,   373,   374,   375,   378,
-     379,   380,   381,   384,   384,   386,   387,   388,   391,   395,
-     399,   405,   409,   413,   417,   419,   421,   425,   426,   430,
-     436,   443,   444,   449,   450,   451,   452,   453,   454,   455,
-     456,   457,   458,   461,   463,   467,   471,   472,   475,   476,
-     477,   480,   484,   489,   490,   491,   494,   495,   496,   497,
-     498,   499,   500,   501,   502,   503,   504,   505,   506,   507,
-     508,   509,   510,   511,   514,   515,   518,   522
+       0,   196,   196,   198,   204,   211,   212,   213,   214,   215,
+     244,   248,   250,   252,   253,   256,   262,   269,   270,   275,
+     279,   283,   284,   285,   290,   291,   292,   293,   294,   295,
+     296,   301,   304,   306,   307,   308,   309,   312,   313,   314,
+     315,   316,   318,   319,   320,   321,   322,   325,   326,   327,
+     328,   329,   331,   332,   333,   334,   335,   336,   337,   338,
+     339,   342,   343,   346,   350,   360,   361,   362,   363,   366,
+     367,   368,   371,   372,   373,   374,   375,   378,   381,   386,
+     390,   396,   401,   404,   410,   411,   412,   413,   416,   416,
+     418,   419,   420,   423,   427,   431,   437,   441,   445,   449,
+     451,   453,   457,   458,   462,   468,   475,   476,   482,   483,
+     484,   485,   486,   487,   488,   489,   492,   494,   498,   502,
+     503,   504,   507,   511,   516,   517,   518,   521,   523,   524,
+     527,   528,   529,   536,   537,   541,   542,   543,   544,   545,
+     546,   547,   548,   549,   550,   551,   552,   553,   554,   555,
+     556,   557,   558,   565,   566,   567,   568,   569,   570,   571,
+     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
+     582,   585,   586,   589,   593
 };
 #endif
 
@@ -718,10 +726,12 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "scriptpartlist", "scriptpart", "macro", "factory", "method",
   "methodlist", "nonemptymethodlist", "methodlistline", "handler",
   "endargdef", "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner",
-  "proc", "asgn", "to", "definevars", "ifstmt", "ifelsestmt", "loop",
-  "stmtlist", "nonemptystmtlist", "stmtlistline", "simpleexprnoparens",
-  "var", "varorchunk", "varorthe", "simpleexpr", "list", "proplist",
-  "proppair", "expr", "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "proc", "cmdargs", "asgn", "to", "definevars", "ifstmt", "ifelsestmt",
+  "loop", "stmtlist", "nonemptystmtlist", "stmtlistline",
+  "simpleexpr_noparens_nounarymath", "var", "varorchunk", "varorthe",
+  "list", "proplist", "proppair", "parens", "unarymath", "simpleexpr",
+  "simpleexpr_nounarymath", "expr", "expr_nounarymath", "exprlist",
+  "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -745,7 +755,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-183)
+#define YYPACT_NINF (-235)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -759,34 +769,38 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     618,  -183,  -183,  -183,  -183,  -183,  -183,  -183,   -31,  1417,
-     388,  -183,  -183,  1417,  -183,   -21,  -183,  -183,   467,     3,
-    1417,  -183,  -183,  -183,  -183,  1417,  -183,  -183,  1417,  -183,
-    -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,  -183,
-    -183,  -183,  -183,  -183,  1417,  1417,  -183,  -183,     4,   618,
-    -183,  -183,  -183,  -183,   546,  -183,  -183,  -183,  -183,  -183,
-    -183,  -183,  -183,   -74,  -183,  -183,  -183,  -183,  -183,   -65,
-     -58,  -183,  -183,  -183,  -183,   388,   388,   388,   388,   307,
-     -53,  -183,  -183,  -183,  -183,    96,  1417,   -48,   388,  1438,
-     -43,   -23,  1417,   388,  -183,  -183,   -26,   -34,   -20,   -19,
-    1417,  -183,  -183,   388,  1591,   -16,  -183,  -183,  1417,  -183,
-    -183,  -183,  1451,   -15,   -14,   -22,   -73,   -64,  -183,   -10,
-     388,  1116,   388,   388,   388,   388,   388,   388,   388,   388,
-     388,   388,   388,   388,   388,   388,   388,   388,   388,    -4,
-    -183,  1451,   -24,  1417,  1417,  1417,  -183,   388,    20,  1491,
-    -183,  -183,   388,   -62,  -183,  -183,    -2,    -1,  -183,  -183,
-    -183,   388,   388,  -183,   388,  1358,  -183,  -183,     1,  1177,
-      61,    58,    58,    58,    58,  1604,  1604,  -183,   -50,    58,
-      58,    58,    58,   -50,   -47,   -47,  -183,  -183,  1177,     5,
-    -183,     9,    11,    12,  1591,   388,  1177,  1504,  1417,  -183,
-    -183,    13,  -183,  -183,  1177,    15,  1591,  1591,  1591,   -15,
-     -14,    -3,  -183,  -183,  -183,  -183,   679,  -183,  -183,  1238,
-    1177,  -183,  -183,  -183,  -183,    52,   741,  -183,  1417,   -62,
-     809,  -183,  1299,    24,  -183,  1177,  -183,    69,   388,    30,
-      31,  -183,  1417,  1177,  -183,  -183,   870,   388,  1541,  -183,
-    1177,   -29,  -183,   932,    33,  1554,  1177,  1177,  -183,  1417,
-      34,  -183,  1177,   994,  -183,  -183,  1055,    36,    38,  -183,
-    -183
+    1133,  -235,  -235,  -235,  -235,  -235,  -235,  -235,   -32,  1873,
+     745,  -235,  -235,  1873,  -235,     7,  -235,  -235,   824,    -5,
+    1873,  -235,  -235,  -235,  -235,  1873,  -235,  -235,  1873,  -235,
+    -235,  -235,  -235,  -235,  -235,  -235,  -235,  -235,  -235,  -235,
+    -235,  -235,  -235,  -235,  1873,  1873,  -235,  -235,    12,  1133,
+    -235,  -235,  -235,  -235,   824,  -235,  -235,  -235,  -235,  -235,
+    -235,  -235,  -235,   -52,  -235,  -235,  -235,  -235,  -235,   -43,
+     -37,  -235,  -235,  -235,  -235,   745,   745,   745,   745,   421,
+     -24,  -235,  -235,  -235,  -235,  -235,  -235,   292,  1873,   -19,
+     664,   -16,   502,  1873,   745,  -235,  -235,   -34,   -15,   -14,
+     -13,  1873,  -235,  -235,    -9,   583,  -235,  -235,  1873,  -235,
+    -235,  -235,  1955,   -40,   -26,   -23,   -66,   -50,  -235,  2068,
+     -11,    -6,   745,  1631,   745,   745,   745,   745,   745,   745,
+     745,   745,   745,   745,   745,   745,   745,   745,   745,   745,
+     745,    -4,  -235,  -235,  1915,  -235,  1873,   903,   903,  1061,
+    1873,  1873,   982,   745,  -235,  -235,  -235,   367,    37,  1968,
+    -235,  -235,   745,   -62,  -235,  -235,    11,  -235,  -235,  -235,
+     745,   745,  -235,   745,   146,  -235,  -235,   745,     1,  1692,
+      76,    74,    74,    74,    74,    34,    34,  -235,   -51,    74,
+      74,    74,    74,   -51,   -36,   -36,  -235,  -235,  1692,   745,
+    -235,    16,    17,    18,    -6,   745,   745,   745,   745,   745,
+     745,   745,   745,   745,   745,   745,   745,   745,   745,   745,
+     745,   745,   745,   745,  1692,  2005,  1873,  -235,  -235,    20,
+    -235,  -235,  1692,  2068,  2068,  2068,   -40,   -26,     6,  -235,
+    2068,  -235,  -235,  -235,  1194,  -235,  -235,  1753,  1692,   -72,
+    -235,  -235,  -235,    74,    74,    74,    74,    34,    34,  -235,
+     -51,    74,    74,    74,    74,   -51,   -36,   -36,  -235,  -235,
+      -6,  1902,  1256,  -235,  1873,   -62,  1324,  1814,    21,  -235,
+    1692,  -235,  -235,    67,   745,    24,    33,  -235,  1873,  1692,
+    -235,  -235,  1385,   745,  2018,  -235,  1692,   -27,  -235,  1447,
+      35,  2055,  1692,  1692,  -235,  1873,    36,  -235,  1692,  1509,
+    -235,  -235,  1570,    38,    39,  -235,  -235
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -795,51 +809,57 @@ static const yytype_int16 yypact[] =
 static const yytype_uint8 yydefact[] =
 {
        0,    24,    45,    28,    31,    48,    57,    30,     0,    61,
-       0,    32,    34,     0,    38,    39,    41,    46,   144,    47,
+       0,    32,    34,     0,    38,    39,    41,    46,    77,    47,
       49,    52,    55,    58,    56,     0,    42,    44,    61,    26,
       43,    40,    37,    25,    27,    50,    29,    35,    36,    60,
       54,    33,    59,    51,    61,     0,    53,     5,     0,     2,
-       3,     6,     7,     8,   144,     9,    65,    69,    70,    71,
-      66,    67,    68,     0,    78,    39,    47,    49,    63,     0,
-      62,   103,   104,   106,   105,    40,     0,     0,     0,   144,
-     113,   116,   111,   126,   112,     0,    61,     0,   144,   146,
-       0,   145,     0,     0,   113,   115,     0,     0,     0,     0,
-      61,     1,     4,   144,   146,     0,    77,    85,     0,   109,
-     107,   108,     0,   106,   105,     0,   113,     0,   121,     0,
-     144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       3,     6,     7,     8,    77,     9,    65,    69,    70,    71,
+      66,    67,    68,     0,    76,    39,    47,    49,    63,     0,
+      62,   108,   109,   111,   110,    40,     0,     0,     0,   171,
+     116,   130,   114,   115,   131,   132,   135,     0,    61,     0,
+       0,     0,    78,     0,     0,   116,   118,     0,     0,     0,
+       0,    61,     1,     4,     0,    78,    75,    90,     0,   112,
+     128,   129,     0,   111,   110,     0,   116,     0,   122,   173,
+       0,   172,   171,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      76,   146,     0,     0,     0,     0,    75,     0,     0,     0,
-      83,    84,     0,    13,    87,    86,     0,     0,    73,    64,
-     117,     0,     0,   119,     0,     0,   120,   118,     0,    97,
-      88,   136,   137,   134,   135,   138,   139,   131,   141,   142,
-     143,   133,   132,   140,   127,   128,   129,   130,    97,     0,
-     114,     0,     0,     0,   147,     0,    97,     0,     0,    17,
-      18,    11,    14,    15,    97,     0,   125,   123,   124,     0,
-       0,     0,   122,   110,   101,   102,     0,    98,    99,     0,
-      10,    74,    79,    80,    81,     0,     0,    82,    61,     0,
-      20,    72,     0,     0,   100,    97,    90,     0,     0,     0,
-       0,    16,    21,    97,    92,    89,     0,     0,     0,    94,
-      97,     0,    22,     0,     0,     0,    97,    12,    19,     0,
-       0,    91,    97,     0,    23,    93,     0,     0,     0,    95,
-      96
+       0,     0,    74,    82,     0,    73,    34,    26,    43,    37,
+      25,    27,    50,     0,   133,   134,   153,    80,     0,     0,
+      88,    89,     0,    13,    92,    91,     0,    72,    64,   127,
+       0,     0,   120,     0,     0,   121,   119,     0,     0,   102,
+      93,   145,   146,   143,   144,   147,   148,   140,   150,   151,
+     152,   142,   141,   149,   136,   137,   138,   139,   102,     0,
+     117,     0,     0,     0,    79,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   102,     0,     0,    17,    18,    11,
+      14,    15,   102,   126,   124,   125,     0,     0,     0,   123,
+     174,   113,   106,   107,     0,   103,   104,     0,    10,     0,
+      84,    85,    86,   163,   164,   161,   162,   165,   166,   158,
+     168,   169,   170,   160,   159,   167,   154,   155,   156,   157,
+      81,     0,     0,    87,    61,     0,    20,     0,     0,   105,
+     102,    95,    83,     0,     0,     0,     0,    16,    21,   102,
+      97,    94,     0,     0,     0,    99,   102,     0,    22,     0,
+       0,     0,   102,    12,    19,     0,     0,    96,   102,     0,
+      23,    98,     0,     0,     0,   100,   101
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -183,  -183,  -183,    76,  -183,  -183,  -183,  -183,  -183,  -100,
-    -183,  -183,     0,   -27,  -183,     2,  -183,  -183,  -183,  -183,
-    -183,  -183,  -183,  -183,  -182,  -183,  -170,  -183,   -17,   -82,
-    -183,   -35,  -183,  -183,   -13,   145,   -49,  -183
+    -235,  -235,  -235,    71,  -235,  -235,  -235,  -235,  -235,  -149,
+    -235,  -235,     0,   -25,  -235,     4,  -235,  -235,    75,  -235,
+    -235,  -235,  -235,  -235,  -235,  -197,  -235,  -234,   -76,   -18,
+     -89,  -235,  -235,  -235,   -44,   -69,  -235,   -20,  -235,   189,
+    -235,    13,  -148
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_uint8 yydefgoto[] =
+static const yytype_int16 yydefgoto[] =
 {
-       0,    48,    49,    50,    51,    52,   200,   201,   202,   203,
-      53,   251,    80,    69,    70,   215,    56,    57,    58,   152,
-      59,    60,    61,    62,   216,   217,   218,    81,    82,   191,
-      96,    83,    84,   117,   118,   104,    90,    91
+       0,    48,    49,    50,    51,    52,   228,   229,   230,   231,
+      53,   297,    80,    69,    70,   243,    56,    57,    91,    58,
+     162,    59,    60,    61,    62,   244,   245,   246,    81,    82,
+     201,    97,    83,   117,   118,    84,    85,    86,   156,   119,
+     157,   120,   121
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -847,348 +867,442 @@ static const yytype_uint8 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      54,    98,    55,    95,   101,   105,   220,   128,    63,    68,
-     128,   198,   106,    86,   226,   120,   150,    99,    87,   164,
-      94,   107,   230,   165,   199,    97,   151,   166,    68,   108,
-     119,   135,   136,   137,   138,   120,   137,   138,   140,   142,
-     109,   110,   111,   146,    68,   100,   234,    92,    93,    54,
-     234,    55,   153,   246,   157,    64,   234,   258,   259,   139,
-     234,   253,   192,   193,   147,   189,   154,   155,   257,   163,
-     158,   168,   195,   156,   263,   237,   234,   161,   162,   116,
-     266,   167,   188,   234,   204,   219,    68,   234,   205,   164,
-     213,   221,   148,   234,   238,   222,   234,   223,   224,   229,
-      68,   231,   122,   123,   124,   125,   126,   127,   159,   128,
-     245,   247,   129,   130,   131,   128,   249,   250,   129,   261,
-     265,    54,   269,   170,   270,   102,   190,   190,   190,   241,
-     132,   133,   134,   135,   136,   137,   138,   121,   134,   135,
-     136,   137,   138,    94,    94,    94,   122,   123,   124,   125,
-     126,   127,   212,   128,     0,    85,   129,   130,   131,     0,
-       0,     0,     0,    89,     0,   211,     0,     0,     0,    54,
-       0,     0,     0,     0,   132,   133,   134,   135,   136,   137,
-     138,     0,     0,     0,     0,     0,     0,     0,    54,     0,
-       0,     0,     0,     0,     0,     0,    54,     0,   228,     0,
-       0,   240,     0,     0,    54,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    54,     0,     0,    54,
-      54,   236,     0,   112,     0,     0,    54,     0,    68,     0,
-      54,     0,    54,   141,   244,    54,     0,     0,   149,     0,
-       0,     0,   252,    54,     0,     0,    54,     0,   141,     0,
-      54,     0,     0,    54,     0,     0,    54,    54,     0,   264,
-       0,     0,    54,    54,     0,     0,    54,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,     0,     0,     0,     0,     0,     0,
-       0,     0,   194,     0,     0,     0,     0,   197,     0,     0,
-       0,     0,     0,     0,     0,     0,   206,   207,     0,   208,
-       0,     0,    71,     0,     0,     0,     0,    72,     0,     0,
-       1,   113,   114,     0,     2,     0,     3,     4,     5,     6,
-       7,     0,     0,     0,     0,     0,     0,     0,    11,    12,
-     225,    14,    65,    16,    17,     0,    66,    67,     0,    21,
-      22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
-       0,    29,    30,    75,    32,    33,    34,     0,     0,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,     0,     0,
-       0,     0,     0,   248,    46,     0,     0,     0,    76,    77,
-       0,     0,   255,    71,     0,    78,     0,    79,    72,   115,
-       0,     1,    73,    74,     0,     2,     0,     3,     4,     5,
-       6,     7,     0,     0,     0,     0,     0,     0,     0,    11,
-      12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
-      21,    22,    23,    24,     0,    26,    27,     0,     0,     0,
-       0,     0,    29,    30,    75,    32,    33,    34,     0,     0,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,     0,
-       0,     0,     0,     0,     0,    46,     0,     0,     0,    76,
-      77,     0,    71,     0,     0,     0,    78,    72,    79,     0,
-       1,    73,    74,     0,     2,     0,     3,     4,     5,     6,
-       7,     0,     0,     0,     0,     0,     0,     0,    11,    12,
-       0,    14,    65,    16,    17,     0,    66,    67,     0,    21,
-      22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
-       0,    29,    30,    75,    32,    33,    34,     0,     0,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,     0,     0,
-       0,     0,     0,     0,    46,     0,     0,     0,    76,    77,
-       0,    71,     0,     0,     0,    88,    72,    79,     0,     1,
-      73,    74,     0,     2,     0,     3,     4,     5,     6,     7,
-       0,     0,     0,     0,     0,     0,     0,    11,    12,     0,
+      54,   248,    96,    99,    55,   204,   130,    63,   160,    68,
+     279,   226,   102,    88,   279,   177,   154,   282,   161,   100,
+      95,   130,   122,   155,   227,    98,   173,   272,    68,   154,
+     137,   138,   139,   140,   106,   276,   155,   174,   279,    93,
+      94,   175,   279,   107,    68,   101,    89,   139,   140,    54,
+     108,   249,   170,    55,    64,   109,   110,   111,   279,   304,
+     305,   202,   203,   141,   122,   279,   171,   142,   172,   279,
+     145,   163,   164,   165,   270,   279,   166,   167,   279,   116,
+     176,   177,   198,   292,   124,   125,   126,   127,    68,   223,
+     241,   130,   299,   158,   131,   132,   133,   232,   173,   303,
+     247,    68,   250,   251,   252,   309,   275,   291,   168,   293,
+     295,   312,   134,   135,   136,   137,   138,   139,   140,   296,
+     103,   307,   311,    54,   315,   316,   287,   180,   200,   104,
+     239,   130,   200,   200,   131,   178,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    95,     0,     0,     0,
+      95,    95,     0,     0,   136,   137,   138,   139,   140,     1,
+     236,   237,     0,     2,     0,     3,     4,     5,     6,     7,
+       0,     0,     0,     0,   238,     0,     0,    11,    12,    54,
       14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
-      23,    24,     0,    26,    27,     0,     0,     0,     0,     0,
-      29,    30,    75,    32,    33,    34,     0,     0,    35,    36,
+      23,    24,     0,    26,    27,     0,     0,     0,    54,    87,
+      29,    30,    31,    32,    33,    34,     0,    92,    35,    36,
       37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
-       0,     0,     0,    46,     0,     0,     0,    76,    77,     0,
-       0,     1,     0,     0,   103,     2,    79,     3,     4,     5,
-       6,     7,     0,     0,     8,     9,     0,     0,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,     0,
-      21,    22,    23,    24,    25,    26,    27,    28,     0,     0,
-       0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,     0,     1,     0,     0,    46,     2,     0,     3,     4,
-       5,     6,     7,   232,    47,     8,     9,     0,     0,    10,
-      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
-       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,   233,     1,     0,    46,     0,     2,     0,
-       3,     4,     5,     6,     7,   214,     0,     8,     9,     0,
-       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
-      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
-      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     0,   239,     0,    46,     0,
-       0,     0,     1,     0,     0,   242,     2,   214,     3,     4,
-       5,     6,     7,     0,     0,     8,     9,     0,     0,    10,
-      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
-       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,     1,     0,     0,    46,     2,     0,     3,
-       4,     5,     6,     7,     0,   214,     8,     9,     0,     0,
-      10,    11,    12,     0,    14,    15,    16,    17,    18,    19,
-      20,     0,    21,    22,    23,    24,     0,    26,    27,    28,
-       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,   254,     1,     0,    46,     0,     2,
-       0,     3,     4,     5,     6,     7,   214,     0,     8,     9,
-       0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
-      18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
-      27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
-      33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,   260,     1,     0,    46,
-       0,     2,     0,     3,     4,     5,     6,     7,   214,     0,
+       0,     0,     0,    46,    54,     0,   274,     0,     0,     0,
+       0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   105,    54,     0,     0,    54,    54,   286,
+       0,   281,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   112,     0,     0,
+       0,     0,    54,     0,    68,     0,    54,    54,     0,   144,
+      54,   290,     0,   159,     0,     0,     0,     0,   298,    54,
+       0,     0,    54,     0,     0,     0,    54,     0,     0,    54,
+       0,     0,    54,    54,     0,   310,     0,     0,    54,    54,
+       0,     0,    54,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+       0,     0,     0,   123,     0,     0,   185,   186,   187,     0,
+       0,   190,   124,   125,   126,   127,   128,   129,     0,   130,
+       0,   225,   131,   132,   133,     0,     0,     0,     0,   233,
+     234,     0,   235,     0,     0,     0,   240,     0,     0,     0,
+     134,   135,   136,   137,   138,   139,   140,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,     0,   271,     0,     0,     0,     0,   205,   206,   207,
+     208,   209,   210,     0,   211,     0,    71,   212,   213,   214,
+       0,    72,     0,     0,     1,   113,   114,     0,     2,     0,
+       3,     4,     5,     6,     7,   215,   216,   217,   218,   219,
+     220,   221,    11,    12,   222,    14,    65,    16,    17,     0,
+      66,    67,     0,    21,    22,    23,    24,     0,    26,    27,
+       0,     0,     0,   294,     0,    29,    30,    75,    32,    33,
+      34,     0,   301,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,     0,     0,     0,     0,     0,     0,    46,     0,
+       0,     0,    76,    77,     0,     0,     0,    71,     0,    78,
+       0,    79,    72,   115,     0,     1,    73,    74,     0,     2,
+       0,     3,     4,     5,     6,     7,     0,     0,     0,     0,
+       0,     0,     0,    11,   146,     0,    14,    65,    16,    17,
+       0,    66,    67,     0,    21,    22,    23,    24,     0,    26,
+      27,     0,   124,   125,   126,   127,   147,   148,    75,   149,
+     150,   151,   131,   132,   152,    36,    37,    38,    39,    40,
+      41,    42,    43,     0,     0,     0,     0,     0,     0,    46,
+     134,   135,   136,   137,   138,   139,   140,     0,    71,   153,
+      78,     0,    79,    72,     0,     0,     1,    73,    74,     0,
+       2,     0,     3,     4,     5,     6,     7,     0,     0,     0,
+       0,     0,     0,     0,    11,    12,     0,    14,    65,    16,
+      17,     0,    66,    67,     0,    21,    22,    23,    24,     0,
+      26,    27,     0,   124,   125,   126,   127,   147,   148,    75,
+     149,    33,    34,   131,   132,   152,    36,    37,    38,    39,
+      40,    41,    42,    43,     0,     0,     0,     0,     0,     0,
+      46,   134,   135,   136,   137,   138,   139,   140,     0,    71,
+     153,    78,     0,    79,    72,     0,     0,     1,    73,    74,
+       0,     2,     0,     3,     4,     5,     6,     7,     0,     0,
+       0,     0,     0,     0,     0,    11,    12,     0,    14,    65,
+      16,    17,     0,    66,    67,     0,    21,    22,    23,    24,
+       0,    26,    27,     0,     0,     0,     0,     0,    29,    30,
+      75,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,     0,     0,     0,     0,     0,
+       0,    46,     0,     0,     0,    76,    77,     0,     0,     0,
+      71,     0,    78,   143,    79,    72,     0,     0,     1,    73,
+      74,     0,     2,     0,     3,     4,     5,     6,     7,     0,
+       0,     0,     0,     0,     0,     0,    11,    12,     0,    14,
+      65,    16,    17,     0,    66,    67,     0,    21,    22,    23,
+      24,     0,    26,    27,     0,     0,     0,     0,     0,    29,
+      30,    75,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,     0,     0,     0,     0,
+       0,     0,    46,     0,     0,     0,    76,    77,     0,    71,
+       0,     0,     0,    78,    72,    79,     0,     1,    73,    74,
+       0,     2,     0,     3,     4,     5,     6,     7,     0,     0,
+       0,     0,     0,     0,     0,    11,    12,     0,    14,    65,
+      16,    17,     0,    66,    67,     0,    21,    22,    23,    24,
+       0,    26,    27,     0,     0,     0,     0,     0,    29,    30,
+      75,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,     0,     0,     0,     0,     0,
+       0,    46,     0,     0,     0,    76,    77,     0,    71,     0,
+       0,     0,    90,    72,    79,     0,     1,    73,    74,     0,
+       2,     0,     3,     4,     5,     6,     7,     0,     0,     0,
+       0,     0,     0,     0,    11,    12,     0,    14,    65,    16,
+      17,     0,    66,    67,     0,    21,    22,    23,    24,     0,
+      26,    27,     0,     0,     0,     0,     0,     0,     0,    75,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,     0,     0,     0,     0,     0,     0,
+      46,     0,     0,     0,    76,    77,     0,    71,     0,     0,
+       0,    78,    72,    79,     0,     1,    73,    74,     0,     2,
+       0,     3,     4,     5,     6,     7,     0,     0,     0,     0,
+       0,     0,     0,    11,    12,     0,    14,    65,    16,    17,
+       0,    66,    67,     0,    21,    22,    23,    24,     0,    26,
+      27,     0,     0,     0,     0,     0,     0,     0,    75,    32,
+      33,    34,     0,     0,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,     0,     0,     0,     0,     0,     0,    46,
+       0,     0,     0,    76,    77,     0,    71,     0,     0,     0,
+      78,    72,    79,     0,     1,    73,    74,     0,     2,     0,
+       3,     4,     5,     6,     7,     0,     0,     0,     0,     0,
+       0,     0,    11,    12,     0,    14,    65,    16,    17,     0,
+      66,    67,     0,    21,    22,    23,    24,     0,    26,    27,
+       0,     0,     0,     0,     0,     0,     0,    75,     0,    33,
+      34,     0,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,     0,     0,     0,     0,     0,     0,    46,     0,
+       0,     0,     0,     0,     0,     0,     1,     0,     0,    78,
+       2,    79,     3,     4,     5,     6,     7,     0,     0,     8,
+       9,     0,     0,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     1,     0,     0,
+      46,     2,     0,     3,     4,     5,     6,     7,   277,    47,
        8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
       16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
        0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
       31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,     1,   267,
-       0,    46,     2,     0,     3,     4,     5,     6,     7,     0,
-     214,     8,     9,     0,     0,    10,    11,    12,     0,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
-      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,     1,
-     268,     0,    46,     2,     0,     3,     4,     5,     6,     7,
-       0,   214,     8,     9,     0,     0,    10,    11,    12,     0,
+      39,    40,    41,    42,    43,    44,     0,     0,   278,     1,
+       0,    46,     0,     2,     0,     3,     4,     5,     6,     7,
+     242,     0,     8,     9,     0,     0,    10,    11,    12,     0,
       14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
       23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
       29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-       1,     0,     0,    46,     2,     0,     3,     4,     5,     6,
-       7,     0,   169,     8,     9,     0,     0,    10,    11,    12,
+       0,   285,     0,    46,     0,     0,     0,     1,     0,     0,
+     288,     2,   242,     3,     4,     5,     6,     7,     0,     0,
+       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
+      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
+       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,     0,     0,     1,     0,
+       0,    46,     2,     0,     3,     4,     5,     6,     7,     0,
+     242,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
+      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,   300,
+       1,     0,    46,     0,     2,     0,     3,     4,     5,     6,
+       7,   242,     0,     8,     9,     0,     0,    10,    11,    12,
        0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
       22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
        0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,     1,     0,     0,    46,     2,     0,     3,     4,     5,
-       6,     7,     0,   214,     8,     9,     0,     0,    10,    11,
-      12,     0,    14,    15,    16,    17,    18,    19,    20,     0,
-      21,    22,    23,    24,     0,    26,    27,    28,     0,     0,
-       0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-       0,     0,     1,     0,     0,    46,     2,     0,     3,     4,
-       5,     6,     7,     0,   235,     8,     9,     0,     0,    10,
+       0,   306,     1,     0,    46,     0,     2,     0,     3,     4,
+       5,     6,     7,   242,     0,     8,     9,     0,     0,    10,
       11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
        0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
        0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
        0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     1,   209,   210,     0,     2,    46,     3,     4,     5,
-       6,     7,     0,     0,     0,   243,     0,     0,     0,    11,
-      12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
-      21,    22,    23,    24,     0,    26,    27,     0,     0,     0,
-       0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,     0,
-       1,     0,     0,     0,     2,    46,     3,     4,     5,     6,
-       7,     0,     0,     0,     0,     0,     0,     0,    11,    12,
-       0,    14,    65,    16,    17,     0,    66,    67,     0,    21,
-      22,    23,    24,     0,    26,    27,     0,     0,     0,     0,
-     143,    29,    30,    31,    32,    33,    34,     0,     0,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,   122,   123,
-     124,   125,   126,   127,    46,   128,   144,   145,   129,   130,
-     131,   122,   123,   124,   125,   126,   127,     0,   128,     0,
-       0,   129,   130,   131,     0,     0,   132,   133,   134,   135,
-     136,   137,   138,     0,     0,     0,     0,     0,     0,   132,
-     133,   134,   135,   136,   137,   138,     0,     0,     0,     0,
-     160,   122,   123,   124,   125,   126,   127,     0,   128,     0,
-       0,   129,   130,   131,   122,   123,   124,   125,   126,   127,
-       0,   128,     0,     0,   129,   130,   131,     0,     0,   132,
-     133,   134,   135,   136,   137,   138,     0,   196,     0,     0,
-       0,     0,   132,   133,   134,   135,   136,   137,   138,     0,
-     227,   122,   123,   124,   125,   126,   127,     0,   128,     0,
-       0,   129,   130,   131,   122,   123,   124,   125,   126,   127,
-       0,   128,     0,     0,   129,   130,   131,     0,     0,   132,
-     133,   134,   135,   136,   137,   138,     0,   256,     0,     0,
-       0,     0,   132,   133,   134,   135,   136,   137,   138,     0,
-     262,   122,   123,   124,   125,   126,   127,     0,   128,     0,
-       0,   129,   130,   131,   122,   123,   124,   125,     0,     0,
-       0,   128,     0,     0,   129,   130,   131,     0,     0,   132,
-     133,   134,   135,   136,   137,   138,     0,     0,     0,     0,
-       0,     0,   132,   133,   134,   135,   136,   137,   138
+      44,     0,     0,     1,   313,     0,    46,     2,     0,     3,
+       4,     5,     6,     7,     0,   242,     8,     9,     0,     0,
+      10,    11,    12,     0,    14,    15,    16,    17,    18,    19,
+      20,     0,    21,    22,    23,    24,     0,    26,    27,    28,
+       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     1,   314,     0,    46,     2,     0,
+       3,     4,     5,     6,     7,     0,   242,     8,     9,     0,
+       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
+      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
+      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,     1,     0,     0,    46,     2,
+       0,     3,     4,     5,     6,     7,     0,   179,     8,     9,
+       0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
+      18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
+      27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,     0,     0,     1,     0,     0,    46,
+       2,     0,     3,     4,     5,     6,     7,     0,   242,     8,
+       9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
+      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,     0,     0,     1,     0,     0,
+      46,     2,     0,     3,     4,     5,     6,     7,     0,   280,
+       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
+      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
+       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,     1,     0,     0,     0,
+       2,    46,     3,     4,     5,     6,     7,     0,     0,     0,
+     289,     0,     0,     0,    11,    12,     0,    14,    65,    16,
+      17,     0,    66,    67,     0,    21,    22,    23,    24,     0,
+      26,    27,     0,     0,     0,   283,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,   284,     0,     0,     0,     0,     0,
+      46,     0,   124,   125,   126,   127,   128,   129,     0,   130,
+       0,     0,   131,   132,   133,   124,   125,   126,   127,   128,
+     129,     0,   130,     0,     0,   131,   132,   133,     0,     0,
+     134,   135,   136,   137,   138,   139,   140,     0,     0,     0,
+       0,     0,     0,   134,   135,   136,   137,   138,   139,   140,
+       0,     0,   199,     0,   169,   124,   125,   126,   127,   128,
+     129,     0,   130,     0,     0,   131,   132,   133,   124,   125,
+     126,   127,   128,   129,     0,   130,     0,     0,   131,   132,
+     133,     0,     0,   134,   135,   136,   137,   138,   139,   140,
+       0,     0,     0,     0,   169,     0,   134,   135,   136,   137,
+     138,   139,   140,     0,   224,   124,   125,   126,   127,   128,
+     129,     0,   130,     0,     0,   131,   132,   133,   124,   125,
+     126,   127,   128,   129,     0,   130,     0,     0,   131,   132,
+     133,     0,     0,   134,   135,   136,   137,   138,   139,   140,
+       0,   273,     0,     0,     0,     0,   134,   135,   136,   137,
+     138,   139,   140,     0,   302,   124,   125,   126,   127,   128,
+     129,     0,   130,     0,     0,   131,   132,   133,   124,   125,
+     126,   127,   128,   129,     0,   130,     0,     0,   131,   132,
+     133,     0,     0,   134,   135,   136,   137,   138,   139,   140,
+       0,   308,     0,     0,     0,     0,   134,   135,   136,   137,
+     138,   139,   140
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    28,     0,    20,     0,    54,   188,    57,    39,     9,
-      57,    73,    86,    13,   196,    88,    42,    44,    39,    92,
-      20,    86,   204,    87,    86,    25,    52,    91,    28,    87,
-      79,    81,    82,    83,    84,    88,    83,    84,    86,    88,
-      75,    76,    77,    86,    44,    45,   216,    44,    45,    49,
-     220,    49,    86,   235,   103,    86,   226,    86,    87,    86,
-     230,   243,   144,   145,    87,    89,    86,    86,   250,    91,
-      86,   120,    52,   100,   256,    23,   246,    92,    92,    79,
-     262,    91,    86,   253,    86,    24,    86,   257,    89,    92,
-      89,    86,    92,   263,    42,    86,   266,    86,    86,    86,
-     100,    86,    50,    51,    52,    53,    54,    55,   108,    57,
-      86,    42,    60,    61,    62,    57,    86,    86,    60,    86,
-      86,   121,    86,   121,    86,    49,   143,   144,   145,   229,
-      78,    79,    80,    81,    82,    83,    84,    41,    80,    81,
-      82,    83,    84,   143,   144,   145,    50,    51,    52,    53,
-      54,    55,   165,    57,    -1,    10,    60,    61,    62,    -1,
-      -1,    -1,    -1,    18,    -1,   165,    -1,    -1,    -1,   169,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   196,    -1,   198,    -1,
-      -1,   228,    -1,    -1,   204,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   216,    -1,    -1,   219,
-     220,   219,    -1,    78,    -1,    -1,   226,    -1,   228,    -1,
-     230,    -1,   232,    88,   232,   235,    -1,    -1,    93,    -1,
-      -1,    -1,   242,   243,    -1,    -1,   246,    -1,   103,    -1,
-     250,    -1,    -1,   253,    -1,    -1,   256,   257,    -1,   259,
-      -1,    -1,   262,   263,    -1,    -1,   266,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   147,    -1,    -1,    -1,    -1,   152,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   161,   162,    -1,   164,
-      -1,    -1,     5,    -1,    -1,    -1,    -1,    10,    -1,    -1,
-      13,    14,    15,    -1,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,
-     195,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,   238,    77,    -1,    -1,    -1,    81,    82,
-      -1,    -1,   247,     5,    -1,    88,    -1,    90,    10,    92,
-      -1,    13,    14,    15,    -1,    17,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,
-      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
-      82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
-      13,    14,    15,    -1,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
-      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
+       0,   198,    20,    28,     0,   153,    57,    39,    42,     9,
+     244,    73,     0,    13,   248,    87,    92,    89,    52,    44,
+      20,    57,    88,    92,    86,    25,    92,   224,    28,   105,
+      81,    82,    83,    84,    86,   232,   105,    87,   272,    44,
+      45,    91,   276,    86,    44,    45,    39,    83,    84,    49,
+      87,   199,    92,    49,    86,    75,    76,    77,   292,    86,
+      87,   150,   151,    88,    88,   299,    92,    86,    91,   303,
+      86,    86,    86,    86,   222,   309,   101,    86,   312,    79,
+      91,    87,    86,   280,    50,    51,    52,    53,    88,    52,
+      89,    57,   289,    93,    60,    61,    62,    86,    92,   296,
+      24,   101,    86,    86,    86,   302,    86,    86,   108,    42,
+      86,   308,    78,    79,    80,    81,    82,    83,    84,    86,
+      49,    86,    86,   123,    86,    86,   275,   123,   146,    54,
+     174,    57,   150,   151,    60,   122,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,    -1,
+     150,   151,    -1,    -1,    80,    81,    82,    83,    84,    13,
       14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,    -1,
+      -1,    -1,    -1,    -1,   174,    -1,    -1,    31,    32,   179,
       34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      44,    45,    -1,    47,    48,    -1,    -1,    -1,   198,    10,
+      54,    55,    56,    57,    58,    59,    -1,    18,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,
-      -1,    13,    -1,    -1,    88,    17,    90,    19,    20,    21,
-      22,    23,    -1,    -1,    26,    27,    -1,    -1,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    -1,
-      42,    43,    44,    45,    46,    47,    48,    49,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    -1,    13,    -1,    -1,    77,    17,    -1,    19,    20,
-      21,    22,    23,    24,    86,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    74,    13,    -1,    77,    -1,    17,    -1,
-      19,    20,    21,    22,    23,    86,    -1,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      -1,    -1,    -1,    77,   224,    -1,   226,    -1,    -1,    -1,
+      -1,    -1,   232,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    54,   244,    -1,    -1,   247,   248,   274,
+      -1,   247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
+      -1,    -1,   272,    -1,   274,    -1,   276,   277,    -1,    90,
+     280,   277,    -1,    94,    -1,    -1,    -1,    -1,   288,   289,
+      -1,    -1,   292,    -1,    -1,    -1,   296,    -1,    -1,   299,
+      -1,    -1,   302,   303,    -1,   305,    -1,    -1,   308,   309,
+      -1,    -1,   312,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+      -1,    -1,    -1,    41,    -1,    -1,   147,   148,   149,    -1,
+      -1,   152,    50,    51,    52,    53,    54,    55,    -1,    57,
+      -1,   162,    60,    61,    62,    -1,    -1,    -1,    -1,   170,
+     171,    -1,   173,    -1,    -1,    -1,   177,    -1,    -1,    -1,
+      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,    -1,   223,    -1,    -1,    -1,    -1,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,     5,    60,    61,    62,
+      -1,    10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,
+      19,    20,    21,    22,    23,    78,    79,    80,    81,    82,
+      83,    84,    31,    32,    87,    34,    35,    36,    37,    -1,
       39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    -1,    75,    -1,    77,    -1,
-      -1,    -1,    13,    -1,    -1,    16,    17,    86,    19,    20,
-      21,    22,    23,    -1,    -1,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    13,    -1,    -1,    77,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    86,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,    17,
-      -1,    19,    20,    21,    22,    23,    86,    -1,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    74,    13,    -1,    77,
-      -1,    17,    -1,    19,    20,    21,    22,    23,    86,    -1,
+      -1,    -1,    -1,   284,    -1,    54,    55,    56,    57,    58,
+      59,    -1,   293,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
+      -1,    -1,    81,    82,    -1,    -1,    -1,     5,    -1,    88,
+      -1,    90,    10,    92,    -1,    13,    14,    15,    -1,    17,
+      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
+      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+      78,    79,    80,    81,    82,    83,    84,    -1,     5,    87,
+      88,    -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,
+      17,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    -1,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,     5,
+      87,    88,    -1,    90,    10,    -1,    -1,    13,    14,    15,
+      -1,    17,    -1,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,
+       5,    -1,    88,    89,    90,    10,    -1,    -1,    13,    14,
+      15,    -1,    17,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,
+      -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,    15,
+      -1,    17,    -1,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,
+      -1,    -1,    88,    10,    90,    -1,    13,    14,    15,    -1,
+      17,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,
+      -1,    88,    10,    90,    -1,    13,    14,    15,    -1,    17,
+      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
+      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
+      58,    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+      -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,
+      88,    10,    90,    -1,    13,    14,    15,    -1,    17,    -1,
+      19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,    58,
+      59,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    88,
+      17,    90,    19,    20,    21,    22,    23,    -1,    -1,    26,
+      27,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    46,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    -1,    13,    -1,    -1,
+      77,    17,    -1,    19,    20,    21,    22,    23,    24,    86,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    74,    13,
+      -1,    77,    -1,    17,    -1,    19,    20,    21,    22,    23,
+      86,    -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      -1,    75,    -1,    77,    -1,    -1,    -1,    13,    -1,    -1,
+      16,    17,    86,    19,    20,    21,    22,    23,    -1,    -1,
       26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
       36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
       -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
       56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    75,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
       -1,    77,    17,    -1,    19,    20,    21,    22,    23,    -1,
       86,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
       35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
       45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
-      75,    -1,    77,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    86,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      13,    -1,    -1,    77,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    86,    26,    27,    -1,    -1,    30,    31,    32,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
+      13,    -1,    77,    -1,    17,    -1,    19,    20,    21,    22,
+      23,    86,    -1,    26,    27,    -1,    -1,    30,    31,    32,
       -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    13,    -1,    -1,    77,    17,    -1,    19,    20,    21,
-      22,    23,    -1,    86,    26,    27,    -1,    -1,    30,    31,
-      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    13,    -1,    -1,    77,    17,    -1,    19,    20,
-      21,    22,    23,    -1,    86,    26,    27,    -1,    -1,    30,
+      -1,    74,    13,    -1,    77,    -1,    17,    -1,    19,    20,
+      21,    22,    23,    86,    -1,    26,    27,    -1,    -1,    30,
       31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
       -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
       -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
       -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    13,    14,    15,    -1,    17,    77,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    86,    -1,    -1,    -1,    31,
-      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      13,    -1,    -1,    -1,    17,    77,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    48,    -1,    -1,    -1,    -1,
-      32,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    50,    51,
-      52,    53,    54,    55,    77,    57,    58,    59,    60,    61,
-      62,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
-      89,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    86,    -1,    -1,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      86,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    86,    -1,    -1,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      86,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    50,    51,    52,    53,    -1,    -1,
-      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84
+      71,    -1,    -1,    13,    75,    -1,    77,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    86,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    13,    75,    -1,    77,    17,    -1,
+      19,    20,    21,    22,    23,    -1,    86,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    17,
+      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
+      17,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
+      77,    17,    -1,    19,    20,    21,    22,    23,    -1,    86,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    13,    -1,    -1,    -1,
+      17,    77,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      86,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    -1,    -1,    -1,    23,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    42,    -1,    -1,    -1,    -1,    -1,
+      77,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+      -1,    -1,    60,    61,    62,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
+      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
+      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    87,    -1,    89,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    -1,    89,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1200,29 +1314,33 @@ static const yytype_uint8 yystos[] =
       40,    42,    43,    44,    45,    46,    47,    48,    49,    54,
       55,    56,    57,    58,    59,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    77,    86,    94,    95,
-      96,    97,    98,   103,   105,   108,   109,   110,   111,   113,
-     114,   115,   116,    39,    86,    35,    39,    40,   105,   106,
+      96,    97,    98,   103,   105,   108,   109,   110,   112,   114,
+     115,   116,   117,    39,    86,    35,    39,    40,   105,   106,
      107,     5,    10,    14,    15,    56,    81,    82,    88,    90,
-     105,   120,   121,   124,   125,   128,   105,    39,    88,   128,
-     129,   130,    44,    45,   105,   121,   123,   105,   106,   106,
-     105,     0,    96,    88,   128,   129,    86,    86,    87,   124,
-     124,   124,   128,    14,    15,    92,   105,   126,   127,   129,
-      88,    41,    50,    51,    52,    53,    54,    55,    57,    60,
-      61,    62,    78,    79,    80,    81,    82,    83,    84,   106,
-      86,   128,   129,    32,    58,    59,    86,    87,   105,   128,
-      42,    52,   112,    86,    86,    86,   106,   129,    86,   105,
-      89,    92,    92,    91,    92,    87,    91,    91,   129,    86,
-     108,   128,   128,   128,   128,   128,   128,   128,   128,   128,
-     128,   128,   128,   128,   128,   128,   128,   128,    86,    89,
-     121,   122,   122,   122,   128,    52,    86,   128,    73,    86,
-      99,   100,   101,   102,    86,    89,   128,   128,   128,    14,
-      15,   105,   127,    89,    86,   108,   117,   118,   119,    24,
-     117,    86,    86,    86,    86,   128,   117,    86,   105,    86,
-     117,    86,    24,    74,   119,    86,   108,    23,    42,    75,
-     106,   102,    16,    86,   108,    86,   117,    42,   128,    86,
-      86,   104,   105,   117,    74,   128,    86,   117,    86,    87,
-      74,    86,    86,   117,   105,    86,   117,    75,    75,    86,
-      86
+     105,   121,   122,   125,   128,   129,   130,   132,   105,    39,
+      88,   111,   132,    44,    45,   105,   122,   124,   105,   106,
+     106,   105,     0,    96,   111,   132,    86,    86,    87,   130,
+     130,   130,   132,    14,    15,    92,   105,   126,   127,   132,
+     134,   135,    88,    41,    50,    51,    52,    53,    54,    55,
+      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
+      84,   106,    86,    89,   132,    86,    32,    54,    55,    57,
+      58,    59,    62,    87,   121,   128,   131,   133,   105,   132,
+      42,    52,   113,    86,    86,    86,   106,    86,   105,    89,
+      92,    92,    91,    92,    87,    91,    91,    87,   134,    86,
+     108,   132,   132,   132,   132,   132,   132,   132,   132,   132,
+     132,   132,   132,   132,   132,   132,   132,   132,    86,    87,
+     122,   123,   123,   123,   135,    50,    51,    52,    53,    54,
+      55,    57,    60,    61,    62,    78,    79,    80,    81,    82,
+      83,    84,    87,    52,    86,   132,    73,    86,    99,   100,
+     101,   102,    86,   132,   132,   132,    14,    15,   105,   127,
+     132,    89,    86,   108,   118,   119,   120,    24,   118,   135,
+      86,    86,    86,   132,   132,   132,   132,   132,   132,   132,
+     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
+     135,   132,   118,    86,   105,    86,   118,    24,    74,   120,
+      86,   108,    89,    23,    42,    75,   106,   102,    16,    86,
+     108,    86,   118,    42,   132,    86,    86,   104,   105,   118,
+      74,   132,    86,   118,    86,    87,    74,    86,    86,   118,
+     105,    86,   118,    75,    75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1235,14 +1353,17 @@ static const yytype_uint8 yyr1[] =
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
      105,   106,   106,   107,   107,   108,   108,   108,   108,   109,
-     109,   109,   110,   110,   110,   110,   110,   110,   110,   111,
-     111,   111,   111,   112,   112,   113,   113,   113,   114,   114,
-     115,   115,   115,   115,   116,   116,   116,   117,   117,   118,
-     118,   119,   119,   120,   120,   120,   120,   120,   120,   120,
-     120,   120,   120,   121,   122,   123,   124,   124,   125,   125,
-     125,   126,   126,   127,   127,   127,   128,   128,   128,   128,
-     128,   128,   128,   128,   128,   128,   128,   128,   128,   128,
-     128,   128,   128,   128,   129,   129,   130,   130
+     109,   109,   110,   110,   110,   110,   110,   111,   111,   111,
+     111,   111,   111,   111,   112,   112,   112,   112,   113,   113,
+     114,   114,   114,   115,   115,   116,   116,   116,   116,   117,
+     117,   117,   118,   118,   119,   119,   120,   120,   121,   121,
+     121,   121,   121,   121,   121,   121,   122,   123,   124,   125,
+     125,   125,   126,   126,   127,   127,   127,   128,   129,   129,
+     130,   130,   130,   131,   131,   132,   132,   132,   132,   132,
+     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
+     132,   132,   132,   133,   133,   133,   133,   133,   133,   133,
+     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
+     133,   134,   134,   135,   135
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1255,14 +1376,17 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     0,     1,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     5,     3,     5,     3,     3,     3,     2,     5,
-       5,     5,     5,     1,     1,     3,     3,     3,     4,     7,
-       6,     9,     7,    10,     7,    11,    12,     0,     1,     1,
-       2,     1,     1,     1,     1,     1,     1,     2,     2,     2,
-       4,     1,     1,     1,     1,     1,     1,     3,     3,     3,
-       3,     1,     3,     3,     3,     3,     1,     3,     3,     3,
+       1,     1,     3,     3,     3,     3,     2,     0,     1,     3,
+       2,     4,     2,     5,     5,     5,     5,     5,     1,     1,
+       3,     3,     3,     4,     7,     6,     9,     7,    10,     7,
+      11,    12,     0,     1,     1,     2,     1,     1,     1,     1,
+       1,     1,     2,     4,     1,     1,     1,     1,     1,     3,
+       3,     3,     1,     3,     3,     3,     3,     3,     2,     2,
+       1,     1,     1,     1,     1,     1,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     1,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     0,     1,     1,     3
+       3,     0,     1,     1,     3
 };
 
 
@@ -1534,51 +1658,51 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1540 "engines/director/lingo/lingo-gr.cpp"
+#line 1664 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1546 "engines/director/lingo/lingo-gr.cpp"
+#line 1670 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1552 "engines/director/lingo/lingo-gr.cpp"
+#line 1676 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1558 "engines/director/lingo/lingo-gr.cpp"
+#line 1682 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1564 "engines/director/lingo/lingo-gr.cpp"
+#line 1688 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1570 "engines/director/lingo/lingo-gr.cpp"
+#line 1694 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1576 "engines/director/lingo/lingo-gr.cpp"
+#line 1700 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1582 "engines/director/lingo/lingo-gr.cpp"
+#line 1706 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -1844,792 +1968,941 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* script: scriptpartlist  */
-#line 194 "engines/director/lingo/lingo-gr.y"
+#line 196 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 1850 "engines/director/lingo/lingo-gr.cpp"
+#line 1974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
-#line 196 "engines/director/lingo/lingo-gr.y"
+#line 198 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1861 "engines/director/lingo/lingo-gr.cpp"
+#line 1985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1871 "engines/director/lingo/lingo-gr.cpp"
+#line 1995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
-#line 209 "engines/director/lingo/lingo-gr.y"
+#line 211 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 1877 "engines/director/lingo/lingo-gr.cpp"
+#line 2001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
-#line 242 "engines/director/lingo/lingo-gr.y"
+#line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1883 "engines/director/lingo/lingo-gr.cpp"
+#line 2007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
-#line 246 "engines/director/lingo/lingo-gr.y"
+#line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 1889 "engines/director/lingo/lingo-gr.cpp"
+#line 2013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
-#line 248 "engines/director/lingo/lingo-gr.y"
+#line 250 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1895 "engines/director/lingo/lingo-gr.cpp"
+#line 2019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
-#line 250 "engines/director/lingo/lingo-gr.y"
+#line 252 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 1901 "engines/director/lingo/lingo-gr.cpp"
+#line 2025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
-#line 254 "engines/director/lingo/lingo-gr.y"
+#line 256 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1912 "engines/director/lingo/lingo-gr.cpp"
+#line 2036 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
-#line 260 "engines/director/lingo/lingo-gr.y"
+#line 262 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 1922 "engines/director/lingo/lingo-gr.cpp"
+#line 2046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
-#line 267 "engines/director/lingo/lingo-gr.y"
+#line 269 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 1928 "engines/director/lingo/lingo-gr.cpp"
+#line 2052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
-#line 273 "engines/director/lingo/lingo-gr.y"
+#line 275 "engines/director/lingo/lingo-gr.y"
                                                                {	// D3
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 1937 "engines/director/lingo/lingo-gr.cpp"
+#line 2061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
-#line 277 "engines/director/lingo/lingo-gr.y"
+#line 279 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 1944 "engines/director/lingo/lingo-gr.cpp"
+#line 2068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
-#line 282 "engines/director/lingo/lingo-gr.y"
+#line 284 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 1950 "engines/director/lingo/lingo-gr.cpp"
+#line 2074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
-#line 283 "engines/director/lingo/lingo-gr.y"
+#line 285 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 1956 "engines/director/lingo/lingo-gr.cpp"
+#line 2080 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
-#line 289 "engines/director/lingo/lingo-gr.y"
+#line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 1962 "engines/director/lingo/lingo-gr.cpp"
+#line 2086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
-#line 290 "engines/director/lingo/lingo-gr.y"
+#line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 1968 "engines/director/lingo/lingo-gr.cpp"
+#line 2092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
-#line 291 "engines/director/lingo/lingo-gr.y"
+#line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 1974 "engines/director/lingo/lingo-gr.cpp"
+#line 2098 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
-#line 292 "engines/director/lingo/lingo-gr.y"
+#line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 1980 "engines/director/lingo/lingo-gr.cpp"
+#line 2104 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 1986 "engines/director/lingo/lingo-gr.cpp"
+#line 2110 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
-#line 294 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 1992 "engines/director/lingo/lingo-gr.cpp"
+#line 2116 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tFIELD  */
-#line 299 "engines/director/lingo/lingo-gr.y"
+#line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 1998 "engines/director/lingo/lingo-gr.cpp"
+#line 2122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tIN  */
-#line 302 "engines/director/lingo/lingo-gr.y"
+#line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2004 "engines/director/lingo/lingo-gr.cpp"
+#line 2128 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tINTERSECTS  */
-#line 304 "engines/director/lingo/lingo-gr.y"
+#line 306 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2010 "engines/director/lingo/lingo-gr.cpp"
+#line 2134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTO  */
-#line 305 "engines/director/lingo/lingo-gr.y"
+#line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2016 "engines/director/lingo/lingo-gr.cpp"
+#line 2140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tITEM  */
-#line 306 "engines/director/lingo/lingo-gr.y"
+#line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2022 "engines/director/lingo/lingo-gr.cpp"
+#line 2146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tLINE  */
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2028 "engines/director/lingo/lingo-gr.cpp"
+#line 2152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tMOD  */
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2034 "engines/director/lingo/lingo-gr.cpp"
+#line 2158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOVIE  */
-#line 311 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2040 "engines/director/lingo/lingo-gr.cpp"
+#line 2164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tNEXT  */
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2046 "engines/director/lingo/lingo-gr.cpp"
+#line 2170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNOT  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2052 "engines/director/lingo/lingo-gr.cpp"
+#line 2176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tOF  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2058 "engines/director/lingo/lingo-gr.cpp"
+#line 2182 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOPEN  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2064 "engines/director/lingo/lingo-gr.cpp"
+#line 2188 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOR  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2070 "engines/director/lingo/lingo-gr.cpp"
+#line 2194 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tPLAY  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2076 "engines/director/lingo/lingo-gr.cpp"
+#line 2200 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPLAYACCEL  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+#line 321 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("playAccel"); }
-#line 2082 "engines/director/lingo/lingo-gr.cpp"
+#line 2206 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tPREVIOUS  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+#line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2088 "engines/director/lingo/lingo-gr.cpp"
+#line 2212 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tREPEAT  */
-#line 323 "engines/director/lingo/lingo-gr.y"
+#line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2094 "engines/director/lingo/lingo-gr.cpp"
+#line 2218 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tSCRIPT  */
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2100 "engines/director/lingo/lingo-gr.cpp"
+#line 2224 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSET  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2106 "engines/director/lingo/lingo-gr.cpp"
+#line 2230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tSTARTS  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2112 "engines/director/lingo/lingo-gr.cpp"
+#line 2236 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tTELL  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2118 "engines/director/lingo/lingo-gr.cpp"
+#line 2242 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tTO  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2124 "engines/director/lingo/lingo-gr.cpp"
+#line 2248 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tASSERTERROR  */
-#line 330 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2130 "engines/director/lingo/lingo-gr.cpp"
+#line 2254 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tSPRITE  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2136 "engines/director/lingo/lingo-gr.cpp"
+#line 2260 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tWHEN  */
-#line 332 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2142 "engines/director/lingo/lingo-gr.cpp"
+#line 2266 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tWHILE  */
-#line 333 "engines/director/lingo/lingo-gr.y"
+#line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2148 "engines/director/lingo/lingo-gr.cpp"
+#line 2272 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWINDOW  */
-#line 334 "engines/director/lingo/lingo-gr.y"
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2154 "engines/director/lingo/lingo-gr.cpp"
+#line 2278 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWITH  */
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2160 "engines/director/lingo/lingo-gr.cpp"
+#line 2284 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWITHIN  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2166 "engines/director/lingo/lingo-gr.cpp"
+#line 2290 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* ID: tWORD  */
-#line 337 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2172 "engines/director/lingo/lingo-gr.cpp"
+#line 2296 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* idlist: %empty  */
-#line 340 "engines/director/lingo/lingo-gr.y"
+#line 342 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2178 "engines/director/lingo/lingo-gr.cpp"
+#line 2302 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* nonemptyidlist: ID  */
-#line 344 "engines/director/lingo/lingo-gr.y"
+#line 346 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2187 "engines/director/lingo/lingo-gr.cpp"
+#line 2311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 348 "engines/director/lingo/lingo-gr.y"
+#line 350 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2195 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 72: /* proc: ID '(' exprlist ')' '\n'  */
-#line 369 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new CmdNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
-#line 2201 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 73: /* proc: ID exprlist '\n'  */
-#line 370 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2207 "engines/director/lingo/lingo-gr.cpp"
+#line 2319 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* proc: tPUT '(' exprlist ')' '\n'  */
+  case 72: /* proc: ID cmdargs '\n'  */
 #line 371 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-2].nodelist)); }
-#line 2213 "engines/director/lingo/lingo-gr.cpp"
+                                                        { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
+#line 2325 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tPUT exprlist '\n'  */
+  case 73: /* proc: tPUT cmdargs '\n'  */
 #line 372 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2219 "engines/director/lingo/lingo-gr.cpp"
+                                                                { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
+#line 2331 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tNEXT tREPEAT '\n'  */
+  case 74: /* proc: tNEXT tREPEAT '\n'  */
 #line 373 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2225 "engines/director/lingo/lingo-gr.cpp"
+#line 2337 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* proc: tEXIT tREPEAT '\n'  */
+  case 75: /* proc: tEXIT tREPEAT '\n'  */
 #line 374 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2231 "engines/director/lingo/lingo-gr.cpp"
+#line 2343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* proc: tEXIT '\n'  */
+  case 76: /* proc: tEXIT '\n'  */
 #line 375 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2237 "engines/director/lingo/lingo-gr.cpp"
+#line 2349 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+  case 77: /* cmdargs: %empty  */
 #line 378 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		// This matches `cmd`
+		(yyval.nodelist) = new NodeList; }
+#line 2357 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 78: /* cmdargs: expr  */
+#line 381 "engines/director/lingo/lingo-gr.y"
+                                                                        {
+		// This matches `cmd arg` and `cmd(arg)`
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[0].node));
+		(yyval.nodelist) = args; }
+#line 2367 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 79: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 386 "engines/director/lingo/lingo-gr.y"
+                                                {
+		// This matches `cmd args, ...)
+		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
+		(yyval.nodelist) = (yyvsp[0].nodelist); }
+#line 2376 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 80: /* cmdargs: expr expr_nounarymath  */
+#line 390 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		// This matches `cmd arg arg`
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[-1].node));
+		args->push_back((yyvsp[0].node));
+		(yyval.nodelist) = args; }
+#line 2387 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 81: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 396 "engines/director/lingo/lingo-gr.y"
+                                                           {
+		// This matches `cmd arg arg, ...`
+		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
+		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
+		(yyval.nodelist) = (yyvsp[0].nodelist); }
+#line 2397 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 82: /* cmdargs: '(' ')'  */
+#line 401 "engines/director/lingo/lingo-gr.y"
+                                                                        {
+		// This matches `cmd()`
+		(yyval.nodelist) = new NodeList; }
+#line 2405 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 83: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 404 "engines/director/lingo/lingo-gr.y"
+                                                  {
+		// This matches `cmd(args, ...)`
+		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
+		(yyval.nodelist) = (yyvsp[-1].nodelist); }
+#line 2414 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 84: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 410 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2243 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+  case 85: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 411 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2249 "engines/director/lingo/lingo-gr.cpp"
+#line 2426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 380 "engines/director/lingo/lingo-gr.y"
+  case 86: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 412 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2255 "engines/director/lingo/lingo-gr.cpp"
+#line 2432 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* asgn: tSET varorthe to expr '\n'  */
-#line 381 "engines/director/lingo/lingo-gr.y"
+  case 87: /* asgn: tSET varorthe to expr '\n'  */
+#line 413 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2261 "engines/director/lingo/lingo-gr.cpp"
+#line 2438 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* definevars: tGLOBAL idlist '\n'  */
-#line 386 "engines/director/lingo/lingo-gr.y"
+  case 90: /* definevars: tGLOBAL idlist '\n'  */
+#line 418 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2267 "engines/director/lingo/lingo-gr.cpp"
+#line 2444 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* definevars: tPROPERTY idlist '\n'  */
-#line 387 "engines/director/lingo/lingo-gr.y"
+  case 91: /* definevars: tPROPERTY idlist '\n'  */
+#line 419 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2273 "engines/director/lingo/lingo-gr.cpp"
+#line 2450 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* definevars: tINSTANCE idlist '\n'  */
-#line 388 "engines/director/lingo/lingo-gr.y"
+  case 92: /* definevars: tINSTANCE idlist '\n'  */
+#line 420 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2279 "engines/director/lingo/lingo-gr.cpp"
+#line 2456 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* ifstmt: tIF expr tTHEN stmt  */
-#line 391 "engines/director/lingo/lingo-gr.y"
+  case 93: /* ifstmt: tIF expr tTHEN stmt  */
+#line 423 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2288 "engines/director/lingo/lingo-gr.cpp"
+#line 2465 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 395 "engines/director/lingo/lingo-gr.y"
+  case 94: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2295 "engines/director/lingo/lingo-gr.cpp"
+#line 2472 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 399 "engines/director/lingo/lingo-gr.y"
+  case 95: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 431 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2306 "engines/director/lingo/lingo-gr.cpp"
+#line 2483 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 405 "engines/director/lingo/lingo-gr.y"
+  case 96: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 437 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2315 "engines/director/lingo/lingo-gr.cpp"
+#line 2492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+  case 97: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 441 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2324 "engines/director/lingo/lingo-gr.cpp"
+#line 2501 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 98: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 445 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2331 "engines/director/lingo/lingo-gr.cpp"
+#line 2508 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 417 "engines/director/lingo/lingo-gr.y"
+  case 99: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 449 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2338 "engines/director/lingo/lingo-gr.cpp"
+#line 2515 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 100: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2345 "engines/director/lingo/lingo-gr.cpp"
+#line 2522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 421 "engines/director/lingo/lingo-gr.y"
+  case 101: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2352 "engines/director/lingo/lingo-gr.cpp"
+#line 2529 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* stmtlist: %empty  */
-#line 425 "engines/director/lingo/lingo-gr.y"
+  case 102: /* stmtlist: %empty  */
+#line 457 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2358 "engines/director/lingo/lingo-gr.cpp"
+#line 2535 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* nonemptystmtlist: stmtlistline  */
-#line 430 "engines/director/lingo/lingo-gr.y"
+  case 104: /* nonemptystmtlist: stmtlistline  */
+#line 462 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2369 "engines/director/lingo/lingo-gr.cpp"
+#line 2546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 105: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 468 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2379 "engines/director/lingo/lingo-gr.cpp"
+#line 2556 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* stmtlistline: '\n'  */
-#line 443 "engines/director/lingo/lingo-gr.y"
+  case 106: /* stmtlistline: '\n'  */
+#line 475 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2385 "engines/director/lingo/lingo-gr.cpp"
+#line 2562 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* simpleexprnoparens: tINT  */
-#line 449 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2391 "engines/director/lingo/lingo-gr.cpp"
+  case 108: /* simpleexpr_noparens_nounarymath: tINT  */
+#line 482 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new IntNode((yyvsp[0].i)); }
+#line 2568 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* simpleexprnoparens: tFLOAT  */
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 109: /* simpleexpr_noparens_nounarymath: tFLOAT  */
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2397 "engines/director/lingo/lingo-gr.cpp"
+#line 2574 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* simpleexprnoparens: tSYMBOL  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 110: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2403 "engines/director/lingo/lingo-gr.cpp"
+#line 2580 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* simpleexprnoparens: tSTRING  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 111: /* simpleexpr_noparens_nounarymath: tSTRING  */
+#line 485 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2409 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 107: /* simpleexprnoparens: '+' simpleexpr  */
-#line 453 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = (yyvsp[0].node); }
-#line 2415 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 108: /* simpleexprnoparens: '-' simpleexpr  */
-#line 454 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2421 "engines/director/lingo/lingo-gr.cpp"
+#line 2586 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 112: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2427 "engines/director/lingo/lingo-gr.cpp"
+#line 2592 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* simpleexprnoparens: ID '(' exprlist ')'  */
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 113: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2433 "engines/director/lingo/lingo-gr.cpp"
+#line 2598 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* var: ID  */
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 116: /* var: ID  */
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2439 "engines/director/lingo/lingo-gr.cpp"
+#line 2604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* simpleexpr: '(' expr ')'  */
-#line 472 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = (yyvsp[-1].node); }
-#line 2445 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 118: /* list: '[' exprlist ']'  */
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 119: /* list: '[' exprlist ']'  */
+#line 502 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2451 "engines/director/lingo/lingo-gr.cpp"
+#line 2610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* list: '[' ':' ']'  */
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 120: /* list: '[' ':' ']'  */
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2457 "engines/director/lingo/lingo-gr.cpp"
+#line 2616 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* list: '[' proplist ']'  */
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 121: /* list: '[' proplist ']'  */
+#line 504 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2463 "engines/director/lingo/lingo-gr.cpp"
+#line 2622 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* proplist: proppair  */
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 122: /* proplist: proppair  */
+#line 507 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2472 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* proplist: proplist ',' proppair  */
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 123: /* proplist: proplist ',' proppair  */
+#line 511 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2480 "engines/director/lingo/lingo-gr.cpp"
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* proppair: tSYMBOL ':' expr  */
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 124: /* proppair: tSYMBOL ':' expr  */
+#line 516 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2486 "engines/director/lingo/lingo-gr.cpp"
+#line 2645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* proppair: ID ':' expr  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 125: /* proppair: ID ':' expr  */
+#line 517 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2492 "engines/director/lingo/lingo-gr.cpp"
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* proppair: tSTRING ':' expr  */
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 126: /* proppair: tSTRING ':' expr  */
+#line 518 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2498 "engines/director/lingo/lingo-gr.cpp"
+#line 2657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* expr: simpleexpr  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+  case 127: /* parens: '(' expr ')'  */
+#line 521 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = (yyvsp[-1].node); }
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 128: /* unarymath: '+' simpleexpr  */
+#line 523 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2504 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* expr: expr '+' expr  */
-#line 495 "engines/director/lingo/lingo-gr.y"
+  case 129: /* unarymath: '-' simpleexpr  */
+#line 524 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 136: /* expr: expr '+' expr  */
+#line 542 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2510 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* expr: expr '-' expr  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 137: /* expr: expr '-' expr  */
+#line 543 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2516 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* expr: expr '*' expr  */
-#line 497 "engines/director/lingo/lingo-gr.y"
+  case 138: /* expr: expr '*' expr  */
+#line 544 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2522 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* expr: expr '/' expr  */
-#line 498 "engines/director/lingo/lingo-gr.y"
+  case 139: /* expr: expr '/' expr  */
+#line 545 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2528 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* expr: expr tMOD expr  */
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 140: /* expr: expr tMOD expr  */
+#line 546 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2534 "engines/director/lingo/lingo-gr.cpp"
+#line 2705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* expr: expr '>' expr  */
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 141: /* expr: expr '>' expr  */
+#line 547 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2540 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* expr: expr '<' expr  */
-#line 501 "engines/director/lingo/lingo-gr.y"
+  case 142: /* expr: expr '<' expr  */
+#line 548 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2546 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* expr: expr tEQ expr  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 143: /* expr: expr tEQ expr  */
+#line 549 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2552 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* expr: expr tNEQ expr  */
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 144: /* expr: expr tNEQ expr  */
+#line 550 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2558 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* expr: expr tGE expr  */
-#line 504 "engines/director/lingo/lingo-gr.y"
+  case 145: /* expr: expr tGE expr  */
+#line 551 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2564 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* expr: expr tLE expr  */
-#line 505 "engines/director/lingo/lingo-gr.y"
+  case 146: /* expr: expr tLE expr  */
+#line 552 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2570 "engines/director/lingo/lingo-gr.cpp"
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* expr: expr tAND expr  */
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 147: /* expr: expr tAND expr  */
+#line 553 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2576 "engines/director/lingo/lingo-gr.cpp"
+#line 2747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* expr: expr tOR expr  */
-#line 507 "engines/director/lingo/lingo-gr.y"
+  case 148: /* expr: expr tOR expr  */
+#line 554 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2582 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* expr: expr '&' expr  */
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 149: /* expr: expr '&' expr  */
+#line 555 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2588 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* expr: expr tCONCAT expr  */
-#line 509 "engines/director/lingo/lingo-gr.y"
+  case 150: /* expr: expr tCONCAT expr  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2594 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* expr: expr tCONTAINS expr  */
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 151: /* expr: expr tCONTAINS expr  */
+#line 557 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2600 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* expr: expr tSTARTS expr  */
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 152: /* expr: expr tSTARTS expr  */
+#line 558 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2606 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* exprlist: %empty  */
-#line 514 "engines/director/lingo/lingo-gr.y"
+  case 154: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 566 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 155: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 567 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 156: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 568 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 157: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 569 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 158: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 570 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 159: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 571 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 160: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 572 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 161: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 573 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 162: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 574 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 163: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 575 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 164: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 576 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 165: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 577 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 166: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 578 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 167: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 579 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 168: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 580 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 169: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 581 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 170: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 582 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 171: /* exprlist: %empty  */
+#line 585 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 2612 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* nonemptyexprlist: expr  */
-#line 518 "engines/director/lingo/lingo-gr.y"
+  case 173: /* nonemptyexprlist: expr  */
+#line 589 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2621 "engines/director/lingo/lingo-gr.cpp"
+#line 2894 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 174: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 593 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2629 "engines/director/lingo/lingo-gr.cpp"
+#line 2902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2906 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -2828,7 +3101,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 598 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 447ae6257a..db48c7eb86 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -167,11 +167,13 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<node> stmt stmtoneliner
 %type<node> proc asgn definevars
 %type<node> ifstmt ifelsestmt loop
-%type<nodelist> stmtlist nonemptystmtlist
+%type<nodelist> cmdargs stmtlist nonemptystmtlist
 %type<node> stmtlistline
 
 // EXPRESSION
-%type<node> simpleexprnoparens simpleexpr expr
+%type<node> simpleexpr_noparens_nounarymath simpleexpr simpleexpr_noparens simpleexpr_nounarymath
+%type<node> parens unarymath
+%type<node> expr expr_nounarymath
 %type<node> var varorchunk varorthe
 %type<node> list proppair
 %type<nodelist> proplist exprlist nonemptyexprlist
@@ -366,15 +368,45 @@ stmtoneliner: proc
 	| definevars
 	;
 
-proc: ID '(' exprlist[args] ')' '\n'	{ $$ = new CmdNode($ID, $args); }
-	| ID exprlist[args] '\n'			{ $$ = new CmdNode($ID, $args); }
-	| tPUT '(' exprlist[args] ')' '\n'	{ $$ = new CmdNode(new Common::String("put"), $args); }
-	| tPUT exprlist[args] '\n'			{ $$ = new CmdNode(new Common::String("put"), $args); }
+proc: ID cmdargs '\n'					{ $$ = new CmdNode($ID, $cmdargs); }
+	| tPUT cmdargs '\n'					{ $$ = new CmdNode(new Common::String("put"), $cmdargs); }
 	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
 	| tEXIT tREPEAT '\n'				{ $$ = new ExitRepeatNode(); }
 	| tEXIT '\n'						{ $$ = new ExitNode(); }
 	;
 
+cmdargs: /* empty */					{
+		// This matches `cmd`
+		$$ = new NodeList; }
+	| expr								{
+		// This matches `cmd arg` and `cmd(arg)`
+		NodeList *args = new NodeList;
+		args->push_back($expr);
+		$$ = args; }
+	| expr ',' nonemptyexprlist[args]	{
+		// This matches `cmd args, ...)
+		$args->insert_at(0, $expr);
+		$$ = $args; }
+	| expr expr_nounarymath				{
+		// This matches `cmd arg arg`
+		NodeList *args = new NodeList;
+		args->push_back($expr);
+		args->push_back($expr_nounarymath);
+		$$ = args; }
+	| expr expr_nounarymath ',' nonemptyexprlist[args] {
+		// This matches `cmd arg arg, ...`
+		$args->insert_at(0, $expr_nounarymath);
+		$args->insert_at(0, $expr);
+		$$ = $args; }
+	| '(' ')'							{
+		// This matches `cmd()`
+		$$ = new NodeList; }
+	| '(' expr ',' nonemptyexprlist[args] ')' {
+		// This matches `cmd(args, ...)`
+		$args->insert_at(0, $expr);
+		$$ = $args; }
+	;
+
 asgn: tPUT expr tINTO varorchunk '\n'	{ $$ = new PutIntoNode($expr, $varorchunk); }
 	| tPUT expr tAFTER varorchunk '\n'	{ $$ = new PutAfterNode($expr, $varorchunk); }
 	| tPUT expr tBEFORE varorchunk '\n'	{ $$ = new PutBeforeNode($expr, $varorchunk); }
@@ -446,12 +478,11 @@ stmtlistline: '\n'					{ $$ = nullptr; }
 
 // EXPRESSION
 
-simpleexprnoparens: tINT			{ $$ = new IntNode($tINT); }
+simpleexpr_noparens_nounarymath:
+	  tINT							{ $$ = new IntNode($tINT); }
 	| tFLOAT						{ $$ = new FloatNode($tFLOAT); }
 	| tSYMBOL						{ $$ = new SymbolNode($tSYMBOL); }	// D3
 	| tSTRING						{ $$ = new StringNode($tSTRING); }
-	| '+' simpleexpr[arg]  %prec tUNARY		{ $$ = $arg; }
-	| '-' simpleexpr[arg]  %prec tUNARY		{ $$ = new UnaryOpNode(LC::c_negate, $arg); }
 	| tNOT simpleexpr[arg]  %prec tUNARY	{ $$ = new UnaryOpNode(LC::c_not, $arg); }
 	| ID '(' exprlist[args] ')'		{ $$ = new FuncNode($ID, $args); }
 	| var
@@ -468,10 +499,6 @@ varorthe: var
 	// TODO: the
 	;
 
-simpleexpr: simpleexprnoparens
-	| '(' expr ')'				{ $$ = $expr; }
-	;
-
 list: '[' exprlist ']'			{ $$ = new ListNode($exprlist); }
 	| '[' ':' ']'				{ $$ = new PropListNode(new NodeList); }
 	| '[' proplist ']'			{ $$ = new PropListNode($proplist); }
@@ -491,7 +518,27 @@ proppair: tSYMBOL ':' expr		{ $$ = new PropPairNode(new SymbolNode($tSYMBOL), $e
 	| tSTRING ':' expr 			{ $$ = new PropPairNode(new StringNode($tSTRING), $expr); }
 	;
 
-expr: simpleexpr				{ $$ = $simpleexpr; }
+parens:	'(' expr ')'				{ $$ = $expr; } ;
+
+unarymath: '+' simpleexpr[arg]  %prec tUNARY	{ $$ = $arg; }
+	| '-' simpleexpr[arg]  %prec tUNARY			{ $$ = new UnaryOpNode(LC::c_negate, $arg); }
+	;
+
+simpleexpr: simpleexpr_noparens_nounarymath
+	| parens
+	| unarymath
+	;
+
+simpleexpr_noparens: simpleexpr_noparens_nounarymath
+	| unarymath
+	;
+
+simpleexpr_nounarymath: simpleexpr_noparens_nounarymath
+	| parens
+	;
+
+// REMEMBER TO SYNC THIS WITH expr_nounarymath!
+expr: simpleexpr
 	| expr[a] '+' expr[b]		{ $$ = new BinaryOpNode(LC::c_add, $a, $b); }
 	| expr[a] '-' expr[b]		{ $$ = new BinaryOpNode(LC::c_sub, $a, $b); }
 	| expr[a] '*' expr[b]		{ $$ = new BinaryOpNode(LC::c_mul, $a, $b); }
@@ -511,6 +558,30 @@ expr: simpleexpr				{ $$ = $simpleexpr; }
 	| expr[a] tSTARTS expr[b]	{ $$ = new BinaryOpNode(LC::c_starts, $a, $b); }
 	;
 
+// This is the same as expr except it can't start with a unary math operator.
+// It's ugly but unfortunately necessary to allow two expressions in a row with no delimeter.
+// Without this, `cmd 1 + 1` could be interpreted as either `cmd(1 + 1)` or `cmd(1, +1)`.
+// We only want to allow the first interpretation, so we must exclude unary math from the second expression.
+expr_nounarymath: simpleexpr_nounarymath
+	| expr_nounarymath[a] '+' expr[b]		{ $$ = new BinaryOpNode(LC::c_add, $a, $b); }
+	| expr_nounarymath[a] '-' expr[b]		{ $$ = new BinaryOpNode(LC::c_sub, $a, $b); }
+	| expr_nounarymath[a] '*' expr[b]		{ $$ = new BinaryOpNode(LC::c_mul, $a, $b); }
+	| expr_nounarymath[a] '/' expr[b]		{ $$ = new BinaryOpNode(LC::c_div, $a, $b); }
+	| expr_nounarymath[a] tMOD expr[b]		{ $$ = new BinaryOpNode(LC::c_mod, $a, $b); }
+	| expr_nounarymath[a] '>' expr[b]		{ $$ = new BinaryOpNode(LC::c_gt, $a, $b); }
+	| expr_nounarymath[a] '<' expr[b]		{ $$ = new BinaryOpNode(LC::c_lt, $a, $b); }
+	| expr_nounarymath[a] tEQ expr[b]		{ $$ = new BinaryOpNode(LC::c_eq, $a, $b); }
+	| expr_nounarymath[a] tNEQ expr[b]		{ $$ = new BinaryOpNode(LC::c_neq, $a, $b); }
+	| expr_nounarymath[a] tGE expr[b]		{ $$ = new BinaryOpNode(LC::c_ge, $a, $b); }
+	| expr_nounarymath[a] tLE expr[b]		{ $$ = new BinaryOpNode(LC::c_le, $a, $b); }
+	| expr_nounarymath[a] tAND expr[b]		{ $$ = new BinaryOpNode(LC::c_and, $a, $b); }
+	| expr_nounarymath[a] tOR expr[b]		{ $$ = new BinaryOpNode(LC::c_or, $a, $b); }
+	| expr_nounarymath[a] '&' expr[b]		{ $$ = new BinaryOpNode(LC::c_ampersand, $a, $b); }
+	| expr_nounarymath[a] tCONCAT expr[b]	{ $$ = new BinaryOpNode(LC::c_concat, $a, $b); }
+	| expr_nounarymath[a] tCONTAINS expr[b]	{ $$ = new BinaryOpNode(LC::c_contains, $a, $b); }
+	| expr_nounarymath[a] tSTARTS expr[b]	{ $$ = new BinaryOpNode(LC::c_starts, $a, $b); }
+	;
+
 exprlist: /* empty */						{ $$ = new NodeList; }
 	| nonemptyexprlist
 	;


Commit: 68200d454247532b90a59276fa8d43e777680cbb
    https://github.com/scummvm/scummvm/commit/68200d454247532b90a59276fa8d43e777680cbb
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement play command

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index c5db7e3a95..816b344876 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -458,6 +458,15 @@ void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 /* CmdNode */
 
 void LingoCompiler::visitCmdNode(CmdNode *node) {
+	// `play done` compiles to `play()`
+	if (node->name->equalsIgnoreCase("play") && node->args->size() == 1 && (*node->args)[0]->type == kVarNode) {
+		VarNode *var = static_cast<VarNode *>((*node->args)[0]);
+		if (var->name->equalsIgnoreCase("done")) {
+			codeCmd(node->name, 0);
+			return;
+		}
+	}
+
 	compileList(node->args);
 	codeCmd(node->name, node->args->size());
 }
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index e5ec2d4e70..7b78e7da85 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -179,115 +179,117 @@ enum yysymbol_kind_t
   YYSYMBOL_tELSE = 24,                     /* tELSE  */
   YYSYMBOL_tELSIF = 25,                    /* tELSIF  */
   YYSYMBOL_tEXIT = 26,                     /* tEXIT  */
-  YYSYMBOL_tGLOBAL = 27,                   /* tGLOBAL  */
-  YYSYMBOL_tGO = 28,                       /* tGO  */
-  YYSYMBOL_tGOLOOP = 29,                   /* tGOLOOP  */
-  YYSYMBOL_tIF = 30,                       /* tIF  */
-  YYSYMBOL_tIN = 31,                       /* tIN  */
-  YYSYMBOL_tINTO = 32,                     /* tINTO  */
-  YYSYMBOL_tMACRO = 33,                    /* tMACRO  */
-  YYSYMBOL_tMOVIE = 34,                    /* tMOVIE  */
-  YYSYMBOL_tNEXT = 35,                     /* tNEXT  */
-  YYSYMBOL_tOF = 36,                       /* tOF  */
-  YYSYMBOL_tPREVIOUS = 37,                 /* tPREVIOUS  */
-  YYSYMBOL_tPUT = 38,                      /* tPUT  */
-  YYSYMBOL_tREPEAT = 39,                   /* tREPEAT  */
-  YYSYMBOL_tSET = 40,                      /* tSET  */
-  YYSYMBOL_tTHEN = 41,                     /* tTHEN  */
-  YYSYMBOL_tTO = 42,                       /* tTO  */
-  YYSYMBOL_tWHEN = 43,                     /* tWHEN  */
-  YYSYMBOL_tWITH = 44,                     /* tWITH  */
-  YYSYMBOL_tWHILE = 45,                    /* tWHILE  */
-  YYSYMBOL_tFACTORY = 46,                  /* tFACTORY  */
-  YYSYMBOL_tOPEN = 47,                     /* tOPEN  */
-  YYSYMBOL_tPLAY = 48,                     /* tPLAY  */
-  YYSYMBOL_tINSTANCE = 49,                 /* tINSTANCE  */
-  YYSYMBOL_tGE = 50,                       /* tGE  */
-  YYSYMBOL_tLE = 51,                       /* tLE  */
-  YYSYMBOL_tEQ = 52,                       /* tEQ  */
-  YYSYMBOL_tNEQ = 53,                      /* tNEQ  */
-  YYSYMBOL_tAND = 54,                      /* tAND  */
-  YYSYMBOL_tOR = 55,                       /* tOR  */
-  YYSYMBOL_tNOT = 56,                      /* tNOT  */
-  YYSYMBOL_tMOD = 57,                      /* tMOD  */
-  YYSYMBOL_tAFTER = 58,                    /* tAFTER  */
-  YYSYMBOL_tBEFORE = 59,                   /* tBEFORE  */
-  YYSYMBOL_tCONCAT = 60,                   /* tCONCAT  */
-  YYSYMBOL_tCONTAINS = 61,                 /* tCONTAINS  */
-  YYSYMBOL_tSTARTS = 62,                   /* tSTARTS  */
-  YYSYMBOL_tCHAR = 63,                     /* tCHAR  */
-  YYSYMBOL_tITEM = 64,                     /* tITEM  */
-  YYSYMBOL_tLINE = 65,                     /* tLINE  */
-  YYSYMBOL_tWORD = 66,                     /* tWORD  */
-  YYSYMBOL_tSPRITE = 67,                   /* tSPRITE  */
-  YYSYMBOL_tINTERSECTS = 68,               /* tINTERSECTS  */
-  YYSYMBOL_tWITHIN = 69,                   /* tWITHIN  */
-  YYSYMBOL_tTELL = 70,                     /* tTELL  */
-  YYSYMBOL_tPROPERTY = 71,                 /* tPROPERTY  */
-  YYSYMBOL_tON = 72,                       /* tON  */
-  YYSYMBOL_tMETHOD = 73,                   /* tMETHOD  */
-  YYSYMBOL_tENDIF = 74,                    /* tENDIF  */
-  YYSYMBOL_tENDREPEAT = 75,                /* tENDREPEAT  */
-  YYSYMBOL_tENDTELL = 76,                  /* tENDTELL  */
-  YYSYMBOL_tASSERTERROR = 77,              /* tASSERTERROR  */
-  YYSYMBOL_78_ = 78,                       /* '<'  */
-  YYSYMBOL_79_ = 79,                       /* '>'  */
-  YYSYMBOL_80_ = 80,                       /* '&'  */
-  YYSYMBOL_81_ = 81,                       /* '+'  */
-  YYSYMBOL_82_ = 82,                       /* '-'  */
-  YYSYMBOL_83_ = 83,                       /* '*'  */
-  YYSYMBOL_84_ = 84,                       /* '/'  */
-  YYSYMBOL_85_ = 85,                       /* '%'  */
-  YYSYMBOL_86_n_ = 86,                     /* '\n'  */
-  YYSYMBOL_87_ = 87,                       /* ','  */
-  YYSYMBOL_88_ = 88,                       /* '('  */
-  YYSYMBOL_89_ = 89,                       /* ')'  */
-  YYSYMBOL_90_ = 90,                       /* '['  */
-  YYSYMBOL_91_ = 91,                       /* ']'  */
-  YYSYMBOL_92_ = 92,                       /* ':'  */
-  YYSYMBOL_YYACCEPT = 93,                  /* $accept  */
-  YYSYMBOL_script = 94,                    /* script  */
-  YYSYMBOL_scriptpartlist = 95,            /* scriptpartlist  */
-  YYSYMBOL_scriptpart = 96,                /* scriptpart  */
-  YYSYMBOL_macro = 97,                     /* macro  */
-  YYSYMBOL_factory = 98,                   /* factory  */
-  YYSYMBOL_method = 99,                    /* method  */
-  YYSYMBOL_methodlist = 100,               /* methodlist  */
-  YYSYMBOL_nonemptymethodlist = 101,       /* nonemptymethodlist  */
-  YYSYMBOL_methodlistline = 102,           /* methodlistline  */
-  YYSYMBOL_handler = 103,                  /* handler  */
-  YYSYMBOL_endargdef = 104,                /* endargdef  */
-  YYSYMBOL_ID = 105,                       /* ID  */
-  YYSYMBOL_idlist = 106,                   /* idlist  */
-  YYSYMBOL_nonemptyidlist = 107,           /* nonemptyidlist  */
-  YYSYMBOL_stmt = 108,                     /* stmt  */
-  YYSYMBOL_stmtoneliner = 109,             /* stmtoneliner  */
-  YYSYMBOL_proc = 110,                     /* proc  */
-  YYSYMBOL_cmdargs = 111,                  /* cmdargs  */
-  YYSYMBOL_asgn = 112,                     /* asgn  */
-  YYSYMBOL_to = 113,                       /* to  */
-  YYSYMBOL_definevars = 114,               /* definevars  */
-  YYSYMBOL_ifstmt = 115,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 116,               /* ifelsestmt  */
-  YYSYMBOL_loop = 117,                     /* loop  */
-  YYSYMBOL_stmtlist = 118,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 119,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 120,             /* stmtlistline  */
-  YYSYMBOL_simpleexpr_noparens_nounarymath = 121, /* simpleexpr_noparens_nounarymath  */
-  YYSYMBOL_var = 122,                      /* var  */
-  YYSYMBOL_varorchunk = 123,               /* varorchunk  */
-  YYSYMBOL_varorthe = 124,                 /* varorthe  */
-  YYSYMBOL_list = 125,                     /* list  */
-  YYSYMBOL_proplist = 126,                 /* proplist  */
-  YYSYMBOL_proppair = 127,                 /* proppair  */
-  YYSYMBOL_parens = 128,                   /* parens  */
-  YYSYMBOL_unarymath = 129,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 130,               /* simpleexpr  */
-  YYSYMBOL_simpleexpr_nounarymath = 131,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_expr = 132,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 133,         /* expr_nounarymath  */
-  YYSYMBOL_exprlist = 134,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 135          /* nonemptyexprlist  */
+  YYSYMBOL_tFRAME = 27,                    /* tFRAME  */
+  YYSYMBOL_tGLOBAL = 28,                   /* tGLOBAL  */
+  YYSYMBOL_tGO = 29,                       /* tGO  */
+  YYSYMBOL_tGOLOOP = 30,                   /* tGOLOOP  */
+  YYSYMBOL_tIF = 31,                       /* tIF  */
+  YYSYMBOL_tIN = 32,                       /* tIN  */
+  YYSYMBOL_tINTO = 33,                     /* tINTO  */
+  YYSYMBOL_tMACRO = 34,                    /* tMACRO  */
+  YYSYMBOL_tMOVIE = 35,                    /* tMOVIE  */
+  YYSYMBOL_tNEXT = 36,                     /* tNEXT  */
+  YYSYMBOL_tOF = 37,                       /* tOF  */
+  YYSYMBOL_tPREVIOUS = 38,                 /* tPREVIOUS  */
+  YYSYMBOL_tPUT = 39,                      /* tPUT  */
+  YYSYMBOL_tREPEAT = 40,                   /* tREPEAT  */
+  YYSYMBOL_tSET = 41,                      /* tSET  */
+  YYSYMBOL_tTHEN = 42,                     /* tTHEN  */
+  YYSYMBOL_tTO = 43,                       /* tTO  */
+  YYSYMBOL_tWHEN = 44,                     /* tWHEN  */
+  YYSYMBOL_tWITH = 45,                     /* tWITH  */
+  YYSYMBOL_tWHILE = 46,                    /* tWHILE  */
+  YYSYMBOL_tFACTORY = 47,                  /* tFACTORY  */
+  YYSYMBOL_tOPEN = 48,                     /* tOPEN  */
+  YYSYMBOL_tPLAY = 49,                     /* tPLAY  */
+  YYSYMBOL_tINSTANCE = 50,                 /* tINSTANCE  */
+  YYSYMBOL_tGE = 51,                       /* tGE  */
+  YYSYMBOL_tLE = 52,                       /* tLE  */
+  YYSYMBOL_tEQ = 53,                       /* tEQ  */
+  YYSYMBOL_tNEQ = 54,                      /* tNEQ  */
+  YYSYMBOL_tAND = 55,                      /* tAND  */
+  YYSYMBOL_tOR = 56,                       /* tOR  */
+  YYSYMBOL_tNOT = 57,                      /* tNOT  */
+  YYSYMBOL_tMOD = 58,                      /* tMOD  */
+  YYSYMBOL_tAFTER = 59,                    /* tAFTER  */
+  YYSYMBOL_tBEFORE = 60,                   /* tBEFORE  */
+  YYSYMBOL_tCONCAT = 61,                   /* tCONCAT  */
+  YYSYMBOL_tCONTAINS = 62,                 /* tCONTAINS  */
+  YYSYMBOL_tSTARTS = 63,                   /* tSTARTS  */
+  YYSYMBOL_tCHAR = 64,                     /* tCHAR  */
+  YYSYMBOL_tITEM = 65,                     /* tITEM  */
+  YYSYMBOL_tLINE = 66,                     /* tLINE  */
+  YYSYMBOL_tWORD = 67,                     /* tWORD  */
+  YYSYMBOL_tSPRITE = 68,                   /* tSPRITE  */
+  YYSYMBOL_tINTERSECTS = 69,               /* tINTERSECTS  */
+  YYSYMBOL_tWITHIN = 70,                   /* tWITHIN  */
+  YYSYMBOL_tTELL = 71,                     /* tTELL  */
+  YYSYMBOL_tPROPERTY = 72,                 /* tPROPERTY  */
+  YYSYMBOL_tON = 73,                       /* tON  */
+  YYSYMBOL_tMETHOD = 74,                   /* tMETHOD  */
+  YYSYMBOL_tENDIF = 75,                    /* tENDIF  */
+  YYSYMBOL_tENDREPEAT = 76,                /* tENDREPEAT  */
+  YYSYMBOL_tENDTELL = 77,                  /* tENDTELL  */
+  YYSYMBOL_tASSERTERROR = 78,              /* tASSERTERROR  */
+  YYSYMBOL_79_ = 79,                       /* '<'  */
+  YYSYMBOL_80_ = 80,                       /* '>'  */
+  YYSYMBOL_81_ = 81,                       /* '&'  */
+  YYSYMBOL_82_ = 82,                       /* '+'  */
+  YYSYMBOL_83_ = 83,                       /* '-'  */
+  YYSYMBOL_84_ = 84,                       /* '*'  */
+  YYSYMBOL_85_ = 85,                       /* '/'  */
+  YYSYMBOL_86_ = 86,                       /* '%'  */
+  YYSYMBOL_87_n_ = 87,                     /* '\n'  */
+  YYSYMBOL_88_ = 88,                       /* ','  */
+  YYSYMBOL_89_ = 89,                       /* '('  */
+  YYSYMBOL_90_ = 90,                       /* ')'  */
+  YYSYMBOL_91_ = 91,                       /* '['  */
+  YYSYMBOL_92_ = 92,                       /* ']'  */
+  YYSYMBOL_93_ = 93,                       /* ':'  */
+  YYSYMBOL_YYACCEPT = 94,                  /* $accept  */
+  YYSYMBOL_script = 95,                    /* script  */
+  YYSYMBOL_scriptpartlist = 96,            /* scriptpartlist  */
+  YYSYMBOL_scriptpart = 97,                /* scriptpart  */
+  YYSYMBOL_macro = 98,                     /* macro  */
+  YYSYMBOL_factory = 99,                   /* factory  */
+  YYSYMBOL_method = 100,                   /* method  */
+  YYSYMBOL_methodlist = 101,               /* methodlist  */
+  YYSYMBOL_nonemptymethodlist = 102,       /* nonemptymethodlist  */
+  YYSYMBOL_methodlistline = 103,           /* methodlistline  */
+  YYSYMBOL_handler = 104,                  /* handler  */
+  YYSYMBOL_endargdef = 105,                /* endargdef  */
+  YYSYMBOL_ID = 106,                       /* ID  */
+  YYSYMBOL_idlist = 107,                   /* idlist  */
+  YYSYMBOL_nonemptyidlist = 108,           /* nonemptyidlist  */
+  YYSYMBOL_stmt = 109,                     /* stmt  */
+  YYSYMBOL_stmtoneliner = 110,             /* stmtoneliner  */
+  YYSYMBOL_proc = 111,                     /* proc  */
+  YYSYMBOL_cmdargs = 112,                  /* cmdargs  */
+  YYSYMBOL_playargs = 113,                 /* playargs  */
+  YYSYMBOL_asgn = 114,                     /* asgn  */
+  YYSYMBOL_to = 115,                       /* to  */
+  YYSYMBOL_definevars = 116,               /* definevars  */
+  YYSYMBOL_ifstmt = 117,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 118,               /* ifelsestmt  */
+  YYSYMBOL_loop = 119,                     /* loop  */
+  YYSYMBOL_stmtlist = 120,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 121,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 122,             /* stmtlistline  */
+  YYSYMBOL_simpleexpr_noparens_nounarymath = 123, /* simpleexpr_noparens_nounarymath  */
+  YYSYMBOL_var = 124,                      /* var  */
+  YYSYMBOL_varorchunk = 125,               /* varorchunk  */
+  YYSYMBOL_varorthe = 126,                 /* varorthe  */
+  YYSYMBOL_list = 127,                     /* list  */
+  YYSYMBOL_proplist = 128,                 /* proplist  */
+  YYSYMBOL_proppair = 129,                 /* proppair  */
+  YYSYMBOL_parens = 130,                   /* parens  */
+  YYSYMBOL_unarymath = 131,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 132,               /* simpleexpr  */
+  YYSYMBOL_simpleexpr_nounarymath = 133,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_expr = 134,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 135,         /* expr_nounarymath  */
+  YYSYMBOL_exprlist = 136,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 137          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -607,21 +609,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  102
+#define YYFINAL  108
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2152
+#define YYLAST   2465
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  93
+#define YYNTOKENS  94
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  43
+#define YYNNTS  44
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  174
+#define YYNRULES  181
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  317
+#define YYNSTATES  334
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   332
+#define YYMAXUTOK   333
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -636,15 +638,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      86,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      87,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    85,    80,     2,
-      88,    89,    83,    81,    87,    82,     2,    84,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    92,     2,
-      78,     2,    79,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    86,    81,     2,
+      89,    90,    84,    82,    88,    83,     2,    85,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    93,     2,
+      79,     2,    80,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    90,     2,    91,     2,     2,     2,     2,     2,     2,
+       2,    91,     2,    92,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -668,7 +670,7 @@ static const yytype_int8 yytranslate[] =
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77
+      75,    76,    77,    78
 };
 
 #if YYDEBUG
@@ -678,21 +680,22 @@ static const yytype_int16 yyrline[] =
        0,   196,   196,   198,   204,   211,   212,   213,   214,   215,
      244,   248,   250,   252,   253,   256,   262,   269,   270,   275,
      279,   283,   284,   285,   290,   291,   292,   293,   294,   295,
-     296,   301,   304,   306,   307,   308,   309,   312,   313,   314,
-     315,   316,   318,   319,   320,   321,   322,   325,   326,   327,
-     328,   329,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   342,   343,   346,   350,   360,   361,   362,   363,   366,
-     367,   368,   371,   372,   373,   374,   375,   378,   381,   386,
-     390,   396,   401,   404,   410,   411,   412,   413,   416,   416,
-     418,   419,   420,   423,   427,   431,   437,   441,   445,   449,
-     451,   453,   457,   458,   462,   468,   475,   476,   482,   483,
-     484,   485,   486,   487,   488,   489,   492,   494,   498,   502,
-     503,   504,   507,   511,   516,   517,   518,   521,   523,   524,
-     527,   528,   529,   536,   537,   541,   542,   543,   544,   545,
-     546,   547,   548,   549,   550,   551,   552,   553,   554,   555,
-     556,   557,   558,   565,   566,   567,   568,   569,   570,   571,
-     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
-     582,   585,   586,   589,   593
+     296,   301,   302,   305,   307,   308,   309,   310,   313,   314,
+     315,   316,   317,   319,   320,   322,   323,   326,   327,   328,
+     329,   330,   332,   333,   334,   335,   336,   337,   338,   339,
+     340,   343,   344,   347,   351,   361,   362,   363,   364,   367,
+     368,   369,   372,   373,   374,   375,   376,   377,   378,   381,
+     384,   389,   393,   399,   404,   407,   413,   418,   424,   430,
+     436,   444,   445,   446,   447,   450,   450,   452,   453,   454,
+     457,   461,   465,   471,   475,   479,   483,   485,   487,   491,
+     492,   496,   502,   509,   510,   516,   517,   518,   519,   520,
+     521,   522,   523,   526,   528,   532,   536,   537,   538,   541,
+     545,   550,   551,   552,   555,   557,   558,   561,   562,   563,
+     570,   571,   575,   576,   577,   578,   579,   580,   581,   582,
+     583,   584,   585,   586,   587,   588,   589,   590,   591,   592,
+     599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
+     609,   610,   611,   612,   613,   614,   615,   616,   619,   620,
+     623,   627
 };
 #endif
 
@@ -714,20 +717,20 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "tTHEMENUITEMSENTITY", "tFLOAT", "tTHEFUNC", "tTHEFUNCINOF", "tVARID",
   "tSTRING", "tSYMBOL", "tENDCLAUSE", "tPLAYACCEL", "tTHEOBJECTPROP",
   "tCAST", "tFIELD", "tSCRIPT", "tWINDOW", "tDOWN", "tELSE", "tELSIF",
-  "tEXIT", "tGLOBAL", "tGO", "tGOLOOP", "tIF", "tIN", "tINTO", "tMACRO",
-  "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET",
-  "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tFACTORY", "tOPEN", "tPLAY",
-  "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD",
-  "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM",
-  "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
+  "tEXIT", "tFRAME", "tGLOBAL", "tGO", "tGOLOOP", "tIF", "tIN", "tINTO",
+  "tMACRO", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT",
+  "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tFACTORY", "tOPEN",
+  "tPLAY", "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT",
+  "tMOD", "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR",
+  "tITEM", "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
   "tPROPERTY", "tON", "tMETHOD", "tENDIF", "tENDREPEAT", "tENDTELL",
   "tASSERTERROR", "'<'", "'>'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
   "'\\n'", "','", "'('", "')'", "'['", "']'", "':'", "$accept", "script",
   "scriptpartlist", "scriptpart", "macro", "factory", "method",
   "methodlist", "nonemptymethodlist", "methodlistline", "handler",
   "endargdef", "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner",
-  "proc", "cmdargs", "asgn", "to", "definevars", "ifstmt", "ifelsestmt",
-  "loop", "stmtlist", "nonemptystmtlist", "stmtlistline",
+  "proc", "cmdargs", "playargs", "asgn", "to", "definevars", "ifstmt",
+  "ifelsestmt", "loop", "stmtlist", "nonemptystmtlist", "stmtlistline",
   "simpleexpr_noparens_nounarymath", "var", "varorchunk", "varorthe",
   "list", "proplist", "proppair", "parens", "unarymath", "simpleexpr",
   "simpleexpr_nounarymath", "expr", "expr_nounarymath", "exprlist",
@@ -749,13 +752,13 @@ static const yytype_int16 yytoknum[] =
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,    60,    62,
-      38,    43,    45,    42,    47,    37,    10,    44,    40,    41,
-      91,    93,    58
+     325,   326,   327,   328,   329,   330,   331,   332,   333,    60,
+      62,    38,    43,    45,    42,    47,    37,    10,    44,    40,
+      41,    91,    93,    58
 };
 #endif
 
-#define YYPACT_NINF (-235)
+#define YYPACT_NINF (-222)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -769,38 +772,40 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1133,  -235,  -235,  -235,  -235,  -235,  -235,  -235,   -32,  1873,
-     745,  -235,  -235,  1873,  -235,     7,  -235,  -235,   824,    -5,
-    1873,  -235,  -235,  -235,  -235,  1873,  -235,  -235,  1873,  -235,
-    -235,  -235,  -235,  -235,  -235,  -235,  -235,  -235,  -235,  -235,
-    -235,  -235,  -235,  -235,  1873,  1873,  -235,  -235,    12,  1133,
-    -235,  -235,  -235,  -235,   824,  -235,  -235,  -235,  -235,  -235,
-    -235,  -235,  -235,   -52,  -235,  -235,  -235,  -235,  -235,   -43,
-     -37,  -235,  -235,  -235,  -235,   745,   745,   745,   745,   421,
-     -24,  -235,  -235,  -235,  -235,  -235,  -235,   292,  1873,   -19,
-     664,   -16,   502,  1873,   745,  -235,  -235,   -34,   -15,   -14,
-     -13,  1873,  -235,  -235,    -9,   583,  -235,  -235,  1873,  -235,
-    -235,  -235,  1955,   -40,   -26,   -23,   -66,   -50,  -235,  2068,
-     -11,    -6,   745,  1631,   745,   745,   745,   745,   745,   745,
-     745,   745,   745,   745,   745,   745,   745,   745,   745,   745,
-     745,    -4,  -235,  -235,  1915,  -235,  1873,   903,   903,  1061,
-    1873,  1873,   982,   745,  -235,  -235,  -235,   367,    37,  1968,
-    -235,  -235,   745,   -62,  -235,  -235,    11,  -235,  -235,  -235,
-     745,   745,  -235,   745,   146,  -235,  -235,   745,     1,  1692,
-      76,    74,    74,    74,    74,    34,    34,  -235,   -51,    74,
-      74,    74,    74,   -51,   -36,   -36,  -235,  -235,  1692,   745,
-    -235,    16,    17,    18,    -6,   745,   745,   745,   745,   745,
-     745,   745,   745,   745,   745,   745,   745,   745,   745,   745,
-     745,   745,   745,   745,  1692,  2005,  1873,  -235,  -235,    20,
-    -235,  -235,  1692,  2068,  2068,  2068,   -40,   -26,     6,  -235,
-    2068,  -235,  -235,  -235,  1194,  -235,  -235,  1753,  1692,   -72,
-    -235,  -235,  -235,    74,    74,    74,    74,    34,    34,  -235,
-     -51,    74,    74,    74,    74,   -51,   -36,   -36,  -235,  -235,
-      -6,  1902,  1256,  -235,  1873,   -62,  1324,  1814,    21,  -235,
-    1692,  -235,  -235,    67,   745,    24,    33,  -235,  1873,  1692,
-    -235,  -235,  1385,   745,  2018,  -235,  1692,   -27,  -235,  1447,
-      35,  2055,  1692,  1692,  -235,  1873,    36,  -235,  1692,  1509,
-    -235,  -235,  1570,    38,    39,  -235,  -235
+    1323,  -222,  -222,  -222,  -222,  -222,  -222,  -222,   -32,  -222,
+    2137,   930,  -222,  -222,  2137,  -222,   -24,  -222,  -222,  1010,
+     -11,  2137,  -222,  -222,  -222,  -222,  2137,  -222,  1090,  2137,
+    -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,
+    -222,  -222,  -222,  -222,  -222,  2137,  2137,  -222,  -222,    40,
+    1323,  -222,  -222,  -222,  -222,  1010,  -222,  -222,  -222,  -222,
+    -222,  -222,  -222,  -222,   -43,  -222,  -222,  -222,  -222,  -222,
+     -21,   -16,  -222,  -222,  -222,  -222,   930,   930,   930,   930,
+     438,   -12,  -222,  -222,  -222,  -222,  -222,  -222,  2181,  2137,
+     -13,   848,    -9,   520,  2137,   930,  -222,  -222,   -30,    -5,
+     930,   930,    -4,    -2,   602,     3,     6,  2137,  -222,  -222,
+       9,   684,  -222,  -222,  2137,  -222,  -222,  -222,  2216,   -20,
+       5,   -17,   -78,   -64,  -222,  2367,    -1,    -7,   930,  1829,
+     930,   930,   930,   930,   930,   930,   930,   930,   930,   930,
+     930,   930,   930,   930,   930,   930,   930,    10,  -222,  -222,
+     311,  -222,  2137,  1170,  1170,  1250,  2137,  2137,   156,   930,
+    -222,  -222,  -222,  2229,    34,  2267,  -222,  -222,   930,   -68,
+     766,  2367,  -222,  -222,    66,  -222,  -222,    13,  -222,  -222,
+    -222,   930,   930,  -222,   930,  2077,  -222,  -222,   930,    14,
+    1891,    79,   -25,   -25,   -25,   -25,    65,    65,  -222,   -15,
+     -25,   -25,   -25,   -25,   -15,   -46,   -46,  -222,  -222,  1891,
+     930,  -222,    19,    23,    24,    -7,   930,   930,   930,   930,
+     930,   930,   930,   930,   930,   930,   930,   930,   930,   930,
+     930,   930,   930,   930,   930,  1891,  2280,  2137,  -222,  -222,
+      25,  -222,  -222,    78,  2380,   930,  1891,  2367,  2367,  2367,
+     -20,     5,    27,  -222,  2367,  -222,  -222,  -222,  1385,  -222,
+    -222,  1953,  1891,   -58,  -222,  -222,  -222,   -25,   -25,   -25,
+     -25,    65,    65,  -222,   -15,   -25,   -25,   -25,   -25,   -15,
+     -46,   -46,  -222,  -222,    -7,  2166,  1448,  -222,  2137,   -68,
+     930,  2367,  1517,  2015,    35,  -222,  1891,  -222,  -222,    81,
+     930,    38,    43,  -222,  2367,  2137,  1891,  -222,  -222,  1579,
+     930,  2317,  -222,  1891,   -40,  -222,  1642,    44,  2330,  1891,
+    1891,  -222,  2137,    45,  -222,  1891,  1705,  -222,  -222,  1767,
+      48,    49,  -222,  -222
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -808,58 +813,60 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,    24,    45,    28,    31,    48,    57,    30,     0,    61,
-       0,    32,    34,     0,    38,    39,    41,    46,    77,    47,
-      49,    52,    55,    58,    56,     0,    42,    44,    61,    26,
-      43,    40,    37,    25,    27,    50,    29,    35,    36,    60,
-      54,    33,    59,    51,    61,     0,    53,     5,     0,     2,
-       3,     6,     7,     8,    77,     9,    65,    69,    70,    71,
-      66,    67,    68,     0,    76,    39,    47,    49,    63,     0,
-      62,   108,   109,   111,   110,    40,     0,     0,     0,   171,
-     116,   130,   114,   115,   131,   132,   135,     0,    61,     0,
-       0,     0,    78,     0,     0,   116,   118,     0,     0,     0,
-       0,    61,     1,     4,     0,    78,    75,    90,     0,   112,
-     128,   129,     0,   111,   110,     0,   116,     0,   122,   173,
-       0,   172,   171,     0,     0,     0,     0,     0,     0,     0,
+       0,    24,    45,    28,    31,    48,    57,    30,     0,    32,
+      61,     0,    33,    35,     0,    39,    40,    42,    46,    79,
+      47,    49,    52,    55,    58,    56,     0,    43,    79,    61,
+      26,    44,    41,    38,    25,    27,    50,    29,    36,    37,
+      60,    54,    34,    59,    51,    61,     0,    53,     5,     0,
+       2,     3,     6,     7,     8,    79,     9,    65,    69,    70,
+      71,    66,    67,    68,     0,    78,    40,    47,    49,    63,
+       0,    62,   115,   116,   118,   117,    41,     0,     0,     0,
+     178,   123,   137,   121,   122,   138,   139,   142,     0,    61,
+       0,     0,     0,    80,     0,     0,   123,   125,     0,     0,
+      32,    39,     0,     0,    80,     0,     0,    61,     1,     4,
+       0,    80,    77,    97,     0,   119,   135,   136,     0,   118,
+     117,     0,   123,     0,   129,   180,     0,   179,   178,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,    82,     0,    73,    34,    26,    43,    37,
-      25,    27,    50,     0,   133,   134,   153,    80,     0,     0,
-      88,    89,     0,    13,    92,    91,     0,    72,    64,   127,
-       0,     0,   120,     0,     0,   121,   119,     0,     0,   102,
-      93,   145,   146,   143,   144,   147,   148,   140,   150,   151,
-     152,   142,   141,   149,   136,   137,   138,   139,   102,     0,
-     117,     0,     0,     0,    79,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    76,    84,
+       0,    73,    35,    26,    44,    38,    25,    27,    50,     0,
+     140,   141,   160,    82,     0,     0,    95,    96,     0,    13,
+      86,    87,    74,    75,    42,    99,    98,     0,    72,    64,
+     134,     0,     0,   127,     0,     0,   128,   126,     0,     0,
+     109,   100,   152,   153,   150,   151,   154,   155,   147,   157,
+     158,   159,   149,   148,   156,   143,   144,   145,   146,   109,
+       0,   124,     0,     0,     0,    81,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   102,     0,     0,    17,    18,    11,
-      14,    15,   102,   126,   124,   125,     0,     0,     0,   123,
-     174,   113,   106,   107,     0,   103,   104,     0,    10,     0,
-      84,    85,    86,   163,   164,   161,   162,   165,   166,   158,
-     168,   169,   170,   160,   159,   167,   154,   155,   156,   157,
-      81,     0,     0,    87,    61,     0,    20,     0,     0,   105,
-     102,    95,    83,     0,     0,     0,     0,    16,    21,   102,
-      97,    94,     0,     0,     0,    99,   102,     0,    22,     0,
-       0,     0,   102,    12,    19,     0,     0,    96,   102,     0,
-      23,    98,     0,     0,     0,   100,   101
+       0,     0,     0,     0,     0,   109,     0,     0,    17,    18,
+      11,    14,    15,    42,    90,     0,   109,   133,   131,   132,
+       0,     0,     0,   130,   181,   120,   113,   114,     0,   110,
+     111,     0,    10,     0,    91,    92,    93,   170,   171,   168,
+     169,   172,   173,   165,   175,   176,   177,   167,   166,   174,
+     161,   162,   163,   164,    83,     0,     0,    94,    61,     0,
+       0,    89,    20,     0,     0,   112,   109,   102,    85,     0,
+       0,     0,     0,    16,    88,    21,   109,   104,   101,     0,
+       0,     0,   106,   109,     0,    22,     0,     0,     0,   109,
+      12,    19,     0,     0,   103,   109,     0,    23,   105,     0,
+       0,     0,   107,   108
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -235,  -235,  -235,    71,  -235,  -235,  -235,  -235,  -235,  -149,
-    -235,  -235,     0,   -25,  -235,     4,  -235,  -235,    75,  -235,
-    -235,  -235,  -235,  -235,  -235,  -197,  -235,  -234,   -76,   -18,
-     -89,  -235,  -235,  -235,   -44,   -69,  -235,   -20,  -235,   189,
-    -235,    13,  -148
+    -222,  -222,  -222,    87,  -222,  -222,  -222,  -222,  -222,  -149,
+    -222,  -222,     0,   -28,  -222,     4,  -222,  -222,    -6,  -222,
+    -222,  -222,  -222,  -222,  -222,  -222,  -204,  -222,  -221,   -86,
+     -18,  -105,  -222,  -222,  -222,   -44,   -84,  -222,   -14,  -222,
+     200,   -27,    26,  -157
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    48,    49,    50,    51,    52,   228,   229,   230,   231,
-      53,   297,    80,    69,    70,   243,    56,    57,    91,    58,
-     162,    59,    60,    61,    62,   244,   245,   246,    81,    82,
-     201,    97,    83,   117,   118,    84,    85,    86,   156,   119,
-     157,   120,   121
+       0,    49,    50,    51,    52,    53,   239,   240,   241,   242,
+      54,   314,    81,    70,    71,   257,    57,    58,    92,   103,
+      59,   168,    60,    61,    62,    63,   258,   259,   260,    82,
+      83,   212,    98,    84,   123,   124,    85,    86,    87,   162,
+     125,   163,   126,   127
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -867,442 +874,504 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      54,   248,    96,    99,    55,   204,   130,    63,   160,    68,
-     279,   226,   102,    88,   279,   177,   154,   282,   161,   100,
-      95,   130,   122,   155,   227,    98,   173,   272,    68,   154,
-     137,   138,   139,   140,   106,   276,   155,   174,   279,    93,
-      94,   175,   279,   107,    68,   101,    89,   139,   140,    54,
-     108,   249,   170,    55,    64,   109,   110,   111,   279,   304,
-     305,   202,   203,   141,   122,   279,   171,   142,   172,   279,
-     145,   163,   164,   165,   270,   279,   166,   167,   279,   116,
-     176,   177,   198,   292,   124,   125,   126,   127,    68,   223,
-     241,   130,   299,   158,   131,   132,   133,   232,   173,   303,
-     247,    68,   250,   251,   252,   309,   275,   291,   168,   293,
-     295,   312,   134,   135,   136,   137,   138,   139,   140,   296,
-     103,   307,   311,    54,   315,   316,   287,   180,   200,   104,
-     239,   130,   200,   200,   131,   178,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    95,     0,     0,     0,
-      95,    95,     0,     0,   136,   137,   138,   139,   140,     1,
-     236,   237,     0,     2,     0,     3,     4,     5,     6,     7,
-       0,     0,     0,     0,   238,     0,     0,    11,    12,    54,
-      14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
-      23,    24,     0,    26,    27,     0,     0,     0,    54,    87,
-      29,    30,    31,    32,    33,    34,     0,    92,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
-       0,     0,     0,    46,    54,     0,   274,     0,     0,     0,
-       0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   105,    54,     0,     0,    54,    54,   286,
-       0,   281,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   112,     0,     0,
-       0,     0,    54,     0,    68,     0,    54,    54,     0,   144,
-      54,   290,     0,   159,     0,     0,     0,     0,   298,    54,
-       0,     0,    54,     0,     0,     0,    54,     0,     0,    54,
-       0,     0,    54,    54,     0,   310,     0,     0,    54,    54,
-       0,     0,    54,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-       0,     0,     0,   123,     0,     0,   185,   186,   187,     0,
-       0,   190,   124,   125,   126,   127,   128,   129,     0,   130,
-       0,   225,   131,   132,   133,     0,     0,     0,     0,   233,
-     234,     0,   235,     0,     0,     0,   240,     0,     0,     0,
-     134,   135,   136,   137,   138,   139,   140,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,     0,   271,     0,     0,     0,     0,   205,   206,   207,
-     208,   209,   210,     0,   211,     0,    71,   212,   213,   214,
-       0,    72,     0,     0,     1,   113,   114,     0,     2,     0,
-       3,     4,     5,     6,     7,   215,   216,   217,   218,   219,
-     220,   221,    11,    12,   222,    14,    65,    16,    17,     0,
-      66,    67,     0,    21,    22,    23,    24,     0,    26,    27,
-       0,     0,     0,   294,     0,    29,    30,    75,    32,    33,
-      34,     0,   301,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,     0,     0,     0,     0,     0,     0,    46,     0,
-       0,     0,    76,    77,     0,     0,     0,    71,     0,    78,
-       0,    79,    72,   115,     0,     1,    73,    74,     0,     2,
-       0,     3,     4,     5,     6,     7,     0,     0,     0,     0,
-       0,     0,     0,    11,   146,     0,    14,    65,    16,    17,
-       0,    66,    67,     0,    21,    22,    23,    24,     0,    26,
-      27,     0,   124,   125,   126,   127,   147,   148,    75,   149,
-     150,   151,   131,   132,   152,    36,    37,    38,    39,    40,
-      41,    42,    43,     0,     0,     0,     0,     0,     0,    46,
-     134,   135,   136,   137,   138,   139,   140,     0,    71,   153,
-      78,     0,    79,    72,     0,     0,     1,    73,    74,     0,
-       2,     0,     3,     4,     5,     6,     7,     0,     0,     0,
-       0,     0,     0,     0,    11,    12,     0,    14,    65,    16,
-      17,     0,    66,    67,     0,    21,    22,    23,    24,     0,
-      26,    27,     0,   124,   125,   126,   127,   147,   148,    75,
-     149,    33,    34,   131,   132,   152,    36,    37,    38,    39,
-      40,    41,    42,    43,     0,     0,     0,     0,     0,     0,
-      46,   134,   135,   136,   137,   138,   139,   140,     0,    71,
-     153,    78,     0,    79,    72,     0,     0,     1,    73,    74,
-       0,     2,     0,     3,     4,     5,     6,     7,     0,     0,
-       0,     0,     0,     0,     0,    11,    12,     0,    14,    65,
-      16,    17,     0,    66,    67,     0,    21,    22,    23,    24,
-       0,    26,    27,     0,     0,     0,     0,     0,    29,    30,
-      75,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,     0,     0,     0,     0,     0,
-       0,    46,     0,     0,     0,    76,    77,     0,     0,     0,
-      71,     0,    78,   143,    79,    72,     0,     0,     1,    73,
-      74,     0,     2,     0,     3,     4,     5,     6,     7,     0,
-       0,     0,     0,     0,     0,     0,    11,    12,     0,    14,
-      65,    16,    17,     0,    66,    67,     0,    21,    22,    23,
-      24,     0,    26,    27,     0,     0,     0,     0,     0,    29,
-      30,    75,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,     0,     0,     0,     0,
-       0,     0,    46,     0,     0,     0,    76,    77,     0,    71,
-       0,     0,     0,    78,    72,    79,     0,     1,    73,    74,
+      55,   105,   215,    97,    56,   262,   237,   160,    64,   161,
+      69,   128,   136,   166,    89,   184,    90,   106,   160,   238,
+     161,    96,   102,   167,   185,   160,    99,   161,   186,    69,
+     188,   286,   298,   136,    94,    95,   137,   295,   145,   146,
+     108,   295,   292,   136,   112,    69,   107,   321,   322,   110,
+      55,   213,   214,   263,    56,    65,   142,   143,   144,   145,
+     146,   147,   115,   116,   117,   295,   113,   143,   144,   145,
+     146,   295,   114,   181,   148,   183,   284,   128,   151,   177,
+     122,   188,   169,   172,   160,   173,   161,   234,   295,    69,
+     175,   187,   309,   176,   164,   295,   178,   209,   182,   295,
+     246,   245,   316,   261,   255,   295,   264,    69,   295,   320,
+     265,   266,   289,   290,   179,   326,   130,   131,   132,   133,
+     184,   329,   308,   136,   310,   312,   137,   138,   139,    55,
+     313,   324,   328,   191,   211,   332,   333,   109,   211,   211,
+     303,   253,     0,   244,   140,   141,   142,   143,   144,   145,
+     146,     0,    96,     0,   189,     0,    96,    96,     0,     0,
+       0,    72,     0,     0,     0,     0,    73,     0,     0,     1,
+      74,    75,     0,     2,     0,     3,     4,     5,     6,     7,
+       0,     0,     0,     9,     0,   252,     0,     0,    12,    13,
+      55,    15,    66,    17,    18,     0,    67,    68,     0,    22,
+      23,    24,    25,     0,    27,     0,     0,     0,     0,    55,
+       0,    88,     0,    76,    33,    34,    35,     0,     0,    93,
+      37,    38,    39,    40,    41,    42,    43,    44,   104,     0,
+       0,     0,     0,     0,    47,    55,     0,   288,    77,    78,
+       0,     0,     0,     0,     0,    79,    55,    80,     0,     0,
+       0,     0,     0,     0,     0,   111,     0,     0,    55,     0,
+     302,    55,    55,     0,     0,   297,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   118,
+       0,     0,     0,     0,     0,     0,    55,     0,    69,     0,
+       0,   150,    55,    55,     0,   165,    55,   307,     0,     0,
+     170,   171,     0,     0,     0,   315,    55,     0,     0,    55,
+       0,     0,     0,    55,     0,     0,    55,     0,     0,    55,
+      55,     0,   327,     0,     0,    55,    55,     0,     0,    55,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,     0,     0,     0,
+       0,     0,     0,   196,   197,   198,     0,     0,   201,     0,
+       0,     0,   130,   131,   132,   133,   134,   135,   236,   136,
+       0,     0,   137,   138,   139,     0,     0,     0,     0,     0,
+       0,   247,   248,     0,   249,     0,     0,     0,   254,     0,
+     140,   141,   142,   143,   144,   145,   146,     0,     0,   210,
+       0,   180,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,     0,   285,     0,     0,     0,     0,     0,
+       0,     0,     0,    72,     0,   291,     0,     0,    73,     0,
+       0,     1,   119,   120,     0,     2,     0,     3,     4,     5,
+       6,     7,     0,     0,     0,     9,     0,     0,     0,     0,
+      12,    13,     0,    15,    66,    17,    18,     0,    67,    68,
+       0,    22,    23,    24,    25,     0,    27,     0,     0,     0,
+     304,     0,     0,    30,    31,    76,    33,    34,    35,     0,
+     311,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+     318,     0,     0,     0,     0,     0,    47,     0,     0,     0,
+      77,    78,     0,     0,     0,    72,     0,    79,     0,    80,
+      73,   121,     0,     1,    74,    75,     0,     2,     0,     3,
+       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
+       0,     0,    12,   152,     0,    15,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,   130,   131,   132,   133,   153,   154,    76,   155,   156,
+     157,   137,   138,   158,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     0,     0,     0,     0,    47,   140,
+     141,   142,   143,   144,   145,   146,     0,    72,   159,    79,
+       0,    80,    73,     0,     0,     1,    74,    75,     0,     2,
+       0,     3,     4,     5,     6,     7,     0,     0,     0,     9,
+       0,     0,     0,     0,    12,    13,     0,    15,    66,   174,
+      18,     0,    67,    68,     0,    22,    23,    24,    25,     0,
+      27,     0,     0,   130,   131,   132,   133,   153,   154,    76,
+     155,    34,    35,   137,   138,   158,    37,    38,    39,    40,
+      41,    42,    43,    44,     0,     0,     0,     0,     0,     0,
+      47,   140,   141,   142,   143,   144,   145,   146,     0,    72,
+     159,    79,     0,    80,    73,     0,     0,     1,    74,    75,
        0,     2,     0,     3,     4,     5,     6,     7,     0,     0,
-       0,     0,     0,     0,     0,    11,    12,     0,    14,    65,
-      16,    17,     0,    66,    67,     0,    21,    22,    23,    24,
-       0,    26,    27,     0,     0,     0,     0,     0,    29,    30,
-      75,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,     0,     0,     0,     0,     0,
-       0,    46,     0,     0,     0,    76,    77,     0,    71,     0,
-       0,     0,    90,    72,    79,     0,     1,    73,    74,     0,
-       2,     0,     3,     4,     5,     6,     7,     0,     0,     0,
-       0,     0,     0,     0,    11,    12,     0,    14,    65,    16,
-      17,     0,    66,    67,     0,    21,    22,    23,    24,     0,
-      26,    27,     0,     0,     0,     0,     0,     0,     0,    75,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,     0,     0,     0,     0,     0,     0,
-      46,     0,     0,     0,    76,    77,     0,    71,     0,     0,
-       0,    78,    72,    79,     0,     1,    73,    74,     0,     2,
-       0,     3,     4,     5,     6,     7,     0,     0,     0,     0,
-       0,     0,     0,    11,    12,     0,    14,    65,    16,    17,
-       0,    66,    67,     0,    21,    22,    23,    24,     0,    26,
-      27,     0,     0,     0,     0,     0,     0,     0,    75,    32,
-      33,    34,     0,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,     0,     0,     0,     0,     0,     0,    46,
-       0,     0,     0,    76,    77,     0,    71,     0,     0,     0,
-      78,    72,    79,     0,     1,    73,    74,     0,     2,     0,
-       3,     4,     5,     6,     7,     0,     0,     0,     0,     0,
-       0,     0,    11,    12,     0,    14,    65,    16,    17,     0,
-      66,    67,     0,    21,    22,    23,    24,     0,    26,    27,
-       0,     0,     0,     0,     0,     0,     0,    75,     0,    33,
-      34,     0,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,     0,     0,     0,     0,     0,     0,    46,     0,
-       0,     0,     0,     0,     0,     0,     1,     0,     0,    78,
-       2,    79,     3,     4,     5,     6,     7,     0,     0,     8,
-       9,     0,     0,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     1,     0,     0,
-      46,     2,     0,     3,     4,     5,     6,     7,   277,    47,
-       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
-      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
-       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
-      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,   278,     1,
-       0,    46,     0,     2,     0,     3,     4,     5,     6,     7,
-     242,     0,     8,     9,     0,     0,    10,    11,    12,     0,
-      14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
-      23,    24,     0,    26,    27,    28,     0,     0,     0,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
+       0,     9,     0,     0,     0,     0,    12,    13,     0,    15,
+      66,    17,    18,     0,    67,    68,     0,    22,    23,    24,
+      25,     0,    27,     0,     0,   130,   131,   132,   133,   153,
+     154,    76,   155,    34,    35,   137,   138,   158,    37,    38,
+      39,    40,    41,    42,    43,    44,     0,     0,     0,     0,
+       0,     0,    47,   140,   141,   142,   143,   144,   145,   146,
+       0,    72,   159,    79,     0,    80,    73,     0,     0,     1,
+      74,    75,     0,     2,     0,     3,     4,     5,     6,     7,
+       0,     0,     0,     9,     0,     0,     0,     0,    12,    13,
+       0,    15,    66,   243,    18,     0,    67,    68,     0,    22,
+      23,    24,    25,     0,    27,     0,     0,   130,   131,   132,
+     133,   153,   154,    76,   155,    34,    35,   137,   138,   158,
       37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-       0,   285,     0,    46,     0,     0,     0,     1,     0,     0,
-     288,     2,   242,     3,     4,     5,     6,     7,     0,     0,
-       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
-      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
-       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
-      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,     1,     0,
-       0,    46,     2,     0,     3,     4,     5,     6,     7,     0,
-     242,     8,     9,     0,     0,    10,    11,    12,     0,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
-      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,   300,
-       1,     0,    46,     0,     2,     0,     3,     4,     5,     6,
-       7,   242,     0,     8,     9,     0,     0,    10,    11,    12,
-       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
-      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
+       0,     0,     0,     0,    47,   140,   141,   142,   143,   144,
+     145,   146,     0,    72,     0,    79,     0,    80,    73,     0,
+       0,     1,    74,    75,     0,     2,     0,     3,     4,     5,
+       6,     7,     0,     0,     0,     9,     0,     0,     0,     0,
+      12,    13,     0,    15,    66,    17,    18,     0,    67,    68,
+       0,    22,    23,    24,    25,     0,    27,     0,     0,     0,
+       0,     0,     0,    30,    31,    76,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+       0,     0,     0,     0,     0,     0,    47,     0,     0,     0,
+      77,    78,     0,     0,     0,    72,     0,    79,   149,    80,
+      73,     0,     0,     1,    74,    75,     0,     2,     0,     3,
+       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
+       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,    30,    31,    76,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,    77,    78,     0,    72,     0,     0,     0,    79,
+      73,    80,     0,     1,    74,    75,     0,     2,     0,     3,
+       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
+       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,    30,    31,    76,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,    77,    78,     0,    72,     0,     0,     0,    91,
+      73,    80,     0,     1,    74,    75,     0,     2,     0,     3,
+       4,     5,     6,     7,     0,     0,     0,   100,     0,     0,
+       0,     0,    12,    13,     0,   101,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,    30,    31,    76,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,    77,    78,     0,    72,     0,     0,     0,    91,
+      73,    80,     0,     1,    74,    75,     0,     2,     0,     3,
+       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
+       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,     0,     0,    76,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,    77,    78,     0,    72,     0,     0,     0,    79,
+      73,    80,     0,     1,    74,    75,     0,     2,     0,     3,
+       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
+       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,     0,     0,    76,     0,    34,
+      35,     0,     0,     0,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,     0,     0,     0,     0,     1,     0,     0,    79,
+       2,    80,     3,     4,     5,     6,     7,     0,     0,     8,
+       9,    10,     0,     0,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
+      26,    27,    28,    29,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,     0,     1,     0,
+       0,    47,     2,     0,     3,     4,     5,     6,     7,   293,
+      48,     8,     9,    10,     0,     0,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
+     294,     1,     0,    47,     0,     2,     0,     3,     4,     5,
+       6,     7,   256,     0,     8,     9,    10,     0,     0,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,     0,     0,     0,   301,     0,    47,     0,     0,     0,
+       1,     0,     0,   305,     2,   256,     3,     4,     5,     6,
+       7,     0,     0,     8,     9,    10,     0,     0,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+       0,     0,     1,     0,     0,    47,     2,     0,     3,     4,
+       5,     6,     7,     0,   256,     8,     9,    10,     0,     0,
+      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
+      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,     0,     0,   317,     1,     0,    47,     0,     2,
+       0,     3,     4,     5,     6,     7,   256,     0,     8,     9,
+      10,     0,     0,    11,    12,    13,     0,    15,    16,    17,
+      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
+      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,     0,     0,   323,     1,     0,
+      47,     0,     2,     0,     3,     4,     5,     6,     7,   256,
+       0,     8,     9,    10,     0,     0,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
+       1,   330,     0,    47,     2,     0,     3,     4,     5,     6,
+       7,     0,   256,     8,     9,    10,     0,     0,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+       0,     0,     1,   331,     0,    47,     2,     0,     3,     4,
+       5,     6,     7,     0,   256,     8,     9,    10,     0,     0,
+      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
+      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,     0,     0,     1,     0,     0,    47,     2,     0,
+       3,     4,     5,     6,     7,     0,   190,     8,     9,    10,
+       0,     0,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
+       2,     0,     3,     4,     5,     6,     7,     0,   256,     8,
+       9,    10,     0,     0,    11,    12,    13,     0,    15,    16,
+      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
+       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     0,     1,     0,
+       0,    47,     2,     0,     3,     4,     5,     6,     7,     0,
+     296,     8,     9,    10,     0,     0,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
+       1,   250,   251,    47,     2,     0,     3,     4,     5,     6,
+       7,     0,   306,     0,     9,     0,     0,     0,     0,    12,
+      13,     0,    15,    66,    17,    18,     0,    67,    68,     0,
+      22,    23,    24,    25,     0,    27,     0,     0,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
       36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,   306,     1,     0,    46,     0,     2,     0,     3,     4,
-       5,     6,     7,   242,     0,     8,     9,     0,     0,    10,
-      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
-       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,     1,   313,     0,    46,     2,     0,     3,
-       4,     5,     6,     7,     0,   242,     8,     9,     0,     0,
-      10,    11,    12,     0,    14,    15,    16,    17,    18,    19,
-      20,     0,    21,    22,    23,    24,     0,    26,    27,    28,
-       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     1,   314,     0,    46,     2,     0,
-       3,     4,     5,     6,     7,     0,   242,     8,     9,     0,
-       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
-      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
-      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     1,     0,     0,    46,     2,
-       0,     3,     4,     5,     6,     7,     0,   179,     8,     9,
-       0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
-      18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
-      27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
-      33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,     1,     0,     0,    46,
-       2,     0,     3,     4,     5,     6,     7,     0,   242,     8,
-       9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
-      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,     0,     0,     1,     0,     0,
-      46,     2,     0,     3,     4,     5,     6,     7,     0,   280,
-       8,     9,     0,     0,    10,    11,    12,     0,    14,    15,
-      16,    17,    18,    19,    20,     0,    21,    22,    23,    24,
-       0,    26,    27,    28,     0,     0,     0,     0,    29,    30,
-      31,    32,    33,    34,     0,     0,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     1,     0,     0,     0,
-       2,    46,     3,     4,     5,     6,     7,     0,     0,     0,
-     289,     0,     0,     0,    11,    12,     0,    14,    65,    16,
-      17,     0,    66,    67,     0,    21,    22,    23,    24,     0,
-      26,    27,     0,     0,     0,   283,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,   284,     0,     0,     0,     0,     0,
-      46,     0,   124,   125,   126,   127,   128,   129,     0,   130,
-       0,     0,   131,   132,   133,   124,   125,   126,   127,   128,
-     129,     0,   130,     0,     0,   131,   132,   133,     0,     0,
-     134,   135,   136,   137,   138,   139,   140,     0,     0,     0,
-       0,     0,     0,   134,   135,   136,   137,   138,   139,   140,
-       0,     0,   199,     0,   169,   124,   125,   126,   127,   128,
-     129,     0,   130,     0,     0,   131,   132,   133,   124,   125,
-     126,   127,   128,   129,     0,   130,     0,     0,   131,   132,
-     133,     0,     0,   134,   135,   136,   137,   138,   139,   140,
-       0,     0,     0,     0,   169,     0,   134,   135,   136,   137,
-     138,   139,   140,     0,   224,   124,   125,   126,   127,   128,
-     129,     0,   130,     0,     0,   131,   132,   133,   124,   125,
-     126,   127,   128,   129,     0,   130,     0,     0,   131,   132,
-     133,     0,     0,   134,   135,   136,   137,   138,   139,   140,
-       0,   273,     0,     0,     0,     0,   134,   135,   136,   137,
-     138,   139,   140,     0,   302,   124,   125,   126,   127,   128,
-     129,     0,   130,     0,     0,   131,   132,   133,   124,   125,
-     126,   127,   128,   129,     0,   130,     0,     0,   131,   132,
-     133,     0,     0,   134,   135,   136,   137,   138,   139,   140,
-       0,   308,     0,     0,     0,     0,   134,   135,   136,   137,
-     138,   139,   140
+       1,     0,     0,     0,     2,    47,     3,     4,     5,     6,
+       7,     0,     0,     0,     9,     0,     0,     0,     0,    12,
+      13,     0,    15,    66,    17,    18,     0,    67,    68,     0,
+      22,    23,    24,    25,     0,    27,     0,     0,     0,   299,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,   300,
+       0,     0,     0,     0,     0,    47,     0,   130,   131,   132,
+     133,   134,   135,   129,   136,     0,     0,   137,   138,   139,
+       0,     0,   130,   131,   132,   133,   134,   135,     0,   136,
+       0,     0,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,     0,     0,     0,     0,     0,     0,     0,     0,
+     140,   141,   142,   143,   144,   145,   146,   130,   131,   132,
+     133,   134,   135,     0,   136,     0,     0,   137,   138,   139,
+     216,   217,   218,   219,   220,   221,     0,   222,     0,     0,
+     223,   224,   225,     0,     0,   140,   141,   142,   143,   144,
+     145,   146,     0,     0,     0,     0,   180,     0,   226,   227,
+     228,   229,   230,   231,   232,     0,     0,   233,   130,   131,
+     132,   133,   134,   135,     0,   136,     0,     0,   137,   138,
+     139,   130,   131,   132,   133,   134,   135,     0,   136,     0,
+       0,   137,   138,   139,     0,     0,   140,   141,   142,   143,
+     144,   145,   146,     0,   235,     0,     0,     0,     0,   140,
+     141,   142,   143,   144,   145,   146,     0,   287,   130,   131,
+     132,   133,   134,   135,     0,   136,     0,     0,   137,   138,
+     139,   130,   131,   132,   133,   134,   135,     0,   136,     0,
+       0,   137,   138,   139,     0,     0,   140,   141,   142,   143,
+     144,   145,   146,     0,   319,     0,     0,     0,     0,   140,
+     141,   142,   143,   144,   145,   146,     0,   325,   130,   131,
+     132,   133,   134,   135,     0,   136,     0,     0,   137,   138,
+     139,   216,   217,   218,   219,   220,   221,     0,   222,     0,
+       0,   223,   224,   225,     0,     0,   140,   141,   142,   143,
+     144,   145,   146,     0,     0,     0,     0,     0,     0,   226,
+     227,   228,   229,   230,   231,   232
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   198,    20,    28,     0,   153,    57,    39,    42,     9,
-     244,    73,     0,    13,   248,    87,    92,    89,    52,    44,
-      20,    57,    88,    92,    86,    25,    92,   224,    28,   105,
-      81,    82,    83,    84,    86,   232,   105,    87,   272,    44,
-      45,    91,   276,    86,    44,    45,    39,    83,    84,    49,
-      87,   199,    92,    49,    86,    75,    76,    77,   292,    86,
-      87,   150,   151,    88,    88,   299,    92,    86,    91,   303,
-      86,    86,    86,    86,   222,   309,   101,    86,   312,    79,
-      91,    87,    86,   280,    50,    51,    52,    53,    88,    52,
-      89,    57,   289,    93,    60,    61,    62,    86,    92,   296,
-      24,   101,    86,    86,    86,   302,    86,    86,   108,    42,
-      86,   308,    78,    79,    80,    81,    82,    83,    84,    86,
-      49,    86,    86,   123,    86,    86,   275,   123,   146,    54,
-     174,    57,   150,   151,    60,   122,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,    -1,
-     150,   151,    -1,    -1,    80,    81,    82,    83,    84,    13,
+       0,    29,   159,    21,     0,   209,    74,    93,    40,    93,
+      10,    89,    58,    43,    14,    93,    40,    45,   104,    87,
+     104,    21,    28,    53,    88,   111,    26,   111,    92,    29,
+      88,   235,    90,    58,    45,    46,    61,   258,    84,    85,
+       0,   262,   246,    58,    87,    45,    46,    87,    88,    55,
+      50,   156,   157,   210,    50,    87,    81,    82,    83,    84,
+      85,    89,    76,    77,    78,   286,    87,    82,    83,    84,
+      85,   292,    88,    93,    87,    92,   233,    89,    87,   107,
+      80,    88,    87,    87,   170,    87,   170,    53,   309,    89,
+      87,    92,   296,    87,    94,   316,    87,    87,    93,   320,
+      87,    35,   306,    24,    90,   326,    87,   107,   329,   313,
+      87,    87,    87,    35,   114,   319,    51,    52,    53,    54,
+      93,   325,    87,    58,    43,    87,    61,    62,    63,   129,
+      87,    87,    87,   129,   152,    87,    87,    50,   156,   157,
+     289,   185,    -1,   170,    79,    80,    81,    82,    83,    84,
+      85,    -1,   152,    -1,   128,    -1,   156,   157,    -1,    -1,
+      -1,     5,    -1,    -1,    -1,    -1,    10,    -1,    -1,    13,
       14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    -1,   174,    -1,    -1,    31,    32,   179,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    -1,    -1,    -1,   198,    10,
-      54,    55,    56,    57,    58,    59,    -1,    18,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,   224,    -1,   226,    -1,    -1,    -1,
-      -1,    -1,   232,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    54,   244,    -1,    -1,   247,   248,   274,
-      -1,   247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,   272,    -1,   274,    -1,   276,   277,    -1,    90,
-     280,   277,    -1,    94,    -1,    -1,    -1,    -1,   288,   289,
-      -1,    -1,   292,    -1,    -1,    -1,   296,    -1,    -1,   299,
-      -1,    -1,   302,   303,    -1,   305,    -1,    -1,   308,   309,
-      -1,    -1,   312,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-      -1,    -1,    -1,    41,    -1,    -1,   147,   148,   149,    -1,
-      -1,   152,    50,    51,    52,    53,    54,    55,    -1,    57,
-      -1,   162,    60,    61,    62,    -1,    -1,    -1,    -1,   170,
-     171,    -1,   173,    -1,    -1,    -1,   177,    -1,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,    -1,   223,    -1,    -1,    -1,    -1,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,     5,    60,    61,    62,
-      -1,    10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,
-      19,    20,    21,    22,    23,    78,    79,    80,    81,    82,
-      83,    84,    31,    32,    87,    34,    35,    36,    37,    -1,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      -1,    -1,    -1,   284,    -1,    54,    55,    56,    57,    58,
-      59,    -1,   293,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
-      -1,    -1,    81,    82,    -1,    -1,    -1,     5,    -1,    88,
-      -1,    90,    10,    92,    -1,    13,    14,    15,    -1,    17,
-      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
+      -1,    -1,    -1,    27,    -1,   185,    -1,    -1,    32,    33,
+     190,    35,    36,    37,    38,    -1,    40,    41,    -1,    43,
+      44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,   209,
+      -1,    11,    -1,    57,    58,    59,    60,    -1,    -1,    19,
+      64,    65,    66,    67,    68,    69,    70,    71,    28,    -1,
+      -1,    -1,    -1,    -1,    78,   235,    -1,   237,    82,    83,
+      -1,    -1,    -1,    -1,    -1,    89,   246,    91,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,   258,    -1,
+     288,   261,   262,    -1,    -1,   261,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,   286,    -1,   288,    -1,
+      -1,    91,   292,   293,    -1,    95,   296,   293,    -1,    -1,
+     100,   101,    -1,    -1,    -1,   305,   306,    -1,    -1,   309,
+      -1,    -1,    -1,   313,    -1,    -1,   316,    -1,    -1,   319,
+     320,    -1,   322,    -1,    -1,   325,   326,    -1,    -1,   329,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,    -1,    -1,    -1,
+      -1,    -1,    -1,   153,   154,   155,    -1,    -1,   158,    -1,
+      -1,    -1,    51,    52,    53,    54,    55,    56,   168,    58,
+      -1,    -1,    61,    62,    63,    -1,    -1,    -1,    -1,    -1,
+      -1,   181,   182,    -1,   184,    -1,    -1,    -1,   188,    -1,
+      79,    80,    81,    82,    83,    84,    85,    -1,    -1,    88,
+      -1,    90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,    -1,   234,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     5,    -1,   245,    -1,    -1,    10,    -1,
+      -1,    13,    14,    15,    -1,    17,    -1,    19,    20,    21,
+      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,
+      32,    33,    -1,    35,    36,    37,    38,    -1,    40,    41,
+      -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,
+     290,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
+     300,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+     310,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
+      82,    83,    -1,    -1,    -1,     5,    -1,    89,    -1,    91,
+      10,    93,    -1,    13,    14,    15,    -1,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
+      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
+      -1,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    85,    -1,     5,    88,    89,
+      -1,    91,    10,    -1,    -1,    13,    14,    15,    -1,    17,
+      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
+      -1,    -1,    -1,    -1,    32,    33,    -1,    35,    36,    37,
+      38,    -1,    40,    41,    -1,    43,    44,    45,    46,    -1,
+      48,    -1,    -1,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    79,    80,    81,    82,    83,    84,    -1,     5,    87,
-      88,    -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,
-      17,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    -1,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    78,    79,    80,    81,    82,    83,    84,    -1,     5,
-      87,    88,    -1,    90,    10,    -1,    -1,    13,    14,    15,
-      -1,    17,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,
-       5,    -1,    88,    89,    90,    10,    -1,    -1,    13,    14,
-      15,    -1,    17,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,
-      -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,    15,
+      68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+      78,    79,    80,    81,    82,    83,    84,    85,    -1,     5,
+      88,    89,    -1,    91,    10,    -1,    -1,    13,    14,    15,
       -1,    17,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,
-      -1,    -1,    88,    10,    90,    -1,    13,    14,    15,    -1,
-      17,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,
-      -1,    88,    10,    90,    -1,    13,    14,    15,    -1,    17,
-      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
-      58,    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,
-      88,    10,    90,    -1,    13,    14,    15,    -1,    17,    -1,
-      19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,    58,
-      59,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    88,
-      17,    90,    19,    20,    21,    22,    23,    -1,    -1,    26,
-      27,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    46,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    13,    -1,    -1,
-      77,    17,    -1,    19,    20,    21,    22,    23,    24,    86,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    74,    13,
-      -1,    77,    -1,    17,    -1,    19,    20,    21,    22,    23,
-      86,    -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      -1,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,    35,
+      36,    37,    38,    -1,    40,    41,    -1,    43,    44,    45,
+      46,    -1,    48,    -1,    -1,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
+      -1,     5,    88,    89,    -1,    91,    10,    -1,    -1,    13,
+      14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,    32,    33,
+      -1,    35,    36,    37,    38,    -1,    40,    41,    -1,    43,
+      44,    45,    46,    -1,    48,    -1,    -1,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      -1,    75,    -1,    77,    -1,    -1,    -1,    13,    -1,    -1,
-      16,    17,    86,    19,    20,    21,    22,    23,    -1,    -1,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
-      -1,    77,    17,    -1,    19,    20,    21,    22,    23,    -1,
-      86,    26,    27,    -1,    -1,    30,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
-      13,    -1,    77,    -1,    17,    -1,    19,    20,    21,    22,
-      23,    86,    -1,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84,    85,    -1,     5,    -1,    89,    -1,    91,    10,    -1,
+      -1,    13,    14,    15,    -1,    17,    -1,    19,    20,    21,
+      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,
+      32,    33,    -1,    35,    36,    37,    38,    -1,    40,    41,
+      -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,
+      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
+      82,    83,    -1,    -1,    -1,     5,    -1,    89,    90,    91,
+      10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
+      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
+      -1,    -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,
+      10,    91,    -1,    13,    14,    15,    -1,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
+      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
+      -1,    -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,
+      10,    91,    -1,    13,    14,    15,    -1,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
+      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
+      -1,    -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,
+      10,    91,    -1,    13,    14,    15,    -1,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
+      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
+      -1,    -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,
+      10,    91,    -1,    13,    14,    15,    -1,    17,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
+      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    59,
+      60,    -1,    -1,    -1,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    89,
+      17,    91,    19,    20,    21,    22,    23,    -1,    -1,    26,
+      27,    28,    -1,    -1,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    -1,    13,    -1,
+      -1,    78,    17,    -1,    19,    20,    21,    22,    23,    24,
+      87,    26,    27,    28,    -1,    -1,    31,    32,    33,    -1,
+      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
+      45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
+      75,    13,    -1,    78,    -1,    17,    -1,    19,    20,    21,
+      22,    23,    87,    -1,    26,    27,    28,    -1,    -1,    31,
+      32,    33,    -1,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    -1,    48,    49,    50,    -1,
+      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    76,    -1,    78,    -1,    -1,    -1,
+      13,    -1,    -1,    16,    17,    87,    19,    20,    21,    22,
+      23,    -1,    -1,    26,    27,    28,    -1,    -1,    31,    32,
+      33,    -1,    35,    36,    37,    38,    39,    40,    41,    -1,
+      43,    44,    45,    46,    -1,    48,    49,    50,    -1,    -1,
+      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      -1,    -1,    13,    -1,    -1,    78,    17,    -1,    19,    20,
+      21,    22,    23,    -1,    87,    26,    27,    28,    -1,    -1,
+      31,    32,    33,    -1,    35,    36,    37,    38,    39,    40,
+      41,    -1,    43,    44,    45,    46,    -1,    48,    49,    50,
+      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    -1,    -1,    75,    13,    -1,    78,    -1,    17,
+      -1,    19,    20,    21,    22,    23,    87,    -1,    26,    27,
+      28,    -1,    -1,    31,    32,    33,    -1,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    -1,
+      48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    -1,    -1,    75,    13,    -1,
+      78,    -1,    17,    -1,    19,    20,    21,    22,    23,    87,
+      -1,    26,    27,    28,    -1,    -1,    31,    32,    33,    -1,
+      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
+      45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
+      13,    76,    -1,    78,    17,    -1,    19,    20,    21,    22,
+      23,    -1,    87,    26,    27,    28,    -1,    -1,    31,    32,
+      33,    -1,    35,    36,    37,    38,    39,    40,    41,    -1,
+      43,    44,    45,    46,    -1,    48,    49,    50,    -1,    -1,
+      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      -1,    -1,    13,    76,    -1,    78,    17,    -1,    19,    20,
+      21,    22,    23,    -1,    87,    26,    27,    28,    -1,    -1,
+      31,    32,    33,    -1,    35,    36,    37,    38,    39,    40,
+      41,    -1,    43,    44,    45,    46,    -1,    48,    49,    50,
+      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    -1,    -1,    13,    -1,    -1,    78,    17,    -1,
+      19,    20,    21,    22,    23,    -1,    87,    26,    27,    28,
+      -1,    -1,    31,    32,    33,    -1,    35,    36,    37,    38,
+      39,    40,    41,    -1,    43,    44,    45,    46,    -1,    48,
+      49,    50,    -1,    -1,    -1,    -1,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    -1,    -1,    13,    -1,    -1,    78,
+      17,    -1,    19,    20,    21,    22,    23,    -1,    87,    26,
+      27,    28,    -1,    -1,    31,    32,    33,    -1,    35,    36,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      -1,    48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    -1,    -1,    13,    -1,
+      -1,    78,    17,    -1,    19,    20,    21,    22,    23,    -1,
+      87,    26,    27,    28,    -1,    -1,    31,    32,    33,    -1,
+      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
+      45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
+      13,    14,    15,    78,    17,    -1,    19,    20,    21,    22,
+      23,    -1,    87,    -1,    27,    -1,    -1,    -1,    -1,    32,
+      33,    -1,    35,    36,    37,    38,    -1,    40,    41,    -1,
+      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
+      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    74,    13,    -1,    77,    -1,    17,    -1,    19,    20,
-      21,    22,    23,    86,    -1,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    13,    75,    -1,    77,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    86,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    13,    75,    -1,    77,    17,    -1,
-      19,    20,    21,    22,    23,    -1,    86,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    17,
-      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
-      17,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
-      77,    17,    -1,    19,    20,    21,    22,    23,    -1,    86,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    13,    -1,    -1,    -1,
-      17,    77,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      86,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    -1,    -1,    -1,    23,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    42,    -1,    -1,    -1,    -1,    -1,
-      77,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
-      -1,    -1,    60,    61,    62,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    87,    -1,    89,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    89,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84
+      13,    -1,    -1,    -1,    17,    78,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,    32,
+      33,    -1,    35,    36,    37,    38,    -1,    40,    41,    -1,
+      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    23,
+      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    43,
+      -1,    -1,    -1,    -1,    -1,    78,    -1,    51,    52,    53,
+      54,    55,    56,    42,    58,    -1,    -1,    61,    62,    63,
+      -1,    -1,    51,    52,    53,    54,    55,    56,    -1,    58,
+      -1,    -1,    61,    62,    63,    79,    80,    81,    82,    83,
+      84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    85,    51,    52,    53,
+      54,    55,    56,    -1,    58,    -1,    -1,    61,    62,    63,
+      51,    52,    53,    54,    55,    56,    -1,    58,    -1,    -1,
+      61,    62,    63,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    85,    -1,    -1,    -1,    -1,    90,    -1,    79,    80,
+      81,    82,    83,    84,    85,    -1,    -1,    88,    51,    52,
+      53,    54,    55,    56,    -1,    58,    -1,    -1,    61,    62,
+      63,    51,    52,    53,    54,    55,    56,    -1,    58,    -1,
+      -1,    61,    62,    63,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    85,    -1,    87,    -1,    -1,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    85,    -1,    87,    51,    52,
+      53,    54,    55,    56,    -1,    58,    -1,    -1,    61,    62,
+      63,    51,    52,    53,    54,    55,    56,    -1,    58,    -1,
+      -1,    61,    62,    63,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    85,    -1,    87,    -1,    -1,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    85,    -1,    87,    51,    52,
+      53,    54,    55,    56,    -1,    58,    -1,    -1,    61,    62,
+      63,    51,    52,    53,    54,    55,    56,    -1,    58,    -1,
+      -1,    61,    62,    63,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    85
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1310,60 +1379,63 @@ static const yytype_int16 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,    13,    17,    19,    20,    21,    22,    23,    26,    27,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    42,    43,    44,    45,    46,    47,    48,    49,    54,
-      55,    56,    57,    58,    59,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    77,    86,    94,    95,
-      96,    97,    98,   103,   105,   108,   109,   110,   112,   114,
-     115,   116,   117,    39,    86,    35,    39,    40,   105,   106,
-     107,     5,    10,    14,    15,    56,    81,    82,    88,    90,
-     105,   121,   122,   125,   128,   129,   130,   132,   105,    39,
-      88,   111,   132,    44,    45,   105,   122,   124,   105,   106,
-     106,   105,     0,    96,   111,   132,    86,    86,    87,   130,
-     130,   130,   132,    14,    15,    92,   105,   126,   127,   132,
-     134,   135,    88,    41,    50,    51,    52,    53,    54,    55,
-      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
-      84,   106,    86,    89,   132,    86,    32,    54,    55,    57,
-      58,    59,    62,    87,   121,   128,   131,   133,   105,   132,
-      42,    52,   113,    86,    86,    86,   106,    86,   105,    89,
-      92,    92,    91,    92,    87,    91,    91,    87,   134,    86,
-     108,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,    86,    87,
-     122,   123,   123,   123,   135,    50,    51,    52,    53,    54,
-      55,    57,    60,    61,    62,    78,    79,    80,    81,    82,
-      83,    84,    87,    52,    86,   132,    73,    86,    99,   100,
-     101,   102,    86,   132,   132,   132,    14,    15,   105,   127,
-     132,    89,    86,   108,   118,   119,   120,    24,   118,   135,
-      86,    86,    86,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     135,   132,   118,    86,   105,    86,   118,    24,    74,   120,
-      86,   108,    89,    23,    42,    75,   106,   102,    16,    86,
-     108,    86,   118,    42,   132,    86,    86,   104,   105,   118,
-      74,   132,    86,   118,    86,    87,    74,    86,    86,   118,
-     105,    86,   118,    75,    75,    86,    86
+      28,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    43,    44,    45,    46,    47,    48,    49,    50,
+      55,    56,    57,    58,    59,    60,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    78,    87,    95,
+      96,    97,    98,    99,   104,   106,   109,   110,   111,   114,
+     116,   117,   118,   119,    40,    87,    36,    40,    41,   106,
+     107,   108,     5,    10,    14,    15,    57,    82,    83,    89,
+      91,   106,   123,   124,   127,   130,   131,   132,   134,   106,
+      40,    89,   112,   134,    45,    46,   106,   124,   126,   106,
+      27,    35,   112,   113,   134,   107,   107,   106,     0,    97,
+     112,   134,    87,    87,    88,   132,   132,   132,   134,    14,
+      15,    93,   106,   128,   129,   134,   136,   137,    89,    42,
+      51,    52,    53,    54,    55,    56,    58,    61,    62,    63,
+      79,    80,    81,    82,    83,    84,    85,   107,    87,    90,
+     134,    87,    33,    55,    56,    58,    59,    60,    63,    88,
+     123,   130,   133,   135,   106,   134,    43,    53,   115,    87,
+     134,   134,    87,    87,    37,    87,    87,   107,    87,   106,
+      90,    93,    93,    92,    93,    88,    92,    92,    88,   136,
+      87,   109,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,    87,
+      88,   124,   125,   125,   125,   137,    51,    52,    53,    54,
+      55,    56,    58,    61,    62,    63,    79,    80,    81,    82,
+      83,    84,    85,    88,    53,    87,   134,    74,    87,   100,
+     101,   102,   103,    37,   135,    35,    87,   134,   134,   134,
+      14,    15,   106,   129,   134,    90,    87,   109,   120,   121,
+     122,    24,   120,   137,    87,    87,    87,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   137,   134,   120,    87,   106,    87,
+      35,   134,   120,    24,    75,   122,    87,   109,    90,    23,
+      43,    76,   107,   103,   134,    16,    87,   109,    87,   120,
+      43,   134,    87,    87,   105,   106,   120,    75,   134,    87,
+     120,    87,    88,    75,    87,    87,   120,   106,    87,   120,
+      76,    76,    87,    87
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    93,    94,    95,    95,    96,    96,    96,    96,    96,
-      97,    98,    99,   100,   100,   101,   101,   102,   102,   103,
-     103,   104,   104,   104,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   106,   106,   107,   107,   108,   108,   108,   108,   109,
-     109,   109,   110,   110,   110,   110,   110,   111,   111,   111,
-     111,   111,   111,   111,   112,   112,   112,   112,   113,   113,
-     114,   114,   114,   115,   115,   116,   116,   116,   116,   117,
-     117,   117,   118,   118,   119,   119,   120,   120,   121,   121,
-     121,   121,   121,   121,   121,   121,   122,   123,   124,   125,
-     125,   125,   126,   126,   127,   127,   127,   128,   129,   129,
-     130,   130,   130,   131,   131,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   134,   134,   135,   135
+       0,    94,    95,    96,    96,    97,    97,    97,    97,    97,
+      98,    99,   100,   101,   101,   102,   102,   103,   103,   104,
+     104,   105,   105,   105,   106,   106,   106,   106,   106,   106,
+     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
+     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
+     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
+     106,   107,   107,   108,   108,   109,   109,   109,   109,   110,
+     110,   110,   111,   111,   111,   111,   111,   111,   111,   112,
+     112,   112,   112,   112,   112,   112,   113,   113,   113,   113,
+     113,   114,   114,   114,   114,   115,   115,   116,   116,   116,
+     117,   117,   118,   118,   118,   118,   119,   119,   119,   120,
+     120,   121,   121,   122,   122,   123,   123,   123,   123,   123,
+     123,   123,   123,   124,   125,   126,   127,   127,   127,   128,
+     128,   129,   129,   129,   130,   131,   131,   132,   132,   132,
+     133,   133,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   135,   135,   135,   135,   135,   135,   135,   136,   136,
+     137,   137
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1376,17 +1448,18 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     0,     1,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     3,     2,     0,     1,     3,
-       2,     4,     2,     5,     5,     5,     5,     5,     1,     1,
-       3,     3,     3,     4,     7,     6,     9,     7,    10,     7,
-      11,    12,     0,     1,     1,     2,     1,     1,     1,     1,
-       1,     1,     2,     4,     1,     1,     1,     1,     1,     3,
-       3,     3,     1,     3,     3,     3,     3,     3,     2,     2,
-       1,     1,     1,     1,     1,     1,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     1,     3,     3,     3,     3,     3,     3,
+       1,     1,     3,     3,     3,     3,     3,     3,     2,     0,
+       1,     3,     2,     4,     2,     5,     2,     2,     5,     4,
+       3,     5,     5,     5,     5,     1,     1,     3,     3,     3,
+       4,     7,     6,     9,     7,    10,     7,    11,    12,     0,
+       1,     1,     2,     1,     1,     1,     1,     1,     1,     2,
+       4,     1,     1,     1,     1,     1,     3,     3,     3,     1,
+       3,     3,     3,     3,     3,     2,     2,     1,     1,     1,
+       1,     1,     1,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     0,     1,     1,     3
+       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     0,     1,
+       1,     3
 };
 
 
@@ -1660,49 +1733,49 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1664 "engines/director/lingo/lingo-gr.cpp"
+#line 1737 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1670 "engines/director/lingo/lingo-gr.cpp"
+#line 1743 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1676 "engines/director/lingo/lingo-gr.cpp"
+#line 1749 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1682 "engines/director/lingo/lingo-gr.cpp"
+#line 1755 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1688 "engines/director/lingo/lingo-gr.cpp"
+#line 1761 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1694 "engines/director/lingo/lingo-gr.cpp"
+#line 1767 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1700 "engines/director/lingo/lingo-gr.cpp"
+#line 1773 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1706 "engines/director/lingo/lingo-gr.cpp"
+#line 1779 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -1970,7 +2043,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 196 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 1974 "engines/director/lingo/lingo-gr.cpp"
+#line 2047 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -1981,7 +2054,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 1985 "engines/director/lingo/lingo-gr.cpp"
+#line 2058 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -1991,37 +2064,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 1995 "engines/director/lingo/lingo-gr.cpp"
+#line 2068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 211 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2001 "engines/director/lingo/lingo-gr.cpp"
+#line 2074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2007 "engines/director/lingo/lingo-gr.cpp"
+#line 2080 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2013 "engines/director/lingo/lingo-gr.cpp"
+#line 2086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 250 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2019 "engines/director/lingo/lingo-gr.cpp"
+#line 2092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 252 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2025 "engines/director/lingo/lingo-gr.cpp"
+#line 2098 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2032,7 +2105,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2036 "engines/director/lingo/lingo-gr.cpp"
+#line 2109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2042,13 +2115,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2046 "engines/director/lingo/lingo-gr.cpp"
+#line 2119 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 269 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2052 "engines/director/lingo/lingo-gr.cpp"
+#line 2125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2057,852 +2130,918 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2061 "engines/director/lingo/lingo-gr.cpp"
+#line 2134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 279 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2068 "engines/director/lingo/lingo-gr.cpp"
+#line 2141 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2074 "engines/director/lingo/lingo-gr.cpp"
+#line 2147 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2080 "engines/director/lingo/lingo-gr.cpp"
+#line 2153 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
 #line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2086 "engines/director/lingo/lingo-gr.cpp"
+#line 2159 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2092 "engines/director/lingo/lingo-gr.cpp"
+#line 2165 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2098 "engines/director/lingo/lingo-gr.cpp"
+#line 2171 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2104 "engines/director/lingo/lingo-gr.cpp"
+#line 2177 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2110 "engines/director/lingo/lingo-gr.cpp"
+#line 2183 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2116 "engines/director/lingo/lingo-gr.cpp"
+#line 2189 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tFIELD  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2122 "engines/director/lingo/lingo-gr.cpp"
+#line 2195 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 32: /* ID: tIN  */
-#line 304 "engines/director/lingo/lingo-gr.y"
+  case 32: /* ID: tFRAME  */
+#line 302 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("frame"); }
+#line 2201 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 33: /* ID: tIN  */
+#line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2128 "engines/director/lingo/lingo-gr.cpp"
+#line 2207 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 33: /* ID: tINTERSECTS  */
-#line 306 "engines/director/lingo/lingo-gr.y"
+  case 34: /* ID: tINTERSECTS  */
+#line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2134 "engines/director/lingo/lingo-gr.cpp"
+#line 2213 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 34: /* ID: tINTO  */
-#line 307 "engines/director/lingo/lingo-gr.y"
+  case 35: /* ID: tINTO  */
+#line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2140 "engines/director/lingo/lingo-gr.cpp"
+#line 2219 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 35: /* ID: tITEM  */
-#line 308 "engines/director/lingo/lingo-gr.y"
+  case 36: /* ID: tITEM  */
+#line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2146 "engines/director/lingo/lingo-gr.cpp"
+#line 2225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 36: /* ID: tLINE  */
-#line 309 "engines/director/lingo/lingo-gr.y"
+  case 37: /* ID: tLINE  */
+#line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2152 "engines/director/lingo/lingo-gr.cpp"
+#line 2231 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 37: /* ID: tMOD  */
-#line 312 "engines/director/lingo/lingo-gr.y"
+  case 38: /* ID: tMOD  */
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2158 "engines/director/lingo/lingo-gr.cpp"
+#line 2237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 38: /* ID: tMOVIE  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+  case 39: /* ID: tMOVIE  */
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2164 "engines/director/lingo/lingo-gr.cpp"
+#line 2243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 39: /* ID: tNEXT  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+  case 40: /* ID: tNEXT  */
+#line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2170 "engines/director/lingo/lingo-gr.cpp"
+#line 2249 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 40: /* ID: tNOT  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+  case 41: /* ID: tNOT  */
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2176 "engines/director/lingo/lingo-gr.cpp"
+#line 2255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 41: /* ID: tOF  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+  case 42: /* ID: tOF  */
+#line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2182 "engines/director/lingo/lingo-gr.cpp"
+#line 2261 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 42: /* ID: tOPEN  */
-#line 318 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("open"); }
-#line 2188 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 43: /* ID: tOR  */
+  case 43: /* ID: tOPEN  */
 #line 319 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("or"); }
-#line 2194 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.s) = new Common::String("open"); }
+#line 2267 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 44: /* ID: tPLAY  */
+  case 44: /* ID: tOR  */
 #line 320 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("play"); }
-#line 2200 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.s) = new Common::String("or"); }
+#line 2273 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPLAYACCEL  */
-#line 321 "engines/director/lingo/lingo-gr.y"
+#line 322 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("playAccel"); }
-#line 2206 "engines/director/lingo/lingo-gr.cpp"
+#line 2279 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tPREVIOUS  */
-#line 322 "engines/director/lingo/lingo-gr.y"
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2212 "engines/director/lingo/lingo-gr.cpp"
+#line 2285 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tREPEAT  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2218 "engines/director/lingo/lingo-gr.cpp"
+#line 2291 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tSCRIPT  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2224 "engines/director/lingo/lingo-gr.cpp"
+#line 2297 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSET  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2230 "engines/director/lingo/lingo-gr.cpp"
+#line 2303 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tSTARTS  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2236 "engines/director/lingo/lingo-gr.cpp"
+#line 2309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tTELL  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2242 "engines/director/lingo/lingo-gr.cpp"
+#line 2315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tTO  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2248 "engines/director/lingo/lingo-gr.cpp"
+#line 2321 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tASSERTERROR  */
-#line 332 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2254 "engines/director/lingo/lingo-gr.cpp"
+#line 2327 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tSPRITE  */
-#line 333 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2260 "engines/director/lingo/lingo-gr.cpp"
+#line 2333 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tWHEN  */
-#line 334 "engines/director/lingo/lingo-gr.y"
+#line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2266 "engines/director/lingo/lingo-gr.cpp"
+#line 2339 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tWHILE  */
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2272 "engines/director/lingo/lingo-gr.cpp"
+#line 2345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWINDOW  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2278 "engines/director/lingo/lingo-gr.cpp"
+#line 2351 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWITH  */
-#line 337 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2284 "engines/director/lingo/lingo-gr.cpp"
+#line 2357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWITHIN  */
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2290 "engines/director/lingo/lingo-gr.cpp"
+#line 2363 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* ID: tWORD  */
-#line 339 "engines/director/lingo/lingo-gr.y"
+#line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2296 "engines/director/lingo/lingo-gr.cpp"
+#line 2369 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* idlist: %empty  */
-#line 342 "engines/director/lingo/lingo-gr.y"
+#line 343 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2302 "engines/director/lingo/lingo-gr.cpp"
+#line 2375 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* nonemptyidlist: ID  */
-#line 346 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2311 "engines/director/lingo/lingo-gr.cpp"
+#line 2384 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 350 "engines/director/lingo/lingo-gr.y"
+#line 351 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2319 "engines/director/lingo/lingo-gr.cpp"
+#line 2392 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* proc: ID cmdargs '\n'  */
-#line 371 "engines/director/lingo/lingo-gr.y"
+#line 372 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2325 "engines/director/lingo/lingo-gr.cpp"
+#line 2398 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* proc: tPUT cmdargs '\n'  */
-#line 372 "engines/director/lingo/lingo-gr.y"
+#line 373 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2331 "engines/director/lingo/lingo-gr.cpp"
+#line 2404 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* proc: tNEXT tREPEAT '\n'  */
-#line 373 "engines/director/lingo/lingo-gr.y"
+  case 74: /* proc: tPLAY cmdargs '\n'  */
+#line 374 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
+#line 2410 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 75: /* proc: tPLAY playargs '\n'  */
+#line 375 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
+#line 2416 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 76: /* proc: tNEXT tREPEAT '\n'  */
+#line 376 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2337 "engines/director/lingo/lingo-gr.cpp"
+#line 2422 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tEXIT tREPEAT '\n'  */
-#line 374 "engines/director/lingo/lingo-gr.y"
+  case 77: /* proc: tEXIT tREPEAT '\n'  */
+#line 377 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2343 "engines/director/lingo/lingo-gr.cpp"
+#line 2428 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tEXIT '\n'  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+  case 78: /* proc: tEXIT '\n'  */
+#line 378 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2349 "engines/director/lingo/lingo-gr.cpp"
+#line 2434 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* cmdargs: %empty  */
-#line 378 "engines/director/lingo/lingo-gr.y"
+  case 79: /* cmdargs: %empty  */
+#line 381 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2357 "engines/director/lingo/lingo-gr.cpp"
+#line 2442 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* cmdargs: expr  */
-#line 381 "engines/director/lingo/lingo-gr.y"
+  case 80: /* cmdargs: expr  */
+#line 384 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2367 "engines/director/lingo/lingo-gr.cpp"
+#line 2452 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 386 "engines/director/lingo/lingo-gr.y"
+  case 81: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 389 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2376 "engines/director/lingo/lingo-gr.cpp"
+#line 2461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* cmdargs: expr expr_nounarymath  */
-#line 390 "engines/director/lingo/lingo-gr.y"
+  case 82: /* cmdargs: expr expr_nounarymath  */
+#line 393 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2387 "engines/director/lingo/lingo-gr.cpp"
+#line 2472 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 396 "engines/director/lingo/lingo-gr.y"
+  case 83: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 399 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2397 "engines/director/lingo/lingo-gr.cpp"
+#line 2482 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* cmdargs: '(' ')'  */
-#line 401 "engines/director/lingo/lingo-gr.y"
+  case 84: /* cmdargs: '(' ')'  */
+#line 404 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2405 "engines/director/lingo/lingo-gr.cpp"
+#line 2490 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 85: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 407 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2414 "engines/director/lingo/lingo-gr.cpp"
+#line 2499 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 86: /* playargs: tFRAME expr  */
+#line 413 "engines/director/lingo/lingo-gr.y"
+                                                                        {
+		// This matches `play frame arg`
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[0].node));
+		(yyval.nodelist) = args; }
+#line 2509 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 87: /* playargs: tMOVIE expr  */
+#line 418 "engines/director/lingo/lingo-gr.y"
+                                                                                {
+		// This matches `play movie arg`
+		NodeList *args = new NodeList;
+		args->push_back(new IntNode(1));
+		args->push_back((yyvsp[0].node));
+		(yyval.nodelist) = args; }
+#line 2520 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 88: /* playargs: tFRAME expr tOF tMOVIE expr  */
+#line 424 "engines/director/lingo/lingo-gr.y"
+                                                                {
+		// This matches `play frame arg of movie arg`
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[-3].node));
+		args->push_back((yyvsp[0].node));
+		(yyval.nodelist) = args; }
+#line 2531 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 89: /* playargs: expr tOF tMOVIE expr  */
+#line 430 "engines/director/lingo/lingo-gr.y"
+                                                                {
+		// This matches `play arg of movie arg` (weird but valid)
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[-3].node));
+		args->push_back((yyvsp[0].node));
+		(yyval.nodelist) = args; }
+#line 2542 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 410 "engines/director/lingo/lingo-gr.y"
+  case 90: /* playargs: tFRAME expr expr_nounarymath  */
+#line 436 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		// This matches `play frame arg arg` (also weird but valid)
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[-1].node));
+		args->push_back((yyvsp[0].node));
+		(yyval.nodelist) = args; }
+#line 2553 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 91: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 444 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2420 "engines/director/lingo/lingo-gr.cpp"
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 411 "engines/director/lingo/lingo-gr.y"
+  case 92: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 445 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2426 "engines/director/lingo/lingo-gr.cpp"
+#line 2565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 93: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 446 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2432 "engines/director/lingo/lingo-gr.cpp"
+#line 2571 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* asgn: tSET varorthe to expr '\n'  */
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 94: /* asgn: tSET varorthe to expr '\n'  */
+#line 447 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2438 "engines/director/lingo/lingo-gr.cpp"
+#line 2577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* definevars: tGLOBAL idlist '\n'  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+  case 97: /* definevars: tGLOBAL idlist '\n'  */
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2444 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* definevars: tPROPERTY idlist '\n'  */
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 98: /* definevars: tPROPERTY idlist '\n'  */
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2450 "engines/director/lingo/lingo-gr.cpp"
+#line 2589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* definevars: tINSTANCE idlist '\n'  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+  case 99: /* definevars: tINSTANCE idlist '\n'  */
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2456 "engines/director/lingo/lingo-gr.cpp"
+#line 2595 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* ifstmt: tIF expr tTHEN stmt  */
-#line 423 "engines/director/lingo/lingo-gr.y"
+  case 100: /* ifstmt: tIF expr tTHEN stmt  */
+#line 457 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2465 "engines/director/lingo/lingo-gr.cpp"
+#line 2604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 101: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 461 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2472 "engines/director/lingo/lingo-gr.cpp"
+#line 2611 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 431 "engines/director/lingo/lingo-gr.y"
+  case 102: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 465 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2483 "engines/director/lingo/lingo-gr.cpp"
+#line 2622 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 437 "engines/director/lingo/lingo-gr.y"
+  case 103: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 471 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2492 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 441 "engines/director/lingo/lingo-gr.y"
+  case 104: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 475 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2501 "engines/director/lingo/lingo-gr.cpp"
+#line 2640 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 445 "engines/director/lingo/lingo-gr.y"
+  case 105: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 479 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2508 "engines/director/lingo/lingo-gr.cpp"
+#line 2647 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 106: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2515 "engines/director/lingo/lingo-gr.cpp"
+#line 2654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 107: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 485 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2522 "engines/director/lingo/lingo-gr.cpp"
+#line 2661 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 108: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2529 "engines/director/lingo/lingo-gr.cpp"
+#line 2668 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* stmtlist: %empty  */
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 109: /* stmtlist: %empty  */
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2535 "engines/director/lingo/lingo-gr.cpp"
+#line 2674 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* nonemptystmtlist: stmtlistline  */
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 111: /* nonemptystmtlist: stmtlistline  */
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2546 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 468 "engines/director/lingo/lingo-gr.y"
+  case 112: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 502 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2556 "engines/director/lingo/lingo-gr.cpp"
+#line 2695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* stmtlistline: '\n'  */
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 113: /* stmtlistline: '\n'  */
+#line 509 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2562 "engines/director/lingo/lingo-gr.cpp"
+#line 2701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 482 "engines/director/lingo/lingo-gr.y"
+  case 115: /* simpleexpr_noparens_nounarymath: tINT  */
+#line 516 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2568 "engines/director/lingo/lingo-gr.cpp"
+#line 2707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 483 "engines/director/lingo/lingo-gr.y"
+  case 116: /* simpleexpr_noparens_nounarymath: tFLOAT  */
+#line 517 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2574 "engines/director/lingo/lingo-gr.cpp"
+#line 2713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 117: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
+#line 518 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2580 "engines/director/lingo/lingo-gr.cpp"
+#line 2719 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 118: /* simpleexpr_noparens_nounarymath: tSTRING  */
+#line 519 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2586 "engines/director/lingo/lingo-gr.cpp"
+#line 2725 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+  case 119: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2592 "engines/director/lingo/lingo-gr.cpp"
+#line 2731 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 120: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2598 "engines/director/lingo/lingo-gr.cpp"
+#line 2737 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* var: ID  */
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 123: /* var: ID  */
+#line 526 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* list: '[' exprlist ']'  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 126: /* list: '[' exprlist ']'  */
+#line 536 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2610 "engines/director/lingo/lingo-gr.cpp"
+#line 2749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* list: '[' ':' ']'  */
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 127: /* list: '[' ':' ']'  */
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2616 "engines/director/lingo/lingo-gr.cpp"
+#line 2755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* list: '[' proplist ']'  */
-#line 504 "engines/director/lingo/lingo-gr.y"
+  case 128: /* list: '[' proplist ']'  */
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* proplist: proppair  */
-#line 507 "engines/director/lingo/lingo-gr.y"
+  case 129: /* proplist: proppair  */
+#line 541 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2770 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* proplist: proplist ',' proppair  */
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 130: /* proplist: proplist ',' proppair  */
+#line 545 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2778 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* proppair: tSYMBOL ':' expr  */
-#line 516 "engines/director/lingo/lingo-gr.y"
+  case 131: /* proppair: tSYMBOL ':' expr  */
+#line 550 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2645 "engines/director/lingo/lingo-gr.cpp"
+#line 2784 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* proppair: ID ':' expr  */
-#line 517 "engines/director/lingo/lingo-gr.y"
+  case 132: /* proppair: ID ':' expr  */
+#line 551 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2790 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* proppair: tSTRING ':' expr  */
-#line 518 "engines/director/lingo/lingo-gr.y"
+  case 133: /* proppair: tSTRING ':' expr  */
+#line 552 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2657 "engines/director/lingo/lingo-gr.cpp"
+#line 2796 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* parens: '(' expr ')'  */
-#line 521 "engines/director/lingo/lingo-gr.y"
+  case 134: /* parens: '(' expr ')'  */
+#line 555 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2802 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* unarymath: '+' simpleexpr  */
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 135: /* unarymath: '+' simpleexpr  */
+#line 557 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2669 "engines/director/lingo/lingo-gr.cpp"
+#line 2808 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* unarymath: '-' simpleexpr  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 136: /* unarymath: '-' simpleexpr  */
+#line 558 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2675 "engines/director/lingo/lingo-gr.cpp"
+#line 2814 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* expr: expr '+' expr  */
-#line 542 "engines/director/lingo/lingo-gr.y"
+  case 143: /* expr: expr '+' expr  */
+#line 576 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* expr: expr '-' expr  */
-#line 543 "engines/director/lingo/lingo-gr.y"
+  case 144: /* expr: expr '-' expr  */
+#line 577 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2826 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* expr: expr '*' expr  */
-#line 544 "engines/director/lingo/lingo-gr.y"
+  case 145: /* expr: expr '*' expr  */
+#line 578 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+#line 2832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* expr: expr '/' expr  */
-#line 545 "engines/director/lingo/lingo-gr.y"
+  case 146: /* expr: expr '/' expr  */
+#line 579 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2838 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* expr: expr tMOD expr  */
-#line 546 "engines/director/lingo/lingo-gr.y"
+  case 147: /* expr: expr tMOD expr  */
+#line 580 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2844 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* expr: expr '>' expr  */
-#line 547 "engines/director/lingo/lingo-gr.y"
+  case 148: /* expr: expr '>' expr  */
+#line 581 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
+#line 2850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* expr: expr '<' expr  */
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 149: /* expr: expr '<' expr  */
+#line 582 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2717 "engines/director/lingo/lingo-gr.cpp"
+#line 2856 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* expr: expr tEQ expr  */
-#line 549 "engines/director/lingo/lingo-gr.y"
+  case 150: /* expr: expr tEQ expr  */
+#line 583 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2723 "engines/director/lingo/lingo-gr.cpp"
+#line 2862 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* expr: expr tNEQ expr  */
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 151: /* expr: expr tNEQ expr  */
+#line 584 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2868 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* expr: expr tGE expr  */
-#line 551 "engines/director/lingo/lingo-gr.y"
+  case 152: /* expr: expr tGE expr  */
+#line 585 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2874 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* expr: expr tLE expr  */
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 153: /* expr: expr tLE expr  */
+#line 586 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2880 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* expr: expr tAND expr  */
-#line 553 "engines/director/lingo/lingo-gr.y"
+  case 154: /* expr: expr tAND expr  */
+#line 587 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2747 "engines/director/lingo/lingo-gr.cpp"
+#line 2886 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* expr: expr tOR expr  */
-#line 554 "engines/director/lingo/lingo-gr.y"
+  case 155: /* expr: expr tOR expr  */
+#line 588 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2892 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* expr: expr '&' expr  */
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 156: /* expr: expr '&' expr  */
+#line 589 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2759 "engines/director/lingo/lingo-gr.cpp"
+#line 2898 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* expr: expr tCONCAT expr  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 157: /* expr: expr tCONCAT expr  */
+#line 590 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2765 "engines/director/lingo/lingo-gr.cpp"
+#line 2904 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* expr: expr tCONTAINS expr  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 158: /* expr: expr tCONTAINS expr  */
+#line 591 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2771 "engines/director/lingo/lingo-gr.cpp"
+#line 2910 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* expr: expr tSTARTS expr  */
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 159: /* expr: expr tSTARTS expr  */
+#line 592 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2777 "engines/director/lingo/lingo-gr.cpp"
+#line 2916 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 566 "engines/director/lingo/lingo-gr.y"
+  case 161: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 600 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 162: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 601 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2928 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 163: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 602 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2934 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 569 "engines/director/lingo/lingo-gr.y"
+  case 164: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 603 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2940 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 570 "engines/director/lingo/lingo-gr.y"
+  case 165: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 604 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2946 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 571 "engines/director/lingo/lingo-gr.y"
+  case 166: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 605 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2952 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 572 "engines/director/lingo/lingo-gr.y"
+  case 167: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2958 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 573 "engines/director/lingo/lingo-gr.y"
+  case 168: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2964 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 574 "engines/director/lingo/lingo-gr.y"
+  case 169: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 608 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2970 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 575 "engines/director/lingo/lingo-gr.y"
+  case 170: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2976 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 576 "engines/director/lingo/lingo-gr.y"
+  case 171: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2982 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 172: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 611 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2988 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 578 "engines/director/lingo/lingo-gr.y"
+  case 173: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 612 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2994 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 579 "engines/director/lingo/lingo-gr.y"
+  case 174: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 613 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 3000 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 580 "engines/director/lingo/lingo-gr.y"
+  case 175: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 614 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 3006 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 581 "engines/director/lingo/lingo-gr.y"
+  case 176: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 615 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 3012 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 582 "engines/director/lingo/lingo-gr.y"
+  case 177: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 3018 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* exprlist: %empty  */
-#line 585 "engines/director/lingo/lingo-gr.y"
+  case 178: /* exprlist: %empty  */
+#line 619 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 3024 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* nonemptyexprlist: expr  */
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 180: /* nonemptyexprlist: expr  */
+#line 623 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2894 "engines/director/lingo/lingo-gr.cpp"
+#line 3033 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 181: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 627 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2902 "engines/director/lingo/lingo-gr.cpp"
+#line 3041 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 2906 "engines/director/lingo/lingo-gr.cpp"
+#line 3045 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3101,7 +3240,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 598 "engines/director/lingo/lingo-gr.y"
+#line 632 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 4fd31614ed..03c4243a80 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -78,57 +78,58 @@ extern int yydebug;
     tELSE = 279,                   /* tELSE  */
     tELSIF = 280,                  /* tELSIF  */
     tEXIT = 281,                   /* tEXIT  */
-    tGLOBAL = 282,                 /* tGLOBAL  */
-    tGO = 283,                     /* tGO  */
-    tGOLOOP = 284,                 /* tGOLOOP  */
-    tIF = 285,                     /* tIF  */
-    tIN = 286,                     /* tIN  */
-    tINTO = 287,                   /* tINTO  */
-    tMACRO = 288,                  /* tMACRO  */
-    tMOVIE = 289,                  /* tMOVIE  */
-    tNEXT = 290,                   /* tNEXT  */
-    tOF = 291,                     /* tOF  */
-    tPREVIOUS = 292,               /* tPREVIOUS  */
-    tPUT = 293,                    /* tPUT  */
-    tREPEAT = 294,                 /* tREPEAT  */
-    tSET = 295,                    /* tSET  */
-    tTHEN = 296,                   /* tTHEN  */
-    tTO = 297,                     /* tTO  */
-    tWHEN = 298,                   /* tWHEN  */
-    tWITH = 299,                   /* tWITH  */
-    tWHILE = 300,                  /* tWHILE  */
-    tFACTORY = 301,                /* tFACTORY  */
-    tOPEN = 302,                   /* tOPEN  */
-    tPLAY = 303,                   /* tPLAY  */
-    tINSTANCE = 304,               /* tINSTANCE  */
-    tGE = 305,                     /* tGE  */
-    tLE = 306,                     /* tLE  */
-    tEQ = 307,                     /* tEQ  */
-    tNEQ = 308,                    /* tNEQ  */
-    tAND = 309,                    /* tAND  */
-    tOR = 310,                     /* tOR  */
-    tNOT = 311,                    /* tNOT  */
-    tMOD = 312,                    /* tMOD  */
-    tAFTER = 313,                  /* tAFTER  */
-    tBEFORE = 314,                 /* tBEFORE  */
-    tCONCAT = 315,                 /* tCONCAT  */
-    tCONTAINS = 316,               /* tCONTAINS  */
-    tSTARTS = 317,                 /* tSTARTS  */
-    tCHAR = 318,                   /* tCHAR  */
-    tITEM = 319,                   /* tITEM  */
-    tLINE = 320,                   /* tLINE  */
-    tWORD = 321,                   /* tWORD  */
-    tSPRITE = 322,                 /* tSPRITE  */
-    tINTERSECTS = 323,             /* tINTERSECTS  */
-    tWITHIN = 324,                 /* tWITHIN  */
-    tTELL = 325,                   /* tTELL  */
-    tPROPERTY = 326,               /* tPROPERTY  */
-    tON = 327,                     /* tON  */
-    tMETHOD = 328,                 /* tMETHOD  */
-    tENDIF = 329,                  /* tENDIF  */
-    tENDREPEAT = 330,              /* tENDREPEAT  */
-    tENDTELL = 331,                /* tENDTELL  */
-    tASSERTERROR = 332             /* tASSERTERROR  */
+    tFRAME = 282,                  /* tFRAME  */
+    tGLOBAL = 283,                 /* tGLOBAL  */
+    tGO = 284,                     /* tGO  */
+    tGOLOOP = 285,                 /* tGOLOOP  */
+    tIF = 286,                     /* tIF  */
+    tIN = 287,                     /* tIN  */
+    tINTO = 288,                   /* tINTO  */
+    tMACRO = 289,                  /* tMACRO  */
+    tMOVIE = 290,                  /* tMOVIE  */
+    tNEXT = 291,                   /* tNEXT  */
+    tOF = 292,                     /* tOF  */
+    tPREVIOUS = 293,               /* tPREVIOUS  */
+    tPUT = 294,                    /* tPUT  */
+    tREPEAT = 295,                 /* tREPEAT  */
+    tSET = 296,                    /* tSET  */
+    tTHEN = 297,                   /* tTHEN  */
+    tTO = 298,                     /* tTO  */
+    tWHEN = 299,                   /* tWHEN  */
+    tWITH = 300,                   /* tWITH  */
+    tWHILE = 301,                  /* tWHILE  */
+    tFACTORY = 302,                /* tFACTORY  */
+    tOPEN = 303,                   /* tOPEN  */
+    tPLAY = 304,                   /* tPLAY  */
+    tINSTANCE = 305,               /* tINSTANCE  */
+    tGE = 306,                     /* tGE  */
+    tLE = 307,                     /* tLE  */
+    tEQ = 308,                     /* tEQ  */
+    tNEQ = 309,                    /* tNEQ  */
+    tAND = 310,                    /* tAND  */
+    tOR = 311,                     /* tOR  */
+    tNOT = 312,                    /* tNOT  */
+    tMOD = 313,                    /* tMOD  */
+    tAFTER = 314,                  /* tAFTER  */
+    tBEFORE = 315,                 /* tBEFORE  */
+    tCONCAT = 316,                 /* tCONCAT  */
+    tCONTAINS = 317,               /* tCONTAINS  */
+    tSTARTS = 318,                 /* tSTARTS  */
+    tCHAR = 319,                   /* tCHAR  */
+    tITEM = 320,                   /* tITEM  */
+    tLINE = 321,                   /* tLINE  */
+    tWORD = 322,                   /* tWORD  */
+    tSPRITE = 323,                 /* tSPRITE  */
+    tINTERSECTS = 324,             /* tINTERSECTS  */
+    tWITHIN = 325,                 /* tWITHIN  */
+    tTELL = 326,                   /* tTELL  */
+    tPROPERTY = 327,               /* tPROPERTY  */
+    tON = 328,                     /* tON  */
+    tMETHOD = 329,                 /* tMETHOD  */
+    tENDIF = 330,                  /* tENDIF  */
+    tENDREPEAT = 331,              /* tENDREPEAT  */
+    tENDTELL = 332,                /* tENDTELL  */
+    tASSERTERROR = 333             /* tASSERTERROR  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -153,7 +154,7 @@ union YYSTYPE
 	Director::Node *node;
 	Director::NodeList *nodelist;
 
-#line 157 "engines/director/lingo/lingo-gr.h"
+#line 158 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index db48c7eb86..ebec753fed 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -135,7 +135,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %token<s> tENDCLAUSE tPLAYACCEL
 %token<objectprop> tTHEOBJECTPROP
 %token tCAST tFIELD tSCRIPT tWINDOW
-%token tDOWN tELSE tELSIF tEXIT tGLOBAL tGO tGOLOOP tIF tIN tINTO tMACRO
+%token tDOWN tELSE tELSIF tEXIT tFRAME tGLOBAL tGO tGOLOOP tIF tIN tINTO tMACRO
 %token tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
 %token tWITH tWHILE tFACTORY tOPEN tPLAY tINSTANCE
 %token tGE tLE tEQ tNEQ tAND tOR tNOT tMOD
@@ -167,7 +167,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<node> stmt stmtoneliner
 %type<node> proc asgn definevars
 %type<node> ifstmt ifelsestmt loop
-%type<nodelist> cmdargs stmtlist nonemptystmtlist
+%type<nodelist> cmdargs playargs stmtlist nonemptystmtlist
 %type<node> stmtlistline
 
 // EXPRESSION
@@ -299,6 +299,7 @@ ID: tVARID
 	// | tEXIT			{ $$ = new Common::String("exit"); }
 	// tFACTORY
 	| tFIELD		{ $$ = new Common::String("field"); }
+	| tFRAME		{ $$ = new Common::String("frame"); }
 	// | tGLOBAL		{ $$ = new Common::String("global"); }
 	// tIF
 	| tIN			{ $$ = new Common::String("in"); }
@@ -317,7 +318,7 @@ ID: tVARID
 	// | tON			{ $$ = new Common::String("on"); }
 	| tOPEN			{ $$ = new Common::String("open"); }
 	| tOR			{ $$ = new Common::String("or"); }
-	| tPLAY			{ $$ = new Common::String("play"); }		// FIXME: lexer includes "play frame"
+	// | tPLAY			{ $$ = new Common::String("play"); }
 	| tPLAYACCEL	{ $$ = new Common::String("playAccel"); }
 	| tPREVIOUS		{ $$ = new Common::String("previous"); }
 	// | tPROPERTY		{ $$ = new Common::String("property"); }
@@ -370,6 +371,8 @@ stmtoneliner: proc
 
 proc: ID cmdargs '\n'					{ $$ = new CmdNode($ID, $cmdargs); }
 	| tPUT cmdargs '\n'					{ $$ = new CmdNode(new Common::String("put"), $cmdargs); }
+	| tPLAY cmdargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $cmdargs); }
+	| tPLAY playargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $playargs); }
 	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
 	| tEXIT tREPEAT '\n'				{ $$ = new ExitRepeatNode(); }
 	| tEXIT '\n'						{ $$ = new ExitNode(); }
@@ -407,6 +410,37 @@ cmdargs: /* empty */					{
 		$$ = $args; }
 	;
 
+playargs: tFRAME expr[frame]						{
+		// This matches `play frame arg`
+		NodeList *args = new NodeList;
+		args->push_back($frame);
+		$$ = args; }
+	| tMOVIE expr[movie]							{
+		// This matches `play movie arg`
+		NodeList *args = new NodeList;
+		args->push_back(new IntNode(1));
+		args->push_back($movie);
+		$$ = args; }
+	| tFRAME expr[frame] tOF tMOVIE expr[movie]		{
+		// This matches `play frame arg of movie arg`
+		NodeList *args = new NodeList;
+		args->push_back($frame);
+		args->push_back($movie);
+		$$ = args; }
+	| expr[frame] tOF tMOVIE expr[movie]			{
+		// This matches `play arg of movie arg` (weird but valid)
+		NodeList *args = new NodeList;
+		args->push_back($frame);
+		args->push_back($movie);
+		$$ = args; }
+	| tFRAME expr[frame] expr_nounarymath[movie]	{
+		// This matches `play frame arg arg` (also weird but valid)
+		NodeList *args = new NodeList;
+		args->push_back($frame);
+		args->push_back($movie);
+		$$ = args; }
+	;
+
 asgn: tPUT expr tINTO varorchunk '\n'	{ $$ = new PutIntoNode($expr, $varorchunk); }
 	| tPUT expr tAFTER varorchunk '\n'	{ $$ = new PutAfterNode($expr, $varorchunk); }
 	| tPUT expr tBEFORE varorchunk '\n'	{ $$ = new PutBeforeNode($expr, $varorchunk); }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index c850233aa7..c6c3692361 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -364,7 +364,7 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[327] =
+static const flex_int16_t yy_accept[325] =
     {   0,
         0,    0,   75,   73,    1,   71,   71,   73,   73,   70,
        70,   69,   70,   66,   70,   67,   67,   67,   67,   67,
@@ -372,36 +372,36 @@ static const flex_int16_t yy_accept[327] =
        67,   67,   67,    1,   67,    1,   71,    0,   72,    2,
        65,   68,   69,   64,   62,   63,   67,   67,   67,   67,
        67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
-       10,   23,   67,   67,   67,   67,   67,   67,   67,   32,
-       33,   67,   35,   67,   67,   67,   67,   67,   67,   67,
-       67,   67,   67,   53,   67,   67,   67,    1,    0,   67,
-        2,   68,   67,    4,   67,   67,   67,   67,   67,   67,
-
-       12,   67,   67,   67,   18,   67,   67,   67,   67,   67,
-       67,   28,   67,   67,   31,   67,   67,   67,   67,   41,
-       67,   67,   67,   44,   67,   67,   67,   67,   67,   67,
-       67,   67,   67,    0,   67,   67,   67,    6,    7,   67,
-        9,   11,    0,   14,   67,   67,    0,    0,    0,   67,
-       67,   22,   24,   25,   67,   67,   67,   30,   34,   37,
-       67,   67,   67,   67,   67,   67,   67,   46,    0,   52,
-       58,   67,   67,   56,   61,    0,   67,    3,   67,   67,
-       12,   15,   67,    0,    0,   18,   67,   67,   26,   67,
-       29,    0,   67,   67,   67,   67,   67,   67,   67,   67,
-
-       51,   51,   51,   59,   67,   67,    0,   67,    5,   67,
-       12,   16,    0,    0,    0,   67,   67,   27,    0,   67,
-       67,   67,   42,   43,   67,   55,   45,    0,   51,   51,
-       60,   57,    0,   67,   67,    0,   19,   67,   67,    0,
-       67,   67,   67,   67,    0,    0,    0,   51,   51,    0,
-       13,    8,   17,   20,   67,    0,   67,   39,   40,   67,
-        0,    0,    0,   51,   51,   13,   67,    0,   38,   67,
-        0,    0,    0,    0,   51,   21,   36,   67,   50,   49,
-       50,    0,    0,    0,    0,   51,   67,   49,    0,    0,
-        0,    0,    0,   67,    0,    0,    0,    0,    0,    0,
-
-       67,    0,    0,   50,   49,   49,   50,    0,   67,   48,
-       49,   49,    0,   67,   49,   67,    0,   49,   67,    0,
-        0,   54,    0,    0,   47,    0
+       67,   10,   24,   67,   67,   67,   67,   67,   67,   67,
+       33,   34,   67,   36,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   53,   67,   67,   67,    1,    0,
+       67,    2,   68,   67,    4,   67,   67,   67,   67,   67,
+
+       67,   12,   67,   67,   67,   67,   19,   67,   67,   67,
+       67,   67,   67,   29,   67,   67,   32,   67,   67,   67,
+       67,   41,   67,   67,   67,   44,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,    0,   67,   67,   67,    6,
+        7,   67,    9,   11,    0,   14,   67,   67,   67,    0,
+        0,    0,   67,   67,   23,   25,   26,   67,   67,   67,
+       31,   35,   37,   67,   67,   67,   67,   67,   67,   67,
+       46,    0,   52,   58,   67,   67,   56,   61,    0,   67,
+        3,   67,   67,   12,   15,   16,   67,    0,    0,   19,
+       67,   67,   27,   67,   30,   67,   67,   67,   67,   67,
+
+       67,   67,   67,   51,   51,   51,   59,   67,   67,    0,
+       67,    5,   67,   12,   17,    0,    0,    0,   67,   67,
+       28,   67,   67,   67,   42,   43,   67,   55,   45,    0,
+       51,   51,   60,   57,    0,   67,   67,    0,   20,   67,
+       67,   67,   67,   67,   67,    0,    0,    0,   51,   51,
+        0,   13,    8,   18,   21,   67,   67,   39,   40,   67,
+        0,    0,    0,   51,   51,   13,   67,   38,   67,    0,
+        0,    0,    0,   51,   22,   67,   50,   49,   50,    0,
+        0,    0,    0,   51,   67,   49,    0,    0,    0,    0,
+        0,   67,    0,    0,    0,    0,    0,    0,   67,    0,
+
+        0,   50,   49,   49,   50,    0,   67,   48,   49,   49,
+        0,   67,   49,   67,    0,   49,   67,    0,    0,   54,
+        0,    0,   47,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -446,89 +446,89 @@ static const YY_CHAR yy_meta[60] =
         5,    5,    5,    5,    5,    5,    5,    5,    5
     } ;
 
-static const flex_int16_t yy_base[339] =
+static const flex_int16_t yy_base[337] =
     {   0,
-        0,   58,  655,  720,   59,  720,  720,  647,    0,  720,
-      643,   55,   54,  720,  638,   49,   51,   57,   46,   50,
-       48,   56,    0,   85,   59,   95,   73,   98,  106,   68,
-      124,  138,   98,  165,  148,   85,  720,  644,  720,    0,
-      720,  638,  122,  720,  720,  720,    0,  120,   73,   93,
-      124,  143,  146,  139,  146,  146,  157,  164,  162,  641,
-        0,  160,  167,  166,  177,  166,  183,  163,  171,    0,
-        0,  186,    0,  191,  192,  176,  190,  194,  191,  198,
-      197,  207,  214,    0,  215,  217,  207,  249,  224,  224,
-        0,  632,  237,    0,  217,  216,  229,  229,  237,  247,
-
-      639,  241,  249,  254,  275,  243,  258,  250,  260,  251,
-      266,    0,  266,  251,    0,  258,  254,  258,  273,    0,
-      286,  287,  290,    0,  288,  287,  293,  317,  295,  299,
-      308,  305,  310,  314,  301,  306,  307,    0,    0,  323,
-        0,    0,  637,    0,  324,  331,  318,  321,  325,  339,
-      327,    0,    0,    0,  330,  333,  344,    0,    0,  362,
-      341,  349,  354,  344,  348,  343,  347,    0,  379,    0,
-        0,  364,  357,  363,    0,  357,  362,    0,  372,  371,
-        0,    0,  374,  380,  372,  635,  376,  374,    0,  391,
-        0,  411,  394,  388,  387,  388,  389,  390,  406,  399,
-
-      631,  431,  429,    0,  401,  410,  410,  411,    0,  415,
-        0,    0,  419,  419,  447,  434,  433,    0,  424,  439,
-      425,  431,    0,    0,  440,    0,    0,  466,  469,  470,
-        0,    0,  444,  441,  448,  463,  720,  464,  470,  473,
-      471,  461,  456,  488,  489,  485,  486,  492,  510,  462,
-        0,    0,  720,    0,  486,  494,  500,    0,    0,  499,
-      499,  627,  506,  606,  532,  720,  503,  517,    0,  507,
-      520,  580,  521,  534,  539,    0,  720,  525,  720,    0,
-      720,  454,  543,  553,  556,  340,  519,    0,  567,  562,
-      329,  574,  578,  546,  557,  547,  568,  585,  583,  554,
-
-      561,  318,  199,  169,  566,  595,  158,  144,  569,  127,
-      119,  116,  507,  575,  616,  584,  618,  634,  594,  598,
-      611,    0,   80,   77,   70,  720,  671,  673,  676,  679,
-      684,  689,  691,  696,  701,  703,  708,  713
+        0,   58,  650,  717,   59,  717,  717,  644,    0,  717,
+      640,   55,   54,  717,  635,   49,   51,   57,   46,   50,
+       57,   63,    0,   63,   58,   97,   87,   97,   98,  100,
+      136,  138,  136,  117,  155,  129,  717,  639,  717,    0,
+      717,  633,  134,  717,  717,  717,    0,   97,  121,  136,
+      136,  147,  142,  137,  142,  156,  152,  157,  178,  169,
+      640,    0,  172,  182,  178,  189,  177,  189,  174,  179,
+        0,    0,  193,    0,  198,  196,  186,  190,  205,  189,
+      192,  201,  204,  224,    0,  230,  224,  218,  260,  239,
+      240,    0,  631,  240,    0,  234,  234,  238,  237,  243,
+
+      241,  637,  240,  250,  250,  266,  283,  255,  269,  264,
+      275,  266,  278,    0,  278,  273,    0,  280,  272,  277,
+      285,    0,  283,  293,  295,    0,  294,  292,  298,  326,
+      306,  310,  318,  317,  324,  326,  315,  318,  319,    0,
+        0,  335,    0,    0,  634,    0,  333,  335,  340,  327,
+      331,  333,  347,  334,    0,    0,    0,  337,  340,  350,
+        0,    0,  358,  354,  362,  368,  356,  363,  358,  360,
+        0,  391,    0,    0,  376,  370,  373,    0,  367,  372,
+        0,  383,  380,    0,    0,    0,  381,  389,  381,  604,
+      383,  380,    0,  396,    0,  407,  389,  400,  399,  403,
+
+      402,  406,  406,  572,  440,  439,    0,  409,  418,  418,
+      417,    0,  423,    0,    0,  425,  423,  458,  439,  438,
+        0,  445,  431,  433,    0,    0,  440,    0,    0,  473,
+      468,  474,    0,    0,  453,  447,  454,  471,  717,  473,
+      476,  475,  465,  460,  488,  494,  490,  488,  509,  510,
+      461,    0,    0,  717,    0,  493,  504,    0,    0,  499,
+      499,  501,  506,  479,  537,  717,  505,    0,  506,  519,
+      460,  520,  539,  540,    0,  525,  717,    0,  717,  349,
+      543,  558,  542,  252,  519,    0,  563,  544,  247,  548,
+      580,  537,  546,  557,  576,  581,  584,  580,  586,  211,
+
+      168,  139,  561,  586,  132,   98,  583,   89,   86,   81,
+      582,  585,  614,  588,  618,  615,  603,  607,  603,    0,
+       79,   70,   68,  717,  668,  670,  673,  676,  681,  686,
+      688,  693,  698,  700,  705,  710
     } ;
 
-static const flex_int16_t yy_def[339] =
+static const flex_int16_t yy_def[337] =
     {   0,
-      326,    1,  326,  326,  326,  326,  326,  327,  328,  326,
-      326,  326,  326,  326,  326,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  326,  329,  326,  326,  327,  326,  330,
-      326,  326,  326,  326,  326,  326,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  326,  326,  329,
-      330,  326,  329,  329,  329,  329,  329,  329,  329,  329,
-
-      329,  329,  329,  329,  326,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  326,  329,  329,  329,  329,  329,  329,
-      329,  329,  331,  329,  329,  329,  326,  326,  326,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
-      329,  329,  329,  329,  329,  329,  329,  329,  332,  329,
-      329,  329,  329,  329,  329,  326,  329,  329,  329,  329,
-      333,  329,  329,  326,  326,  326,  329,  329,  329,  329,
-      329,  326,  329,  329,  329,  329,  329,  329,  329,  329,
-
-      332,  332,  332,  329,  329,  329,  326,  329,  329,  329,
-      333,  329,  326,  326,  326,  329,  329,  329,  326,  329,
-      329,  329,  329,  329,  329,  329,  329,  326,  332,  332,
-      329,  329,  326,  329,  329,  326,  326,  329,  329,  326,
-      329,  329,  329,  329,  326,  326,  326,  332,  332,  326,
-      329,  329,  326,  329,  329,  326,  329,  329,  329,  329,
-      326,  326,  326,  332,  332,  326,  329,  326,  329,  329,
-      326,  334,  326,  335,  332,  329,  326,  329,  326,  336,
-      326,  335,  335,  335,  335,  332,  329,  336,  326,  335,
-      335,  335,  326,  329,  326,  326,  335,  334,  335,  326,
-
-      329,  326,  326,  335,  336,  336,  335,  326,  329,  326,
-      336,  336,  337,  329,  338,  329,  326,  338,  329,  326,
-      326,  329,  326,  326,  326,    0,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326
+      324,    1,  324,  324,  324,  324,  324,  325,  326,  324,
+      324,  324,  324,  324,  324,  327,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  327,  327,  324,  327,  324,  324,  325,  324,  328,
+      324,  324,  324,  324,  324,  324,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  324,  324,
+      327,  328,  324,  327,  327,  327,  327,  327,  327,  327,
+
+      327,  327,  327,  327,  327,  327,  324,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  324,  327,  327,  327,  327,
+      327,  327,  327,  327,  329,  327,  327,  327,  327,  324,
+      324,  324,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+      327,  330,  327,  327,  327,  327,  327,  327,  324,  327,
+      327,  327,  327,  331,  327,  327,  327,  324,  324,  324,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+
+      327,  327,  327,  330,  330,  330,  327,  327,  327,  324,
+      327,  327,  327,  331,  327,  324,  324,  324,  327,  327,
+      327,  327,  327,  327,  327,  327,  327,  327,  327,  324,
+      330,  330,  327,  327,  324,  327,  327,  324,  324,  327,
+      327,  327,  327,  327,  327,  324,  324,  324,  330,  330,
+      324,  327,  327,  324,  327,  327,  327,  327,  327,  327,
+      324,  324,  324,  330,  330,  324,  327,  327,  327,  324,
+      332,  324,  333,  330,  327,  327,  324,  334,  324,  333,
+      333,  333,  333,  330,  327,  334,  324,  333,  333,  333,
+      324,  327,  324,  324,  333,  332,  333,  324,  327,  324,
+
+      324,  333,  334,  334,  333,  324,  327,  324,  334,  334,
+      335,  327,  336,  327,  324,  336,  327,  324,  324,  327,
+      324,  324,  324,    0,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324
     } ;
 
-static const flex_int16_t yy_nxt[780] =
+static const flex_int16_t yy_nxt[777] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,    4,   12,
        13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
@@ -536,88 +536,88 @@ static const flex_int16_t yy_nxt[780] =
        32,   23,   23,   33,   23,   23,   23,   16,   17,   18,
        19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
        29,   30,   31,   32,   23,   23,   33,   23,   23,   34,
-       36,   37,   37,   42,   43,   44,   45,   48,   50,   58,
-       51,  325,   54,   55,   49,   56,   35,   52,  325,   59,
-       64,  325,   60,   53,   57,   77,   36,   37,   37,   94,
-       68,   48,   50,   58,   51,   54,   55,   49,   56,   69,
-
-       35,   52,   59,   61,   64,   60,   53,   57,   65,   77,
-       62,   95,   66,   94,   68,   63,   70,  310,   85,   86,
-      310,   67,   69,   71,   87,   72,   73,   61,  310,   74,
-       42,   43,   65,   62,   75,   95,   66,   76,   63,   78,
-       70,   79,   85,   86,   67,  313,   71,   87,   72,   73,
-       93,   80,   74,   96,   81,   82,   97,   75,   83,  289,
-       76,   90,  101,   78,   84,   79,   88,   37,   37,   58,
-      289,   98,   99,   93,   80,  100,   96,   81,  102,   82,
-       97,  103,   83,   89,  108,   90,  101,   84,  104,  106,
-      107,  109,  110,   58,   98,   99,  111,  114,  100,  112,
-
-      310,  115,  102,  116,  117,  103,  120,   89,  108,  118,
-      126,  104,  106,  107,  109,  113,  110,  121,  119,  111,
-      114,  124,  122,  112,  115,  123,  125,  116,  117,  120,
-      127,  128,  129,  118,  126,  133,  130,  134,  113,  135,
-      121,  119,  131,  137,  124,  122,  138,  132,  123,  125,
-       88,   37,   37,  127,  136,  128,  129,  139,  133,  140,
-      130,  134,  141,  135,  142,  131,  137,   89,  146,  138,
-      132,  144,  145,  150,  153,  151,  105,  154,  136,  155,
-      139,  158,  140,  159,  152,  141,  156,  157,  142,  160,
-      161,   89,  146,  147,  144,  145,  150,  153,  148,  151,
-
-      162,  154,  155,  163,  158,  149,  159,  152,  164,  166,
-      156,  157,  160,  161,  165,  167,  168,  147,  169,  310,
-      171,  148,  172,  162,  173,  174,  175,  163,  149,  176,
-      298,  177,  164,  166,  178,  179,  180,  165,  167,  168,
-      182,  293,  170,  171,  183,  172,  184,  185,  173,  174,
-      175,  186,  187,  176,  177,  188,  189,  178,  179,  190,
-      180,  191,  194,  192,  182,  170,  195,  196,  183,  184,
-      185,  197,  198,  199,  186,  193,  187,  200,  188,  189,
-      169,  204,  190,  205,  206,  191,  194,  207,  208,  209,
-      195,  196,  210,  213,  197,  198,  199,  212,  214,  193,
-
-      200,  216,  202,  217,  203,  204,  205,  218,  206,  220,
-      207,  208,  192,  209,  221,  222,  210,  213,  223,  224,
-      212,  214,  225,  226,  216,  202,  217,  203,  227,  219,
-      228,  218,  228,  220,  231,  232,  233,  221,  222,  234,
-      235,  223,  224,  236,  229,  225,  237,  226,  215,  238,
-      239,  227,  240,  219,  241,  289,  242,  231,  232,  233,
-      230,  243,  234,  235,  244,  147,  236,  228,  229,  237,
-      228,  228,  250,  238,  239,  240,  251,  252,  241,  242,
-      253,  254,  245,  230,  243,  255,  256,  244,  257,  147,
-      258,  259,  246,  228,  249,  250,  247,  266,  248,  251,
-
-      252,  260,  261,  262,  253,  254,  245,  263,  313,  255,
-      256,  228,  257,  258,  259,  246,  267,  249,  268,  247,
-      266,  248,  264,  269,  265,  260,  261,  262,  270,  271,
-      273,  263,  276,  228,  277,  274,  278,  279,  281,  267,
-      228,  268,  287,  280,  289,  264,  269,  294,  265,  275,
-      283,  270,  271,  273,  289,  276,  290,  289,  277,  278,
-      284,  279,  281,  289,  285,  303,  287,  286,  289,  289,
-      294,  291,  308,  275,  283,  289,  301,  292,  309,  293,
-      290,  272,  302,  284,  289,  304,  298,  285,  295,  303,
-      286,  311,  297,  296,  245,  291,  308,  314,  299,  301,
-
-      307,  292,  309,  316,  300,  302,  305,  274,  247,  304,
-      319,  306,  295,  312,  311,  297,  296,  317,  245,  317,
-      314,  299,  322,  323,  307,  288,  316,  300,  272,  324,
-      305,  247,  228,  319,  306,  317,  215,  312,  143,  320,
-      143,   92,  105,  288,  321,  322,  323,   92,   39,   46,
-       41,   39,  288,  324,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  320,  326,  326,  326,  321,  326,  326,
-      288,   38,   38,  326,   38,   38,   38,   40,   40,   47,
-       47,   47,   91,   91,   91,  181,  326,  326,  181,  181,
-      201,  326,  326,  201,  211,  211,  211,  280,  326,  326,
-
-      280,  280,  282,  326,  326,  282,  288,  288,  288,  315,
-      326,  326,  315,  315,  318,  326,  318,  318,  318,    3,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326
+       36,   37,   37,   42,   43,   44,   45,   48,   50,  323,
+       51,  323,   54,   55,   49,   56,   35,   52,   58,   65,
+      323,   62,  308,   53,   57,   59,   60,  308,   63,   61,
+      308,   48,   50,   64,   51,   54,   55,   49,   56,  311,
+
+       35,   52,   58,   65,   69,   62,   53,   57,   59,   60,
+       66,   63,   61,   70,   67,   71,   64,   78,   89,   37,
+       37,   75,   72,   68,   73,   74,   76,   94,   69,   77,
+       36,   37,   37,  287,   66,   90,   70,   95,   67,   71,
+      287,   78,   42,   43,   75,   72,   68,   73,   74,   76,
+       94,   79,   77,   80,   96,   83,   86,   87,   84,   90,
+       98,   95,   88,   81,   85,   97,   82,   99,   91,  308,
+      100,  101,  102,  103,  104,   79,   58,   80,   96,   83,
+       86,   87,   84,   59,   98,   88,   81,   85,   97,   82,
+       99,  105,   91,  100,  101,  106,  102,  103,  104,  110,
+
+       58,  108,  109,  111,  112,  114,   59,  113,  116,  117,
+      118,  119,  308,  120,  128,  105,  122,  123,  106,  126,
+      127,  115,  121,  110,  108,  109,  111,  129,  112,  114,
+      113,  116,  117,  124,  118,  119,  125,  120,  128,  122,
+      123,  130,  126,  127,  115,  121,  135,  131,  296,  133,
+      129,  132,  136,  291,  134,  137,  124,  138,  144,  125,
+      139,   89,   37,   37,  140,  130,  141,  142,  143,  135,
+      146,  131,  133,  147,  148,  132,  136,  134,   90,  137,
+      149,  138,  144,  139,  107,  153,  154,  140,  156,  141,
+      142,  143,  157,  146,  158,  155,  147,  148,  159,  160,
+
+      166,  150,   90,  161,  149,  162,  151,  163,  153,  164,
+      154,  156,  165,  152,  167,  169,  157,  158,  155,  168,
+      170,  171,  159,  160,  166,  150,  161,  172,  162,  151,
+      163,  174,  164,  175,  176,  165,  152,  177,  167,  169,
+      178,  179,  168,  170,  171,  180,  181,  182,  183,  185,
+      287,  173,  186,  187,  174,  188,  175,  189,  176,  190,
+      191,  177,  192,  193,  178,  179,  194,  195,  180,  181,
+      182,  196,  183,  185,  173,  197,  186,  187,  188,  198,
+      189,  199,  190,  200,  191,  192,  193,  201,  202,  194,
+      203,  195,  172,  207,  209,  196,  208,  210,  211,  197,
+
+      212,  213,  216,  198,  215,  199,  200,  217,  219,  220,
+      201,  202,  221,  203,  205,  223,  206,  207,  209,  208,
+      210,  211,  222,  228,  212,  213,  216,  215,  224,  225,
+      217,  219,  220,  226,  227,  229,  221,  205,  223,  206,
+      230,  230,  233,  234,  235,  236,  222,  228,  237,  238,
+      239,  224,  225,  231,  240,  241,  226,  227,  229,  218,
+      242,  271,  243,  244,  245,  233,  234,  235,  236,  230,
+      232,  237,  238,  239,  230,  230,  150,  231,  240,  241,
+      273,  251,  252,  253,  242,  243,  244,  245,  254,  246,
+      255,  256,  257,  232,  258,  259,  266,  249,  250,  247,
+
+      150,  260,  271,  248,  251,  252,  253,  261,  262,  263,
+      230,  230,  254,  246,  255,  256,  257,  258,  259,  266,
+      249,  250,  247,  267,  265,  260,  248,  268,  269,  270,
+      272,  261,  262,  263,  275,  276,  277,  279,  230,  264,
+      273,  230,  285,  287,  287,  287,  267,  292,  265,  287,
+      268,  269,  270,  272,  274,  281,  288,  275,  276,  287,
+      277,  279,  264,  290,  287,  282,  285,  299,  284,  283,
+      292,  300,  297,  230,  295,  301,  289,  287,  274,  281,
+      288,  291,  296,  311,  293,  287,  309,  290,  282,  294,
+      299,  284,  283,  302,  300,  297,  246,  295,  306,  301,
+
+      289,  305,  303,  307,  310,  218,  298,  304,  293,  309,
+      248,  312,  294,  314,  317,  315,  315,  302,  278,  315,
+      246,  322,  306,  286,  286,  305,  303,  307,  310,  298,
+      304,  320,  321,  248,  312,  145,  314,  317,  145,  318,
+       93,  107,   93,   39,  319,  322,   46,   41,   39,  324,
+      286,  286,  324,  324,  320,  321,  324,  324,  324,  324,
+      324,  324,  324,  318,  324,  324,  324,  319,   38,   38,
+      324,   38,   38,   38,   40,   40,   47,   47,   47,   92,
+       92,   92,  184,  324,  324,  184,  184,  204,  324,  324,
+      204,  214,  214,  214,  278,  324,  324,  278,  278,  280,
+
+      324,  324,  280,  286,  286,  286,  313,  324,  324,  313,
+      313,  316,  324,  316,  316,  316,    3,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324
     } ;
 
-static const flex_int16_t yy_chk[780] =
+static const flex_int16_t yy_chk[777] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -625,85 +625,85 @@ static const flex_int16_t yy_chk[780] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
-        5,    5,    5,   12,   12,   13,   13,   16,   17,   21,
-       18,  325,   19,   20,   16,   20,    2,   18,  324,   22,
-       25,  323,   22,   18,   20,   30,   36,   36,   36,   49,
-       27,   16,   17,   21,   18,   19,   20,   16,   20,   27,
-
-        2,   18,   22,   24,   25,   22,   18,   20,   26,   30,
-       24,   50,   26,   49,   27,   24,   28,  312,   33,   33,
-      311,   26,   27,   28,   33,   28,   28,   24,  310,   29,
-       43,   43,   26,   24,   29,   50,   26,   29,   24,   31,
-       28,   31,   33,   33,   26,  308,   28,   33,   28,   28,
-       48,   31,   29,   51,   31,   32,   52,   29,   32,  307,
-       29,   35,   56,   31,   32,   31,   34,   34,   34,   35,
-      304,   53,   54,   48,   31,   55,   51,   31,   57,   32,
-       52,   58,   32,   34,   63,   35,   56,   32,   59,   62,
-       62,   64,   65,   35,   53,   54,   66,   68,   55,   67,
-
-      303,   69,   57,   72,   74,   58,   76,   34,   63,   75,
-       81,   59,   62,   62,   64,   67,   65,   77,   75,   66,
-       68,   79,   78,   67,   69,   78,   80,   72,   74,   76,
-       82,   83,   85,   75,   81,   87,   85,   89,   67,   90,
-       77,   75,   86,   95,   79,   78,   96,   86,   78,   80,
-       88,   88,   88,   82,   93,   83,   85,   97,   87,   98,
-       85,   89,   99,   90,  100,   86,   95,   88,  104,   96,
-       86,  102,  103,  106,  108,  107,  105,  109,   93,  110,
-       97,  114,   98,  116,  107,   99,  111,  113,  100,  117,
-      118,   88,  104,  105,  102,  103,  106,  108,  105,  107,
-
-      119,  109,  110,  121,  114,  105,  116,  107,  122,  125,
-      111,  113,  117,  118,  123,  126,  127,  105,  128,  302,
-      129,  105,  130,  119,  131,  132,  133,  121,  105,  134,
-      291,  135,  122,  125,  136,  137,  140,  123,  126,  127,
-      145,  286,  128,  129,  146,  130,  147,  148,  131,  132,
-      133,  149,  150,  134,  135,  151,  155,  136,  137,  156,
-      140,  157,  161,  160,  145,  128,  162,  163,  146,  147,
-      148,  164,  165,  166,  149,  160,  150,  167,  151,  155,
-      169,  172,  156,  173,  174,  157,  161,  176,  177,  179,
-      162,  163,  180,  184,  164,  165,  166,  183,  185,  160,
-
-      167,  187,  169,  188,  169,  172,  173,  190,  174,  193,
-      176,  177,  192,  179,  194,  195,  180,  184,  196,  197,
-      183,  185,  198,  199,  187,  169,  188,  169,  200,  192,
-      203,  190,  202,  193,  205,  206,  207,  194,  195,  208,
-      210,  196,  197,  213,  202,  198,  214,  199,  215,  216,
-      217,  200,  219,  192,  220,  282,  221,  205,  206,  207,
-      203,  222,  208,  210,  225,  215,  213,  228,  202,  214,
-      229,  230,  233,  216,  217,  219,  234,  235,  220,  221,
-      236,  238,  228,  203,  222,  239,  240,  225,  241,  215,
-      242,  243,  228,  248,  230,  233,  228,  250,  229,  234,
-
-      235,  244,  245,  246,  236,  238,  228,  247,  313,  239,
-      240,  249,  241,  242,  243,  228,  255,  230,  256,  228,
-      250,  229,  248,  257,  249,  244,  245,  246,  260,  261,
-      263,  247,  267,  265,  268,  274,  270,  271,  273,  255,
-      275,  256,  278,  313,  283,  248,  257,  287,  249,  265,
-      274,  260,  261,  263,  284,  267,  283,  285,  268,  270,
-      274,  271,  273,  290,  274,  296,  278,  275,  289,  297,
-      287,  284,  300,  265,  274,  292,  294,  285,  301,  293,
-      283,  272,  295,  274,  299,  297,  298,  274,  289,  296,
-      275,  305,  290,  289,  293,  284,  300,  309,  292,  294,
-
-      299,  285,  301,  314,  293,  295,  298,  264,  293,  297,
-      316,  298,  289,  306,  305,  290,  289,  315,  293,  317,
-      309,  292,  319,  320,  299,  315,  314,  293,  262,  321,
-      298,  293,  201,  316,  298,  318,  186,  306,  143,  317,
-      101,   92,   60,  318,  317,  319,  320,   42,   38,   15,
-       11,    8,  315,  321,    3,    0,    0,    0,    0,    0,
-        0,    0,    0,  317,    0,    0,    0,  317,    0,    0,
-      318,  327,  327,    0,  327,  327,  327,  328,  328,  329,
-      329,  329,  330,  330,  330,  331,    0,    0,  331,  331,
-      332,    0,    0,  332,  333,  333,  333,  334,    0,    0,
-
-      334,  334,  335,    0,    0,  335,  336,  336,  336,  337,
-        0,    0,  337,  337,  338,    0,  338,  338,  338,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326
+        5,    5,    5,   12,   12,   13,   13,   16,   17,  323,
+       18,  322,   19,   20,   16,   20,    2,   18,   21,   25,
+      321,   24,  310,   18,   20,   21,   22,  309,   24,   22,
+      308,   16,   17,   24,   18,   19,   20,   16,   20,  306,
+
+        2,   18,   21,   25,   27,   24,   18,   20,   21,   22,
+       26,   24,   22,   27,   26,   28,   24,   30,   34,   34,
+       34,   29,   28,   26,   28,   28,   29,   48,   27,   29,
+       36,   36,   36,  305,   26,   34,   27,   49,   26,   28,
+      302,   30,   43,   43,   29,   28,   26,   28,   28,   29,
+       48,   31,   29,   31,   50,   32,   33,   33,   32,   34,
+       52,   49,   33,   31,   32,   51,   31,   53,   35,  301,
+       54,   55,   56,   57,   58,   31,   35,   31,   50,   32,
+       33,   33,   32,   35,   52,   33,   31,   32,   51,   31,
+       53,   59,   35,   54,   55,   60,   56,   57,   58,   64,
+
+       35,   63,   63,   65,   66,   68,   35,   67,   69,   70,
+       73,   75,  300,   76,   82,   59,   77,   78,   60,   80,
+       81,   68,   76,   64,   63,   63,   65,   83,   66,   68,
+       67,   69,   70,   79,   73,   75,   79,   76,   82,   77,
+       78,   84,   80,   81,   68,   76,   88,   86,  289,   87,
+       83,   86,   90,  284,   87,   91,   79,   94,  101,   79,
+       96,   89,   89,   89,   97,   84,   98,   99,  100,   88,
+      103,   86,   87,  104,  105,   86,   90,   87,   89,   91,
+      106,   94,  101,   96,  107,  108,  109,   97,  110,   98,
+       99,  100,  111,  103,  112,  109,  104,  105,  113,  115,
+
+      123,  107,   89,  116,  106,  118,  107,  119,  108,  120,
+      109,  110,  121,  107,  124,  127,  111,  112,  109,  125,
+      128,  129,  113,  115,  123,  107,  116,  130,  118,  107,
+      119,  131,  120,  132,  133,  121,  107,  134,  124,  127,
+      135,  136,  125,  128,  129,  137,  138,  139,  142,  147,
+      280,  130,  148,  149,  131,  150,  132,  151,  133,  152,
+      153,  134,  154,  158,  135,  136,  159,  160,  137,  138,
+      139,  163,  142,  147,  130,  164,  148,  149,  150,  165,
+      151,  166,  152,  167,  153,  154,  158,  168,  169,  159,
+      170,  160,  172,  175,  177,  163,  176,  179,  180,  164,
+
+      182,  183,  188,  165,  187,  166,  167,  189,  191,  192,
+      168,  169,  194,  170,  172,  197,  172,  175,  177,  176,
+      179,  180,  196,  202,  182,  183,  188,  187,  198,  199,
+      189,  191,  192,  200,  201,  203,  194,  172,  197,  172,
+      206,  205,  208,  209,  210,  211,  196,  202,  213,  216,
+      217,  198,  199,  205,  219,  220,  200,  201,  203,  218,
+      222,  271,  223,  224,  227,  208,  209,  210,  211,  231,
+      206,  213,  216,  217,  230,  232,  218,  205,  219,  220,
+      264,  235,  236,  237,  222,  223,  224,  227,  238,  230,
+      240,  241,  242,  206,  243,  244,  251,  231,  232,  230,
+
+      218,  245,  262,  230,  235,  236,  237,  246,  247,  248,
+      249,  250,  238,  230,  240,  241,  242,  243,  244,  251,
+      231,  232,  230,  256,  250,  245,  230,  257,  260,  261,
+      263,  246,  247,  248,  267,  269,  270,  272,  265,  249,
+      273,  274,  276,  283,  281,  288,  256,  285,  250,  290,
+      257,  260,  261,  263,  265,  273,  281,  267,  269,  282,
+      270,  272,  249,  283,  287,  273,  276,  292,  274,  273,
+      285,  293,  290,  204,  288,  294,  282,  295,  265,  273,
+      281,  291,  296,  311,  287,  297,  303,  283,  273,  287,
+      292,  274,  273,  295,  293,  290,  291,  288,  298,  294,
+
+      282,  297,  296,  299,  304,  190,  291,  296,  287,  303,
+      291,  307,  287,  312,  314,  313,  316,  295,  311,  315,
+      291,  319,  298,  313,  316,  297,  296,  299,  304,  291,
+      296,  317,  318,  291,  307,  145,  312,  314,  102,  315,
+       93,   61,   42,   38,  315,  319,   15,   11,    8,    3,
+      313,  316,    0,    0,  317,  318,    0,    0,    0,    0,
+        0,    0,    0,  315,    0,    0,    0,  315,  325,  325,
+        0,  325,  325,  325,  326,  326,  327,  327,  327,  328,
+      328,  328,  329,    0,    0,  329,  329,  330,    0,    0,
+      330,  331,  331,  331,  332,    0,    0,  332,  332,  333,
+
+        0,    0,  333,  334,  334,  334,  335,    0,    0,  335,
+      335,  336,    0,  336,  336,  336,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1066,13 +1066,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 327 )
+				if ( yy_current_state >= 325 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 326 );
+		while ( yy_current_state != 324 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1187,12 +1187,12 @@ YY_RULE_SETUP
 case 16:
 YY_RULE_SETUP
 #line 147 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+{ count(); return tFRAME; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 148 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
@@ -1202,92 +1202,92 @@ YY_RULE_SETUP
 case 19:
 YY_RULE_SETUP
 #line 150 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGOLOOP; }
+{ count(); return tGO; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 151 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINSTANCE; }
+{ count(); return tGOLOOP; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 152 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS;}
+{ count(); return tINSTANCE; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 153 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tINTERSECTS;}
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 154 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIN; }
+{ count(); return tINTO; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 155 "engines/director/lingo/lingo-lex.l"
-{ count(); return tITEM; }
+{ count(); return tIN; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 156 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLINE; }
+{ count(); return tITEM; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 157 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO;; }
+{ count(); return tLINE; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 158 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMETHOD; }
+{ count(); return tMACRO;; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 159 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOD;}
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 160 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tMOD;}
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 161 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 162 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tNEXT; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 163 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); return tON; }		// D3
+{ count(); return tOF; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOPEN; }
+{ count(); return tON; }		// D3
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tOPEN; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 167 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAY; }
+{ count(); return tOR; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
@@ -1969,7 +1969,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 327 )
+			if ( yy_current_state >= 325 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1997,11 +1997,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 327 )
+		if ( yy_current_state >= 325 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 326);
+	yy_is_jam = (yy_current_state == 324);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 49511cd61a..dbd453df04 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -144,6 +144,7 @@ end({spc}+{identifier})?	{
 ^{spc}*factory { count(); return tFACTORY; }
 exit		{ count(); return tEXIT; }
 field		{ count(); return tFIELD; }
+frame		{ count(); return tFRAME; }
 global		{ count(); return tGLOBAL; }
 go{spc}+(to{spc}+)?frame	{ count(); return tGO; }
 go{spc}+(to)?	{ count(); return tGO; }
@@ -164,7 +165,6 @@ of			{ count(); return tOF; }
 on			{ count(); return tON; }		// D3
 open		{ count(); return tOPEN; }
 or			{ count(); return tOR; }
-play{spc}+frame	{ count(); return tPLAY; }
 play		{ count(); return tPLAY; }
 playAccel	{ count(); return tPLAYACCEL; }
 previous	{ count(); return tPREVIOUS; }


Commit: da9341c79615d956877ba5459717c83f271b8deb
    https://github.com/scummvm/scummvm/commit/da9341c79615d956877ba5459717c83f271b8deb
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Remove play preprocessor

Changed paths:
    engines/director/lingo/lingo-preprocessor.cpp


diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index 7131ddd190..b9832e1278 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -27,7 +27,6 @@
 namespace Director {
 
 Common::String preprocessWhen(Common::String in, bool *changed);
-Common::String preprocessPlay(Common::String in);
 Common::String preprocessSound(Common::String in);
 
 bool isspec(char c) {
@@ -211,7 +210,6 @@ Common::String LingoCompiler::codePreprocessor(const char *s, LingoArchive *arch
 		res1 = preprocessWhen(res1, &changed);
 
 		if (!changed) {
-			res1 = preprocessPlay(res1);
 			res1 = preprocessSound(res1);
 		}
 
@@ -301,53 +299,6 @@ Common::String preprocessWhen(Common::String in, bool *changed) {
 	return res;
 }
 
-// play done -> play #done
-Common::String preprocessPlay(Common::String in) {
-	Common::String res, next;
-	const char *ptr = in.c_str();
-	const char *beg = ptr;
-	const char *nextPtr;
-
-	while ((ptr = scumm_strcasestr(beg, "play")) != NULL) {
-		if (ptr != findtokstart(in.c_str(), ptr)) { // If we're in the middle of a word
-			res += *beg++;
-			continue;
-		}
-
-		ptr += 4; // end of 'play'
-		res += Common::String(beg, ptr);
-
-		if (!*ptr)	// If it is end of the line
-			break;
-
-		if (Common::isAlnum(*ptr)) { // If it is in the middle of the word
-			beg = ptr;
-			continue;
-		}
-
-		next = nexttok(ptr, &nextPtr);
-
-		debugC(2, kDebugParse | kDebugPreprocess, "PLAY: nexttok: %s", next.c_str());
-
-		if (next.equalsIgnoreCase("done")) {
-			res += " #"; // Turn it into SYMBOL
-		} else {
-			res += ' ';
-		}
-
-		res += next;
-		ptr = nextPtr;
-		beg = ptr;
-	}
-
-	res += Common::String(beg);
-
-	if (in.size() != res.size())
-		debugC(2, kDebugParse | kDebugPreprocess, "PLAY: in: %s\nout: %s", in.c_str(), res.c_str());
-
-	return res;
-}
-
 // sound fadeIn 5, 10 -> sound #fadeIn, 5, 10
 Common::String preprocessSound(Common::String in) {
 	Common::String res, next;


Commit: 4d6e4558c926877762e2a0866bc981ea0e08f0a4
    https://github.com/scummvm/scummvm/commit/4d6e4558c926877762e2a0866bc981ea0e08f0a4
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement playAccel

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 816b344876..d9e3ae43f3 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -467,6 +467,20 @@ void LingoCompiler::visitCmdNode(CmdNode *node) {
 		}
 	}
 
+	if (node->name->equalsIgnoreCase("playAccel")) {
+		for (uint i = 0; i < node->args->size(); i++) {
+			Node *arg = (*node->args)[i];
+			if (arg->type == kVarNode) {
+				code1(LC::c_symbolpush);
+				codeString(static_cast<VarNode *>(arg)->name->c_str());
+			} else {
+				compile(arg);
+			}
+		}
+		codeCmd(node->name, node->args->size());
+		return;
+	}
+
 	compileList(node->args);
 	codeCmd(node->name, node->args->size());
 }
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 7b78e7da85..ee718379ce 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -609,18 +609,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  108
+#define YYFINAL  107
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2465
+#define YYLAST   2463
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  94
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  44
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  181
+#define YYNRULES  180
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  334
+#define YYNSTATES  333
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   333
@@ -681,21 +681,21 @@ static const yytype_int16 yyrline[] =
      244,   248,   250,   252,   253,   256,   262,   269,   270,   275,
      279,   283,   284,   285,   290,   291,   292,   293,   294,   295,
      296,   301,   302,   305,   307,   308,   309,   310,   313,   314,
-     315,   316,   317,   319,   320,   322,   323,   326,   327,   328,
-     329,   330,   332,   333,   334,   335,   336,   337,   338,   339,
-     340,   343,   344,   347,   351,   361,   362,   363,   364,   367,
-     368,   369,   372,   373,   374,   375,   376,   377,   378,   381,
-     384,   389,   393,   399,   404,   407,   413,   418,   424,   430,
-     436,   444,   445,   446,   447,   450,   450,   452,   453,   454,
-     457,   461,   465,   471,   475,   479,   483,   485,   487,   491,
-     492,   496,   502,   509,   510,   516,   517,   518,   519,   520,
-     521,   522,   523,   526,   528,   532,   536,   537,   538,   541,
-     545,   550,   551,   552,   555,   557,   558,   561,   562,   563,
-     570,   571,   575,   576,   577,   578,   579,   580,   581,   582,
-     583,   584,   585,   586,   587,   588,   589,   590,   591,   592,
+     315,   316,   317,   319,   320,   322,   325,   326,   327,   328,
+     329,   331,   332,   333,   334,   335,   336,   337,   338,   339,
+     342,   343,   346,   350,   360,   361,   362,   363,   366,   367,
+     368,   371,   372,   373,   374,   375,   376,   377,   380,   383,
+     388,   392,   398,   403,   406,   412,   417,   423,   429,   435,
+     443,   444,   445,   446,   449,   449,   451,   452,   453,   456,
+     460,   464,   470,   474,   478,   482,   484,   486,   490,   491,
+     495,   501,   508,   509,   515,   516,   517,   518,   519,   520,
+     521,   522,   525,   527,   531,   535,   536,   537,   540,   544,
+     549,   550,   551,   554,   556,   557,   560,   561,   562,   569,
+     570,   574,   575,   576,   577,   578,   579,   580,   581,   582,
+     583,   584,   585,   586,   587,   588,   589,   590,   591,   598,
      599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-     609,   610,   611,   612,   613,   614,   615,   616,   619,   620,
-     623,   627
+     609,   610,   611,   612,   613,   614,   615,   618,   619,   622,
+     626
 };
 #endif
 
@@ -758,7 +758,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-222)
+#define YYPACT_NINF (-225)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -772,40 +772,40 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1323,  -222,  -222,  -222,  -222,  -222,  -222,  -222,   -32,  -222,
-    2137,   930,  -222,  -222,  2137,  -222,   -24,  -222,  -222,  1010,
-     -11,  2137,  -222,  -222,  -222,  -222,  2137,  -222,  1090,  2137,
-    -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,
-    -222,  -222,  -222,  -222,  -222,  2137,  2137,  -222,  -222,    40,
-    1323,  -222,  -222,  -222,  -222,  1010,  -222,  -222,  -222,  -222,
-    -222,  -222,  -222,  -222,   -43,  -222,  -222,  -222,  -222,  -222,
-     -21,   -16,  -222,  -222,  -222,  -222,   930,   930,   930,   930,
-     438,   -12,  -222,  -222,  -222,  -222,  -222,  -222,  2181,  2137,
-     -13,   848,    -9,   520,  2137,   930,  -222,  -222,   -30,    -5,
-     930,   930,    -4,    -2,   602,     3,     6,  2137,  -222,  -222,
-       9,   684,  -222,  -222,  2137,  -222,  -222,  -222,  2216,   -20,
-       5,   -17,   -78,   -64,  -222,  2367,    -1,    -7,   930,  1829,
-     930,   930,   930,   930,   930,   930,   930,   930,   930,   930,
-     930,   930,   930,   930,   930,   930,   930,    10,  -222,  -222,
-     311,  -222,  2137,  1170,  1170,  1250,  2137,  2137,   156,   930,
-    -222,  -222,  -222,  2229,    34,  2267,  -222,  -222,   930,   -68,
-     766,  2367,  -222,  -222,    66,  -222,  -222,    13,  -222,  -222,
-    -222,   930,   930,  -222,   930,  2077,  -222,  -222,   930,    14,
-    1891,    79,   -25,   -25,   -25,   -25,    65,    65,  -222,   -15,
-     -25,   -25,   -25,   -25,   -15,   -46,   -46,  -222,  -222,  1891,
-     930,  -222,    19,    23,    24,    -7,   930,   930,   930,   930,
-     930,   930,   930,   930,   930,   930,   930,   930,   930,   930,
-     930,   930,   930,   930,   930,  1891,  2280,  2137,  -222,  -222,
-      25,  -222,  -222,    78,  2380,   930,  1891,  2367,  2367,  2367,
-     -20,     5,    27,  -222,  2367,  -222,  -222,  -222,  1385,  -222,
-    -222,  1953,  1891,   -58,  -222,  -222,  -222,   -25,   -25,   -25,
-     -25,    65,    65,  -222,   -15,   -25,   -25,   -25,   -25,   -15,
-     -46,   -46,  -222,  -222,    -7,  2166,  1448,  -222,  2137,   -68,
-     930,  2367,  1517,  2015,    35,  -222,  1891,  -222,  -222,    81,
-     930,    38,    43,  -222,  2367,  2137,  1891,  -222,  -222,  1579,
-     930,  2317,  -222,  1891,   -40,  -222,  1642,    44,  2330,  1891,
-    1891,  -222,  2137,    45,  -222,  1891,  1705,  -222,  -222,  1767,
-      48,    49,  -222,  -222
+    1322,  -225,  -225,  -225,  -225,  -225,  -225,   -33,  -225,  2135,
+     929,  -225,  -225,  2135,  -225,   -30,  -225,  -225,  1009,    20,
+    2135,  -225,  -225,  -225,  -225,  2135,  -225,  1089,  2135,  -225,
+    -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,
+    -225,  -225,  -225,  -225,  2135,  2135,  -225,  -225,    34,  1322,
+    -225,  -225,  -225,  -225,  1009,  -225,  -225,  -225,  -225,  -225,
+    -225,  -225,  -225,   -51,  -225,  -225,  -225,  -225,  -225,   -41,
+     -38,  -225,  -225,  -225,  -225,   929,   929,   929,   929,   437,
+     -29,  -225,  -225,  -225,  -225,  -225,  -225,  2179,  2135,   -10,
+     847,    -9,   519,  2135,   929,  -225,  -225,   -35,    -5,   929,
+     929,    -2,    -1,   601,     3,     7,  2135,  -225,  -225,     9,
+     683,  -225,  -225,  2135,  -225,  -225,  -225,  2214,   -31,   -17,
+     -12,   -78,   -66,  -225,  2365,     5,    10,   929,  1828,   929,
+     929,   929,   929,   929,   929,   929,   929,   929,   929,   929,
+     929,   929,   929,   929,   929,   929,    12,  -225,  -225,   310,
+    -225,  2135,  1169,  1169,  1249,  2135,  2135,   155,   929,  -225,
+    -225,  -225,  2227,    47,  2265,  -225,  -225,   929,   -23,   765,
+    2365,  -225,  -225,    52,  -225,  -225,    16,  -225,  -225,  -225,
+     929,   929,  -225,   929,  2075,  -225,  -225,   929,    15,  1890,
+      83,   -26,   -26,   -26,   -26,   189,   189,  -225,   -44,   -26,
+     -26,   -26,   -26,   -44,   -37,   -37,  -225,  -225,  1890,   929,
+    -225,    21,    23,    24,    10,   929,   929,   929,   929,   929,
+     929,   929,   929,   929,   929,   929,   929,   929,   929,   929,
+     929,   929,   929,   929,  1890,  2278,  2135,  -225,  -225,    25,
+    -225,  -225,    79,  2378,   929,  1890,  2365,  2365,  2365,   -31,
+     -17,    26,  -225,  2365,  -225,  -225,  -225,  1384,  -225,  -225,
+    1952,  1890,   -61,  -225,  -225,  -225,   -26,   -26,   -26,   -26,
+     189,   189,  -225,   -44,   -26,   -26,   -26,   -26,   -44,   -37,
+     -37,  -225,  -225,    10,  2164,  1447,  -225,  2135,   -23,   929,
+    2365,  1516,  2014,    29,  -225,  1890,  -225,  -225,    74,   929,
+      31,    33,  -225,  2365,  2135,  1890,  -225,  -225,  1578,   929,
+    2315,  -225,  1890,   -16,  -225,  1641,    35,  2328,  1890,  1890,
+    -225,  2135,    36,  -225,  1890,  1704,  -225,  -225,  1766,    37,
+      38,  -225,  -225
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -813,60 +813,60 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,    24,    45,    28,    31,    48,    57,    30,     0,    32,
-      61,     0,    33,    35,     0,    39,    40,    42,    46,    79,
-      47,    49,    52,    55,    58,    56,     0,    43,    79,    61,
-      26,    44,    41,    38,    25,    27,    50,    29,    36,    37,
-      60,    54,    34,    59,    51,    61,     0,    53,     5,     0,
-       2,     3,     6,     7,     8,    79,     9,    65,    69,    70,
-      71,    66,    67,    68,     0,    78,    40,    47,    49,    63,
-       0,    62,   115,   116,   118,   117,    41,     0,     0,     0,
-     178,   123,   137,   121,   122,   138,   139,   142,     0,    61,
-       0,     0,     0,    80,     0,     0,   123,   125,     0,     0,
-      32,    39,     0,     0,    80,     0,     0,    61,     1,     4,
-       0,    80,    77,    97,     0,   119,   135,   136,     0,   118,
-     117,     0,   123,     0,   129,   180,     0,   179,   178,     0,
+       0,    24,    28,    31,    47,    56,    30,     0,    32,    60,
+       0,    33,    35,     0,    39,    40,    42,    45,    78,    46,
+      48,    51,    54,    57,    55,     0,    43,    78,    60,    26,
+      44,    41,    38,    25,    27,    49,    29,    36,    37,    59,
+      53,    34,    58,    50,    60,     0,    52,     5,     0,     2,
+       3,     6,     7,     8,    78,     9,    64,    68,    69,    70,
+      65,    66,    67,     0,    77,    40,    46,    48,    62,     0,
+      61,   114,   115,   117,   116,    41,     0,     0,     0,   177,
+     122,   136,   120,   121,   137,   138,   141,     0,    60,     0,
+       0,     0,    79,     0,     0,   122,   124,     0,     0,    32,
+      39,     0,     0,    79,     0,     0,    60,     1,     4,     0,
+      79,    76,    96,     0,   118,   134,   135,     0,   117,   116,
+       0,   122,     0,   128,   179,     0,   178,   177,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    76,    84,
-       0,    73,    35,    26,    44,    38,    25,    27,    50,     0,
-     140,   141,   160,    82,     0,     0,    95,    96,     0,    13,
-      86,    87,    74,    75,    42,    99,    98,     0,    72,    64,
-     134,     0,     0,   127,     0,     0,   128,   126,     0,     0,
-     109,   100,   152,   153,   150,   151,   154,   155,   147,   157,
-     158,   159,   149,   148,   156,   143,   144,   145,   146,   109,
-       0,   124,     0,     0,     0,    81,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    75,    83,     0,
+      72,    35,    26,    44,    38,    25,    27,    49,     0,   139,
+     140,   159,    81,     0,     0,    94,    95,     0,    13,    85,
+      86,    73,    74,    42,    98,    97,     0,    71,    63,   133,
+       0,     0,   126,     0,     0,   127,   125,     0,     0,   108,
+      99,   151,   152,   149,   150,   153,   154,   146,   156,   157,
+     158,   148,   147,   155,   142,   143,   144,   145,   108,     0,
+     123,     0,     0,     0,    80,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   109,     0,     0,    17,    18,
-      11,    14,    15,    42,    90,     0,   109,   133,   131,   132,
-       0,     0,     0,   130,   181,   120,   113,   114,     0,   110,
-     111,     0,    10,     0,    91,    92,    93,   170,   171,   168,
-     169,   172,   173,   165,   175,   176,   177,   167,   166,   174,
-     161,   162,   163,   164,    83,     0,     0,    94,    61,     0,
-       0,    89,    20,     0,     0,   112,   109,   102,    85,     0,
-       0,     0,     0,    16,    88,    21,   109,   104,   101,     0,
-       0,     0,   106,   109,     0,    22,     0,     0,     0,   109,
-      12,    19,     0,     0,   103,   109,     0,    23,   105,     0,
-       0,     0,   107,   108
+       0,     0,     0,     0,   108,     0,     0,    17,    18,    11,
+      14,    15,    42,    89,     0,   108,   132,   130,   131,     0,
+       0,     0,   129,   180,   119,   112,   113,     0,   109,   110,
+       0,    10,     0,    90,    91,    92,   169,   170,   167,   168,
+     171,   172,   164,   174,   175,   176,   166,   165,   173,   160,
+     161,   162,   163,    82,     0,     0,    93,    60,     0,     0,
+      88,    20,     0,     0,   111,   108,   101,    84,     0,     0,
+       0,     0,    16,    87,    21,   108,   103,   100,     0,     0,
+       0,   105,   108,     0,    22,     0,     0,     0,   108,    12,
+      19,     0,     0,   102,   108,     0,    23,   104,     0,     0,
+       0,   106,   107
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -222,  -222,  -222,    87,  -222,  -222,  -222,  -222,  -222,  -149,
-    -222,  -222,     0,   -28,  -222,     4,  -222,  -222,    -6,  -222,
-    -222,  -222,  -222,  -222,  -222,  -222,  -204,  -222,  -221,   -86,
-     -18,  -105,  -222,  -222,  -222,   -44,   -84,  -222,   -14,  -222,
-     200,   -27,    26,  -157
+    -225,  -225,  -225,    77,  -225,  -225,  -225,  -225,  -225,  -161,
+    -225,  -225,     0,   -25,  -225,     4,  -225,  -225,   -11,  -225,
+    -225,  -225,  -225,  -225,  -225,  -225,  -203,  -225,  -224,   -86,
+     -18,   -82,  -225,  -225,  -225,   -55,   -80,  -225,    -7,  -225,
+     200,   -39,     8,  -157
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    49,    50,    51,    52,    53,   239,   240,   241,   242,
-      54,   314,    81,    70,    71,   257,    57,    58,    92,   103,
-      59,   168,    60,    61,    62,    63,   258,   259,   260,    82,
-      83,   212,    98,    84,   123,   124,    85,    86,    87,   162,
-     125,   163,   126,   127
+       0,    48,    49,    50,    51,    52,   238,   239,   240,   241,
+      53,   313,    80,    69,    70,   256,    56,    57,    91,   102,
+      58,   167,    59,    60,    61,    62,   257,   258,   259,    81,
+      82,   211,    97,    83,   122,   123,    84,    85,    86,   161,
+     124,   162,   125,   126
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -874,544 +874,544 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      55,   105,   215,    97,    56,   262,   237,   160,    64,   161,
-      69,   128,   136,   166,    89,   184,    90,   106,   160,   238,
-     161,    96,   102,   167,   185,   160,    99,   161,   186,    69,
-     188,   286,   298,   136,    94,    95,   137,   295,   145,   146,
-     108,   295,   292,   136,   112,    69,   107,   321,   322,   110,
-      55,   213,   214,   263,    56,    65,   142,   143,   144,   145,
-     146,   147,   115,   116,   117,   295,   113,   143,   144,   145,
-     146,   295,   114,   181,   148,   183,   284,   128,   151,   177,
-     122,   188,   169,   172,   160,   173,   161,   234,   295,    69,
-     175,   187,   309,   176,   164,   295,   178,   209,   182,   295,
-     246,   245,   316,   261,   255,   295,   264,    69,   295,   320,
-     265,   266,   289,   290,   179,   326,   130,   131,   132,   133,
-     184,   329,   308,   136,   310,   312,   137,   138,   139,    55,
-     313,   324,   328,   191,   211,   332,   333,   109,   211,   211,
-     303,   253,     0,   244,   140,   141,   142,   143,   144,   145,
-     146,     0,    96,     0,   189,     0,    96,    96,     0,     0,
-       0,    72,     0,     0,     0,     0,    73,     0,     0,     1,
-      74,    75,     0,     2,     0,     3,     4,     5,     6,     7,
-       0,     0,     0,     9,     0,   252,     0,     0,    12,    13,
-      55,    15,    66,    17,    18,     0,    67,    68,     0,    22,
-      23,    24,    25,     0,    27,     0,     0,     0,     0,    55,
-       0,    88,     0,    76,    33,    34,    35,     0,     0,    93,
-      37,    38,    39,    40,    41,    42,    43,    44,   104,     0,
-       0,     0,     0,     0,    47,    55,     0,   288,    77,    78,
-       0,     0,     0,     0,     0,    79,    55,    80,     0,     0,
-       0,     0,     0,     0,     0,   111,     0,     0,    55,     0,
-     302,    55,    55,     0,     0,   297,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   118,
-       0,     0,     0,     0,     0,     0,    55,     0,    69,     0,
-       0,   150,    55,    55,     0,   165,    55,   307,     0,     0,
-     170,   171,     0,     0,     0,   315,    55,     0,     0,    55,
-       0,     0,     0,    55,     0,     0,    55,     0,     0,    55,
-      55,     0,   327,     0,     0,    55,    55,     0,     0,    55,
+      54,   214,    96,   104,    55,   261,   159,    63,   165,    68,
+      89,   127,   160,    88,   135,   183,   101,   159,   166,   105,
+      95,   135,   184,   160,   159,    98,   185,   187,    68,   297,
+     160,   285,   135,   294,   107,   136,   111,   294,   142,   143,
+     144,   145,   291,   109,    68,   106,   112,   144,   145,    54,
+     113,   236,   262,    55,    64,   141,   142,   143,   144,   145,
+     127,   294,   180,   146,   237,    93,    94,   294,   114,   115,
+     116,   320,   321,   212,   213,   283,   181,   147,   150,   121,
+     182,   176,   168,   159,   294,   171,   172,   244,    68,   160,
+     174,   294,   308,   163,   175,   294,   177,   186,   187,   208,
+     233,   294,   315,   245,   294,   254,    68,   260,   263,   319,
+     264,   265,   288,   178,   289,   325,   307,   309,   311,   183,
+     312,   328,   323,   327,   331,   332,   108,   302,    54,   252,
+     243,     0,   190,   210,     0,   188,     0,   210,   210,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    95,     0,     0,     0,    95,    95,     0,     0,     0,
+      71,     0,     0,     0,     0,    72,     0,     0,     1,    73,
+      74,     0,     0,     0,     2,     3,     4,     5,     6,     0,
+       0,     0,     8,     0,   251,     0,     0,    11,    12,    54,
+      14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
+      23,    24,     0,    26,     0,     0,     0,     0,    54,     0,
+      87,     0,    75,    32,    33,    34,     0,     0,    92,    36,
+      37,    38,    39,    40,    41,    42,    43,   103,     0,     0,
+       0,     0,     0,    46,    54,     0,   287,    76,    77,     0,
+     129,   130,   131,   132,    78,    54,    79,   135,     0,     0,
+     136,   137,   138,     0,   110,     0,     0,    54,     0,     0,
+      54,    54,   301,     0,   296,     0,     0,     0,   139,   140,
+     141,   142,   143,   144,   145,     0,     0,     0,   117,     0,
+       0,     0,     0,     0,     0,    54,     0,    68,     0,     0,
+     149,    54,    54,     0,   164,    54,   306,     0,     0,   169,
+     170,     0,     0,     0,   314,    54,     0,     0,    54,     0,
+       0,     0,    54,     0,     0,    54,     0,     0,    54,    54,
+       0,   326,     0,     0,    54,    54,     0,     0,    54,   191,
      192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,     0,     0,     0,
-       0,     0,     0,   196,   197,   198,     0,     0,   201,     0,
-       0,     0,   130,   131,   132,   133,   134,   135,   236,   136,
-       0,     0,   137,   138,   139,     0,     0,     0,     0,     0,
-       0,   247,   248,     0,   249,     0,     0,     0,   254,     0,
-     140,   141,   142,   143,   144,   145,   146,     0,     0,   210,
-       0,   180,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   267,   268,   269,   270,
+     202,   203,   204,   205,   206,   207,     0,     0,     0,     0,
+       0,     0,   195,   196,   197,     0,     0,   200,     0,     0,
+       0,   129,   130,   131,   132,   133,   134,   235,   135,     0,
+       0,   136,   137,   138,     0,     0,     0,     0,     0,     0,
+     246,   247,     0,   248,     0,     0,     0,   253,     0,   139,
+     140,   141,   142,   143,   144,   145,     0,     0,   209,     0,
+     179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   266,   267,   268,   269,   270,
      271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,     0,   285,     0,     0,     0,     0,     0,
-       0,     0,     0,    72,     0,   291,     0,     0,    73,     0,
-       0,     1,   119,   120,     0,     2,     0,     3,     4,     5,
-       6,     7,     0,     0,     0,     9,     0,     0,     0,     0,
-      12,    13,     0,    15,    66,    17,    18,     0,    67,    68,
-       0,    22,    23,    24,    25,     0,    27,     0,     0,     0,
-     304,     0,     0,    30,    31,    76,    33,    34,    35,     0,
-     311,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-     318,     0,     0,     0,     0,     0,    47,     0,     0,     0,
-      77,    78,     0,     0,     0,    72,     0,    79,     0,    80,
-      73,   121,     0,     1,    74,    75,     0,     2,     0,     3,
-       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
-       0,     0,    12,   152,     0,    15,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,   130,   131,   132,   133,   153,   154,    76,   155,   156,
-     157,   137,   138,   158,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     0,     0,     0,     0,    47,   140,
-     141,   142,   143,   144,   145,   146,     0,    72,   159,    79,
-       0,    80,    73,     0,     0,     1,    74,    75,     0,     2,
-       0,     3,     4,     5,     6,     7,     0,     0,     0,     9,
-       0,     0,     0,     0,    12,    13,     0,    15,    66,   174,
-      18,     0,    67,    68,     0,    22,    23,    24,    25,     0,
-      27,     0,     0,   130,   131,   132,   133,   153,   154,    76,
-     155,    34,    35,   137,   138,   158,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,     0,     0,     0,     0,
-      47,   140,   141,   142,   143,   144,   145,   146,     0,    72,
-     159,    79,     0,    80,    73,     0,     0,     1,    74,    75,
-       0,     2,     0,     3,     4,     5,     6,     7,     0,     0,
-       0,     9,     0,     0,     0,     0,    12,    13,     0,    15,
-      66,    17,    18,     0,    67,    68,     0,    22,    23,    24,
-      25,     0,    27,     0,     0,   130,   131,   132,   133,   153,
-     154,    76,   155,    34,    35,   137,   138,   158,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,     0,     0,
-       0,     0,    47,   140,   141,   142,   143,   144,   145,   146,
-       0,    72,   159,    79,     0,    80,    73,     0,     0,     1,
-      74,    75,     0,     2,     0,     3,     4,     5,     6,     7,
-       0,     0,     0,     9,     0,     0,     0,     0,    12,    13,
-       0,    15,    66,   243,    18,     0,    67,    68,     0,    22,
-      23,    24,    25,     0,    27,     0,     0,   130,   131,   132,
-     133,   153,   154,    76,   155,    34,    35,   137,   138,   158,
-      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-       0,     0,     0,     0,    47,   140,   141,   142,   143,   144,
-     145,   146,     0,    72,     0,    79,     0,    80,    73,     0,
-       0,     1,    74,    75,     0,     2,     0,     3,     4,     5,
-       6,     7,     0,     0,     0,     9,     0,     0,     0,     0,
-      12,    13,     0,    15,    66,    17,    18,     0,    67,    68,
-       0,    22,    23,    24,    25,     0,    27,     0,     0,     0,
-       0,     0,     0,    30,    31,    76,    33,    34,    35,     0,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-       0,     0,     0,     0,     0,     0,    47,     0,     0,     0,
-      77,    78,     0,     0,     0,    72,     0,    79,   149,    80,
-      73,     0,     0,     1,    74,    75,     0,     2,     0,     3,
-       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
-       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,    30,    31,    76,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
-       0,     0,    77,    78,     0,    72,     0,     0,     0,    79,
-      73,    80,     0,     1,    74,    75,     0,     2,     0,     3,
-       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
-       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,    30,    31,    76,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
-       0,     0,    77,    78,     0,    72,     0,     0,     0,    91,
-      73,    80,     0,     1,    74,    75,     0,     2,     0,     3,
-       4,     5,     6,     7,     0,     0,     0,   100,     0,     0,
-       0,     0,    12,    13,     0,   101,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,    30,    31,    76,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
-       0,     0,    77,    78,     0,    72,     0,     0,     0,    91,
-      73,    80,     0,     1,    74,    75,     0,     2,     0,     3,
-       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
-       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,     0,     0,    76,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
-       0,     0,    77,    78,     0,    72,     0,     0,     0,    79,
-      73,    80,     0,     1,    74,    75,     0,     2,     0,     3,
-       4,     5,     6,     7,     0,     0,     0,     9,     0,     0,
-       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,     0,     0,    76,     0,    34,
-      35,     0,     0,     0,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     0,     0,     0,     0,    47,     0,
-       0,     0,     0,     0,     0,     0,     1,     0,     0,    79,
-       2,    80,     3,     4,     5,     6,     7,     0,     0,     8,
-       9,    10,     0,     0,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-      26,    27,    28,    29,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,     0,     1,     0,
-       0,    47,     2,     0,     3,     4,     5,     6,     7,   293,
-      48,     8,     9,    10,     0,     0,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
-     294,     1,     0,    47,     0,     2,     0,     3,     4,     5,
-       6,     7,   256,     0,     8,     9,    10,     0,     0,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,     0,     0,     0,   301,     0,    47,     0,     0,     0,
-       1,     0,     0,   305,     2,   256,     3,     4,     5,     6,
-       7,     0,     0,     8,     9,    10,     0,     0,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-       0,     0,     1,     0,     0,    47,     2,     0,     3,     4,
-       5,     6,     7,     0,   256,     8,     9,    10,     0,     0,
-      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
-      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,     0,     0,   317,     1,     0,    47,     0,     2,
-       0,     3,     4,     5,     6,     7,   256,     0,     8,     9,
-      10,     0,     0,    11,    12,    13,     0,    15,    16,    17,
-      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
-      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     0,     0,   323,     1,     0,
-      47,     0,     2,     0,     3,     4,     5,     6,     7,   256,
-       0,     8,     9,    10,     0,     0,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
-       1,   330,     0,    47,     2,     0,     3,     4,     5,     6,
-       7,     0,   256,     8,     9,    10,     0,     0,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-       0,     0,     1,   331,     0,    47,     2,     0,     3,     4,
-       5,     6,     7,     0,   256,     8,     9,    10,     0,     0,
-      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
-      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,     0,     0,     1,     0,     0,    47,     2,     0,
-       3,     4,     5,     6,     7,     0,   190,     8,     9,    10,
-       0,     0,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
-       2,     0,     3,     4,     5,     6,     7,     0,   256,     8,
-       9,    10,     0,     0,    11,    12,    13,     0,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     0,     1,     0,
-       0,    47,     2,     0,     3,     4,     5,     6,     7,     0,
-     296,     8,     9,    10,     0,     0,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
-       1,   250,   251,    47,     2,     0,     3,     4,     5,     6,
-       7,     0,   306,     0,     9,     0,     0,     0,     0,    12,
-      13,     0,    15,    66,    17,    18,     0,    67,    68,     0,
-      22,    23,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+     281,   282,     0,   284,     0,     0,     0,     0,     0,     0,
+       0,     0,    71,     0,   290,     0,     0,    72,     0,     0,
+       1,   118,   119,     0,     0,     0,     2,     3,     4,     5,
+       6,     0,     0,     0,     8,     0,     0,     0,     0,    11,
+      12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
+      21,    22,    23,    24,     0,    26,     0,     0,     0,   303,
+       0,     0,    29,    30,    75,    32,    33,    34,     0,   310,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,   317,
+       0,     0,     0,     0,     0,    46,     0,     0,     0,    76,
+      77,     0,     0,     0,    71,     0,    78,     0,    79,    72,
+     120,     0,     1,    73,    74,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+       0,    11,   151,     0,    14,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
+     129,   130,   131,   132,   152,   153,    75,   154,   155,   156,
+     136,   137,   157,    36,    37,    38,    39,    40,    41,    42,
+      43,     0,     0,     0,     0,     0,     0,    46,   139,   140,
+     141,   142,   143,   144,   145,     0,    71,   158,    78,     0,
+      79,    72,     0,     0,     1,    73,    74,     0,     0,     0,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,     0,    11,    12,     0,    14,    65,   173,    17,
+       0,    66,    67,     0,    21,    22,    23,    24,     0,    26,
+       0,     0,   129,   130,   131,   132,   152,   153,    75,   154,
+      33,    34,   136,   137,   157,    36,    37,    38,    39,    40,
+      41,    42,    43,     0,     0,     0,     0,     0,     0,    46,
+     139,   140,   141,   142,   143,   144,   145,     0,    71,   158,
+      78,     0,    79,    72,     0,     0,     1,    73,    74,     0,
+       0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
+       8,     0,     0,     0,     0,    11,    12,     0,    14,    65,
+      16,    17,     0,    66,    67,     0,    21,    22,    23,    24,
+       0,    26,     0,     0,   129,   130,   131,   132,   152,   153,
+      75,   154,    33,    34,   136,   137,   157,    36,    37,    38,
+      39,    40,    41,    42,    43,     0,     0,     0,     0,     0,
+       0,    46,   139,   140,   141,   142,   143,   144,   145,     0,
+      71,   158,    78,     0,    79,    72,     0,     0,     1,    73,
+      74,     0,     0,     0,     2,     3,     4,     5,     6,     0,
+       0,     0,     8,     0,     0,     0,     0,    11,    12,     0,
+      14,    65,   242,    17,     0,    66,    67,     0,    21,    22,
+      23,    24,     0,    26,     0,     0,   129,   130,   131,   132,
+     152,   153,    75,   154,    33,    34,   136,   137,   157,    36,
+      37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
+       0,     0,     0,    46,   139,   140,   141,   142,   143,   144,
+     145,     0,    71,     0,    78,     0,    79,    72,     0,     0,
+       1,    73,    74,     0,     0,     0,     2,     3,     4,     5,
+       6,     0,     0,     0,     8,     0,     0,     0,     0,    11,
+      12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
+      21,    22,    23,    24,     0,    26,     0,     0,     0,     0,
+       0,     0,    29,    30,    75,    32,    33,    34,     0,     0,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,     0,
+       0,     0,     0,     0,     0,    46,     0,     0,     0,    76,
+      77,     0,     0,     0,    71,     0,    78,   148,    79,    72,
+       0,     0,     1,    73,    74,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
+       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
+       0,    76,    77,     0,    71,     0,     0,     0,    78,    72,
+      79,     0,     1,    73,    74,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
+       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
+       0,    76,    77,     0,    71,     0,     0,     0,    90,    72,
+      79,     0,     1,    73,    74,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,    99,     0,     0,     0,
+       0,    11,    12,     0,   100,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
+       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
+       0,    76,    77,     0,    71,     0,     0,     0,    90,    72,
+      79,     0,     1,    73,    74,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
+       0,     0,     0,     0,     0,     0,    75,    32,    33,    34,
+       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
+       0,    76,    77,     0,    71,     0,     0,     0,    78,    72,
+      79,     0,     1,    73,    74,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
+      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
+       0,     0,     0,     0,     0,     0,    75,     0,    33,    34,
+       0,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
+       0,     0,     0,     0,     0,     1,     0,     0,    78,     0,
+      79,     2,     3,     4,     5,     6,     0,     0,     7,     8,
+       9,     0,     0,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     1,     0,     0,
+      46,     0,     0,     2,     3,     4,     5,     6,   292,    47,
+       7,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
+      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,   293,
+       1,     0,    46,     0,     0,     0,     2,     3,     4,     5,
+       6,   255,     0,     7,     8,     9,     0,     0,    10,    11,
+      12,     0,    14,    15,    16,    17,    18,    19,    20,     0,
+      21,    22,    23,    24,     0,    26,    27,    28,     0,     0,
+       0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+       0,     0,     0,   300,     0,    46,     0,     0,     0,     1,
+       0,     0,   304,     0,   255,     2,     3,     4,     5,     6,
+       0,     0,     7,     8,     9,     0,     0,    10,    11,    12,
+       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
+      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
+       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       1,     0,     0,     0,     2,    47,     3,     4,     5,     6,
-       7,     0,     0,     0,     9,     0,     0,     0,     0,    12,
-      13,     0,    15,    66,    17,    18,     0,    67,    68,     0,
-      22,    23,    24,    25,     0,    27,     0,     0,     0,   299,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,   300,
-       0,     0,     0,     0,     0,    47,     0,   130,   131,   132,
-     133,   134,   135,   129,   136,     0,     0,   137,   138,   139,
-       0,     0,   130,   131,   132,   133,   134,   135,     0,   136,
-       0,     0,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,     0,     0,     0,     0,     0,     0,     0,     0,
-     140,   141,   142,   143,   144,   145,   146,   130,   131,   132,
-     133,   134,   135,     0,   136,     0,     0,   137,   138,   139,
-     216,   217,   218,   219,   220,   221,     0,   222,     0,     0,
-     223,   224,   225,     0,     0,   140,   141,   142,   143,   144,
-     145,   146,     0,     0,     0,     0,   180,     0,   226,   227,
-     228,   229,   230,   231,   232,     0,     0,   233,   130,   131,
-     132,   133,   134,   135,     0,   136,     0,     0,   137,   138,
-     139,   130,   131,   132,   133,   134,   135,     0,   136,     0,
-       0,   137,   138,   139,     0,     0,   140,   141,   142,   143,
-     144,   145,   146,     0,   235,     0,     0,     0,     0,   140,
-     141,   142,   143,   144,   145,   146,     0,   287,   130,   131,
-     132,   133,   134,   135,     0,   136,     0,     0,   137,   138,
-     139,   130,   131,   132,   133,   134,   135,     0,   136,     0,
-       0,   137,   138,   139,     0,     0,   140,   141,   142,   143,
-     144,   145,   146,     0,   319,     0,     0,     0,     0,   140,
-     141,   142,   143,   144,   145,   146,     0,   325,   130,   131,
-     132,   133,   134,   135,     0,   136,     0,     0,   137,   138,
-     139,   216,   217,   218,   219,   220,   221,     0,   222,     0,
-       0,   223,   224,   225,     0,     0,   140,   141,   142,   143,
-     144,   145,   146,     0,     0,     0,     0,     0,     0,   226,
-     227,   228,   229,   230,   231,   232
+       0,     1,     0,     0,    46,     0,     0,     2,     3,     4,
+       5,     6,     0,   255,     7,     8,     9,     0,     0,    10,
+      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
+       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,     0,     0,   316,     1,     0,    46,     0,     0,     0,
+       2,     3,     4,     5,     6,   255,     0,     7,     8,     9,
+       0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
+      18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
+      27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,     0,     0,   322,     1,     0,    46,
+       0,     0,     0,     2,     3,     4,     5,     6,   255,     0,
+       7,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
+      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,     1,
+     329,     0,    46,     0,     0,     2,     3,     4,     5,     6,
+       0,   255,     7,     8,     9,     0,     0,    10,    11,    12,
+       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
+      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
+       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
+       0,     1,   330,     0,    46,     0,     0,     2,     3,     4,
+       5,     6,     0,   255,     7,     8,     9,     0,     0,    10,
+      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
+       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,     0,     0,     1,     0,     0,    46,     0,     0,     2,
+       3,     4,     5,     6,     0,   189,     7,     8,     9,     0,
+       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
+      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
+      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,     1,     0,     0,    46,     0,
+       0,     2,     3,     4,     5,     6,     0,   255,     7,     8,
+       9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
+      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,     0,     0,     1,     0,     0,
+      46,     0,     0,     2,     3,     4,     5,     6,     0,   295,
+       7,     8,     9,     0,     0,    10,    11,    12,     0,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
+      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     1,   249,
+     250,     0,    46,     0,     2,     3,     4,     5,     6,     0,
+       0,   305,     8,     0,     0,     0,     0,    11,    12,     0,
+      14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
+      23,    24,     0,    26,     0,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,     0,     1,     0,
+       0,     0,     0,    46,     2,     3,     4,     5,     6,     0,
+       0,     0,     8,     0,     0,     0,     0,    11,    12,     0,
+      14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
+      23,    24,     0,    26,     0,     0,     0,   298,     0,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,   299,     0,     0,
+       0,     0,     0,    46,     0,   129,   130,   131,   132,   133,
+     134,   128,   135,     0,     0,   136,   137,   138,     0,     0,
+     129,   130,   131,   132,   133,   134,     0,   135,     0,     0,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+       0,     0,     0,     0,     0,     0,     0,     0,   139,   140,
+     141,   142,   143,   144,   145,   129,   130,   131,   132,   133,
+     134,     0,   135,     0,     0,   136,   137,   138,   215,   216,
+     217,   218,   219,   220,     0,   221,     0,     0,   222,   223,
+     224,     0,     0,   139,   140,   141,   142,   143,   144,   145,
+       0,     0,     0,     0,   179,     0,   225,   226,   227,   228,
+     229,   230,   231,     0,     0,   232,   129,   130,   131,   132,
+     133,   134,     0,   135,     0,     0,   136,   137,   138,   129,
+     130,   131,   132,   133,   134,     0,   135,     0,     0,   136,
+     137,   138,     0,     0,   139,   140,   141,   142,   143,   144,
+     145,     0,   234,     0,     0,     0,     0,   139,   140,   141,
+     142,   143,   144,   145,     0,   286,   129,   130,   131,   132,
+     133,   134,     0,   135,     0,     0,   136,   137,   138,   129,
+     130,   131,   132,   133,   134,     0,   135,     0,     0,   136,
+     137,   138,     0,     0,   139,   140,   141,   142,   143,   144,
+     145,     0,   318,     0,     0,     0,     0,   139,   140,   141,
+     142,   143,   144,   145,     0,   324,   129,   130,   131,   132,
+     133,   134,     0,   135,     0,     0,   136,   137,   138,   215,
+     216,   217,   218,   219,   220,     0,   221,     0,     0,   222,
+     223,   224,     0,     0,   139,   140,   141,   142,   143,   144,
+     145,     0,     0,     0,     0,     0,     0,   225,   226,   227,
+     228,   229,   230,   231
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,   159,    21,     0,   209,    74,    93,    40,    93,
-      10,    89,    58,    43,    14,    93,    40,    45,   104,    87,
-     104,    21,    28,    53,    88,   111,    26,   111,    92,    29,
-      88,   235,    90,    58,    45,    46,    61,   258,    84,    85,
-       0,   262,   246,    58,    87,    45,    46,    87,    88,    55,
-      50,   156,   157,   210,    50,    87,    81,    82,    83,    84,
-      85,    89,    76,    77,    78,   286,    87,    82,    83,    84,
-      85,   292,    88,    93,    87,    92,   233,    89,    87,   107,
-      80,    88,    87,    87,   170,    87,   170,    53,   309,    89,
-      87,    92,   296,    87,    94,   316,    87,    87,    93,   320,
-      87,    35,   306,    24,    90,   326,    87,   107,   329,   313,
-      87,    87,    87,    35,   114,   319,    51,    52,    53,    54,
-      93,   325,    87,    58,    43,    87,    61,    62,    63,   129,
-      87,    87,    87,   129,   152,    87,    87,    50,   156,   157,
-     289,   185,    -1,   170,    79,    80,    81,    82,    83,    84,
-      85,    -1,   152,    -1,   128,    -1,   156,   157,    -1,    -1,
-      -1,     5,    -1,    -1,    -1,    -1,    10,    -1,    -1,    13,
-      14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,   185,    -1,    -1,    32,    33,
-     190,    35,    36,    37,    38,    -1,    40,    41,    -1,    43,
-      44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,   209,
-      -1,    11,    -1,    57,    58,    59,    60,    -1,    -1,    19,
-      64,    65,    66,    67,    68,    69,    70,    71,    28,    -1,
-      -1,    -1,    -1,    -1,    78,   235,    -1,   237,    82,    83,
-      -1,    -1,    -1,    -1,    -1,    89,   246,    91,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,   258,    -1,
-     288,   261,   262,    -1,    -1,   261,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,   286,    -1,   288,    -1,
-      -1,    91,   292,   293,    -1,    95,   296,   293,    -1,    -1,
-     100,   101,    -1,    -1,    -1,   305,   306,    -1,    -1,   309,
-      -1,    -1,    -1,   313,    -1,    -1,   316,    -1,    -1,   319,
-     320,    -1,   322,    -1,    -1,   325,   326,    -1,    -1,   329,
+       0,   158,    20,    28,     0,   208,    92,    40,    43,     9,
+      40,    89,    92,    13,    58,    93,    27,   103,    53,    44,
+      20,    58,    88,   103,   110,    25,    92,    88,    28,    90,
+     110,   234,    58,   257,     0,    61,    87,   261,    82,    83,
+      84,    85,   245,    54,    44,    45,    87,    84,    85,    49,
+      88,    74,   209,    49,    87,    81,    82,    83,    84,    85,
+      89,   285,    93,    88,    87,    45,    46,   291,    75,    76,
+      77,    87,    88,   155,   156,   232,    93,    87,    87,    79,
+      92,   106,    87,   169,   308,    87,    87,    35,    88,   169,
+      87,   315,   295,    93,    87,   319,    87,    92,    88,    87,
+      53,   325,   305,    87,   328,    90,   106,    24,    87,   312,
+      87,    87,    87,   113,    35,   318,    87,    43,    87,    93,
+      87,   324,    87,    87,    87,    87,    49,   288,   128,   184,
+     169,    -1,   128,   151,    -1,   127,    -1,   155,   156,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   151,    -1,    -1,    -1,   155,   156,    -1,    -1,    -1,
+       5,    -1,    -1,    -1,    -1,    10,    -1,    -1,    13,    14,
+      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,   184,    -1,    -1,    32,    33,   189,
+      35,    36,    37,    38,    -1,    40,    41,    -1,    43,    44,
+      45,    46,    -1,    48,    -1,    -1,    -1,    -1,   208,    -1,
+      10,    -1,    57,    58,    59,    60,    -1,    -1,    18,    64,
+      65,    66,    67,    68,    69,    70,    71,    27,    -1,    -1,
+      -1,    -1,    -1,    78,   234,    -1,   236,    82,    83,    -1,
+      51,    52,    53,    54,    89,   245,    91,    58,    -1,    -1,
+      61,    62,    63,    -1,    54,    -1,    -1,   257,    -1,    -1,
+     260,   261,   287,    -1,   260,    -1,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    85,    -1,    -1,    -1,    78,    -1,
+      -1,    -1,    -1,    -1,    -1,   285,    -1,   287,    -1,    -1,
+      90,   291,   292,    -1,    94,   295,   292,    -1,    -1,    99,
+     100,    -1,    -1,    -1,   304,   305,    -1,    -1,   308,    -1,
+      -1,    -1,   312,    -1,    -1,   315,    -1,    -1,   318,   319,
+      -1,   321,    -1,    -1,   324,   325,    -1,    -1,   328,   129,
      130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,    -1,    -1,    -1,
-      -1,    -1,    -1,   153,   154,   155,    -1,    -1,   158,    -1,
-      -1,    -1,    51,    52,    53,    54,    55,    56,   168,    58,
-      -1,    -1,    61,    62,    63,    -1,    -1,    -1,    -1,    -1,
-      -1,   181,   182,    -1,   184,    -1,    -1,    -1,   188,    -1,
-      79,    80,    81,    82,    83,    84,    85,    -1,    -1,    88,
-      -1,    90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   216,   217,   218,   219,
+     140,   141,   142,   143,   144,   145,    -1,    -1,    -1,    -1,
+      -1,    -1,   152,   153,   154,    -1,    -1,   157,    -1,    -1,
+      -1,    51,    52,    53,    54,    55,    56,   167,    58,    -1,
+      -1,    61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+     180,   181,    -1,   183,    -1,    -1,    -1,   187,    -1,    79,
+      80,    81,    82,    83,    84,    85,    -1,    -1,    88,    -1,
+      90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   215,   216,   217,   218,   219,
      220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,    -1,   234,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     5,    -1,   245,    -1,    -1,    10,    -1,
-      -1,    13,    14,    15,    -1,    17,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,
-      32,    33,    -1,    35,    36,    37,    38,    -1,    40,    41,
-      -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,
-     290,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
-     300,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-     310,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
-      82,    83,    -1,    -1,    -1,     5,    -1,    89,    -1,    91,
-      10,    93,    -1,    13,    14,    15,    -1,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
-      -1,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    85,    -1,     5,    88,    89,
-      -1,    91,    10,    -1,    -1,    13,    14,    15,    -1,    17,
-      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
-      -1,    -1,    -1,    -1,    32,    33,    -1,    35,    36,    37,
-      38,    -1,    40,    41,    -1,    43,    44,    45,    46,    -1,
-      48,    -1,    -1,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    84,    85,    -1,     5,
-      88,    89,    -1,    91,    10,    -1,    -1,    13,    14,    15,
-      -1,    17,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,    35,
-      36,    37,    38,    -1,    40,    41,    -1,    43,    44,    45,
-      46,    -1,    48,    -1,    -1,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    -1,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
-      -1,     5,    88,    89,    -1,    91,    10,    -1,    -1,    13,
-      14,    15,    -1,    17,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,    32,    33,
-      -1,    35,    36,    37,    38,    -1,    40,    41,    -1,    43,
-      44,    45,    46,    -1,    48,    -1,    -1,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84,    85,    -1,     5,    -1,    89,    -1,    91,    10,    -1,
-      -1,    13,    14,    15,    -1,    17,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,
-      32,    33,    -1,    35,    36,    37,    38,    -1,    40,    41,
-      -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
-      82,    83,    -1,    -1,    -1,     5,    -1,    89,    90,    91,
-      10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,
-      10,    91,    -1,    13,    14,    15,    -1,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,
-      10,    91,    -1,    13,    14,    15,    -1,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,
-      10,    91,    -1,    13,    14,    15,    -1,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    58,    59,
-      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,
-      10,    91,    -1,    13,    14,    15,    -1,    17,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    -1,    32,    33,    -1,    35,    36,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    59,
-      60,    -1,    -1,    -1,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    89,
-      17,    91,    19,    20,    21,    22,    23,    -1,    -1,    26,
-      27,    28,    -1,    -1,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    -1,    13,    -1,
-      -1,    78,    17,    -1,    19,    20,    21,    22,    23,    24,
-      87,    26,    27,    28,    -1,    -1,    31,    32,    33,    -1,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      75,    13,    -1,    78,    -1,    17,    -1,    19,    20,    21,
-      22,    23,    87,    -1,    26,    27,    28,    -1,    -1,    31,
-      32,    33,    -1,    35,    36,    37,    38,    39,    40,    41,
-      -1,    43,    44,    45,    46,    -1,    48,    49,    50,    -1,
-      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    -1,    -1,    -1,    76,    -1,    78,    -1,    -1,    -1,
-      13,    -1,    -1,    16,    17,    87,    19,    20,    21,    22,
-      23,    -1,    -1,    26,    27,    28,    -1,    -1,    31,    32,
-      33,    -1,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    -1,    48,    49,    50,    -1,    -1,
+     230,   231,    -1,   233,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     5,    -1,   244,    -1,    -1,    10,    -1,    -1,
+      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,    32,
+      33,    -1,    35,    36,    37,    38,    -1,    40,    41,    -1,
+      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,   289,
+      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,   299,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,   309,
+      -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    82,
+      83,    -1,    -1,    -1,     5,    -1,    89,    -1,    91,    10,
+      93,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
+      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
+      81,    82,    83,    84,    85,    -1,     5,    88,    89,    -1,
+      91,    10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,
+      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
+      -1,    -1,    -1,    32,    33,    -1,    35,    36,    37,    38,
+      -1,    40,    41,    -1,    43,    44,    45,    46,    -1,    48,
+      -1,    -1,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    85,    -1,     5,    88,
+      89,    -1,    91,    10,    -1,    -1,    13,    14,    15,    -1,
+      -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      27,    -1,    -1,    -1,    -1,    32,    33,    -1,    35,    36,
+      37,    38,    -1,    40,    41,    -1,    43,    44,    45,    46,
+      -1,    48,    -1,    -1,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    85,    -1,
+       5,    88,    89,    -1,    91,    10,    -1,    -1,    13,    14,
+      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,
+      35,    36,    37,    38,    -1,    40,    41,    -1,    43,    44,
+      45,    46,    -1,    48,    -1,    -1,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      85,    -1,     5,    -1,    89,    -1,    91,    10,    -1,    -1,
+      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,    32,
+      33,    -1,    35,    36,    37,    38,    -1,    40,    41,    -1,
+      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
       -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    13,    -1,    -1,    78,    17,    -1,    19,    20,
-      21,    22,    23,    -1,    87,    26,    27,    28,    -1,    -1,
-      31,    32,    33,    -1,    35,    36,    37,    38,    39,    40,
-      41,    -1,    43,    44,    45,    46,    -1,    48,    49,    50,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    82,
+      83,    -1,    -1,    -1,     5,    -1,    89,    90,    91,    10,
+      -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
+      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
       -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
       -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    -1,    -1,    75,    13,    -1,    78,    -1,    17,
-      -1,    19,    20,    21,    22,    23,    87,    -1,    26,    27,
-      28,    -1,    -1,    31,    32,    33,    -1,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    -1,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
+      -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,    10,
+      91,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
+      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
+      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
+      -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,    10,
+      91,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
+      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
+      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
+      -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,    10,
+      91,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
+      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    57,    58,    59,    60,
+      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
+      -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,    10,
+      91,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
+      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    59,    60,
+      -1,    -1,    -1,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    89,    -1,
+      91,    19,    20,    21,    22,    23,    -1,    -1,    26,    27,
+      28,    -1,    -1,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
       48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,    57,
       58,    59,    60,    -1,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    -1,    -1,    75,    13,    -1,
-      78,    -1,    17,    -1,    19,    20,    21,    22,    23,    87,
-      -1,    26,    27,    28,    -1,    -1,    31,    32,    33,    -1,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      13,    76,    -1,    78,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    87,    26,    27,    28,    -1,    -1,    31,    32,
+      68,    69,    70,    71,    72,    73,    -1,    13,    -1,    -1,
+      78,    -1,    -1,    19,    20,    21,    22,    23,    24,    87,
+      26,    27,    28,    -1,    -1,    31,    32,    33,    -1,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    75,
+      13,    -1,    78,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    87,    -1,    26,    27,    28,    -1,    -1,    31,    32,
       33,    -1,    35,    36,    37,    38,    39,    40,    41,    -1,
       43,    44,    45,    46,    -1,    48,    49,    50,    -1,    -1,
       -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    13,    76,    -1,    78,    17,    -1,    19,    20,
-      21,    22,    23,    -1,    87,    26,    27,    28,    -1,    -1,
-      31,    32,    33,    -1,    35,    36,    37,    38,    39,    40,
-      41,    -1,    43,    44,    45,    46,    -1,    48,    49,    50,
-      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    -1,    -1,    13,    -1,    -1,    78,    17,    -1,
-      19,    20,    21,    22,    23,    -1,    87,    26,    27,    28,
+      -1,    -1,    -1,    76,    -1,    78,    -1,    -1,    -1,    13,
+      -1,    -1,    16,    -1,    87,    19,    20,    21,    22,    23,
+      -1,    -1,    26,    27,    28,    -1,    -1,    31,    32,    33,
+      -1,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    13,    -1,    -1,    78,    -1,    -1,    19,    20,    21,
+      22,    23,    -1,    87,    26,    27,    28,    -1,    -1,    31,
+      32,    33,    -1,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    -1,    48,    49,    50,    -1,
+      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    75,    13,    -1,    78,    -1,    -1,    -1,
+      19,    20,    21,    22,    23,    87,    -1,    26,    27,    28,
       -1,    -1,    31,    32,    33,    -1,    35,    36,    37,    38,
       39,    40,    41,    -1,    43,    44,    45,    46,    -1,    48,
       49,    50,    -1,    -1,    -1,    -1,    55,    56,    57,    58,
       59,    60,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    -1,    -1,    13,    -1,    -1,    78,
-      17,    -1,    19,    20,    21,    22,    23,    -1,    87,    26,
-      27,    28,    -1,    -1,    31,    32,    33,    -1,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
-      -1,    48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    -1,    13,    -1,
-      -1,    78,    17,    -1,    19,    20,    21,    22,    23,    -1,
-      87,    26,    27,    28,    -1,    -1,    31,    32,    33,    -1,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,
+      69,    70,    71,    72,    -1,    -1,    75,    13,    -1,    78,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    87,    -1,
+      26,    27,    28,    -1,    -1,    31,    32,    33,    -1,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    13,
+      76,    -1,    78,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    87,    26,    27,    28,    -1,    -1,    31,    32,    33,
+      -1,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    13,    76,    -1,    78,    -1,    -1,    19,    20,    21,
+      22,    23,    -1,    87,    26,    27,    28,    -1,    -1,    31,
+      32,    33,    -1,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    -1,    48,    49,    50,    -1,
+      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    13,    -1,    -1,    78,    -1,    -1,    19,
+      20,    21,    22,    23,    -1,    87,    26,    27,    28,    -1,
+      -1,    31,    32,    33,    -1,    35,    36,    37,    38,    39,
+      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    49,
+      50,    -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    -1,    -1,    13,    -1,    -1,    78,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    87,    26,    27,
+      28,    -1,    -1,    31,    32,    33,    -1,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    -1,
+      48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    -1,    -1,    13,    -1,    -1,
+      78,    -1,    -1,    19,    20,    21,    22,    23,    -1,    87,
+      26,    27,    28,    -1,    -1,    31,    32,    33,    -1,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    13,    14,
+      15,    -1,    78,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    87,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,
+      35,    36,    37,    38,    -1,    40,    41,    -1,    43,    44,
+      45,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
       55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      13,    14,    15,    78,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    87,    -1,    27,    -1,    -1,    -1,    -1,    32,
-      33,    -1,    35,    36,    37,    38,    -1,    40,    41,    -1,
-      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      13,    -1,    -1,    -1,    17,    78,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,    32,
-      33,    -1,    35,    36,    37,    38,    -1,    40,    41,    -1,
-      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    23,
-      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    43,
-      -1,    -1,    -1,    -1,    -1,    78,    -1,    51,    52,    53,
-      54,    55,    56,    42,    58,    -1,    -1,    61,    62,    63,
-      -1,    -1,    51,    52,    53,    54,    55,    56,    -1,    58,
-      -1,    -1,    61,    62,    63,    79,    80,    81,    82,    83,
-      84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    85,    51,    52,    53,
-      54,    55,    56,    -1,    58,    -1,    -1,    61,    62,    63,
+      65,    66,    67,    68,    69,    70,    71,    -1,    13,    -1,
+      -1,    -1,    -1,    78,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,
+      35,    36,    37,    38,    -1,    40,    41,    -1,    43,    44,
+      45,    46,    -1,    48,    -1,    -1,    -1,    23,    -1,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    43,    -1,    -1,
+      -1,    -1,    -1,    78,    -1,    51,    52,    53,    54,    55,
+      56,    42,    58,    -1,    -1,    61,    62,    63,    -1,    -1,
       51,    52,    53,    54,    55,    56,    -1,    58,    -1,    -1,
-      61,    62,    63,    -1,    -1,    79,    80,    81,    82,    83,
-      84,    85,    -1,    -1,    -1,    -1,    90,    -1,    79,    80,
-      81,    82,    83,    84,    85,    -1,    -1,    88,    51,    52,
-      53,    54,    55,    56,    -1,    58,    -1,    -1,    61,    62,
-      63,    51,    52,    53,    54,    55,    56,    -1,    58,    -1,
-      -1,    61,    62,    63,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    85,    -1,    87,    -1,    -1,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    85,    -1,    87,    51,    52,
-      53,    54,    55,    56,    -1,    58,    -1,    -1,    61,    62,
-      63,    51,    52,    53,    54,    55,    56,    -1,    58,    -1,
-      -1,    61,    62,    63,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    85,    -1,    87,    -1,    -1,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    85,    -1,    87,    51,    52,
+      61,    62,    63,    79,    80,    81,    82,    83,    84,    85,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    85,    51,    52,    53,    54,    55,
+      56,    -1,    58,    -1,    -1,    61,    62,    63,    51,    52,
       53,    54,    55,    56,    -1,    58,    -1,    -1,    61,    62,
-      63,    51,    52,    53,    54,    55,    56,    -1,    58,    -1,
-      -1,    61,    62,    63,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    85
+      63,    -1,    -1,    79,    80,    81,    82,    83,    84,    85,
+      -1,    -1,    -1,    -1,    90,    -1,    79,    80,    81,    82,
+      83,    84,    85,    -1,    -1,    88,    51,    52,    53,    54,
+      55,    56,    -1,    58,    -1,    -1,    61,    62,    63,    51,
+      52,    53,    54,    55,    56,    -1,    58,    -1,    -1,    61,
+      62,    63,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      85,    -1,    87,    -1,    -1,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    85,    -1,    87,    51,    52,    53,    54,
+      55,    56,    -1,    58,    -1,    -1,    61,    62,    63,    51,
+      52,    53,    54,    55,    56,    -1,    58,    -1,    -1,    61,
+      62,    63,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      85,    -1,    87,    -1,    -1,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    85,    -1,    87,    51,    52,    53,    54,
+      55,    56,    -1,    58,    -1,    -1,    61,    62,    63,    51,
+      52,    53,    54,    55,    56,    -1,    58,    -1,    -1,    61,
+      62,    63,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    85
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    13,    17,    19,    20,    21,    22,    23,    26,    27,
-      28,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    43,    44,    45,    46,    47,    48,    49,    50,
-      55,    56,    57,    58,    59,    60,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    78,    87,    95,
-      96,    97,    98,    99,   104,   106,   109,   110,   111,   114,
-     116,   117,   118,   119,    40,    87,    36,    40,    41,   106,
-     107,   108,     5,    10,    14,    15,    57,    82,    83,    89,
-      91,   106,   123,   124,   127,   130,   131,   132,   134,   106,
-      40,    89,   112,   134,    45,    46,   106,   124,   126,   106,
-      27,    35,   112,   113,   134,   107,   107,   106,     0,    97,
-     112,   134,    87,    87,    88,   132,   132,   132,   134,    14,
-      15,    93,   106,   128,   129,   134,   136,   137,    89,    42,
-      51,    52,    53,    54,    55,    56,    58,    61,    62,    63,
-      79,    80,    81,    82,    83,    84,    85,   107,    87,    90,
-     134,    87,    33,    55,    56,    58,    59,    60,    63,    88,
-     123,   130,   133,   135,   106,   134,    43,    53,   115,    87,
-     134,   134,    87,    87,    37,    87,    87,   107,    87,   106,
-      90,    93,    93,    92,    93,    88,    92,    92,    88,   136,
-      87,   109,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,    87,
-      88,   124,   125,   125,   125,   137,    51,    52,    53,    54,
-      55,    56,    58,    61,    62,    63,    79,    80,    81,    82,
-      83,    84,    85,    88,    53,    87,   134,    74,    87,   100,
-     101,   102,   103,    37,   135,    35,    87,   134,   134,   134,
-      14,    15,   106,   129,   134,    90,    87,   109,   120,   121,
-     122,    24,   120,   137,    87,    87,    87,   134,   134,   134,
+       0,    13,    19,    20,    21,    22,    23,    26,    27,    28,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    43,    44,    45,    46,    47,    48,    49,    50,    55,
+      56,    57,    58,    59,    60,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    78,    87,    95,    96,
+      97,    98,    99,   104,   106,   109,   110,   111,   114,   116,
+     117,   118,   119,    40,    87,    36,    40,    41,   106,   107,
+     108,     5,    10,    14,    15,    57,    82,    83,    89,    91,
+     106,   123,   124,   127,   130,   131,   132,   134,   106,    40,
+      89,   112,   134,    45,    46,   106,   124,   126,   106,    27,
+      35,   112,   113,   134,   107,   107,   106,     0,    97,   112,
+     134,    87,    87,    88,   132,   132,   132,   134,    14,    15,
+      93,   106,   128,   129,   134,   136,   137,    89,    42,    51,
+      52,    53,    54,    55,    56,    58,    61,    62,    63,    79,
+      80,    81,    82,    83,    84,    85,   107,    87,    90,   134,
+      87,    33,    55,    56,    58,    59,    60,    63,    88,   123,
+     130,   133,   135,   106,   134,    43,    53,   115,    87,   134,
+     134,    87,    87,    37,    87,    87,   107,    87,   106,    90,
+      93,    93,    92,    93,    88,    92,    92,    88,   136,    87,
+     109,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,    87,    88,
+     124,   125,   125,   125,   137,    51,    52,    53,    54,    55,
+      56,    58,    61,    62,    63,    79,    80,    81,    82,    83,
+      84,    85,    88,    53,    87,   134,    74,    87,   100,   101,
+     102,   103,    37,   135,    35,    87,   134,   134,   134,    14,
+      15,   106,   129,   134,    90,    87,   109,   120,   121,   122,
+      24,   120,   137,    87,    87,    87,   134,   134,   134,   134,
      134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   137,   134,   120,    87,   106,    87,
-      35,   134,   120,    24,    75,   122,    87,   109,    90,    23,
-      43,    76,   107,   103,   134,    16,    87,   109,    87,   120,
-      43,   134,    87,    87,   105,   106,   120,    75,   134,    87,
-     120,    87,    88,    75,    87,    87,   120,   106,    87,   120,
-      76,    76,    87,    87
+     134,   134,   134,   137,   134,   120,    87,   106,    87,    35,
+     134,   120,    24,    75,   122,    87,   109,    90,    23,    43,
+      76,   107,   103,   134,    16,    87,   109,    87,   120,    43,
+     134,    87,    87,   105,   106,   120,    75,   134,    87,   120,
+      87,    88,    75,    87,    87,   120,   106,    87,   120,    76,
+      76,    87,    87
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1423,19 +1423,19 @@ static const yytype_uint8 yyr1[] =
      106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
      106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
      106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-     106,   107,   107,   108,   108,   109,   109,   109,   109,   110,
-     110,   110,   111,   111,   111,   111,   111,   111,   111,   112,
-     112,   112,   112,   112,   112,   112,   113,   113,   113,   113,
-     113,   114,   114,   114,   114,   115,   115,   116,   116,   116,
-     117,   117,   118,   118,   118,   118,   119,   119,   119,   120,
-     120,   121,   121,   122,   122,   123,   123,   123,   123,   123,
-     123,   123,   123,   124,   125,   126,   127,   127,   127,   128,
-     128,   129,   129,   129,   130,   131,   131,   132,   132,   132,
-     133,   133,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     107,   107,   108,   108,   109,   109,   109,   109,   110,   110,
+     110,   111,   111,   111,   111,   111,   111,   111,   112,   112,
+     112,   112,   112,   112,   112,   113,   113,   113,   113,   113,
+     114,   114,   114,   114,   115,   115,   116,   116,   116,   117,
+     117,   118,   118,   118,   118,   119,   119,   119,   120,   120,
+     121,   121,   122,   122,   123,   123,   123,   123,   123,   123,
+     123,   123,   124,   125,   126,   127,   127,   127,   128,   128,
+     129,   129,   129,   130,   131,   131,   132,   132,   132,   133,
+     133,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,   135,
      135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   135,   136,   136,
-     137,   137
+     135,   135,   135,   135,   135,   135,   135,   136,   136,   137,
+     137
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1447,19 +1447,19 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     1,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     3,     3,     3,     2,     0,
-       1,     3,     2,     4,     2,     5,     2,     2,     5,     4,
-       3,     5,     5,     5,     5,     1,     1,     3,     3,     3,
-       4,     7,     6,     9,     7,    10,     7,    11,    12,     0,
-       1,     1,     2,     1,     1,     1,     1,     1,     1,     2,
-       4,     1,     1,     1,     1,     1,     3,     3,     3,     1,
-       3,     3,     3,     3,     3,     2,     2,     1,     1,     1,
-       1,     1,     1,     3,     3,     3,     3,     3,     3,     3,
+       0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     3,     3,     3,     3,     3,     3,     2,     0,     1,
+       3,     2,     4,     2,     5,     2,     2,     5,     4,     3,
+       5,     5,     5,     5,     1,     1,     3,     3,     3,     4,
+       7,     6,     9,     7,    10,     7,    11,    12,     0,     1,
+       1,     2,     1,     1,     1,     1,     1,     1,     2,     4,
+       1,     1,     1,     1,     1,     3,     3,     3,     1,     3,
+       3,     3,     3,     3,     2,     2,     1,     1,     1,     1,
+       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     0,     1,
-       1,     3
+       3,     3,     3,     3,     3,     3,     3,     0,     1,     1,
+       3
 };
 
 
@@ -2272,776 +2272,770 @@ yyreduce:
 #line 2273 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 45: /* ID: tPLAYACCEL  */
+  case 45: /* ID: tPREVIOUS  */
 #line 322 "engines/director/lingo/lingo-gr.y"
-                        { (yyval.s) = new Common::String("playAccel"); }
+                                { (yyval.s) = new Common::String("previous"); }
 #line 2279 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 46: /* ID: tPREVIOUS  */
-#line 323 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("previous"); }
+  case 46: /* ID: tREPEAT  */
+#line 325 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("repeat"); }
 #line 2285 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 47: /* ID: tREPEAT  */
+  case 47: /* ID: tSCRIPT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("repeat"); }
+                                { (yyval.s) = new Common::String("script"); }
 #line 2291 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 48: /* ID: tSCRIPT  */
+  case 48: /* ID: tSET  */
 #line 327 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("script"); }
+                                { (yyval.s) = new Common::String("set"); }
 #line 2297 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 49: /* ID: tSET  */
+  case 49: /* ID: tSTARTS  */
 #line 328 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("set"); }
+                                { (yyval.s) = new Common::String("starts"); }
 #line 2303 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50: /* ID: tSTARTS  */
+  case 50: /* ID: tTELL  */
 #line 329 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("starts"); }
+                                { (yyval.s) = new Common::String("tell"); }
 #line 2309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51: /* ID: tTELL  */
-#line 330 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("tell"); }
+  case 51: /* ID: tTO  */
+#line 331 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("to"); }
 #line 2315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 52: /* ID: tTO  */
+  case 52: /* ID: tASSERTERROR  */
 #line 332 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("to"); }
+                        { (yyval.s) = new Common::String("scummvmAssertError"); }
 #line 2321 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 53: /* ID: tASSERTERROR  */
+  case 53: /* ID: tSPRITE  */
 #line 333 "engines/director/lingo/lingo-gr.y"
-                        { (yyval.s) = new Common::String("scummvmAssertError"); }
+                                { (yyval.s) = new Common::String("sprite"); }
 #line 2327 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 54: /* ID: tSPRITE  */
+  case 54: /* ID: tWHEN  */
 #line 334 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("sprite"); }
+                                { (yyval.s) = new Common::String("when"); }
 #line 2333 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 55: /* ID: tWHEN  */
+  case 55: /* ID: tWHILE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("when"); }
+                                { (yyval.s) = new Common::String("while"); }
 #line 2339 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56: /* ID: tWHILE  */
+  case 56: /* ID: tWINDOW  */
 #line 336 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("while"); }
+                                { (yyval.s) = new Common::String("window"); }
 #line 2345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57: /* ID: tWINDOW  */
+  case 57: /* ID: tWITH  */
 #line 337 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("window"); }
+                                { (yyval.s) = new Common::String("with"); }
 #line 2351 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58: /* ID: tWITH  */
+  case 58: /* ID: tWITHIN  */
 #line 338 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("with"); }
+                                { (yyval.s) = new Common::String("within"); }
 #line 2357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* ID: tWITHIN  */
+  case 59: /* ID: tWORD  */
 #line 339 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("within"); }
-#line 2363 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 60: /* ID: tWORD  */
-#line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2369 "engines/director/lingo/lingo-gr.cpp"
+#line 2363 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61: /* idlist: %empty  */
-#line 343 "engines/director/lingo/lingo-gr.y"
+  case 60: /* idlist: %empty  */
+#line 342 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2375 "engines/director/lingo/lingo-gr.cpp"
+#line 2369 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63: /* nonemptyidlist: ID  */
-#line 347 "engines/director/lingo/lingo-gr.y"
+  case 62: /* nonemptyidlist: ID  */
+#line 346 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2384 "engines/director/lingo/lingo-gr.cpp"
+#line 2378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 64: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 351 "engines/director/lingo/lingo-gr.y"
+  case 63: /* nonemptyidlist: nonemptyidlist ',' ID  */
+#line 350 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
+#line 2386 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 71: /* proc: ID cmdargs '\n'  */
+#line 371 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
 #line 2392 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* proc: ID cmdargs '\n'  */
+  case 72: /* proc: tPUT cmdargs '\n'  */
 #line 372 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
+                                                                { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
 #line 2398 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* proc: tPUT cmdargs '\n'  */
+  case 73: /* proc: tPLAY cmdargs '\n'  */
 #line 373 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
+                                                        { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
 #line 2404 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* proc: tPLAY cmdargs '\n'  */
+  case 74: /* proc: tPLAY playargs '\n'  */
 #line 374 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
 #line 2410 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tPLAY playargs '\n'  */
+  case 75: /* proc: tNEXT tREPEAT '\n'  */
 #line 375 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
+                                                        { (yyval.node) = new NextRepeatNode(); }
 #line 2416 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tNEXT tREPEAT '\n'  */
+  case 76: /* proc: tEXIT tREPEAT '\n'  */
 #line 376 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new NextRepeatNode(); }
+                                                        { (yyval.node) = new ExitRepeatNode(); }
 #line 2422 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* proc: tEXIT tREPEAT '\n'  */
+  case 77: /* proc: tEXIT '\n'  */
 #line 377 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new ExitRepeatNode(); }
-#line 2428 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 78: /* proc: tEXIT '\n'  */
-#line 378 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2434 "engines/director/lingo/lingo-gr.cpp"
+#line 2428 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* cmdargs: %empty  */
-#line 381 "engines/director/lingo/lingo-gr.y"
+  case 78: /* cmdargs: %empty  */
+#line 380 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2442 "engines/director/lingo/lingo-gr.cpp"
+#line 2436 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* cmdargs: expr  */
-#line 384 "engines/director/lingo/lingo-gr.y"
+  case 79: /* cmdargs: expr  */
+#line 383 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2452 "engines/director/lingo/lingo-gr.cpp"
+#line 2446 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 389 "engines/director/lingo/lingo-gr.y"
+  case 80: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 388 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2461 "engines/director/lingo/lingo-gr.cpp"
+#line 2455 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* cmdargs: expr expr_nounarymath  */
-#line 393 "engines/director/lingo/lingo-gr.y"
+  case 81: /* cmdargs: expr expr_nounarymath  */
+#line 392 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2472 "engines/director/lingo/lingo-gr.cpp"
+#line 2466 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 399 "engines/director/lingo/lingo-gr.y"
+  case 82: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2482 "engines/director/lingo/lingo-gr.cpp"
+#line 2476 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* cmdargs: '(' ')'  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 83: /* cmdargs: '(' ')'  */
+#line 403 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2490 "engines/director/lingo/lingo-gr.cpp"
+#line 2484 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+  case 84: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 406 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2499 "engines/director/lingo/lingo-gr.cpp"
+#line 2493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* playargs: tFRAME expr  */
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 85: /* playargs: tFRAME expr  */
+#line 412 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 2503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* playargs: tMOVIE expr  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+  case 86: /* playargs: tMOVIE expr  */
+#line 417 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2520 "engines/director/lingo/lingo-gr.cpp"
+#line 2514 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* playargs: tFRAME expr tOF tMOVIE expr  */
-#line 424 "engines/director/lingo/lingo-gr.y"
+  case 87: /* playargs: tFRAME expr tOF tMOVIE expr  */
+#line 423 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2531 "engines/director/lingo/lingo-gr.cpp"
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* playargs: expr tOF tMOVIE expr  */
-#line 430 "engines/director/lingo/lingo-gr.y"
+  case 88: /* playargs: expr tOF tMOVIE expr  */
+#line 429 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2542 "engines/director/lingo/lingo-gr.cpp"
+#line 2536 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* playargs: tFRAME expr expr_nounarymath  */
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 89: /* playargs: tFRAME expr expr_nounarymath  */
+#line 435 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
+#line 2547 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 90: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 443 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2553 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+  case 91: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
 #line 444 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
+                                                { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+  case 92: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
 #line 445 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
+                                                { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+  case 93: /* asgn: tSET varorthe to expr '\n'  */
 #line 446 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
+                                                { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2571 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* asgn: tSET varorthe to expr '\n'  */
-#line 447 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
+  case 96: /* definevars: tGLOBAL idlist '\n'  */
+#line 451 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
 #line 2577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* definevars: tGLOBAL idlist '\n'  */
+  case 97: /* definevars: tPROPERTY idlist '\n'  */
 #line 452 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
+                                                        { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
 #line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* definevars: tPROPERTY idlist '\n'  */
+  case 98: /* definevars: tINSTANCE idlist '\n'  */
 #line 453 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2589 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 99: /* definevars: tINSTANCE idlist '\n'  */
-#line 454 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2595 "engines/director/lingo/lingo-gr.cpp"
+#line 2589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* ifstmt: tIF expr tTHEN stmt  */
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 99: /* ifstmt: tIF expr tTHEN stmt  */
+#line 456 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2598 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 100: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 460 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2611 "engines/director/lingo/lingo-gr.cpp"
+#line 2605 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 101: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 464 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2616 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 471 "engines/director/lingo/lingo-gr.y"
+  case 102: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 470 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 103: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 474 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2640 "engines/director/lingo/lingo-gr.cpp"
+#line 2634 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 104: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 478 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2647 "engines/director/lingo/lingo-gr.cpp"
+#line 2641 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 483 "engines/director/lingo/lingo-gr.y"
+  case 105: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 482 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2654 "engines/director/lingo/lingo-gr.cpp"
+#line 2648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 106: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 107: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2668 "engines/director/lingo/lingo-gr.cpp"
+#line 2662 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* stmtlist: %empty  */
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 108: /* stmtlist: %empty  */
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2674 "engines/director/lingo/lingo-gr.cpp"
+#line 2668 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* nonemptystmtlist: stmtlistline  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 110: /* nonemptystmtlist: stmtlistline  */
+#line 495 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2685 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 111: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 501 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 2689 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* stmtlistline: '\n'  */
-#line 509 "engines/director/lingo/lingo-gr.y"
+  case 112: /* stmtlistline: '\n'  */
+#line 508 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
+#line 2695 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 114: /* simpleexpr_noparens_nounarymath: tINT  */
+#line 515 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new IntNode((yyvsp[0].i)); }
 #line 2701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* simpleexpr_noparens_nounarymath: tINT  */
+  case 115: /* simpleexpr_noparens_nounarymath: tFLOAT  */
 #line 516 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new IntNode((yyvsp[0].i)); }
+                                                                { (yyval.node) = new FloatNode((yyvsp[0].f)); }
 #line 2707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* simpleexpr_noparens_nounarymath: tFLOAT  */
+  case 116: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
 #line 517 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new FloatNode((yyvsp[0].f)); }
+                                                                { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
 #line 2713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
+  case 117: /* simpleexpr_noparens_nounarymath: tSTRING  */
 #line 518 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
+                                                                { (yyval.node) = new StringNode((yyvsp[0].s)); }
 #line 2719 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* simpleexpr_noparens_nounarymath: tSTRING  */
+  case 118: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
 #line 519 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new StringNode((yyvsp[0].s)); }
+                                                { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
 #line 2725 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
+  case 119: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
 #line 520 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
+                                                { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
 #line 2731 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 521 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
+  case 122: /* var: ID  */
+#line 525 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new VarNode((yyvsp[0].s)); }
 #line 2737 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* var: ID  */
-#line 526 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new VarNode((yyvsp[0].s)); }
+  case 125: /* list: '[' exprlist ']'  */
+#line 535 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
 #line 2743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* list: '[' exprlist ']'  */
+  case 126: /* list: '[' ':' ']'  */
 #line 536 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
+                                                { (yyval.node) = new PropListNode(new NodeList); }
 #line 2749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* list: '[' ':' ']'  */
+  case 127: /* list: '[' proplist ']'  */
 #line 537 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new PropListNode(new NodeList); }
-#line 2755 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 128: /* list: '[' proplist ']'  */
-#line 538 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2761 "engines/director/lingo/lingo-gr.cpp"
+#line 2755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* proplist: proppair  */
-#line 541 "engines/director/lingo/lingo-gr.y"
+  case 128: /* proplist: proppair  */
+#line 540 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2770 "engines/director/lingo/lingo-gr.cpp"
+#line 2764 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* proplist: proplist ',' proppair  */
-#line 545 "engines/director/lingo/lingo-gr.y"
+  case 129: /* proplist: proplist ',' proppair  */
+#line 544 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
+#line 2772 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 130: /* proppair: tSYMBOL ':' expr  */
+#line 549 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2778 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* proppair: tSYMBOL ':' expr  */
+  case 131: /* proppair: ID ':' expr  */
 #line 550 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
+                                                { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2784 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* proppair: ID ':' expr  */
+  case 132: /* proppair: tSTRING ':' expr  */
 #line 551 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
+                                                { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2790 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* proppair: tSTRING ':' expr  */
-#line 552 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
+  case 133: /* parens: '(' expr ')'  */
+#line 554 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = (yyvsp[-1].node); }
 #line 2796 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* parens: '(' expr ')'  */
-#line 555 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = (yyvsp[-1].node); }
+  case 134: /* unarymath: '+' simpleexpr  */
+#line 556 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = (yyvsp[0].node); }
 #line 2802 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* unarymath: '+' simpleexpr  */
+  case 135: /* unarymath: '-' simpleexpr  */
 #line 557 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = (yyvsp[0].node); }
+                                                                { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
 #line 2808 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* unarymath: '-' simpleexpr  */
-#line 558 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
+  case 142: /* expr: expr '+' expr  */
+#line 575 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2814 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* expr: expr '+' expr  */
+  case 143: /* expr: expr '-' expr  */
 #line 576 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* expr: expr '-' expr  */
+  case 144: /* expr: expr '*' expr  */
 #line 577 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2826 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* expr: expr '*' expr  */
+  case 145: /* expr: expr '/' expr  */
 #line 578 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* expr: expr '/' expr  */
+  case 146: /* expr: expr tMOD expr  */
 #line 579 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2838 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* expr: expr tMOD expr  */
+  case 147: /* expr: expr '>' expr  */
 #line 580 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2844 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* expr: expr '>' expr  */
+  case 148: /* expr: expr '<' expr  */
 #line 581 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* expr: expr '<' expr  */
+  case 149: /* expr: expr tEQ expr  */
 #line 582 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2856 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* expr: expr tEQ expr  */
+  case 150: /* expr: expr tNEQ expr  */
 #line 583 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2862 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* expr: expr tNEQ expr  */
+  case 151: /* expr: expr tGE expr  */
 #line 584 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2868 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* expr: expr tGE expr  */
+  case 152: /* expr: expr tLE expr  */
 #line 585 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2874 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* expr: expr tLE expr  */
+  case 153: /* expr: expr tAND expr  */
 #line 586 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2880 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* expr: expr tAND expr  */
+  case 154: /* expr: expr tOR expr  */
 #line 587 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2886 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* expr: expr tOR expr  */
+  case 155: /* expr: expr '&' expr  */
 #line 588 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2892 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* expr: expr '&' expr  */
+  case 156: /* expr: expr tCONCAT expr  */
 #line 589 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2898 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* expr: expr tCONCAT expr  */
+  case 157: /* expr: expr tCONTAINS expr  */
 #line 590 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2904 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* expr: expr tCONTAINS expr  */
+  case 158: /* expr: expr tSTARTS expr  */
 #line 591 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                        { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2910 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* expr: expr tSTARTS expr  */
-#line 592 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 160: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 599 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2916 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* expr_nounarymath: expr_nounarymath '+' expr  */
+  case 161: /* expr_nounarymath: expr_nounarymath '-' expr  */
 #line 600 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* expr_nounarymath: expr_nounarymath '-' expr  */
+  case 162: /* expr_nounarymath: expr_nounarymath '*' expr  */
 #line 601 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2928 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr_nounarymath: expr_nounarymath '*' expr  */
+  case 163: /* expr_nounarymath: expr_nounarymath '/' expr  */
 #line 602 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2934 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr_nounarymath: expr_nounarymath '/' expr  */
+  case 164: /* expr_nounarymath: expr_nounarymath tMOD expr  */
 #line 603 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2940 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+  case 165: /* expr_nounarymath: expr_nounarymath '>' expr  */
 #line 604 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2946 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* expr_nounarymath: expr_nounarymath '>' expr  */
+  case 166: /* expr_nounarymath: expr_nounarymath '<' expr  */
 #line 605 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2952 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* expr_nounarymath: expr_nounarymath '<' expr  */
+  case 167: /* expr_nounarymath: expr_nounarymath tEQ expr  */
 #line 606 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2958 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+  case 168: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
 #line 607 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2964 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+  case 169: /* expr_nounarymath: expr_nounarymath tGE expr  */
 #line 608 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2970 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr_nounarymath: expr_nounarymath tGE expr  */
+  case 170: /* expr_nounarymath: expr_nounarymath tLE expr  */
 #line 609 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2976 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* expr_nounarymath: expr_nounarymath tLE expr  */
+  case 171: /* expr_nounarymath: expr_nounarymath tAND expr  */
 #line 610 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2982 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* expr_nounarymath: expr_nounarymath tAND expr  */
+  case 172: /* expr_nounarymath: expr_nounarymath tOR expr  */
 #line 611 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2988 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* expr_nounarymath: expr_nounarymath tOR expr  */
+  case 173: /* expr_nounarymath: expr_nounarymath '&' expr  */
 #line 612 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2994 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* expr_nounarymath: expr_nounarymath '&' expr  */
+  case 174: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
 #line 613 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3000 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+  case 175: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
 #line 614 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
+                                                { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3006 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+  case 176: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
 #line 615 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3012 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 177: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3018 "engines/director/lingo/lingo-gr.cpp"
+#line 3012 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* exprlist: %empty  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 177: /* exprlist: %empty  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3024 "engines/director/lingo/lingo-gr.cpp"
+#line 3018 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* nonemptyexprlist: expr  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 179: /* nonemptyexprlist: expr  */
+#line 622 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3033 "engines/director/lingo/lingo-gr.cpp"
+#line 3027 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 180: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 626 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3041 "engines/director/lingo/lingo-gr.cpp"
+#line 3035 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3045 "engines/director/lingo/lingo-gr.cpp"
+#line 3039 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3240,7 +3234,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 632 "engines/director/lingo/lingo-gr.y"
+#line 631 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index ebec753fed..7934694077 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -319,7 +319,6 @@ ID: tVARID
 	| tOPEN			{ $$ = new Common::String("open"); }
 	| tOR			{ $$ = new Common::String("or"); }
 	// | tPLAY			{ $$ = new Common::String("play"); }
-	| tPLAYACCEL	{ $$ = new Common::String("playAccel"); }
 	| tPREVIOUS		{ $$ = new Common::String("previous"); }
 	// | tPROPERTY		{ $$ = new Common::String("property"); }
 	// | tPUT			{ $$ = new Common::String("put"); }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index c6c3692361..5b2d3b4b5a 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -355,8 +355,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 74
-#define YY_END_OF_BUFFER 75
+#define YY_NUM_RULES 73
+#define YY_END_OF_BUFFER 74
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -364,44 +364,43 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[325] =
+static const flex_int16_t yy_accept[320] =
     {   0,
-        0,    0,   75,   73,    1,   71,   71,   73,   73,   70,
-       70,   69,   70,   66,   70,   67,   67,   67,   67,   67,
-       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
-       67,   67,   67,    1,   67,    1,   71,    0,   72,    2,
-       65,   68,   69,   64,   62,   63,   67,   67,   67,   67,
-       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
-       67,   10,   24,   67,   67,   67,   67,   67,   67,   67,
-       33,   34,   67,   36,   67,   67,   67,   67,   67,   67,
-       67,   67,   67,   67,   53,   67,   67,   67,    1,    0,
-       67,    2,   68,   67,    4,   67,   67,   67,   67,   67,
-
-       67,   12,   67,   67,   67,   67,   19,   67,   67,   67,
-       67,   67,   67,   29,   67,   67,   32,   67,   67,   67,
-       67,   41,   67,   67,   67,   44,   67,   67,   67,   67,
-       67,   67,   67,   67,   67,    0,   67,   67,   67,    6,
-        7,   67,    9,   11,    0,   14,   67,   67,   67,    0,
-        0,    0,   67,   67,   23,   25,   26,   67,   67,   67,
-       31,   35,   37,   67,   67,   67,   67,   67,   67,   67,
-       46,    0,   52,   58,   67,   67,   56,   61,    0,   67,
-        3,   67,   67,   12,   15,   16,   67,    0,    0,   19,
-       67,   67,   27,   67,   30,   67,   67,   67,   67,   67,
-
-       67,   67,   67,   51,   51,   51,   59,   67,   67,    0,
-       67,    5,   67,   12,   17,    0,    0,    0,   67,   67,
-       28,   67,   67,   67,   42,   43,   67,   55,   45,    0,
-       51,   51,   60,   57,    0,   67,   67,    0,   20,   67,
-       67,   67,   67,   67,   67,    0,    0,    0,   51,   51,
-        0,   13,    8,   18,   21,   67,   67,   39,   40,   67,
-        0,    0,    0,   51,   51,   13,   67,   38,   67,    0,
-        0,    0,    0,   51,   22,   67,   50,   49,   50,    0,
-        0,    0,    0,   51,   67,   49,    0,    0,    0,    0,
-        0,   67,    0,    0,    0,    0,    0,    0,   67,    0,
-
-        0,   50,   49,   49,   50,    0,   67,   48,   49,   49,
-        0,   67,   49,   67,    0,   49,   67,    0,    0,   54,
-        0,    0,   47,    0
+        0,    0,   74,   72,    1,   70,   70,   72,   72,   69,
+       69,   68,   69,   65,   69,   66,   66,   66,   66,   66,
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66,    1,   66,    1,   70,    0,   71,    2,
+       64,   67,   68,   63,   61,   62,   66,   66,   66,   66,
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   10,   24,   66,   66,   66,   66,   66,   66,   66,
+       33,   34,   66,   36,   66,   66,   66,   66,   66,   66,
+       66,   66,   66,   66,   52,   66,   66,   66,    1,    0,
+       66,    2,   67,   66,    4,   66,   66,   66,   66,   66,
+
+       66,   12,   66,   66,   66,   66,   19,   66,   66,   66,
+       66,   66,   66,   29,   66,   66,   32,   66,   66,   66,
+       66,   40,   66,   66,   66,   43,   66,   66,   66,   66,
+       66,   66,   66,   66,   66,    0,   66,   66,   66,    6,
+        7,   66,    9,   11,    0,   14,   66,   66,   66,    0,
+        0,    0,   66,   66,   23,   25,   26,   66,   66,   66,
+       31,   35,   37,   66,   66,   66,   66,   66,   66,   66,
+       45,    0,   51,   57,   66,   66,   55,   60,    0,   66,
+        3,   66,   66,   12,   15,   16,   66,    0,    0,   19,
+       66,   66,   27,   66,   30,   66,   66,   66,   66,   66,
+
+       66,   66,   50,   50,   50,   58,   66,   66,    0,   66,
+        5,   66,   12,   17,    0,    0,    0,   66,   66,   28,
+       66,   66,   41,   42,   66,   54,   44,    0,   50,   50,
+       59,   56,    0,   66,   66,    0,   20,   66,   66,   66,
+       66,   66,    0,    0,    0,   50,   50,    0,   13,    8,
+       18,   21,   66,   38,   39,   66,    0,    0,    0,   50,
+       50,   13,   66,   66,    0,    0,    0,    0,   50,   22,
+       66,   49,   48,   49,    0,    0,    0,    0,   50,   66,
+       48,    0,    0,    0,    0,    0,   66,    0,    0,    0,
+        0,    0,    0,   66,    0,    0,   49,   48,   48,   49,
+
+        0,   66,   47,   48,   48,    0,   66,   48,   66,    0,
+       48,   66,    0,    0,   53,    0,    0,   46,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -446,89 +445,89 @@ static const YY_CHAR yy_meta[60] =
         5,    5,    5,    5,    5,    5,    5,    5,    5
     } ;
 
-static const flex_int16_t yy_base[337] =
+static const flex_int16_t yy_base[332] =
     {   0,
-        0,   58,  650,  717,   59,  717,  717,  644,    0,  717,
-      640,   55,   54,  717,  635,   49,   51,   57,   46,   50,
+        0,   58,  642,  710,   59,  710,  710,  636,    0,  710,
+      632,   55,   54,  710,  627,   49,   51,   57,   46,   50,
        57,   63,    0,   63,   58,   97,   87,   97,   98,  100,
-      136,  138,  136,  117,  155,  129,  717,  639,  717,    0,
-      717,  633,  134,  717,  717,  717,    0,   97,  121,  136,
+      136,  138,  136,  117,  155,  129,  710,  633,  710,    0,
+      710,  626,  134,  710,  710,  710,    0,   97,  121,  136,
       136,  147,  142,  137,  142,  156,  152,  157,  178,  169,
-      640,    0,  172,  182,  178,  189,  177,  189,  174,  179,
+      629,    0,  172,  182,  178,  189,  177,  189,  174,  179,
         0,    0,  193,    0,  198,  196,  186,  190,  205,  189,
       192,  201,  204,  224,    0,  230,  224,  218,  260,  239,
-      240,    0,  631,  240,    0,  234,  234,  238,  237,  243,
+      240,    0,  620,  240,    0,  234,  234,  238,  237,  243,
 
-      241,  637,  240,  250,  250,  266,  283,  255,  269,  264,
+      241,  627,  240,  250,  250,  266,  283,  255,  269,  264,
       275,  266,  278,    0,  278,  273,    0,  280,  272,  277,
       285,    0,  283,  293,  295,    0,  294,  292,  298,  326,
       306,  310,  318,  317,  324,  326,  315,  318,  319,    0,
-        0,  335,    0,    0,  634,    0,  333,  335,  340,  327,
+        0,  335,    0,    0,  618,    0,  333,  335,  340,  327,
       331,  333,  347,  334,    0,    0,    0,  337,  340,  350,
-        0,    0,  358,  354,  362,  368,  356,  363,  358,  360,
-        0,  391,    0,    0,  376,  370,  373,    0,  367,  372,
-        0,  383,  380,    0,    0,    0,  381,  389,  381,  604,
-      383,  380,    0,  396,    0,  407,  389,  400,  399,  403,
-
-      402,  406,  406,  572,  440,  439,    0,  409,  418,  418,
-      417,    0,  423,    0,    0,  425,  423,  458,  439,  438,
-        0,  445,  431,  433,    0,    0,  440,    0,    0,  473,
-      468,  474,    0,    0,  453,  447,  454,  471,  717,  473,
-      476,  475,  465,  460,  488,  494,  490,  488,  509,  510,
-      461,    0,    0,  717,    0,  493,  504,    0,    0,  499,
-      499,  501,  506,  479,  537,  717,  505,    0,  506,  519,
-      460,  520,  539,  540,    0,  525,  717,    0,  717,  349,
-      543,  558,  542,  252,  519,    0,  563,  544,  247,  548,
-      580,  537,  546,  557,  576,  581,  584,  580,  586,  211,
-
-      168,  139,  561,  586,  132,   98,  583,   89,   86,   81,
-      582,  585,  614,  588,  618,  615,  603,  607,  603,    0,
-       79,   70,   68,  717,  668,  670,  673,  676,  681,  686,
-      688,  693,  698,  700,  705,  710
+        0,    0,    0,  350,  358,  366,  354,  359,  357,  358,
+        0,  389,    0,    0,  375,  368,  375,    0,  368,  374,
+        0,  384,  381,    0,    0,    0,  382,  394,  383,  614,
+      388,  386,    0,  402,    0,  396,  396,  397,  399,  398,
+
+      402,  404,  571,  433,  438,    0,  407,  416,  418,  420,
+        0,  424,    0,    0,  427,  427,  457,  440,  440,    0,
+      428,  430,    0,    0,  437,    0,    0,  464,  467,  461,
+        0,    0,  438,  443,  457,  456,  710,  459,  472,  462,
+      458,  475,  485,  484,  482,  494,  504,  471,    0,    0,
+      710,    0,  477,    0,    0,  481,  485,  407,  496,  396,
+      520,  710,  494,  496,  511,  392,  514,  533,  534,    0,
+      515,  710,    0,  710,  349,  538,  535,  539,  252,  513,
+        0,  544,  549,  247,  543,  565,  527,  544,  536,  557,
+      575,  570,  565,  571,  211,  168,  139,  569,  579,  132,
+
+       98,  571,   89,   86,   81,  567,  572,  607,  578,  605,
+      624,  581,  588,  592,    0,   79,   70,   68,  710,  661,
+      663,  666,  669,  674,  679,  681,  686,  691,  693,  698,
+      703
     } ;
 
-static const flex_int16_t yy_def[337] =
+static const flex_int16_t yy_def[332] =
     {   0,
-      324,    1,  324,  324,  324,  324,  324,  325,  326,  324,
-      324,  324,  324,  324,  324,  327,  327,  327,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-      327,  327,  327,  324,  327,  324,  324,  325,  324,  328,
-      324,  324,  324,  324,  324,  324,  327,  327,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  324,  324,
-      327,  328,  324,  327,  327,  327,  327,  327,  327,  327,
-
-      327,  327,  327,  327,  327,  327,  324,  327,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-      327,  327,  327,  327,  327,  324,  327,  327,  327,  327,
-      327,  327,  327,  327,  329,  327,  327,  327,  327,  324,
-      324,  324,  327,  327,  327,  327,  327,  327,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-      327,  330,  327,  327,  327,  327,  327,  327,  324,  327,
-      327,  327,  327,  331,  327,  327,  327,  324,  324,  324,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-
-      327,  327,  327,  330,  330,  330,  327,  327,  327,  324,
-      327,  327,  327,  331,  327,  324,  324,  324,  327,  327,
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  324,
-      330,  330,  327,  327,  324,  327,  327,  324,  324,  327,
-      327,  327,  327,  327,  327,  324,  324,  324,  330,  330,
-      324,  327,  327,  324,  327,  327,  327,  327,  327,  327,
-      324,  324,  324,  330,  330,  324,  327,  327,  327,  324,
-      332,  324,  333,  330,  327,  327,  324,  334,  324,  333,
-      333,  333,  333,  330,  327,  334,  324,  333,  333,  333,
-      324,  327,  324,  324,  333,  332,  333,  324,  327,  324,
-
-      324,  333,  334,  334,  333,  324,  327,  324,  334,  334,
-      335,  327,  336,  327,  324,  336,  327,  324,  324,  327,
-      324,  324,  324,    0,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324
+      319,    1,  319,  319,  319,  319,  319,  320,  321,  319,
+      319,  319,  319,  319,  319,  322,  322,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
+      322,  322,  322,  319,  322,  319,  319,  320,  319,  323,
+      319,  319,  319,  319,  319,  319,  322,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  322,  319,  319,
+      322,  323,  319,  322,  322,  322,  322,  322,  322,  322,
+
+      322,  322,  322,  322,  322,  322,  319,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
+      322,  322,  322,  322,  322,  319,  322,  322,  322,  322,
+      322,  322,  322,  322,  324,  322,  322,  322,  322,  319,
+      319,  319,  322,  322,  322,  322,  322,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
+      322,  325,  322,  322,  322,  322,  322,  322,  319,  322,
+      322,  322,  322,  326,  322,  322,  322,  319,  319,  319,
+      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
+
+      322,  322,  325,  325,  325,  322,  322,  322,  319,  322,
+      322,  322,  326,  322,  319,  319,  319,  322,  322,  322,
+      322,  322,  322,  322,  322,  322,  322,  319,  325,  325,
+      322,  322,  319,  322,  322,  319,  319,  322,  322,  322,
+      322,  322,  319,  319,  319,  325,  325,  319,  322,  322,
+      319,  322,  322,  322,  322,  322,  319,  319,  319,  325,
+      325,  319,  322,  322,  319,  327,  319,  328,  325,  322,
+      322,  319,  329,  319,  328,  328,  328,  328,  325,  322,
+      329,  319,  328,  328,  328,  319,  322,  319,  319,  328,
+      327,  328,  319,  322,  319,  319,  328,  329,  329,  328,
+
+      319,  322,  319,  329,  329,  330,  322,  331,  322,  319,
+      331,  322,  319,  319,  322,  319,  319,  319,    0,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319
     } ;
 
-static const flex_int16_t yy_nxt[777] =
+static const flex_int16_t yy_nxt[770] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,    4,   12,
        13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
@@ -536,28 +535,28 @@ static const flex_int16_t yy_nxt[777] =
        32,   23,   23,   33,   23,   23,   23,   16,   17,   18,
        19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
        29,   30,   31,   32,   23,   23,   33,   23,   23,   34,
-       36,   37,   37,   42,   43,   44,   45,   48,   50,  323,
-       51,  323,   54,   55,   49,   56,   35,   52,   58,   65,
-      323,   62,  308,   53,   57,   59,   60,  308,   63,   61,
-      308,   48,   50,   64,   51,   54,   55,   49,   56,  311,
+       36,   37,   37,   42,   43,   44,   45,   48,   50,  318,
+       51,  318,   54,   55,   49,   56,   35,   52,   58,   65,
+      318,   62,  303,   53,   57,   59,   60,  303,   63,   61,
+      303,   48,   50,   64,   51,   54,   55,   49,   56,  306,
 
        35,   52,   58,   65,   69,   62,   53,   57,   59,   60,
        66,   63,   61,   70,   67,   71,   64,   78,   89,   37,
        37,   75,   72,   68,   73,   74,   76,   94,   69,   77,
-       36,   37,   37,  287,   66,   90,   70,   95,   67,   71,
-      287,   78,   42,   43,   75,   72,   68,   73,   74,   76,
+       36,   37,   37,  282,   66,   90,   70,   95,   67,   71,
+      282,   78,   42,   43,   75,   72,   68,   73,   74,   76,
        94,   79,   77,   80,   96,   83,   86,   87,   84,   90,
-       98,   95,   88,   81,   85,   97,   82,   99,   91,  308,
+       98,   95,   88,   81,   85,   97,   82,   99,   91,  303,
       100,  101,  102,  103,  104,   79,   58,   80,   96,   83,
        86,   87,   84,   59,   98,   88,   81,   85,   97,   82,
        99,  105,   91,  100,  101,  106,  102,  103,  104,  110,
 
        58,  108,  109,  111,  112,  114,   59,  113,  116,  117,
-      118,  119,  308,  120,  128,  105,  122,  123,  106,  126,
+      118,  119,  303,  120,  128,  105,  122,  123,  106,  126,
       127,  115,  121,  110,  108,  109,  111,  129,  112,  114,
       113,  116,  117,  124,  118,  119,  125,  120,  128,  122,
-      123,  130,  126,  127,  115,  121,  135,  131,  296,  133,
-      129,  132,  136,  291,  134,  137,  124,  138,  144,  125,
+      123,  130,  126,  127,  115,  121,  135,  131,  291,  133,
+      129,  132,  136,  286,  134,  137,  124,  138,  144,  125,
       139,   89,   37,   37,  140,  130,  141,  142,  143,  135,
       146,  131,  133,  147,  148,  132,  136,  134,   90,  137,
       149,  138,  144,  139,  107,  153,  154,  140,  156,  141,
@@ -568,56 +567,55 @@ static const flex_int16_t yy_nxt[777] =
       170,  171,  159,  160,  166,  150,  161,  172,  162,  151,
       163,  174,  164,  175,  176,  165,  152,  177,  167,  169,
       178,  179,  168,  170,  171,  180,  181,  182,  183,  185,
-      287,  173,  186,  187,  174,  188,  175,  189,  176,  190,
+      282,  173,  186,  187,  174,  188,  175,  189,  176,  190,
       191,  177,  192,  193,  178,  179,  194,  195,  180,  181,
       182,  196,  183,  185,  173,  197,  186,  187,  188,  198,
       189,  199,  190,  200,  191,  192,  193,  201,  202,  194,
-      203,  195,  172,  207,  209,  196,  208,  210,  211,  197,
-
-      212,  213,  216,  198,  215,  199,  200,  217,  219,  220,
-      201,  202,  221,  203,  205,  223,  206,  207,  209,  208,
-      210,  211,  222,  228,  212,  213,  216,  215,  224,  225,
-      217,  219,  220,  226,  227,  229,  221,  205,  223,  206,
-      230,  230,  233,  234,  235,  236,  222,  228,  237,  238,
-      239,  224,  225,  231,  240,  241,  226,  227,  229,  218,
-      242,  271,  243,  244,  245,  233,  234,  235,  236,  230,
-      232,  237,  238,  239,  230,  230,  150,  231,  240,  241,
-      273,  251,  252,  253,  242,  243,  244,  245,  254,  246,
-      255,  256,  257,  232,  258,  259,  266,  249,  250,  247,
-
-      150,  260,  271,  248,  251,  252,  253,  261,  262,  263,
-      230,  230,  254,  246,  255,  256,  257,  258,  259,  266,
-      249,  250,  247,  267,  265,  260,  248,  268,  269,  270,
-      272,  261,  262,  263,  275,  276,  277,  279,  230,  264,
-      273,  230,  285,  287,  287,  287,  267,  292,  265,  287,
-      268,  269,  270,  272,  274,  281,  288,  275,  276,  287,
-      277,  279,  264,  290,  287,  282,  285,  299,  284,  283,
-      292,  300,  297,  230,  295,  301,  289,  287,  274,  281,
-      288,  291,  296,  311,  293,  287,  309,  290,  282,  294,
-      299,  284,  283,  302,  300,  297,  246,  295,  306,  301,
-
-      289,  305,  303,  307,  310,  218,  298,  304,  293,  309,
-      248,  312,  294,  314,  317,  315,  315,  302,  278,  315,
-      246,  322,  306,  286,  286,  305,  303,  307,  310,  298,
-      304,  320,  321,  248,  312,  145,  314,  317,  145,  318,
-       93,  107,   93,   39,  319,  322,   46,   41,   39,  324,
-      286,  286,  324,  324,  320,  321,  324,  324,  324,  324,
-      324,  324,  324,  318,  324,  324,  324,  319,   38,   38,
-      324,   38,   38,   38,   40,   40,   47,   47,   47,   92,
-       92,   92,  184,  324,  324,  184,  184,  204,  324,  324,
-      204,  214,  214,  214,  278,  324,  324,  278,  278,  280,
-
-      324,  324,  280,  286,  286,  286,  313,  324,  324,  313,
-      313,  316,  324,  316,  316,  316,    3,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324
+      172,  195,  206,  266,  207,  196,  208,  268,  209,  197,
+
+      210,  211,  212,  198,  199,  214,  200,  215,  266,  216,
+      201,  202,  204,  218,  205,  219,  206,  207,  220,  226,
+      208,  209,  221,  210,  222,  211,  212,  223,  214,  224,
+      225,  215,  216,  227,  228,  204,  218,  205,  219,  228,
+      231,  232,  220,  226,  233,  221,  229,  222,  234,  235,
+      223,  236,  224,  225,  237,  238,  227,  239,  217,  240,
+      241,  242,  228,  231,  232,  228,  248,  233,  228,  230,
+      229,  234,  235,  251,  236,  150,  252,  237,  249,  238,
+      243,  239,  240,  241,  242,  247,  250,  253,  256,  248,
+      244,  254,  230,  255,  245,  228,  246,  251,  257,  150,
+
+      252,  249,  258,  259,  243,  228,  262,  263,  247,  250,
+      264,  253,  256,  244,  254,  265,  255,  245,  261,  246,
+      267,  228,  257,  270,  260,  271,  258,  259,  272,  262,
+      263,  274,  280,  264,  268,  228,  282,  269,  265,  282,
+      282,  287,  261,  267,  282,  282,  270,  260,  271,  276,
+      282,  283,  272,  284,  296,  274,  280,  294,  282,  277,
+      285,  269,  279,  278,  287,  288,  286,  292,  306,  295,
+      289,  282,  228,  276,  297,  283,  291,  284,  296,  290,
+      294,  243,  277,  301,  285,  279,  278,  300,  302,  288,
+      292,  293,  295,  289,  304,  245,  298,  305,  297,  307,
+
+      309,  299,  290,  273,  312,  243,  310,  301,  310,  315,
+      317,  300,  302,  316,  293,  217,  281,  304,  245,  145,
+      298,  305,  307,  309,  299,  310,  313,  312,  145,   93,
+      107,  314,  315,  281,  317,   93,  316,   39,   46,   41,
+       39,  319,  319,  281,  319,  319,  319,  319,  319,  319,
+      313,  319,  319,  319,  314,  319,  319,  319,  319,  319,
+      281,   38,   38,  319,   38,   38,   38,   40,   40,   47,
+       47,   47,   92,   92,   92,  184,  319,  319,  184,  184,
+      203,  319,  319,  203,  213,  213,  213,  273,  319,  319,
+      273,  273,  275,  319,  319,  275,  281,  281,  281,  308,
+
+      319,  319,  308,  308,  311,  319,  311,  311,  311,    3,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319
     } ;
 
-static const flex_int16_t yy_chk[777] =
+static const flex_int16_t yy_chk[770] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -625,28 +623,28 @@ static const flex_int16_t yy_chk[777] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
-        5,    5,    5,   12,   12,   13,   13,   16,   17,  323,
-       18,  322,   19,   20,   16,   20,    2,   18,   21,   25,
-      321,   24,  310,   18,   20,   21,   22,  309,   24,   22,
-      308,   16,   17,   24,   18,   19,   20,   16,   20,  306,
+        5,    5,    5,   12,   12,   13,   13,   16,   17,  318,
+       18,  317,   19,   20,   16,   20,    2,   18,   21,   25,
+      316,   24,  305,   18,   20,   21,   22,  304,   24,   22,
+      303,   16,   17,   24,   18,   19,   20,   16,   20,  301,
 
         2,   18,   21,   25,   27,   24,   18,   20,   21,   22,
        26,   24,   22,   27,   26,   28,   24,   30,   34,   34,
        34,   29,   28,   26,   28,   28,   29,   48,   27,   29,
-       36,   36,   36,  305,   26,   34,   27,   49,   26,   28,
-      302,   30,   43,   43,   29,   28,   26,   28,   28,   29,
+       36,   36,   36,  300,   26,   34,   27,   49,   26,   28,
+      297,   30,   43,   43,   29,   28,   26,   28,   28,   29,
        48,   31,   29,   31,   50,   32,   33,   33,   32,   34,
-       52,   49,   33,   31,   32,   51,   31,   53,   35,  301,
+       52,   49,   33,   31,   32,   51,   31,   53,   35,  296,
        54,   55,   56,   57,   58,   31,   35,   31,   50,   32,
        33,   33,   32,   35,   52,   33,   31,   32,   51,   31,
        53,   59,   35,   54,   55,   60,   56,   57,   58,   64,
 
        35,   63,   63,   65,   66,   68,   35,   67,   69,   70,
-       73,   75,  300,   76,   82,   59,   77,   78,   60,   80,
+       73,   75,  295,   76,   82,   59,   77,   78,   60,   80,
        81,   68,   76,   64,   63,   63,   65,   83,   66,   68,
        67,   69,   70,   79,   73,   75,   79,   76,   82,   77,
-       78,   84,   80,   81,   68,   76,   88,   86,  289,   87,
-       83,   86,   90,  284,   87,   91,   79,   94,  101,   79,
+       78,   84,   80,   81,   68,   76,   88,   86,  284,   87,
+       83,   86,   90,  279,   87,   91,   79,   94,  101,   79,
        96,   89,   89,   89,   97,   84,   98,   99,  100,   88,
       103,   86,   87,  104,  105,   86,   90,   87,   89,   91,
       106,   94,  101,   96,  107,  108,  109,   97,  110,   98,
@@ -657,53 +655,52 @@ static const flex_int16_t yy_chk[777] =
       128,  129,  113,  115,  123,  107,  116,  130,  118,  107,
       119,  131,  120,  132,  133,  121,  107,  134,  124,  127,
       135,  136,  125,  128,  129,  137,  138,  139,  142,  147,
-      280,  130,  148,  149,  131,  150,  132,  151,  133,  152,
+      275,  130,  148,  149,  131,  150,  132,  151,  133,  152,
       153,  134,  154,  158,  135,  136,  159,  160,  137,  138,
-      139,  163,  142,  147,  130,  164,  148,  149,  150,  165,
-      151,  166,  152,  167,  153,  154,  158,  168,  169,  159,
-      170,  160,  172,  175,  177,  163,  176,  179,  180,  164,
-
-      182,  183,  188,  165,  187,  166,  167,  189,  191,  192,
-      168,  169,  194,  170,  172,  197,  172,  175,  177,  176,
-      179,  180,  196,  202,  182,  183,  188,  187,  198,  199,
-      189,  191,  192,  200,  201,  203,  194,  172,  197,  172,
-      206,  205,  208,  209,  210,  211,  196,  202,  213,  216,
-      217,  198,  199,  205,  219,  220,  200,  201,  203,  218,
-      222,  271,  223,  224,  227,  208,  209,  210,  211,  231,
-      206,  213,  216,  217,  230,  232,  218,  205,  219,  220,
-      264,  235,  236,  237,  222,  223,  224,  227,  238,  230,
-      240,  241,  242,  206,  243,  244,  251,  231,  232,  230,
-
-      218,  245,  262,  230,  235,  236,  237,  246,  247,  248,
-      249,  250,  238,  230,  240,  241,  242,  243,  244,  251,
-      231,  232,  230,  256,  250,  245,  230,  257,  260,  261,
-      263,  246,  247,  248,  267,  269,  270,  272,  265,  249,
-      273,  274,  276,  283,  281,  288,  256,  285,  250,  290,
-      257,  260,  261,  263,  265,  273,  281,  267,  269,  282,
-      270,  272,  249,  283,  287,  273,  276,  292,  274,  273,
-      285,  293,  290,  204,  288,  294,  282,  295,  265,  273,
-      281,  291,  296,  311,  287,  297,  303,  283,  273,  287,
-      292,  274,  273,  295,  293,  290,  291,  288,  298,  294,
-
-      282,  297,  296,  299,  304,  190,  291,  296,  287,  303,
-      291,  307,  287,  312,  314,  313,  316,  295,  311,  315,
-      291,  319,  298,  313,  316,  297,  296,  299,  304,  291,
-      296,  317,  318,  291,  307,  145,  312,  314,  102,  315,
-       93,   61,   42,   38,  315,  319,   15,   11,    8,    3,
-      313,  316,    0,    0,  317,  318,    0,    0,    0,    0,
-        0,    0,    0,  315,    0,    0,    0,  315,  325,  325,
-        0,  325,  325,  325,  326,  326,  327,  327,  327,  328,
-      328,  328,  329,    0,    0,  329,  329,  330,    0,    0,
-      330,  331,  331,  331,  332,    0,    0,  332,  332,  333,
-
-        0,    0,  333,  334,  334,  334,  335,    0,    0,  335,
-      335,  336,    0,  336,  336,  336,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
-      324,  324,  324,  324,  324,  324
+      139,  164,  142,  147,  130,  165,  148,  149,  150,  166,
+      151,  167,  152,  168,  153,  154,  158,  169,  170,  159,
+      172,  160,  175,  266,  176,  164,  177,  260,  179,  165,
+
+      180,  182,  183,  166,  167,  187,  168,  188,  258,  189,
+      169,  170,  172,  191,  172,  192,  175,  176,  194,  201,
+      177,  179,  196,  180,  197,  182,  183,  198,  187,  199,
+      200,  188,  189,  202,  204,  172,  191,  172,  192,  205,
+      207,  208,  194,  201,  209,  196,  204,  197,  210,  212,
+      198,  215,  199,  200,  216,  218,  202,  219,  217,  221,
+      222,  225,  230,  207,  208,  228,  233,  209,  229,  205,
+      204,  210,  212,  236,  215,  217,  238,  216,  234,  218,
+      228,  219,  221,  222,  225,  230,  235,  239,  242,  233,
+      228,  240,  205,  241,  228,  246,  229,  236,  243,  217,
+
+      238,  234,  244,  245,  228,  247,  248,  253,  230,  235,
+      256,  239,  242,  228,  240,  257,  241,  228,  247,  229,
+      259,  261,  243,  263,  246,  264,  244,  245,  265,  248,
+      253,  267,  271,  256,  268,  269,  277,  261,  257,  276,
+      278,  280,  247,  259,  285,  282,  263,  246,  264,  268,
+      283,  276,  265,  277,  289,  267,  271,  287,  290,  268,
+      278,  261,  269,  268,  280,  282,  286,  285,  306,  288,
+      282,  292,  203,  268,  290,  276,  291,  277,  289,  283,
+      287,  286,  268,  293,  278,  269,  268,  292,  294,  282,
+      285,  286,  288,  282,  298,  286,  291,  299,  290,  302,
+
+      307,  291,  283,  306,  309,  286,  310,  293,  308,  312,
+      314,  292,  294,  313,  286,  190,  308,  298,  286,  145,
+      291,  299,  302,  307,  291,  311,  310,  309,  102,   93,
+       61,  310,  312,  311,  314,   42,  313,   38,   15,   11,
+        8,    3,    0,  308,    0,    0,    0,    0,    0,    0,
+      310,    0,    0,    0,  310,    0,    0,    0,    0,    0,
+      311,  320,  320,    0,  320,  320,  320,  321,  321,  322,
+      322,  322,  323,  323,  323,  324,    0,    0,  324,  324,
+      325,    0,    0,  325,  326,  326,  326,  327,    0,    0,
+      327,  327,  328,    0,    0,  328,  329,  329,  329,  330,
+
+        0,    0,  330,  330,  331,    0,  331,  331,  331,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -814,8 +811,8 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-#line 817 "engines/director/lingo/lingo-lex.cpp"
-#line 818 "engines/director/lingo/lingo-lex.cpp"
+#line 814 "engines/director/lingo/lingo-lex.cpp"
+#line 815 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1038,7 +1035,7 @@ YY_DECL
 #line 111 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1041 "engines/director/lingo/lingo-lex.cpp"
+#line 1038 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1066,13 +1063,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 325 )
+				if ( yy_current_state >= 320 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 324 );
+		while ( yy_current_state != 319 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1297,51 +1294,46 @@ YY_RULE_SETUP
 case 38:
 YY_RULE_SETUP
 #line 169 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAYACCEL; }
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 170 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 171 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPROPERTY; }	// D4
+{ count(); return tPUT; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 172 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tREPEAT; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 173 "engines/director/lingo/lingo-lex.l"
-{ count(); return tREPEAT; }
+{ count(); return tSCRIPT; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 174 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSCRIPT; }
+{ count(); return tSET; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 175 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 176 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tTELL; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 177 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTELL; }
-	YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 178 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1378,9 +1370,9 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 48:
+case 47:
 YY_RULE_SETUP
-#line 213 "engines/director/lingo/lingo-lex.l"
+#line 212 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1404,9 +1396,9 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 49:
+case 48:
 YY_RULE_SETUP
-#line 235 "engines/director/lingo/lingo-lex.l"
+#line 234 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1481,9 +1473,9 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s', field '%s'", ptr, field.c_str());
 	}
 	YY_BREAK
-case 50:
+case 49:
 YY_RULE_SETUP
-#line 308 "engines/director/lingo/lingo-lex.l"
+#line 307 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1519,9 +1511,9 @@ YY_RULE_SETUP
 			return tTHEENTITY;
 	}
 	YY_BREAK
-case 51:
+case 50:
 YY_RULE_SETUP
-#line 342 "engines/director/lingo/lingo-lex.l"
+#line 341 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1549,84 +1541,84 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s'", ptr);
 	}
 	YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 367 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTHEN; }
+	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 368 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
+{ count(); return tTO; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 369 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+{ count(); return tASSERTERROR; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 370 "engines/director/lingo/lingo-lex.l"
-{ count(); return tASSERTERROR; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 371 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 372 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 373 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tWHEN; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 374 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWHILE; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 375 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWINDOW; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 376 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWINDOW; }
+{ count(); return tWORD; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 377 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+#line 378 "engines/director/lingo/lingo-lex.l"
+{ count(); return tNEQ; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 379 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+{ count(); return tGE; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 380 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tLE; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 381 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tCONCAT; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 382 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
-	YY_BREAK
-case 66:
-YY_RULE_SETUP
-#line 383 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
-case 67:
+case 66:
 YY_RULE_SETUP
-#line 385 "engines/director/lingo/lingo-lex.l"
+#line 384 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1634,43 +1626,43 @@ YY_RULE_SETUP
 		return tVARID;
 	}
 	YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 390 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.f = atof(yytext); return tFLOAT; }
+	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 391 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return tFLOAT; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 392 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 70:
+/* rule 70 can match eol */
 YY_RULE_SETUP
 #line 393 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); return '\n'; }
 	YY_BREAK
 case 71:
-/* rule 71 can match eol */
 YY_RULE_SETUP
 #line 394 "engines/director/lingo/lingo-lex.l"
-{ count(); return '\n'; }
+{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 395 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
-	YY_BREAK
-case 73:
-YY_RULE_SETUP
-#line 396 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
-case 74:
+case 73:
 YY_RULE_SETUP
-#line 398 "engines/director/lingo/lingo-lex.l"
+#line 397 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1673 "engines/director/lingo/lingo-lex.cpp"
+#line 1665 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1969,7 +1961,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 325 )
+			if ( yy_current_state >= 320 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1997,11 +1989,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 325 )
+		if ( yy_current_state >= 320 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 324);
+	yy_is_jam = (yy_current_state == 319);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2679,7 +2671,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 398 "engines/director/lingo/lingo-lex.l"
+#line 397 "engines/director/lingo/lingo-lex.l"
 
 
 extern int yydebug;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index dbd453df04..4dda68ec6a 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -166,7 +166,6 @@ on			{ count(); return tON; }		// D3
 open		{ count(); return tOPEN; }
 or			{ count(); return tOR; }
 play		{ count(); return tPLAY; }
-playAccel	{ count(); return tPLAYACCEL; }
 previous	{ count(); return tPREVIOUS; }
 property	{ count(); return tPROPERTY; }	// D4
 put			{ count(); return tPUT; }


Commit: 553b4beafd62e651a333f7476bea9dd872f969ba
    https://github.com/scummvm/scummvm/commit/553b4beafd62e651a333f7476bea9dd872f969ba
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Create FrameNode and MovieNode

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index bc1635acc5..26e92e7b81 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -56,6 +56,8 @@ struct VarNode;
 struct ParensNode;
 struct UnaryOpNode;
 struct BinaryOpNode;
+struct FrameNode;
+struct MovieNode;
 
 typedef Common::Array<Node *> NodeList;
 typedef Common::Array<Common::String *> IDList;
@@ -100,7 +102,9 @@ enum NodeType {
 	kVarNode,
 	kParensNode,
 	kUnaryOpNode,
-	kBinaryOpNode
+	kBinaryOpNode,
+	kFrameNode,
+	kMovieNode
 };
 
 /* NodeVisitor */
@@ -140,6 +144,8 @@ public:
 	virtual void visitParensNode(ParensNode *node) = 0;
 	virtual void visitUnaryOpNode(UnaryOpNode *node) = 0;
 	virtual void visitBinaryOpNode(BinaryOpNode *node) = 0;
+	virtual void visitFrameNode(FrameNode *node) = 0;
+	virtual void visitMovieNode(MovieNode *node) = 0;
 };
 
 /* Node */
@@ -641,6 +647,34 @@ struct BinaryOpNode : ExprNode {
 	}
 };
 
+/* FrameNode */
+
+struct FrameNode : ExprNode {
+	Node *arg;
+
+	FrameNode(Node *argIn) : ExprNode(kFrameNode), arg(argIn) {}
+	virtual ~FrameNode() {
+		delete arg;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitFrameNode(this);
+	}
+};
+
+/* MovieNode */
+
+struct MovieNode : ExprNode {
+	Node *arg;
+
+	MovieNode(Node *argIn) : ExprNode(kMovieNode), arg(argIn) {}
+	virtual ~MovieNode() {
+		delete arg;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitMovieNode(this);
+	}
+};
+
 } // End of namespace Director
 
 #endif
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index d9e3ae43f3..8d02f336c4 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -796,4 +796,16 @@ void LingoCompiler::visitBinaryOpNode(BinaryOpNode *node) {
 	code1(node->op);
 }
 
+/* FrameNode */
+
+void LingoCompiler::visitFrameNode(FrameNode *node) {
+	compile(node->arg);
+}
+
+/* MovieNode */
+
+void LingoCompiler::visitMovieNode(MovieNode *node) {
+	compile(node->arg);
+}
+
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 193359741f..2969bbf1c8 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -107,6 +107,8 @@ public:
 	virtual void visitParensNode(ParensNode *node);
 	virtual void visitUnaryOpNode(UnaryOpNode *node);
 	virtual void visitBinaryOpNode(BinaryOpNode *node);
+	virtual void visitFrameNode(FrameNode *node);
+	virtual void visitMovieNode(MovieNode *node);
 
 private:
 	int parse(const char *code);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index ee718379ce..22d83dc812 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -265,7 +265,7 @@ enum yysymbol_kind_t
   YYSYMBOL_stmtoneliner = 110,             /* stmtoneliner  */
   YYSYMBOL_proc = 111,                     /* proc  */
   YYSYMBOL_cmdargs = 112,                  /* cmdargs  */
-  YYSYMBOL_playargs = 113,                 /* playargs  */
+  YYSYMBOL_frameargs = 113,                /* frameargs  */
   YYSYMBOL_asgn = 114,                     /* asgn  */
   YYSYMBOL_to = 115,                       /* to  */
   YYSYMBOL_definevars = 116,               /* definevars  */
@@ -685,17 +685,17 @@ static const yytype_int16 yyrline[] =
      329,   331,   332,   333,   334,   335,   336,   337,   338,   339,
      342,   343,   346,   350,   360,   361,   362,   363,   366,   367,
      368,   371,   372,   373,   374,   375,   376,   377,   380,   383,
-     388,   392,   398,   403,   406,   412,   417,   423,   429,   435,
-     443,   444,   445,   446,   449,   449,   451,   452,   453,   456,
-     460,   464,   470,   474,   478,   482,   484,   486,   490,   491,
-     495,   501,   508,   509,   515,   516,   517,   518,   519,   520,
-     521,   522,   525,   527,   531,   535,   536,   537,   540,   544,
-     549,   550,   551,   554,   556,   557,   560,   561,   562,   569,
-     570,   574,   575,   576,   577,   578,   579,   580,   581,   582,
-     583,   584,   585,   586,   587,   588,   589,   590,   591,   598,
-     599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-     609,   610,   611,   612,   613,   614,   615,   618,   619,   622,
-     626
+     388,   392,   398,   403,   406,   416,   421,   427,   433,   439,
+     447,   448,   449,   450,   453,   453,   455,   456,   457,   460,
+     464,   468,   474,   478,   482,   486,   488,   490,   494,   495,
+     499,   505,   512,   513,   519,   520,   521,   522,   523,   524,
+     525,   526,   529,   531,   535,   539,   540,   541,   544,   548,
+     553,   554,   555,   558,   560,   561,   564,   565,   566,   573,
+     574,   578,   579,   580,   581,   582,   583,   584,   585,   586,
+     587,   588,   589,   590,   591,   592,   593,   594,   595,   602,
+     603,   604,   605,   606,   607,   608,   609,   610,   611,   612,
+     613,   614,   615,   616,   617,   618,   619,   622,   623,   626,
+     630
 };
 #endif
 
@@ -729,7 +729,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "scriptpartlist", "scriptpart", "macro", "factory", "method",
   "methodlist", "nonemptymethodlist", "methodlistline", "handler",
   "endargdef", "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner",
-  "proc", "cmdargs", "playargs", "asgn", "to", "definevars", "ifstmt",
+  "proc", "cmdargs", "frameargs", "asgn", "to", "definevars", "ifstmt",
   "ifelsestmt", "loop", "stmtlist", "nonemptystmtlist", "stmtlistline",
   "simpleexpr_noparens_nounarymath", "var", "varorchunk", "varorthe",
   "list", "proplist", "proppair", "parens", "unarymath", "simpleexpr",
@@ -2403,7 +2403,7 @@ yyreduce:
 #line 2404 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* proc: tPLAY playargs '\n'  */
+  case 74: /* proc: tPLAY frameargs '\n'  */
 #line 374 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
 #line 2410 "engines/director/lingo/lingo-gr.cpp"
@@ -2492,104 +2492,104 @@ yyreduce:
 #line 2493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* playargs: tFRAME expr  */
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 85: /* frameargs: tFRAME expr  */
+#line 416 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
-		args->push_back((yyvsp[0].node));
+		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
 #line 2503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* playargs: tMOVIE expr  */
-#line 417 "engines/director/lingo/lingo-gr.y"
+  case 86: /* frameargs: tMOVIE expr  */
+#line 421 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
-		args->push_back((yyvsp[0].node));
+		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
 #line 2514 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* playargs: tFRAME expr tOF tMOVIE expr  */
-#line 423 "engines/director/lingo/lingo-gr.y"
+  case 87: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
-		args->push_back((yyvsp[-3].node));
-		args->push_back((yyvsp[0].node));
+		args->push_back(new FrameNode((yyvsp[-3].node)));
+		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
 #line 2525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* playargs: expr tOF tMOVIE expr  */
-#line 429 "engines/director/lingo/lingo-gr.y"
+  case 88: /* frameargs: expr tOF tMOVIE expr  */
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
-		args->push_back((yyvsp[0].node));
+		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
 #line 2536 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* playargs: tFRAME expr expr_nounarymath  */
-#line 435 "engines/director/lingo/lingo-gr.y"
+  case 89: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 439 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
-		args->push_back((yyvsp[-1].node));
+		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
 #line 2547 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 443 "engines/director/lingo/lingo-gr.y"
+#line 447 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2553 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 444 "engines/director/lingo/lingo-gr.y"
+#line 448 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 445 "engines/director/lingo/lingo-gr.y"
+#line 449 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* asgn: tSET varorthe to expr '\n'  */
-#line 446 "engines/director/lingo/lingo-gr.y"
+#line 450 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2571 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* definevars: tGLOBAL idlist '\n'  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
 #line 2577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* definevars: tPROPERTY idlist '\n'  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 456 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
 #line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* definevars: tINSTANCE idlist '\n'  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+#line 457 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
 #line 2589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* ifstmt: tIF expr tTHEN stmt  */
-#line 456 "engines/director/lingo/lingo-gr.y"
+#line 460 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
@@ -2598,14 +2598,14 @@ yyreduce:
     break;
 
   case 100: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 464 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
 #line 2605 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 464 "engines/director/lingo/lingo-gr.y"
+#line 468 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
@@ -2616,7 +2616,7 @@ yyreduce:
     break;
 
   case 102: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 470 "engines/director/lingo/lingo-gr.y"
+#line 474 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
@@ -2625,7 +2625,7 @@ yyreduce:
     break;
 
   case 103: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 478 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
@@ -2634,41 +2634,41 @@ yyreduce:
     break;
 
   case 104: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 478 "engines/director/lingo/lingo-gr.y"
+#line 482 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
 #line 2641 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 482 "engines/director/lingo/lingo-gr.y"
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 484 "engines/director/lingo/lingo-gr.y"
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2662 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* stmtlist: %empty  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
 #line 2668 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* nonemptystmtlist: stmtlistline  */
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
@@ -2679,7 +2679,7 @@ yyreduce:
     break;
 
   case 111: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 501 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
@@ -2689,73 +2689,73 @@ yyreduce:
     break;
 
   case 112: /* stmtlistline: '\n'  */
-#line 508 "engines/director/lingo/lingo-gr.y"
+#line 512 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
 #line 2695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 515 "engines/director/lingo/lingo-gr.y"
+#line 519 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
 #line 2701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 516 "engines/director/lingo/lingo-gr.y"
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
 #line 2707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 517 "engines/director/lingo/lingo-gr.y"
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
 #line 2713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 518 "engines/director/lingo/lingo-gr.y"
+#line 522 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
 #line 2719 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 519 "engines/director/lingo/lingo-gr.y"
+#line 523 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
 #line 2725 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
 #line 2731 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* var: ID  */
-#line 525 "engines/director/lingo/lingo-gr.y"
+#line 529 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
 #line 2737 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* list: '[' exprlist ']'  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
 #line 2743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* list: '[' ':' ']'  */
-#line 536 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
 #line 2749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* list: '[' proplist ']'  */
-#line 537 "engines/director/lingo/lingo-gr.y"
+#line 541 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
 #line 2755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* proplist: proppair  */
-#line 540 "engines/director/lingo/lingo-gr.y"
+#line 544 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
@@ -2764,7 +2764,7 @@ yyreduce:
     break;
 
   case 129: /* proplist: proplist ',' proppair  */
-#line 544 "engines/director/lingo/lingo-gr.y"
+#line 548 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
@@ -2772,253 +2772,253 @@ yyreduce:
     break;
 
   case 130: /* proppair: tSYMBOL ':' expr  */
-#line 549 "engines/director/lingo/lingo-gr.y"
+#line 553 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2778 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131: /* proppair: ID ':' expr  */
-#line 550 "engines/director/lingo/lingo-gr.y"
+#line 554 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2784 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* proppair: tSTRING ':' expr  */
-#line 551 "engines/director/lingo/lingo-gr.y"
+#line 555 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2790 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* parens: '(' expr ')'  */
-#line 554 "engines/director/lingo/lingo-gr.y"
+#line 558 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
 #line 2796 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* unarymath: '+' simpleexpr  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+#line 560 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
 #line 2802 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* unarymath: '-' simpleexpr  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+#line 561 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
 #line 2808 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142: /* expr: expr '+' expr  */
-#line 575 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2814 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* expr: expr '-' expr  */
-#line 576 "engines/director/lingo/lingo-gr.y"
+#line 580 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* expr: expr '*' expr  */
-#line 577 "engines/director/lingo/lingo-gr.y"
+#line 581 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2826 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* expr: expr '/' expr  */
-#line 578 "engines/director/lingo/lingo-gr.y"
+#line 582 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* expr: expr tMOD expr  */
-#line 579 "engines/director/lingo/lingo-gr.y"
+#line 583 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2838 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147: /* expr: expr '>' expr  */
-#line 580 "engines/director/lingo/lingo-gr.y"
+#line 584 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2844 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* expr: expr '<' expr  */
-#line 581 "engines/director/lingo/lingo-gr.y"
+#line 585 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149: /* expr: expr tEQ expr  */
-#line 582 "engines/director/lingo/lingo-gr.y"
+#line 586 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2856 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150: /* expr: expr tNEQ expr  */
-#line 583 "engines/director/lingo/lingo-gr.y"
+#line 587 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2862 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151: /* expr: expr tGE expr  */
-#line 584 "engines/director/lingo/lingo-gr.y"
+#line 588 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2868 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152: /* expr: expr tLE expr  */
-#line 585 "engines/director/lingo/lingo-gr.y"
+#line 589 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2874 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153: /* expr: expr tAND expr  */
-#line 586 "engines/director/lingo/lingo-gr.y"
+#line 590 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2880 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154: /* expr: expr tOR expr  */
-#line 587 "engines/director/lingo/lingo-gr.y"
+#line 591 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2886 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155: /* expr: expr '&' expr  */
-#line 588 "engines/director/lingo/lingo-gr.y"
+#line 592 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2892 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156: /* expr: expr tCONCAT expr  */
-#line 589 "engines/director/lingo/lingo-gr.y"
+#line 593 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2898 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157: /* expr: expr tCONTAINS expr  */
-#line 590 "engines/director/lingo/lingo-gr.y"
+#line 594 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2904 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158: /* expr: expr tSTARTS expr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+#line 595 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2910 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+#line 603 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2916 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 600 "engines/director/lingo/lingo-gr.y"
+#line 604 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 601 "engines/director/lingo/lingo-gr.y"
+#line 605 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2928 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 602 "engines/director/lingo/lingo-gr.y"
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2934 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 603 "engines/director/lingo/lingo-gr.y"
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2940 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 604 "engines/director/lingo/lingo-gr.y"
+#line 608 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2946 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2952 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2958 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+#line 611 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2964 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+#line 612 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2970 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+#line 613 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2976 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+#line 614 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2982 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 611 "engines/director/lingo/lingo-gr.y"
+#line 615 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2988 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+#line 616 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2994 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 174: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 613 "engines/director/lingo/lingo-gr.y"
+#line 617 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3000 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 175: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 614 "engines/director/lingo/lingo-gr.y"
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3006 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 176: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 615 "engines/director/lingo/lingo-gr.y"
+#line 619 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3012 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 177: /* exprlist: %empty  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+#line 622 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
 #line 3018 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 179: /* nonemptyexprlist: expr  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+#line 626 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
@@ -3027,7 +3027,7 @@ yyreduce:
     break;
 
   case 180: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+#line 630 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
@@ -3234,7 +3234,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 631 "engines/director/lingo/lingo-gr.y"
+#line 635 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 7934694077..6b33f5549f 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -167,7 +167,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<node> stmt stmtoneliner
 %type<node> proc asgn definevars
 %type<node> ifstmt ifelsestmt loop
-%type<nodelist> cmdargs playargs stmtlist nonemptystmtlist
+%type<nodelist> cmdargs frameargs stmtlist nonemptystmtlist
 %type<node> stmtlistline
 
 // EXPRESSION
@@ -371,7 +371,7 @@ stmtoneliner: proc
 proc: ID cmdargs '\n'					{ $$ = new CmdNode($ID, $cmdargs); }
 	| tPUT cmdargs '\n'					{ $$ = new CmdNode(new Common::String("put"), $cmdargs); }
 	| tPLAY cmdargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $cmdargs); }
-	| tPLAY playargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $playargs); }
+	| tPLAY frameargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $frameargs); }
 	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
 	| tEXIT tREPEAT '\n'				{ $$ = new ExitRepeatNode(); }
 	| tEXIT '\n'						{ $$ = new ExitNode(); }
@@ -409,33 +409,37 @@ cmdargs: /* empty */					{
 		$$ = $args; }
 	;
 
-playargs: tFRAME expr[frame]						{
+frameargs:
+	// On the off chance that we encounter something like `play frame done`
+	// we will wrap the frame arg in a FrameNode. This has no purpose other than
+	// to avoid detecting this case as `play done`.
+	tFRAME expr[frame]						{
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
-		args->push_back($frame);
+		args->push_back(new FrameNode($frame));
 		$$ = args; }
 	| tMOVIE expr[movie]							{
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
-		args->push_back($movie);
+		args->push_back(new MovieNode($movie));
 		$$ = args; }
 	| tFRAME expr[frame] tOF tMOVIE expr[movie]		{
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
-		args->push_back($frame);
-		args->push_back($movie);
+		args->push_back(new FrameNode($frame));
+		args->push_back(new MovieNode($movie));
 		$$ = args; }
 	| expr[frame] tOF tMOVIE expr[movie]			{
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back($frame);
-		args->push_back($movie);
+		args->push_back(new MovieNode($movie));
 		$$ = args; }
 	| tFRAME expr[frame] expr_nounarymath[movie]	{
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
-		args->push_back($frame);
+		args->push_back(new FrameNode($frame));
 		args->push_back($movie);
 		$$ = args; }
 	;


Commit: 41caf423dd2d3b14b3974861282e3b2fc2a2e6b9
    https://github.com/scummvm/scummvm/commit/41caf423dd2d3b14b3974861282e3b2fc2a2e6b9
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement go command

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 8d02f336c4..314c7aaaa0 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -458,6 +458,18 @@ void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 /* CmdNode */
 
 void LingoCompiler::visitCmdNode(CmdNode *node) {
+	if (node->name->equalsIgnoreCase("go") && node->args->size() == 1 && (*node->args)[0]->type == kVarNode){
+		VarNode *var = static_cast<VarNode *>((*node->args)[0]);
+		if (var->name->equalsIgnoreCase("loop") ||
+				var->name->equalsIgnoreCase("next") ||
+				var->name->equalsIgnoreCase("previous")) {
+			code1(LC::c_symbolpush);
+			codeString(var->name->c_str());
+			codeCmd(node->name, 1);
+			return;
+		}
+	}
+
 	// `play done` compiles to `play()`
 	if (node->name->equalsIgnoreCase("play") && node->args->size() == 1 && (*node->args)[0]->type == kVarNode) {
 		VarNode *var = static_cast<VarNode *>((*node->args)[0]);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 22d83dc812..490b328dae 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -182,114 +182,113 @@ enum yysymbol_kind_t
   YYSYMBOL_tFRAME = 27,                    /* tFRAME  */
   YYSYMBOL_tGLOBAL = 28,                   /* tGLOBAL  */
   YYSYMBOL_tGO = 29,                       /* tGO  */
-  YYSYMBOL_tGOLOOP = 30,                   /* tGOLOOP  */
-  YYSYMBOL_tIF = 31,                       /* tIF  */
-  YYSYMBOL_tIN = 32,                       /* tIN  */
-  YYSYMBOL_tINTO = 33,                     /* tINTO  */
-  YYSYMBOL_tMACRO = 34,                    /* tMACRO  */
-  YYSYMBOL_tMOVIE = 35,                    /* tMOVIE  */
-  YYSYMBOL_tNEXT = 36,                     /* tNEXT  */
-  YYSYMBOL_tOF = 37,                       /* tOF  */
-  YYSYMBOL_tPREVIOUS = 38,                 /* tPREVIOUS  */
-  YYSYMBOL_tPUT = 39,                      /* tPUT  */
-  YYSYMBOL_tREPEAT = 40,                   /* tREPEAT  */
-  YYSYMBOL_tSET = 41,                      /* tSET  */
-  YYSYMBOL_tTHEN = 42,                     /* tTHEN  */
-  YYSYMBOL_tTO = 43,                       /* tTO  */
-  YYSYMBOL_tWHEN = 44,                     /* tWHEN  */
-  YYSYMBOL_tWITH = 45,                     /* tWITH  */
-  YYSYMBOL_tWHILE = 46,                    /* tWHILE  */
-  YYSYMBOL_tFACTORY = 47,                  /* tFACTORY  */
-  YYSYMBOL_tOPEN = 48,                     /* tOPEN  */
-  YYSYMBOL_tPLAY = 49,                     /* tPLAY  */
-  YYSYMBOL_tINSTANCE = 50,                 /* tINSTANCE  */
-  YYSYMBOL_tGE = 51,                       /* tGE  */
-  YYSYMBOL_tLE = 52,                       /* tLE  */
-  YYSYMBOL_tEQ = 53,                       /* tEQ  */
-  YYSYMBOL_tNEQ = 54,                      /* tNEQ  */
-  YYSYMBOL_tAND = 55,                      /* tAND  */
-  YYSYMBOL_tOR = 56,                       /* tOR  */
-  YYSYMBOL_tNOT = 57,                      /* tNOT  */
-  YYSYMBOL_tMOD = 58,                      /* tMOD  */
-  YYSYMBOL_tAFTER = 59,                    /* tAFTER  */
-  YYSYMBOL_tBEFORE = 60,                   /* tBEFORE  */
-  YYSYMBOL_tCONCAT = 61,                   /* tCONCAT  */
-  YYSYMBOL_tCONTAINS = 62,                 /* tCONTAINS  */
-  YYSYMBOL_tSTARTS = 63,                   /* tSTARTS  */
-  YYSYMBOL_tCHAR = 64,                     /* tCHAR  */
-  YYSYMBOL_tITEM = 65,                     /* tITEM  */
-  YYSYMBOL_tLINE = 66,                     /* tLINE  */
-  YYSYMBOL_tWORD = 67,                     /* tWORD  */
-  YYSYMBOL_tSPRITE = 68,                   /* tSPRITE  */
-  YYSYMBOL_tINTERSECTS = 69,               /* tINTERSECTS  */
-  YYSYMBOL_tWITHIN = 70,                   /* tWITHIN  */
-  YYSYMBOL_tTELL = 71,                     /* tTELL  */
-  YYSYMBOL_tPROPERTY = 72,                 /* tPROPERTY  */
-  YYSYMBOL_tON = 73,                       /* tON  */
-  YYSYMBOL_tMETHOD = 74,                   /* tMETHOD  */
-  YYSYMBOL_tENDIF = 75,                    /* tENDIF  */
-  YYSYMBOL_tENDREPEAT = 76,                /* tENDREPEAT  */
-  YYSYMBOL_tENDTELL = 77,                  /* tENDTELL  */
-  YYSYMBOL_tASSERTERROR = 78,              /* tASSERTERROR  */
-  YYSYMBOL_79_ = 79,                       /* '<'  */
-  YYSYMBOL_80_ = 80,                       /* '>'  */
-  YYSYMBOL_81_ = 81,                       /* '&'  */
-  YYSYMBOL_82_ = 82,                       /* '+'  */
-  YYSYMBOL_83_ = 83,                       /* '-'  */
-  YYSYMBOL_84_ = 84,                       /* '*'  */
-  YYSYMBOL_85_ = 85,                       /* '/'  */
-  YYSYMBOL_86_ = 86,                       /* '%'  */
-  YYSYMBOL_87_n_ = 87,                     /* '\n'  */
-  YYSYMBOL_88_ = 88,                       /* ','  */
-  YYSYMBOL_89_ = 89,                       /* '('  */
-  YYSYMBOL_90_ = 90,                       /* ')'  */
-  YYSYMBOL_91_ = 91,                       /* '['  */
-  YYSYMBOL_92_ = 92,                       /* ']'  */
-  YYSYMBOL_93_ = 93,                       /* ':'  */
-  YYSYMBOL_YYACCEPT = 94,                  /* $accept  */
-  YYSYMBOL_script = 95,                    /* script  */
-  YYSYMBOL_scriptpartlist = 96,            /* scriptpartlist  */
-  YYSYMBOL_scriptpart = 97,                /* scriptpart  */
-  YYSYMBOL_macro = 98,                     /* macro  */
-  YYSYMBOL_factory = 99,                   /* factory  */
-  YYSYMBOL_method = 100,                   /* method  */
-  YYSYMBOL_methodlist = 101,               /* methodlist  */
-  YYSYMBOL_nonemptymethodlist = 102,       /* nonemptymethodlist  */
-  YYSYMBOL_methodlistline = 103,           /* methodlistline  */
-  YYSYMBOL_handler = 104,                  /* handler  */
-  YYSYMBOL_endargdef = 105,                /* endargdef  */
-  YYSYMBOL_ID = 106,                       /* ID  */
-  YYSYMBOL_idlist = 107,                   /* idlist  */
-  YYSYMBOL_nonemptyidlist = 108,           /* nonemptyidlist  */
-  YYSYMBOL_stmt = 109,                     /* stmt  */
-  YYSYMBOL_stmtoneliner = 110,             /* stmtoneliner  */
-  YYSYMBOL_proc = 111,                     /* proc  */
-  YYSYMBOL_cmdargs = 112,                  /* cmdargs  */
-  YYSYMBOL_frameargs = 113,                /* frameargs  */
-  YYSYMBOL_asgn = 114,                     /* asgn  */
-  YYSYMBOL_to = 115,                       /* to  */
-  YYSYMBOL_definevars = 116,               /* definevars  */
-  YYSYMBOL_ifstmt = 117,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 118,               /* ifelsestmt  */
-  YYSYMBOL_loop = 119,                     /* loop  */
-  YYSYMBOL_stmtlist = 120,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 121,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 122,             /* stmtlistline  */
-  YYSYMBOL_simpleexpr_noparens_nounarymath = 123, /* simpleexpr_noparens_nounarymath  */
-  YYSYMBOL_var = 124,                      /* var  */
-  YYSYMBOL_varorchunk = 125,               /* varorchunk  */
-  YYSYMBOL_varorthe = 126,                 /* varorthe  */
-  YYSYMBOL_list = 127,                     /* list  */
-  YYSYMBOL_proplist = 128,                 /* proplist  */
-  YYSYMBOL_proppair = 129,                 /* proppair  */
-  YYSYMBOL_parens = 130,                   /* parens  */
-  YYSYMBOL_unarymath = 131,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 132,               /* simpleexpr  */
-  YYSYMBOL_simpleexpr_nounarymath = 133,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_expr = 134,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 135,         /* expr_nounarymath  */
-  YYSYMBOL_exprlist = 136,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 137          /* nonemptyexprlist  */
+  YYSYMBOL_tIF = 30,                       /* tIF  */
+  YYSYMBOL_tIN = 31,                       /* tIN  */
+  YYSYMBOL_tINTO = 32,                     /* tINTO  */
+  YYSYMBOL_tMACRO = 33,                    /* tMACRO  */
+  YYSYMBOL_tMOVIE = 34,                    /* tMOVIE  */
+  YYSYMBOL_tNEXT = 35,                     /* tNEXT  */
+  YYSYMBOL_tOF = 36,                       /* tOF  */
+  YYSYMBOL_tPREVIOUS = 37,                 /* tPREVIOUS  */
+  YYSYMBOL_tPUT = 38,                      /* tPUT  */
+  YYSYMBOL_tREPEAT = 39,                   /* tREPEAT  */
+  YYSYMBOL_tSET = 40,                      /* tSET  */
+  YYSYMBOL_tTHEN = 41,                     /* tTHEN  */
+  YYSYMBOL_tTO = 42,                       /* tTO  */
+  YYSYMBOL_tWHEN = 43,                     /* tWHEN  */
+  YYSYMBOL_tWITH = 44,                     /* tWITH  */
+  YYSYMBOL_tWHILE = 45,                    /* tWHILE  */
+  YYSYMBOL_tFACTORY = 46,                  /* tFACTORY  */
+  YYSYMBOL_tOPEN = 47,                     /* tOPEN  */
+  YYSYMBOL_tPLAY = 48,                     /* tPLAY  */
+  YYSYMBOL_tINSTANCE = 49,                 /* tINSTANCE  */
+  YYSYMBOL_tGE = 50,                       /* tGE  */
+  YYSYMBOL_tLE = 51,                       /* tLE  */
+  YYSYMBOL_tEQ = 52,                       /* tEQ  */
+  YYSYMBOL_tNEQ = 53,                      /* tNEQ  */
+  YYSYMBOL_tAND = 54,                      /* tAND  */
+  YYSYMBOL_tOR = 55,                       /* tOR  */
+  YYSYMBOL_tNOT = 56,                      /* tNOT  */
+  YYSYMBOL_tMOD = 57,                      /* tMOD  */
+  YYSYMBOL_tAFTER = 58,                    /* tAFTER  */
+  YYSYMBOL_tBEFORE = 59,                   /* tBEFORE  */
+  YYSYMBOL_tCONCAT = 60,                   /* tCONCAT  */
+  YYSYMBOL_tCONTAINS = 61,                 /* tCONTAINS  */
+  YYSYMBOL_tSTARTS = 62,                   /* tSTARTS  */
+  YYSYMBOL_tCHAR = 63,                     /* tCHAR  */
+  YYSYMBOL_tITEM = 64,                     /* tITEM  */
+  YYSYMBOL_tLINE = 65,                     /* tLINE  */
+  YYSYMBOL_tWORD = 66,                     /* tWORD  */
+  YYSYMBOL_tSPRITE = 67,                   /* tSPRITE  */
+  YYSYMBOL_tINTERSECTS = 68,               /* tINTERSECTS  */
+  YYSYMBOL_tWITHIN = 69,                   /* tWITHIN  */
+  YYSYMBOL_tTELL = 70,                     /* tTELL  */
+  YYSYMBOL_tPROPERTY = 71,                 /* tPROPERTY  */
+  YYSYMBOL_tON = 72,                       /* tON  */
+  YYSYMBOL_tMETHOD = 73,                   /* tMETHOD  */
+  YYSYMBOL_tENDIF = 74,                    /* tENDIF  */
+  YYSYMBOL_tENDREPEAT = 75,                /* tENDREPEAT  */
+  YYSYMBOL_tENDTELL = 76,                  /* tENDTELL  */
+  YYSYMBOL_tASSERTERROR = 77,              /* tASSERTERROR  */
+  YYSYMBOL_78_ = 78,                       /* '<'  */
+  YYSYMBOL_79_ = 79,                       /* '>'  */
+  YYSYMBOL_80_ = 80,                       /* '&'  */
+  YYSYMBOL_81_ = 81,                       /* '+'  */
+  YYSYMBOL_82_ = 82,                       /* '-'  */
+  YYSYMBOL_83_ = 83,                       /* '*'  */
+  YYSYMBOL_84_ = 84,                       /* '/'  */
+  YYSYMBOL_85_ = 85,                       /* '%'  */
+  YYSYMBOL_86_n_ = 86,                     /* '\n'  */
+  YYSYMBOL_87_ = 87,                       /* ','  */
+  YYSYMBOL_88_ = 88,                       /* '('  */
+  YYSYMBOL_89_ = 89,                       /* ')'  */
+  YYSYMBOL_90_ = 90,                       /* '['  */
+  YYSYMBOL_91_ = 91,                       /* ']'  */
+  YYSYMBOL_92_ = 92,                       /* ':'  */
+  YYSYMBOL_YYACCEPT = 93,                  /* $accept  */
+  YYSYMBOL_script = 94,                    /* script  */
+  YYSYMBOL_scriptpartlist = 95,            /* scriptpartlist  */
+  YYSYMBOL_scriptpart = 96,                /* scriptpart  */
+  YYSYMBOL_macro = 97,                     /* macro  */
+  YYSYMBOL_factory = 98,                   /* factory  */
+  YYSYMBOL_method = 99,                    /* method  */
+  YYSYMBOL_methodlist = 100,               /* methodlist  */
+  YYSYMBOL_nonemptymethodlist = 101,       /* nonemptymethodlist  */
+  YYSYMBOL_methodlistline = 102,           /* methodlistline  */
+  YYSYMBOL_handler = 103,                  /* handler  */
+  YYSYMBOL_endargdef = 104,                /* endargdef  */
+  YYSYMBOL_ID = 105,                       /* ID  */
+  YYSYMBOL_idlist = 106,                   /* idlist  */
+  YYSYMBOL_nonemptyidlist = 107,           /* nonemptyidlist  */
+  YYSYMBOL_stmt = 108,                     /* stmt  */
+  YYSYMBOL_stmtoneliner = 109,             /* stmtoneliner  */
+  YYSYMBOL_proc = 110,                     /* proc  */
+  YYSYMBOL_cmdargs = 111,                  /* cmdargs  */
+  YYSYMBOL_frameargs = 112,                /* frameargs  */
+  YYSYMBOL_asgn = 113,                     /* asgn  */
+  YYSYMBOL_to = 114,                       /* to  */
+  YYSYMBOL_definevars = 115,               /* definevars  */
+  YYSYMBOL_ifstmt = 116,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 117,               /* ifelsestmt  */
+  YYSYMBOL_loop = 118,                     /* loop  */
+  YYSYMBOL_stmtlist = 119,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 120,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 121,             /* stmtlistline  */
+  YYSYMBOL_simpleexpr_noparens_nounarymath = 122, /* simpleexpr_noparens_nounarymath  */
+  YYSYMBOL_var = 123,                      /* var  */
+  YYSYMBOL_varorchunk = 124,               /* varorchunk  */
+  YYSYMBOL_varorthe = 125,                 /* varorthe  */
+  YYSYMBOL_list = 126,                     /* list  */
+  YYSYMBOL_proplist = 127,                 /* proplist  */
+  YYSYMBOL_proppair = 128,                 /* proppair  */
+  YYSYMBOL_parens = 129,                   /* parens  */
+  YYSYMBOL_unarymath = 130,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 131,               /* simpleexpr  */
+  YYSYMBOL_simpleexpr_nounarymath = 132,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_expr = 133,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 134,         /* expr_nounarymath  */
+  YYSYMBOL_exprlist = 135,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 136          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -609,21 +608,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  107
+#define YYFINAL  110
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2463
+#define YYLAST   2439
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  94
+#define YYNTOKENS  93
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  44
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  180
+#define YYNRULES  182
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  333
+#define YYNSTATES  338
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   333
+#define YYMAXUTOK   332
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -638,15 +637,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      87,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      86,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    86,    81,     2,
-      89,    90,    84,    82,    88,    83,     2,    85,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    93,     2,
-      79,     2,    80,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    85,    80,     2,
+      88,    89,    83,    81,    87,    82,     2,    84,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    92,     2,
+      78,     2,    79,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    91,     2,    92,     2,     2,     2,     2,     2,     2,
+       2,    90,     2,    91,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -670,7 +669,7 @@ static const yytype_int8 yytranslate[] =
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78
+      75,    76,    77
 };
 
 #if YYDEBUG
@@ -684,18 +683,18 @@ static const yytype_int16 yyrline[] =
      315,   316,   317,   319,   320,   322,   325,   326,   327,   328,
      329,   331,   332,   333,   334,   335,   336,   337,   338,   339,
      342,   343,   346,   350,   360,   361,   362,   363,   366,   367,
-     368,   371,   372,   373,   374,   375,   376,   377,   380,   383,
-     388,   392,   398,   403,   406,   416,   421,   427,   433,   439,
-     447,   448,   449,   450,   453,   453,   455,   456,   457,   460,
-     464,   468,   474,   478,   482,   486,   488,   490,   494,   495,
-     499,   505,   512,   513,   519,   520,   521,   522,   523,   524,
-     525,   526,   529,   531,   535,   539,   540,   541,   544,   548,
-     553,   554,   555,   558,   560,   561,   564,   565,   566,   573,
-     574,   578,   579,   580,   581,   582,   583,   584,   585,   586,
-     587,   588,   589,   590,   591,   592,   593,   594,   595,   602,
-     603,   604,   605,   606,   607,   608,   609,   610,   611,   612,
-     613,   614,   615,   616,   617,   618,   619,   622,   623,   626,
-     630
+     368,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     382,   385,   390,   394,   400,   405,   408,   418,   423,   429,
+     435,   441,   449,   450,   451,   452,   455,   455,   457,   458,
+     459,   462,   466,   470,   476,   480,   484,   488,   490,   492,
+     496,   497,   501,   507,   514,   515,   521,   522,   523,   524,
+     525,   526,   527,   528,   531,   533,   537,   541,   542,   543,
+     546,   550,   555,   556,   557,   560,   562,   563,   566,   567,
+     568,   575,   576,   580,   581,   582,   583,   584,   585,   586,
+     587,   588,   589,   590,   591,   592,   593,   594,   595,   596,
+     597,   604,   605,   606,   607,   608,   609,   610,   611,   612,
+     613,   614,   615,   616,   617,   618,   619,   620,   621,   624,
+     625,   628,   632
 };
 #endif
 
@@ -717,12 +716,12 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "tTHEMENUITEMSENTITY", "tFLOAT", "tTHEFUNC", "tTHEFUNCINOF", "tVARID",
   "tSTRING", "tSYMBOL", "tENDCLAUSE", "tPLAYACCEL", "tTHEOBJECTPROP",
   "tCAST", "tFIELD", "tSCRIPT", "tWINDOW", "tDOWN", "tELSE", "tELSIF",
-  "tEXIT", "tFRAME", "tGLOBAL", "tGO", "tGOLOOP", "tIF", "tIN", "tINTO",
-  "tMACRO", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT",
-  "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tFACTORY", "tOPEN",
-  "tPLAY", "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT",
-  "tMOD", "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR",
-  "tITEM", "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
+  "tEXIT", "tFRAME", "tGLOBAL", "tGO", "tIF", "tIN", "tINTO", "tMACRO",
+  "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET",
+  "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tFACTORY", "tOPEN", "tPLAY",
+  "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD",
+  "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM",
+  "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
   "tPROPERTY", "tON", "tMETHOD", "tENDIF", "tENDREPEAT", "tENDTELL",
   "tASSERTERROR", "'<'", "'>'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
   "'\\n'", "','", "'('", "')'", "'['", "']'", "':'", "$accept", "script",
@@ -752,13 +751,13 @@ static const yytype_int16 yytoknum[] =
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,    60,
-      62,    38,    43,    45,    42,    47,    37,    10,    44,    40,
-      41,    91,    93,    58
+     325,   326,   327,   328,   329,   330,   331,   332,    60,    62,
+      38,    43,    45,    42,    47,    37,    10,    44,    40,    41,
+      91,    93,    58
 };
 #endif
 
-#define YYPACT_NINF (-225)
+#define YYPACT_NINF (-224)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -772,40 +771,40 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1322,  -225,  -225,  -225,  -225,  -225,  -225,   -33,  -225,  2135,
-     929,  -225,  -225,  2135,  -225,   -30,  -225,  -225,  1009,    20,
-    2135,  -225,  -225,  -225,  -225,  2135,  -225,  1089,  2135,  -225,
-    -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,
-    -225,  -225,  -225,  -225,  2135,  2135,  -225,  -225,    34,  1322,
-    -225,  -225,  -225,  -225,  1009,  -225,  -225,  -225,  -225,  -225,
-    -225,  -225,  -225,   -51,  -225,  -225,  -225,  -225,  -225,   -41,
-     -38,  -225,  -225,  -225,  -225,   929,   929,   929,   929,   437,
-     -29,  -225,  -225,  -225,  -225,  -225,  -225,  2179,  2135,   -10,
-     847,    -9,   519,  2135,   929,  -225,  -225,   -35,    -5,   929,
-     929,    -2,    -1,   601,     3,     7,  2135,  -225,  -225,     9,
-     683,  -225,  -225,  2135,  -225,  -225,  -225,  2214,   -31,   -17,
-     -12,   -78,   -66,  -225,  2365,     5,    10,   929,  1828,   929,
-     929,   929,   929,   929,   929,   929,   929,   929,   929,   929,
-     929,   929,   929,   929,   929,   929,    12,  -225,  -225,   310,
-    -225,  2135,  1169,  1169,  1249,  2135,  2135,   155,   929,  -225,
-    -225,  -225,  2227,    47,  2265,  -225,  -225,   929,   -23,   765,
-    2365,  -225,  -225,    52,  -225,  -225,    16,  -225,  -225,  -225,
-     929,   929,  -225,   929,  2075,  -225,  -225,   929,    15,  1890,
-      83,   -26,   -26,   -26,   -26,   189,   189,  -225,   -44,   -26,
-     -26,   -26,   -26,   -44,   -37,   -37,  -225,  -225,  1890,   929,
-    -225,    21,    23,    24,    10,   929,   929,   929,   929,   929,
-     929,   929,   929,   929,   929,   929,   929,   929,   929,   929,
-     929,   929,   929,   929,  1890,  2278,  2135,  -225,  -225,    25,
-    -225,  -225,    79,  2378,   929,  1890,  2365,  2365,  2365,   -31,
-     -17,    26,  -225,  2365,  -225,  -225,  -225,  1384,  -225,  -225,
-    1952,  1890,   -61,  -225,  -225,  -225,   -26,   -26,   -26,   -26,
-     189,   189,  -225,   -44,   -26,   -26,   -26,   -26,   -44,   -37,
-     -37,  -225,  -225,    10,  2164,  1447,  -225,  2135,   -23,   929,
-    2365,  1516,  2014,    29,  -225,  1890,  -225,  -225,    74,   929,
-      31,    33,  -225,  2365,  2135,  1890,  -225,  -225,  1578,   929,
-    2315,  -225,  1890,   -16,  -225,  1641,    35,  2328,  1890,  1890,
-    -225,  2135,    36,  -225,  1890,  1704,  -225,  -225,  1766,    37,
-      38,  -225,  -225
+    1275,  -224,  -224,  -224,  -224,  -224,  -224,   -33,  -224,  2075,
+     808,   887,  -224,  -224,  2075,  -224,   -16,  -224,  -224,   966,
+      31,  2075,  -224,  -224,  -224,  -224,  2075,  -224,   808,  2075,
+    -224,  -224,  -224,  -224,  -224,  -224,  -224,  -224,  -224,  -224,
+    -224,  -224,  -224,  -224,  -224,  2075,  2075,  -224,  -224,    44,
+    1275,  -224,  -224,  -224,  -224,   966,  -224,  -224,  -224,  -224,
+    -224,  -224,  -224,  -224,   -55,  -224,  -224,  -224,  -224,  -224,
+     -15,   -24,  -224,  -224,  -224,  -224,   887,   887,   887,   887,
+     887,   727,   322,    -5,    -9,    -6,  -224,  -224,  -224,  -224,
+    -224,  -224,   403,   887,  2119,  2075,    15,    19,   484,  2075,
+     887,  -224,  -224,    10,    21,    24,    26,    27,    28,  2075,
+    -224,  -224,    29,   565,  -224,  -224,  2075,   646,  2320,  -224,
+    -224,  -224,  -224,  2154,    -2,    25,     5,   -64,   -31,  -224,
+    2320,    30,    -1,   887,  -224,  -224,    84,   887,   887,   887,
+     887,  1045,  1045,  1203,   887,   887,  1124,   887,   887,   887,
+     887,   887,   887,   887,   887,  -224,  -224,  -224,  2207,  2167,
+    1773,   887,   887,   887,   887,    33,  -224,  -224,  2075,  2075,
+    2075,    68,  2220,  -224,  -224,   887,   -61,  -224,  -224,  -224,
+    -224,    36,  -224,  -224,    89,  2355,   887,  -224,   887,   887,
+    -224,   887,  2016,  -224,  -224,   887,    35,   887,   -42,   -42,
+     -42,   -42,   178,   178,  -224,   -49,   -42,   -42,   -42,   -42,
+     -49,   -35,   -35,  -224,  -224,    -1,   887,   887,   887,   887,
+     887,   887,   887,   887,   887,   887,   887,   887,   887,   887,
+     887,   887,   887,   887,  1834,   101,  1834,  -224,    40,    41,
+      42,   887,  1834,  2257,  2075,  -224,  -224,    60,  -224,  -224,
+    1834,   887,   -23,  2320,  2320,  2320,    -2,    25,    55,  -224,
+    2320,  -224,  2320,   -42,   -42,   -42,   -42,   178,   178,  -224,
+     -49,   -42,   -42,   -42,   -42,   -49,   -35,   -35,  -224,  -224,
+      -1,  -224,  -224,  1336,  -224,  -224,  1895,  1834,  -224,  -224,
+    -224,  2104,  1398,  -224,  2075,   -61,  1466,  2320,  -224,  1956,
+      62,  -224,  1834,  -224,   107,   887,    64,    65,  -224,  2075,
+    1834,  -224,  -224,  1527,   887,  2270,  -224,  1834,     2,  -224,
+    1589,    66,  2307,  1834,  1834,  -224,  2075,    75,  -224,  1834,
+    1651,  -224,  -224,  1712,    76,    77,  -224,  -224
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -814,59 +813,59 @@ static const yytype_int16 yypact[] =
 static const yytype_uint8 yydefact[] =
 {
        0,    24,    28,    31,    47,    56,    30,     0,    32,    60,
-       0,    33,    35,     0,    39,    40,    42,    45,    78,    46,
-      48,    51,    54,    57,    55,     0,    43,    78,    60,    26,
-      44,    41,    38,    25,    27,    49,    29,    36,    37,    59,
-      53,    34,    58,    50,    60,     0,    52,     5,     0,     2,
-       3,     6,     7,     8,    78,     9,    64,    68,    69,    70,
-      65,    66,    67,     0,    77,    40,    46,    48,    62,     0,
-      61,   114,   115,   117,   116,    41,     0,     0,     0,   177,
-     122,   136,   120,   121,   137,   138,   141,     0,    60,     0,
-       0,     0,    79,     0,     0,   122,   124,     0,     0,    32,
-      39,     0,     0,    79,     0,     0,    60,     1,     4,     0,
-      79,    76,    96,     0,   118,   134,   135,     0,   117,   116,
-       0,   122,     0,   128,   179,     0,   178,   177,     0,     0,
+      80,     0,    33,    35,     0,    39,    40,    42,    45,    80,
+      46,    48,    51,    54,    57,    55,     0,    43,    80,    60,
+      26,    44,    41,    38,    25,    27,    49,    29,    36,    37,
+      59,    53,    34,    58,    50,    60,     0,    52,     5,     0,
+       2,     3,     6,     7,     8,    80,     9,    64,    68,    69,
+      70,    65,    66,    67,     0,    79,    40,    46,    48,    62,
+       0,    61,   116,   117,   119,   118,    32,    39,    41,     0,
+       0,     0,   179,   124,     0,     0,   138,   122,   123,   139,
+     140,   143,    81,     0,     0,    60,     0,     0,    81,     0,
+       0,   124,   126,     0,     0,     0,     0,     0,     0,    60,
+       1,     4,     0,    81,    78,    98,     0,    87,    88,   120,
+     136,   137,    85,     0,   119,   118,     0,   124,     0,   130,
+     181,     0,   180,   179,    73,    74,    42,     0,     0,     0,
+       0,    26,    44,    38,     0,     0,    49,     0,     0,     0,
+       0,     0,     0,     0,     0,   141,   142,   161,    83,     0,
+       0,     0,     0,     0,     0,     0,    77,    72,    35,    25,
+      27,     0,     0,    96,    97,     0,    13,    75,    76,   100,
+      99,     0,    71,    63,    42,    91,     0,   135,     0,     0,
+     128,     0,     0,   129,   127,     0,     0,     0,   153,   154,
+     151,   152,   155,   156,   148,   158,   159,   160,   150,   149,
+     157,   144,   145,   146,   147,    82,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    75,    83,     0,
-      72,    35,    26,    44,    38,    25,    27,    49,     0,   139,
-     140,   159,    81,     0,     0,    94,    95,     0,    13,    85,
-      86,    73,    74,    42,    98,    97,     0,    71,    63,   133,
-       0,     0,   126,     0,     0,   127,   125,     0,     0,   108,
-      99,   151,   152,   149,   150,   153,   154,   146,   156,   157,
-     158,   148,   147,   155,   142,   143,   144,   145,   108,     0,
-     123,     0,     0,     0,    80,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   108,     0,     0,    17,    18,    11,
-      14,    15,    42,    89,     0,   108,   132,   130,   131,     0,
-       0,     0,   129,   180,   119,   112,   113,     0,   109,   110,
-       0,    10,     0,    90,    91,    92,   169,   170,   167,   168,
-     171,   172,   164,   174,   175,   176,   166,   165,   173,   160,
-     161,   162,   163,    82,     0,     0,    93,    60,     0,     0,
-      88,    20,     0,     0,   111,   108,   101,    84,     0,     0,
-       0,     0,    16,    87,    21,   108,   103,   100,     0,     0,
-       0,   105,   108,     0,    22,     0,     0,     0,   108,    12,
-      19,     0,     0,   102,   108,     0,    23,   104,     0,     0,
-       0,   106,   107
+       0,     0,     0,     0,   110,   101,   110,   125,     0,     0,
+       0,     0,   110,     0,     0,    17,    18,    11,    14,    15,
+     110,     0,     0,   134,   132,   133,     0,     0,     0,   131,
+     182,   121,    90,   171,   172,   169,   170,   173,   174,   166,
+     176,   177,   178,   168,   167,   175,   162,   163,   164,   165,
+      84,   114,   115,     0,   111,   112,     0,    10,    92,    93,
+      94,     0,     0,    95,    60,     0,    20,    89,    86,     0,
+       0,   113,   110,   103,     0,     0,     0,     0,    16,    21,
+     110,   105,   102,     0,     0,     0,   107,   110,     0,    22,
+       0,     0,     0,   110,    12,    19,     0,     0,   104,   110,
+       0,    23,   106,     0,     0,     0,   108,   109
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -225,  -225,  -225,    77,  -225,  -225,  -225,  -225,  -225,  -161,
-    -225,  -225,     0,   -25,  -225,     4,  -225,  -225,   -11,  -225,
-    -225,  -225,  -225,  -225,  -225,  -225,  -203,  -225,  -224,   -86,
-     -18,   -82,  -225,  -225,  -225,   -55,   -80,  -225,    -7,  -225,
-     200,   -39,     8,  -157
+    -224,  -224,  -224,   115,  -224,  -224,  -224,  -224,  -224,  -129,
+    -224,  -224,     0,   -28,  -224,     4,  -224,  -224,   -12,   143,
+    -224,  -224,  -224,  -224,  -224,  -224,  -223,  -224,  -222,   -62,
+     -11,   -66,  -224,  -224,  -224,   -19,   -20,  -224,   -21,  -224,
+      -8,    57,    39,  -149
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    48,    49,    50,    51,    52,   238,   239,   240,   241,
-      53,   313,    80,    69,    70,   256,    56,    57,    91,   102,
-      58,   167,    59,    60,    61,    62,   257,   258,   259,    81,
-      82,   211,    97,    83,   122,   123,    84,    85,    86,   161,
-     124,   162,   125,   126
+       0,    49,    50,    51,    52,    53,   246,   247,   248,   249,
+      54,   318,    83,    70,    71,   282,    57,    58,    84,    85,
+      59,   175,    60,    61,    62,    63,   283,   284,   285,    86,
+      87,   238,   103,    88,   128,   129,    89,    90,    91,   157,
+     130,   158,   131,   132
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -874,504 +873,498 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      54,   214,    96,   104,    55,   261,   159,    63,   165,    68,
-      89,   127,   160,    88,   135,   183,   101,   159,   166,   105,
-      95,   135,   184,   160,   159,    98,   185,   187,    68,   297,
-     160,   285,   135,   294,   107,   136,   111,   294,   142,   143,
-     144,   145,   291,   109,    68,   106,   112,   144,   145,    54,
-     113,   236,   262,    55,    64,   141,   142,   143,   144,   145,
-     127,   294,   180,   146,   237,    93,    94,   294,   114,   115,
-     116,   320,   321,   212,   213,   283,   181,   147,   150,   121,
-     182,   176,   168,   159,   294,   171,   172,   244,    68,   160,
-     174,   294,   308,   163,   175,   294,   177,   186,   187,   208,
-     233,   294,   315,   245,   294,   254,    68,   260,   263,   319,
-     264,   265,   288,   178,   289,   325,   307,   309,   311,   183,
-     312,   328,   323,   327,   331,   332,   108,   302,    54,   252,
-     243,     0,   190,   210,     0,   188,     0,   210,   210,     0,
+      55,   107,    92,    94,    56,   215,    64,    97,   163,    69,
+     102,    98,   244,   287,    95,   163,   105,   108,   144,   292,
+      92,   101,   163,    96,   133,   245,   104,   296,   191,    69,
+     155,   114,   150,   151,   152,   153,   155,   252,   149,   150,
+     151,   152,   153,   112,   110,    69,   109,   113,   152,   153,
+      55,   155,   173,    65,    56,   155,   192,   119,   120,   121,
+     193,   301,   174,   116,   195,   301,   298,   165,   117,   118,
+     301,   115,   156,   123,   301,    99,   100,   134,   156,   313,
+     135,   181,   127,   133,   280,   159,   195,   320,   325,   326,
+     188,   301,   172,   156,   324,    69,   190,   156,   301,   171,
+     330,   166,   301,   239,   240,   167,   333,   176,   301,    69,
+     177,   301,   178,   179,   180,   182,   183,   189,   197,   236,
+     241,   194,   250,   251,   261,   286,   288,   289,   290,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   295,   191,   312,   314,
+     316,   317,   328,   202,   203,   204,   207,   237,   237,   237,
+      55,   332,   336,   337,   235,   111,   308,   243,   101,   101,
+     101,   106,   196,   259,   185,     0,     0,     0,     0,     0,
+     253,   254,     0,   255,     0,     0,     0,   260,     0,   262,
+       0,     0,   258,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,     0,     0,     0,   137,   138,
+     139,   140,     0,   291,    55,   163,    55,     0,   144,   145,
+     164,     0,    55,   297,   294,     0,     0,     0,     0,     0,
+      55,     0,     0,     0,     0,     0,   147,   148,   149,   150,
+     151,   152,   153,     0,     0,     0,   307,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    95,     0,     0,     0,    95,    95,     0,     0,     0,
-      71,     0,     0,     0,     0,    72,     0,     0,     1,    73,
-      74,     0,     0,     0,     2,     3,     4,     5,     6,     0,
-       0,     0,     8,     0,   251,     0,     0,    11,    12,    54,
-      14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
-      23,    24,     0,    26,     0,     0,     0,     0,    54,     0,
-      87,     0,    75,    32,    33,    34,     0,     0,    92,    36,
-      37,    38,    39,    40,    41,    42,    43,   103,     0,     0,
-       0,     0,     0,    46,    54,     0,   287,    76,    77,     0,
-     129,   130,   131,   132,    78,    54,    79,   135,     0,     0,
-     136,   137,   138,     0,   110,     0,     0,    54,     0,     0,
-      54,    54,   301,     0,   296,     0,     0,     0,   139,   140,
-     141,   142,   143,   144,   145,     0,     0,     0,   117,     0,
-       0,     0,     0,     0,     0,    54,     0,    68,     0,     0,
-     149,    54,    54,     0,   164,    54,   306,     0,     0,   169,
-     170,     0,     0,     0,   314,    54,     0,     0,    54,     0,
-       0,     0,    54,     0,     0,    54,     0,     0,    54,    54,
-       0,   326,     0,     0,    54,    54,     0,     0,    54,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,     0,     0,     0,     0,
-       0,     0,   195,   196,   197,     0,     0,   200,     0,     0,
-       0,   129,   130,   131,   132,   133,   134,   235,   135,     0,
-       0,   136,   137,   138,     0,     0,     0,     0,     0,     0,
-     246,   247,     0,   248,     0,     0,     0,   253,     0,   139,
-     140,   141,   142,   143,   144,   145,     0,     0,   209,     0,
-     179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,     0,   284,     0,     0,     0,     0,     0,     0,
-       0,     0,    71,     0,   290,     0,     0,    72,     0,     0,
-       1,   118,   119,     0,     0,     0,     2,     3,     4,     5,
-       6,     0,     0,     0,     8,     0,     0,     0,     0,    11,
-      12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
-      21,    22,    23,    24,     0,    26,     0,     0,     0,   303,
-       0,     0,    29,    30,    75,    32,    33,    34,     0,   310,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,   317,
-       0,     0,     0,     0,     0,    46,     0,     0,     0,    76,
-      77,     0,     0,     0,    71,     0,    78,     0,    79,    72,
-     120,     0,     1,    73,    74,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-       0,    11,   151,     0,    14,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
-     129,   130,   131,   132,   152,   153,    75,   154,   155,   156,
-     136,   137,   157,    36,    37,    38,    39,    40,    41,    42,
-      43,     0,     0,     0,     0,     0,     0,    46,   139,   140,
-     141,   142,   143,   144,   145,     0,    71,   158,    78,     0,
-      79,    72,     0,     0,     1,    73,    74,     0,     0,     0,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,     0,    11,    12,     0,    14,    65,   173,    17,
-       0,    66,    67,     0,    21,    22,    23,    24,     0,    26,
-       0,     0,   129,   130,   131,   132,   152,   153,    75,   154,
-      33,    34,   136,   137,   157,    36,    37,    38,    39,    40,
-      41,    42,    43,     0,     0,     0,     0,     0,     0,    46,
-     139,   140,   141,   142,   143,   144,   145,     0,    71,   158,
-      78,     0,    79,    72,     0,     0,     1,    73,    74,     0,
+       0,     0,     0,    55,     0,     0,    55,    55,     0,     0,
+     303,     0,    55,     0,    69,     0,    55,   315,     0,    55,
+       0,     0,    55,   311,     0,     0,   322,     0,     0,   319,
+      55,     0,     0,    55,     0,     0,     0,    55,     0,     0,
+      55,     0,     0,    55,    55,     0,   331,    72,     0,    55,
+      55,     0,    73,    55,     0,     1,   124,   125,     0,     0,
+       0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    66,    17,    18,
+       0,    67,    68,     0,    22,    23,    24,    25,     0,    27,
+       0,     0,     0,     0,     0,     0,    30,    31,    78,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,     0,     0,     0,     0,    47,
+       0,     0,     0,    79,    80,     0,     0,     0,    72,     0,
+      93,     0,    82,    73,   126,     0,     1,    74,    75,     0,
        0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,     0,    11,    12,     0,    14,    65,
-      16,    17,     0,    66,    67,     0,    21,    22,    23,    24,
-       0,    26,     0,     0,   129,   130,   131,   132,   152,   153,
-      75,   154,    33,    34,   136,   137,   157,    36,    37,    38,
-      39,    40,    41,    42,    43,     0,     0,     0,     0,     0,
-       0,    46,   139,   140,   141,   142,   143,   144,   145,     0,
-      71,   158,    78,     0,    79,    72,     0,     0,     1,    73,
-      74,     0,     0,     0,     2,     3,     4,     5,     6,     0,
-       0,     0,     8,     0,     0,     0,     0,    11,    12,     0,
-      14,    65,   242,    17,     0,    66,    67,     0,    21,    22,
-      23,    24,     0,    26,     0,     0,   129,   130,   131,   132,
-     152,   153,    75,   154,    33,    34,   136,   137,   157,    36,
-      37,    38,    39,    40,    41,    42,    43,     0,     0,     0,
-       0,     0,     0,    46,   139,   140,   141,   142,   143,   144,
-     145,     0,    71,     0,    78,     0,    79,    72,     0,     0,
-       1,    73,    74,     0,     0,     0,     2,     3,     4,     5,
-       6,     0,     0,     0,     8,     0,     0,     0,     0,    11,
-      12,     0,    14,    65,    16,    17,     0,    66,    67,     0,
-      21,    22,    23,    24,     0,    26,     0,     0,     0,     0,
-       0,     0,    29,    30,    75,    32,    33,    34,     0,     0,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,     0,
-       0,     0,     0,     0,     0,    46,     0,     0,     0,    76,
-      77,     0,     0,     0,    71,     0,    78,   148,    79,    72,
-       0,     0,     1,    73,    74,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
-       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
-       0,    76,    77,     0,    71,     0,     0,     0,    78,    72,
-      79,     0,     1,    73,    74,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
-       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
-       0,    76,    77,     0,    71,     0,     0,     0,    90,    72,
-      79,     0,     1,    73,    74,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,    99,     0,     0,     0,
-       0,    11,    12,     0,   100,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
-       0,     0,     0,     0,    29,    30,    75,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
-       0,    76,    77,     0,    71,     0,     0,     0,    90,    72,
-      79,     0,     1,    73,    74,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
-       0,     0,     0,     0,     0,     0,    75,    32,    33,    34,
-       0,     0,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
-       0,    76,    77,     0,    71,     0,     0,     0,    78,    72,
-      79,     0,     1,    73,    74,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-       0,    11,    12,     0,    14,    65,    16,    17,     0,    66,
-      67,     0,    21,    22,    23,    24,     0,    26,     0,     0,
-       0,     0,     0,     0,     0,     0,    75,     0,    33,    34,
-       0,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,     0,     0,     0,     0,     0,     0,    46,     0,     0,
-       0,     0,     0,     0,     0,     1,     0,     0,    78,     0,
-      79,     2,     3,     4,     5,     6,     0,     0,     7,     8,
-       9,     0,     0,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     1,     0,     0,
-      46,     0,     0,     2,     3,     4,     5,     6,   292,    47,
-       7,     8,     9,     0,     0,    10,    11,    12,     0,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
-      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,   293,
-       1,     0,    46,     0,     0,     0,     2,     3,     4,     5,
-       6,   255,     0,     7,     8,     9,     0,     0,    10,    11,
-      12,     0,    14,    15,    16,    17,    18,    19,    20,     0,
-      21,    22,    23,    24,     0,    26,    27,    28,     0,     0,
-       0,     0,    29,    30,    31,    32,    33,    34,     0,     0,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-       0,     0,     0,   300,     0,    46,     0,     0,     0,     1,
-       0,     0,   304,     0,   255,     2,     3,     4,     5,     6,
-       0,     0,     7,     8,     9,     0,     0,    10,    11,    12,
-       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
-      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,     1,     0,     0,    46,     0,     0,     2,     3,     4,
-       5,     6,     0,   255,     7,     8,     9,     0,     0,    10,
-      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
-       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,   316,     1,     0,    46,     0,     0,     0,
-       2,     3,     4,     5,     6,   255,     0,     7,     8,     9,
-       0,     0,    10,    11,    12,     0,    14,    15,    16,    17,
-      18,    19,    20,     0,    21,    22,    23,    24,     0,    26,
-      27,    28,     0,     0,     0,     0,    29,    30,    31,    32,
-      33,    34,     0,     0,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,   322,     1,     0,    46,
-       0,     0,     0,     2,     3,     4,     5,     6,   255,     0,
-       7,     8,     9,     0,     0,    10,    11,    12,     0,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
-      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,     1,
-     329,     0,    46,     0,     0,     2,     3,     4,     5,     6,
-       0,   255,     7,     8,     9,     0,     0,    10,    11,    12,
-       0,    14,    15,    16,    17,    18,    19,    20,     0,    21,
-      22,    23,    24,     0,    26,    27,    28,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,    35,
+       8,     0,     0,     0,    12,    13,     0,    15,    66,   136,
+      18,     0,    67,    68,     0,    22,    23,    24,    25,     0,
+      27,     0,     0,   137,   138,   139,   140,   141,   142,    78,
+     143,    34,    35,   144,   145,   146,    37,    38,    39,    40,
+      41,    42,    43,    44,     0,     0,     0,     0,     0,     0,
+      47,   147,   148,   149,   150,   151,   152,   153,     0,    72,
+     154,    93,     0,    82,    73,     0,     0,     1,    74,    75,
+       0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,   168,     0,    15,    66,
+      17,    18,     0,    67,    68,     0,    22,    23,    24,    25,
+       0,    27,     0,     0,   137,   138,   139,   140,   141,   142,
+      78,   143,   169,   170,   144,   145,   146,    37,    38,    39,
+      40,    41,    42,    43,    44,     0,     0,     0,     0,     0,
+       0,    47,   147,   148,   149,   150,   151,   152,   153,     0,
+      72,   154,    93,     0,    82,    73,     0,     0,     1,    74,
+      75,     0,     0,     0,     2,     3,     4,     5,     6,     0,
+       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
+      66,    17,    18,     0,    67,    68,     0,    22,    23,    24,
+      25,     0,    27,     0,     0,   137,   138,   139,   140,   141,
+     142,    78,   143,    34,    35,   144,   145,   146,    37,    38,
+      39,    40,    41,    42,    43,    44,     0,     0,     0,     0,
+       0,     0,    47,   147,   148,   149,   150,   151,   152,   153,
+       0,    72,   154,    93,     0,    82,    73,     0,     0,     1,
+      74,    75,     0,     0,     0,     2,     3,     4,     5,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    66,   184,    18,     0,    67,    68,     0,    22,    23,
+      24,    25,     0,    27,     0,     0,   137,   138,   139,   140,
+     141,   142,    78,   143,    34,    35,   144,   145,   146,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,     0,
+       0,     0,     0,    47,   147,   148,   149,   150,   151,   152,
+     153,     0,    72,     0,    93,     0,    82,    73,     0,     0,
+       1,    74,    75,     0,     0,     0,     2,     3,     4,     5,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    66,    17,    18,     0,    67,    68,     0,    22,
+      23,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,    30,    31,    78,    33,    34,    35,     0,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
+       0,     0,     0,     0,    47,     0,     0,     0,    79,    80,
+       0,     0,     0,    72,     0,    93,   122,    82,    73,     0,
+       0,     1,    74,    75,     0,     0,     0,     2,     3,     4,
+       5,     6,     0,     0,     0,    76,     0,     0,     0,    12,
+      13,     0,    77,    66,    17,    18,     0,    67,    68,     0,
+      22,    23,    24,    25,     0,    27,     0,     0,     0,     0,
+       0,     0,    30,    31,    78,    33,    34,    35,     0,     0,
       36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,     1,   330,     0,    46,     0,     0,     2,     3,     4,
-       5,     6,     0,   255,     7,     8,     9,     0,     0,    10,
-      11,    12,     0,    14,    15,    16,    17,    18,    19,    20,
-       0,    21,    22,    23,    24,     0,    26,    27,    28,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,     1,     0,     0,    46,     0,     0,     2,
-       3,     4,     5,     6,     0,   189,     7,     8,     9,     0,
-       0,    10,    11,    12,     0,    14,    15,    16,    17,    18,
-      19,    20,     0,    21,    22,    23,    24,     0,    26,    27,
-      28,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     1,     0,     0,    46,     0,
-       0,     2,     3,     4,     5,     6,     0,   255,     7,     8,
-       9,     0,     0,    10,    11,    12,     0,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,    23,    24,     0,
-      26,    27,    28,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,     0,     0,     1,     0,     0,
-      46,     0,     0,     2,     3,     4,     5,     6,     0,   295,
-       7,     8,     9,     0,     0,    10,    11,    12,     0,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,    23,
-      24,     0,    26,    27,    28,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     1,   249,
-     250,     0,    46,     0,     2,     3,     4,     5,     6,     0,
-       0,   305,     8,     0,     0,     0,     0,    11,    12,     0,
-      14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
-      23,    24,     0,    26,     0,     0,     0,     0,     0,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,     0,     1,     0,
-       0,     0,     0,    46,     2,     3,     4,     5,     6,     0,
-       0,     0,     8,     0,     0,     0,     0,    11,    12,     0,
-      14,    65,    16,    17,     0,    66,    67,     0,    21,    22,
-      23,    24,     0,    26,     0,     0,     0,   298,     0,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,   299,     0,     0,
-       0,     0,     0,    46,     0,   129,   130,   131,   132,   133,
-     134,   128,   135,     0,     0,   136,   137,   138,     0,     0,
-     129,   130,   131,   132,   133,   134,     0,   135,     0,     0,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-       0,     0,     0,     0,     0,     0,     0,     0,   139,   140,
-     141,   142,   143,   144,   145,   129,   130,   131,   132,   133,
-     134,     0,   135,     0,     0,   136,   137,   138,   215,   216,
-     217,   218,   219,   220,     0,   221,     0,     0,   222,   223,
-     224,     0,     0,   139,   140,   141,   142,   143,   144,   145,
-       0,     0,     0,     0,   179,     0,   225,   226,   227,   228,
-     229,   230,   231,     0,     0,   232,   129,   130,   131,   132,
-     133,   134,     0,   135,     0,     0,   136,   137,   138,   129,
-     130,   131,   132,   133,   134,     0,   135,     0,     0,   136,
-     137,   138,     0,     0,   139,   140,   141,   142,   143,   144,
-     145,     0,   234,     0,     0,     0,     0,   139,   140,   141,
-     142,   143,   144,   145,     0,   286,   129,   130,   131,   132,
-     133,   134,     0,   135,     0,     0,   136,   137,   138,   129,
-     130,   131,   132,   133,   134,     0,   135,     0,     0,   136,
-     137,   138,     0,     0,   139,   140,   141,   142,   143,   144,
-     145,     0,   318,     0,     0,     0,     0,   139,   140,   141,
-     142,   143,   144,   145,     0,   324,   129,   130,   131,   132,
-     133,   134,     0,   135,     0,     0,   136,   137,   138,   215,
-     216,   217,   218,   219,   220,     0,   221,     0,     0,   222,
-     223,   224,     0,     0,   139,   140,   141,   142,   143,   144,
-     145,     0,     0,     0,     0,     0,     0,   225,   226,   227,
-     228,   229,   230,   231
+       0,     0,     0,     0,     0,    47,     0,     0,     0,    79,
+      80,     0,    72,     0,     0,     0,    81,    73,    82,     0,
+       1,    74,    75,     0,     0,     0,     2,     3,     4,     5,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    66,    17,    18,     0,    67,    68,     0,    22,
+      23,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,    30,    31,    78,    33,    34,    35,     0,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
+       0,     0,     0,     0,    47,     0,     0,     0,    79,    80,
+       0,    72,     0,     0,     0,    93,    73,    82,     0,     1,
+      74,    75,     0,     0,     0,     2,     3,     4,     5,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    66,    17,    18,     0,    67,    68,     0,    22,    23,
+      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+      30,    31,    78,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     0,     0,
+       0,     0,     0,    47,     0,     0,     0,    79,    80,     0,
+      72,     0,     0,     0,    81,    73,    82,     0,     1,    74,
+      75,     0,     0,     0,     2,     3,     4,     5,     6,     0,
+       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
+      66,    17,    18,     0,    67,    68,     0,    22,    23,    24,
+      25,     0,    27,     0,     0,     0,     0,     0,     0,     0,
+       0,    78,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,     0,     0,     0,     0,
+       0,     0,    47,     0,     0,     0,    79,    80,     0,    72,
+       0,     0,     0,    93,    73,    82,     0,     1,    74,    75,
+       0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    66,
+      17,    18,     0,    67,    68,     0,    22,    23,    24,    25,
+       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
+      78,    33,    34,    35,     0,     0,     0,    37,    38,    39,
+      40,    41,    42,    43,    44,     0,     0,     0,     0,     0,
+       0,    47,     0,     0,     0,    79,    80,     0,    72,     0,
+       0,     0,    93,    73,    82,     0,     1,    74,    75,     0,
+       0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,    13,     0,    15,    66,    17,
+      18,     0,    67,    68,     0,    22,    23,    24,    25,     0,
+      27,     0,     0,     0,     0,     0,     0,     0,     0,    78,
+       0,    34,    35,     0,     0,     0,    37,    38,    39,    40,
+      41,    42,    43,    44,     0,     0,     0,     0,     0,     0,
+      47,     0,     0,     0,     0,     0,     0,     0,     1,     0,
+       0,    93,     0,    82,     2,     3,     4,     5,     6,     0,
+       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,     0,     1,
+       0,     0,    47,     0,     0,     2,     3,     4,     5,     6,
+     299,    48,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
+     300,     1,     0,    47,     0,     0,     0,     2,     3,     4,
+       5,     6,   281,     0,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+       0,     0,     0,   306,     0,    47,     0,     0,     0,     1,
+       0,     0,   309,     0,   281,     2,     3,     4,     5,     6,
+       0,     0,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
+       1,     0,     0,    47,     0,     0,     2,     3,     4,     5,
+       6,     0,   281,     7,     8,     9,    10,    11,    12,    13,
+       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
+      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
+       0,   321,     1,     0,    47,     0,     0,     0,     2,     3,
+       4,     5,     6,   281,     0,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,     0,     0,   327,     1,     0,    47,     0,     0,     0,
+       2,     3,     4,     5,     6,   281,     0,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,     0,     0,     1,   334,     0,    47,     0,
+       0,     2,     3,     4,     5,     6,     0,   281,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,     0,     0,     1,   335,     0,    47,
+       0,     0,     2,     3,     4,     5,     6,     0,   281,     7,
+       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
+      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
+      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,     0,     0,     1,     0,     0,
+      47,     0,     0,     2,     3,     4,     5,     6,     0,   234,
+       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
+      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
+       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     0,     1,     0,
+       0,    47,     0,     0,     2,     3,     4,     5,     6,     0,
+     281,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,     0,     0,     1,
+       0,     0,    47,     0,     0,     2,     3,     4,     5,     6,
+       0,   302,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,     0,     1,
+     256,   257,     0,    47,     0,     2,     3,     4,     5,     6,
+       0,     0,   310,     8,     0,     0,     0,    12,    13,     0,
+      15,    66,    17,    18,     0,    67,    68,     0,    22,    23,
+      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,     0,     1,     0,
+       0,     0,     0,    47,     2,     3,     4,     5,     6,     0,
+       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
+      66,    17,    18,     0,    67,    68,     0,    22,    23,    24,
+      25,     0,    27,     0,     0,     0,     0,   304,     0,    30,
+      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,   305,     0,     0,     0,
+       0,     0,    47,     0,   137,   138,   139,   140,   161,   162,
+     160,   163,     0,     0,   144,   145,   164,     0,     0,   137,
+     138,   139,   140,   161,   162,     0,   163,     0,     0,   144,
+     145,   164,   147,   148,   149,   150,   151,   152,   153,     0,
+       0,     0,     0,     0,     0,     0,     0,   147,   148,   149,
+     150,   151,   152,   153,   137,   138,   139,   140,   161,   162,
+       0,   163,     0,     0,   144,   145,   164,   137,   138,   139,
+     140,   161,   162,     0,   163,     0,     0,   144,   145,   164,
+       0,     0,   147,   148,   149,   150,   151,   152,   153,     0,
+       0,   186,     0,   187,     0,   147,   148,   149,   150,   151,
+     152,   153,     0,     0,     0,     0,   187,   216,   217,   218,
+     219,   220,   221,     0,   222,     0,     0,   223,   224,   225,
+     137,   138,   139,   140,   161,   162,     0,   163,     0,     0,
+     144,   145,   164,     0,     0,   226,   227,   228,   229,   230,
+     231,   232,     0,     0,   233,     0,     0,     0,   147,   148,
+     149,   150,   151,   152,   153,     0,   242,   137,   138,   139,
+     140,   161,   162,     0,   163,     0,     0,   144,   145,   164,
+     137,   138,   139,   140,   161,   162,     0,   163,     0,     0,
+     144,   145,   164,     0,     0,   147,   148,   149,   150,   151,
+     152,   153,     0,   293,     0,     0,     0,     0,   147,   148,
+     149,   150,   151,   152,   153,     0,   323,   137,   138,   139,
+     140,   161,   162,     0,   163,     0,     0,   144,   145,   164,
+     137,   138,   139,   140,   161,   162,     0,   163,     0,     0,
+     144,   145,   164,     0,     0,   147,   148,   149,   150,   151,
+     152,   153,     0,   329,     0,     0,     0,     0,   147,   148,
+     149,   150,   151,   152,   153,   216,   217,   218,   219,   220,
+     221,     0,   222,     0,     0,   223,   224,   225,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   226,   227,   228,   229,   230,   231,   232
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   158,    20,    28,     0,   208,    92,    40,    43,     9,
-      40,    89,    92,    13,    58,    93,    27,   103,    53,    44,
-      20,    58,    88,   103,   110,    25,    92,    88,    28,    90,
-     110,   234,    58,   257,     0,    61,    87,   261,    82,    83,
-      84,    85,   245,    54,    44,    45,    87,    84,    85,    49,
-      88,    74,   209,    49,    87,    81,    82,    83,    84,    85,
-      89,   285,    93,    88,    87,    45,    46,   291,    75,    76,
-      77,    87,    88,   155,   156,   232,    93,    87,    87,    79,
-      92,   106,    87,   169,   308,    87,    87,    35,    88,   169,
-      87,   315,   295,    93,    87,   319,    87,    92,    88,    87,
-      53,   325,   305,    87,   328,    90,   106,    24,    87,   312,
-      87,    87,    87,   113,    35,   318,    87,    43,    87,    93,
-      87,   324,    87,    87,    87,    87,    49,   288,   128,   184,
-     169,    -1,   128,   151,    -1,   127,    -1,   155,   156,    -1,
+       0,    29,    10,    11,     0,   154,    39,    19,    57,     9,
+      21,    19,    73,   236,    14,    57,    28,    45,    60,   242,
+      28,    21,    57,    39,    88,    86,    26,   250,    92,    29,
+      92,    86,    81,    82,    83,    84,    98,   186,    80,    81,
+      82,    83,    84,    55,     0,    45,    46,    55,    83,    84,
+      50,   113,    42,    86,    50,   117,    87,    78,    79,    80,
+      91,   283,    52,    87,    87,   287,    89,    95,    76,    77,
+     292,    86,    92,    81,   296,    44,    45,    86,    98,   302,
+      86,   109,    82,    88,   233,    93,    87,   310,    86,    87,
+      92,   313,   100,   113,   317,    95,    91,   117,   320,    99,
+     323,    86,   324,   169,   170,    86,   329,    86,   330,   109,
+      86,   333,    86,    86,    86,    86,   116,    92,    34,    86,
+      52,    91,    86,    34,    89,    24,    86,    86,    86,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,    86,    92,    86,    42,
+      86,    86,    86,   161,   162,   163,   164,   168,   169,   170,
+     160,    86,    86,    86,   160,    50,   295,   175,   168,   169,
+     170,    28,   133,   192,   117,    -1,    -1,    -1,    -1,    -1,
+     188,   189,    -1,   191,    -1,    -1,    -1,   195,    -1,   197,
+      -1,    -1,   192,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,    -1,    -1,    -1,    50,    51,
+      52,    53,    -1,   241,   234,    57,   236,    -1,    60,    61,
+      62,    -1,   242,   251,   244,    -1,    -1,    -1,    -1,    -1,
+     250,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    -1,    -1,   294,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   151,    -1,    -1,    -1,   155,   156,    -1,    -1,    -1,
-       5,    -1,    -1,    -1,    -1,    10,    -1,    -1,    13,    14,
-      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,   184,    -1,    -1,    32,    33,   189,
-      35,    36,    37,    38,    -1,    40,    41,    -1,    43,    44,
-      45,    46,    -1,    48,    -1,    -1,    -1,    -1,   208,    -1,
-      10,    -1,    57,    58,    59,    60,    -1,    -1,    18,    64,
-      65,    66,    67,    68,    69,    70,    71,    27,    -1,    -1,
-      -1,    -1,    -1,    78,   234,    -1,   236,    82,    83,    -1,
-      51,    52,    53,    54,    89,   245,    91,    58,    -1,    -1,
-      61,    62,    63,    -1,    54,    -1,    -1,   257,    -1,    -1,
-     260,   261,   287,    -1,   260,    -1,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    85,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,   285,    -1,   287,    -1,    -1,
-      90,   291,   292,    -1,    94,   295,   292,    -1,    -1,    99,
-     100,    -1,    -1,    -1,   304,   305,    -1,    -1,   308,    -1,
-      -1,    -1,   312,    -1,    -1,   315,    -1,    -1,   318,   319,
-      -1,   321,    -1,    -1,   324,   325,    -1,    -1,   328,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,    -1,    -1,    -1,    -1,
-      -1,    -1,   152,   153,   154,    -1,    -1,   157,    -1,    -1,
-      -1,    51,    52,    53,    54,    55,    56,   167,    58,    -1,
-      -1,    61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
-     180,   181,    -1,   183,    -1,    -1,    -1,   187,    -1,    79,
-      80,    81,    82,    83,    84,    85,    -1,    -1,    88,    -1,
-      90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,    -1,   233,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     5,    -1,   244,    -1,    -1,    10,    -1,    -1,
-      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,    32,
-      33,    -1,    35,    36,    37,    38,    -1,    40,    41,    -1,
-      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,   289,
-      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,   299,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,   309,
-      -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    82,
-      83,    -1,    -1,    -1,     5,    -1,    89,    -1,    91,    10,
-      93,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
-      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    84,    85,    -1,     5,    88,    89,    -1,
-      91,    10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,
-      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
-      -1,    -1,    -1,    32,    33,    -1,    35,    36,    37,    38,
-      -1,    40,    41,    -1,    43,    44,    45,    46,    -1,    48,
-      -1,    -1,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    85,    -1,     5,    88,
-      89,    -1,    91,    10,    -1,    -1,    13,    14,    15,    -1,
+      -1,    -1,    -1,   283,    -1,    -1,   286,   287,    -1,    -1,
+     286,    -1,   292,    -1,   294,    -1,   296,   305,    -1,   299,
+      -1,    -1,   302,   299,    -1,    -1,   314,    -1,    -1,   309,
+     310,    -1,    -1,   313,    -1,    -1,    -1,   317,    -1,    -1,
+     320,    -1,    -1,   323,   324,    -1,   326,     5,    -1,   329,
+     330,    -1,    10,   333,    -1,    13,    14,    15,    -1,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
+      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
+      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+      -1,    -1,    -1,    81,    82,    -1,    -1,    -1,     5,    -1,
+      88,    -1,    90,    10,    92,    -1,    13,    14,    15,    -1,
       -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      27,    -1,    -1,    -1,    -1,    32,    33,    -1,    35,    36,
-      37,    38,    -1,    40,    41,    -1,    43,    44,    45,    46,
-      -1,    48,    -1,    -1,    51,    52,    53,    54,    55,    56,
+      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    -1,    -1,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    85,    -1,
-       5,    88,    89,    -1,    91,    10,    -1,    -1,    13,    14,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,     5,
+      87,    88,    -1,    90,    10,    -1,    -1,    13,    14,    15,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    -1,    -1,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
+       5,    87,    88,    -1,    90,    10,    -1,    -1,    13,    14,
       15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,
-      35,    36,    37,    38,    -1,    40,    41,    -1,    43,    44,
-      45,    46,    -1,    48,    -1,    -1,    51,    52,    53,    54,
+      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    -1,    -1,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      85,    -1,     5,    -1,    89,    -1,    91,    10,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    83,    84,
+      -1,     5,    87,    88,    -1,    90,    10,    -1,    -1,    13,
+      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    -1,    -1,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    78,    79,    80,    81,    82,    83,
+      84,    -1,     5,    -1,    88,    -1,    90,    10,    -1,    -1,
+      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
+      -1,    -1,    -1,     5,    -1,    88,    89,    90,    10,    -1,
+      -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
+      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
+      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
+      82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
       13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    -1,    32,
-      33,    -1,    35,    36,    37,    38,    -1,    40,    41,    -1,
-      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
+      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
+      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,
+       5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,
+      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,
+      -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,    15,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      56,    57,    58,    59,    -1,    -1,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,
+      -1,    -1,    88,    10,    90,    -1,    13,    14,    15,    -1,
+      -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,
+      -1,    58,    59,    -1,    -1,    -1,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,
+      -1,    88,    -1,    90,    19,    20,    21,    22,    23,    -1,
+      -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    46,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    13,
+      -1,    -1,    77,    -1,    -1,    19,    20,    21,    22,    23,
+      24,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      74,    13,    -1,    77,    -1,    -1,    -1,    19,    20,    21,
+      22,    23,    86,    -1,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    -1,    75,    -1,    77,    -1,    -1,    -1,    13,
+      -1,    -1,    16,    -1,    86,    19,    20,    21,    22,    23,
+      -1,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    86,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    82,
-      83,    -1,    -1,    -1,     5,    -1,    89,    90,    91,    10,
-      -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
-      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,    10,
-      91,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
-      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,    10,
-      91,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
-      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,    10,
-      91,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
-      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    57,    58,    59,    60,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    82,    83,    -1,     5,    -1,    -1,    -1,    89,    10,
-      91,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      -1,    32,    33,    -1,    35,    36,    37,    38,    -1,    40,
-      41,    -1,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    59,    60,
-      -1,    -1,    -1,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    89,    -1,
-      91,    19,    20,    21,    22,    23,    -1,    -1,    26,    27,
-      28,    -1,    -1,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    -1,    13,    -1,    -1,
-      78,    -1,    -1,    19,    20,    21,    22,    23,    24,    87,
-      26,    27,    28,    -1,    -1,    31,    32,    33,    -1,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    75,
-      13,    -1,    78,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    87,    -1,    26,    27,    28,    -1,    -1,    31,    32,
-      33,    -1,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    -1,    48,    49,    50,    -1,    -1,
-      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    -1,    76,    -1,    78,    -1,    -1,    -1,    13,
-      -1,    -1,    16,    -1,    87,    19,    20,    21,    22,    23,
-      -1,    -1,    26,    27,    28,    -1,    -1,    31,    32,    33,
-      -1,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
-      44,    45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
-      -1,    13,    -1,    -1,    78,    -1,    -1,    19,    20,    21,
-      22,    23,    -1,    87,    26,    27,    28,    -1,    -1,    31,
-      32,    33,    -1,    35,    36,    37,    38,    39,    40,    41,
-      -1,    43,    44,    45,    46,    -1,    48,    49,    50,    -1,
-      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    -1,    -1,    75,    13,    -1,    78,    -1,    -1,    -1,
-      19,    20,    21,    22,    23,    87,    -1,    26,    27,    28,
-      -1,    -1,    31,    32,    33,    -1,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    44,    45,    46,    -1,    48,
-      49,    50,    -1,    -1,    -1,    -1,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    -1,    -1,    75,    13,    -1,    78,
-      -1,    -1,    -1,    19,    20,    21,    22,    23,    87,    -1,
-      26,    27,    28,    -1,    -1,    31,    32,    33,    -1,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    13,
-      76,    -1,    78,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    87,    26,    27,    28,    -1,    -1,    31,    32,    33,
-      -1,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
-      44,    45,    46,    -1,    48,    49,    50,    -1,    -1,    -1,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
-      -1,    13,    76,    -1,    78,    -1,    -1,    19,    20,    21,
-      22,    23,    -1,    87,    26,    27,    28,    -1,    -1,    31,
-      32,    33,    -1,    35,    36,    37,    38,    39,    40,    41,
-      -1,    43,    44,    45,    46,    -1,    48,    49,    50,    -1,
-      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    -1,    -1,    13,    -1,    -1,    78,    -1,    -1,    19,
-      20,    21,    22,    23,    -1,    87,    26,    27,    28,    -1,
-      -1,    31,    32,    33,    -1,    35,    36,    37,    38,    39,
-      40,    41,    -1,    43,    44,    45,    46,    -1,    48,    49,
-      50,    -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    -1,    -1,    13,    -1,    -1,    78,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    87,    26,    27,
-      28,    -1,    -1,    31,    32,    33,    -1,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    -1,
-      48,    49,    50,    -1,    -1,    -1,    -1,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    -1,    -1,    13,    -1,    -1,
-      78,    -1,    -1,    19,    20,    21,    22,    23,    -1,    87,
-      26,    27,    28,    -1,    -1,    31,    32,    33,    -1,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    -1,    13,    14,
-      15,    -1,    78,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    87,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,
-      35,    36,    37,    38,    -1,    40,    41,    -1,    43,    44,
-      45,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    13,    -1,
-      -1,    -1,    -1,    78,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,
-      35,    36,    37,    38,    -1,    40,    41,    -1,    43,    44,
-      45,    46,    -1,    48,    -1,    -1,    -1,    23,    -1,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    43,    -1,    -1,
-      -1,    -1,    -1,    78,    -1,    51,    52,    53,    54,    55,
-      56,    42,    58,    -1,    -1,    61,    62,    63,    -1,    -1,
-      51,    52,    53,    54,    55,    56,    -1,    58,    -1,    -1,
-      61,    62,    63,    79,    80,    81,    82,    83,    84,    85,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    85,    51,    52,    53,    54,    55,
-      56,    -1,    58,    -1,    -1,    61,    62,    63,    51,    52,
-      53,    54,    55,    56,    -1,    58,    -1,    -1,    61,    62,
-      63,    -1,    -1,    79,    80,    81,    82,    83,    84,    85,
-      -1,    -1,    -1,    -1,    90,    -1,    79,    80,    81,    82,
-      83,    84,    85,    -1,    -1,    88,    51,    52,    53,    54,
-      55,    56,    -1,    58,    -1,    -1,    61,    62,    63,    51,
-      52,    53,    54,    55,    56,    -1,    58,    -1,    -1,    61,
-      62,    63,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      85,    -1,    87,    -1,    -1,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    85,    -1,    87,    51,    52,    53,    54,
-      55,    56,    -1,    58,    -1,    -1,    61,    62,    63,    51,
-      52,    53,    54,    55,    56,    -1,    58,    -1,    -1,    61,
-      62,    63,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      85,    -1,    87,    -1,    -1,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    85,    -1,    87,    51,    52,    53,    54,
-      55,    56,    -1,    58,    -1,    -1,    61,    62,    63,    51,
-      52,    53,    54,    55,    56,    -1,    58,    -1,    -1,    61,
-      62,    63,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      85,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    85
+      -1,    74,    13,    -1,    77,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    86,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    74,    13,    -1,    77,    -1,    -1,    -1,
+      19,    20,    21,    22,    23,    86,    -1,    26,    27,    28,
+      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    13,    75,    -1,    77,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
+      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    13,    75,    -1,    77,
+      -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
+      77,    -1,    -1,    19,    20,    21,    22,    23,    -1,    86,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
+      -1,    77,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      86,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
+      -1,    -1,    77,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    13,
+      14,    15,    -1,    77,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    86,    27,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    13,    -1,
+      -1,    -1,    -1,    77,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    -1,    -1,    -1,    -1,    23,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    42,    -1,    -1,    -1,
+      -1,    -1,    77,    -1,    50,    51,    52,    53,    54,    55,
+      41,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    50,
+      51,    52,    53,    54,    55,    -1,    57,    -1,    -1,    60,
+      61,    62,    78,    79,    80,    81,    82,    83,    84,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
+      81,    82,    83,    84,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      -1,    87,    -1,    89,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    -1,    -1,    -1,    89,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    -1,    87,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    -1,    86,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    86,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    -1,    86,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    86,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1379,63 +1372,63 @@ static const yytype_int16 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,    13,    19,    20,    21,    22,    23,    26,    27,    28,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    43,    44,    45,    46,    47,    48,    49,    50,    55,
-      56,    57,    58,    59,    60,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    78,    87,    95,    96,
-      97,    98,    99,   104,   106,   109,   110,   111,   114,   116,
-     117,   118,   119,    40,    87,    36,    40,    41,   106,   107,
-     108,     5,    10,    14,    15,    57,    82,    83,    89,    91,
-     106,   123,   124,   127,   130,   131,   132,   134,   106,    40,
-      89,   112,   134,    45,    46,   106,   124,   126,   106,    27,
-      35,   112,   113,   134,   107,   107,   106,     0,    97,   112,
-     134,    87,    87,    88,   132,   132,   132,   134,    14,    15,
-      93,   106,   128,   129,   134,   136,   137,    89,    42,    51,
-      52,    53,    54,    55,    56,    58,    61,    62,    63,    79,
-      80,    81,    82,    83,    84,    85,   107,    87,    90,   134,
-      87,    33,    55,    56,    58,    59,    60,    63,    88,   123,
-     130,   133,   135,   106,   134,    43,    53,   115,    87,   134,
-     134,    87,    87,    37,    87,    87,   107,    87,   106,    90,
-      93,    93,    92,    93,    88,    92,    92,    88,   136,    87,
-     109,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,    87,    88,
-     124,   125,   125,   125,   137,    51,    52,    53,    54,    55,
-      56,    58,    61,    62,    63,    79,    80,    81,    82,    83,
-      84,    85,    88,    53,    87,   134,    74,    87,   100,   101,
-     102,   103,    37,   135,    35,    87,   134,   134,   134,    14,
-      15,   106,   129,   134,    90,    87,   109,   120,   121,   122,
-      24,   120,   137,    87,    87,    87,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   137,   134,   120,    87,   106,    87,    35,
-     134,   120,    24,    75,   122,    87,   109,    90,    23,    43,
-      76,   107,   103,   134,    16,    87,   109,    87,   120,    43,
-     134,    87,    87,   105,   106,   120,    75,   134,    87,   120,
-      87,    88,    75,    87,    87,   120,   106,    87,   120,    76,
-      76,    87,    87
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    42,    43,    44,    45,    46,    47,    48,    49,
+      54,    55,    56,    57,    58,    59,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    77,    86,    94,
+      95,    96,    97,    98,   103,   105,   108,   109,   110,   113,
+     115,   116,   117,   118,    39,    86,    35,    39,    40,   105,
+     106,   107,     5,    10,    14,    15,    27,    34,    56,    81,
+      82,    88,    90,   105,   111,   112,   122,   123,   126,   129,
+     130,   131,   133,    88,   133,   105,    39,   111,   133,    44,
+      45,   105,   123,   125,   105,   111,   112,   106,   106,   105,
+       0,    96,   111,   133,    86,    86,    87,   133,   133,   131,
+     131,   131,    89,   133,    14,    15,    92,   105,   127,   128,
+     133,   135,   136,    88,    86,    86,    36,    50,    51,    52,
+      53,    54,    55,    57,    60,    61,    62,    78,    79,    80,
+      81,    82,    83,    84,    87,   122,   129,   132,   134,   133,
+      41,    54,    55,    57,    62,   106,    86,    86,    32,    58,
+      59,   105,   133,    42,    52,   114,    86,    86,    86,    86,
+      86,   106,    86,   105,    36,   134,    87,    89,    92,    92,
+      91,    92,    87,    91,    91,    87,   135,    34,   133,   133,
+     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
+     133,   133,   133,   133,   133,   136,    50,    51,    52,    53,
+      54,    55,    57,    60,    61,    62,    78,    79,    80,    81,
+      82,    83,    84,    87,    86,   108,    86,   123,   124,   124,
+     124,    52,    86,   133,    73,    86,    99,   100,   101,   102,
+      86,    34,   136,   133,   133,   133,    14,    15,   105,   128,
+     133,    89,   133,   133,   133,   133,   133,   133,   133,   133,
+     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
+     136,    86,   108,   119,   120,   121,    24,   119,    86,    86,
+      86,   133,   119,    86,   105,    86,   119,   133,    89,    24,
+      74,   121,    86,   108,    23,    42,    75,   106,   102,    16,
+      86,   108,    86,   119,    42,   133,    86,    86,   104,   105,
+     119,    74,   133,    86,   119,    86,    87,    74,    86,    86,
+     119,   105,    86,   119,    75,    75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    94,    95,    96,    96,    97,    97,    97,    97,    97,
-      98,    99,   100,   101,   101,   102,   102,   103,   103,   104,
-     104,   105,   105,   105,   106,   106,   106,   106,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-     107,   107,   108,   108,   109,   109,   109,   109,   110,   110,
-     110,   111,   111,   111,   111,   111,   111,   111,   112,   112,
-     112,   112,   112,   112,   112,   113,   113,   113,   113,   113,
-     114,   114,   114,   114,   115,   115,   116,   116,   116,   117,
-     117,   118,   118,   118,   118,   119,   119,   119,   120,   120,
-     121,   121,   122,   122,   123,   123,   123,   123,   123,   123,
-     123,   123,   124,   125,   126,   127,   127,   127,   128,   128,
-     129,   129,   129,   130,   131,   131,   132,   132,   132,   133,
+       0,    93,    94,    95,    95,    96,    96,    96,    96,    96,
+      97,    98,    99,   100,   100,   101,   101,   102,   102,   103,
+     103,   104,   104,   104,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+     106,   106,   107,   107,   108,   108,   108,   108,   109,   109,
+     109,   110,   110,   110,   110,   110,   110,   110,   110,   110,
+     111,   111,   111,   111,   111,   111,   111,   112,   112,   112,
+     112,   112,   113,   113,   113,   113,   114,   114,   115,   115,
+     115,   116,   116,   117,   117,   117,   117,   118,   118,   118,
+     119,   119,   120,   120,   121,   121,   122,   122,   122,   122,
+     122,   122,   122,   122,   123,   124,   125,   126,   126,   126,
+     127,   127,   128,   128,   128,   129,   130,   130,   131,   131,
+     131,   132,   132,   133,   133,   133,   133,   133,   133,   133,
+     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
      133,   134,   134,   134,   134,   134,   134,   134,   134,   134,
      134,   134,   134,   134,   134,   134,   134,   134,   134,   135,
-     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   136,   136,   137,
-     137
+     135,   136,   136
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1448,18 +1441,18 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     3,     3,     3,     3,     3,     3,     2,     0,     1,
-       3,     2,     4,     2,     5,     2,     2,     5,     4,     3,
-       5,     5,     5,     5,     1,     1,     3,     3,     3,     4,
-       7,     6,     9,     7,    10,     7,    11,    12,     0,     1,
-       1,     2,     1,     1,     1,     1,     1,     1,     2,     4,
-       1,     1,     1,     1,     1,     3,     3,     3,     1,     3,
-       3,     3,     3,     3,     2,     2,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
+       1,     3,     3,     3,     3,     3,     3,     3,     3,     2,
+       0,     1,     3,     2,     4,     2,     5,     2,     2,     5,
+       4,     3,     5,     5,     5,     5,     1,     1,     3,     3,
+       3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
+       0,     1,     1,     2,     1,     1,     1,     1,     1,     1,
+       2,     4,     1,     1,     1,     1,     1,     3,     3,     3,
+       1,     3,     3,     3,     3,     3,     2,     2,     1,     1,
+       1,     1,     1,     1,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     0,     1,     1,
-       3
+       3,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     0,
+       1,     1,     3
 };
 
 
@@ -1733,49 +1726,49 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1737 "engines/director/lingo/lingo-gr.cpp"
+#line 1730 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1743 "engines/director/lingo/lingo-gr.cpp"
+#line 1736 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1749 "engines/director/lingo/lingo-gr.cpp"
+#line 1742 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1755 "engines/director/lingo/lingo-gr.cpp"
+#line 1748 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1761 "engines/director/lingo/lingo-gr.cpp"
+#line 1754 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1767 "engines/director/lingo/lingo-gr.cpp"
+#line 1760 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1773 "engines/director/lingo/lingo-gr.cpp"
+#line 1766 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1779 "engines/director/lingo/lingo-gr.cpp"
+#line 1772 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2043,7 +2036,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 196 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2047 "engines/director/lingo/lingo-gr.cpp"
+#line 2040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2054,7 +2047,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2058 "engines/director/lingo/lingo-gr.cpp"
+#line 2051 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2064,37 +2057,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2068 "engines/director/lingo/lingo-gr.cpp"
+#line 2061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 211 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2074 "engines/director/lingo/lingo-gr.cpp"
+#line 2067 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2080 "engines/director/lingo/lingo-gr.cpp"
+#line 2073 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2086 "engines/director/lingo/lingo-gr.cpp"
+#line 2079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 250 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2092 "engines/director/lingo/lingo-gr.cpp"
+#line 2085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 252 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2098 "engines/director/lingo/lingo-gr.cpp"
+#line 2091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2105,7 +2098,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2109 "engines/director/lingo/lingo-gr.cpp"
+#line 2102 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2115,13 +2108,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2119 "engines/director/lingo/lingo-gr.cpp"
+#line 2112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 269 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2125 "engines/director/lingo/lingo-gr.cpp"
+#line 2118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2130,242 +2123,242 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2134 "engines/director/lingo/lingo-gr.cpp"
+#line 2127 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 279 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2141 "engines/director/lingo/lingo-gr.cpp"
+#line 2134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2147 "engines/director/lingo/lingo-gr.cpp"
+#line 2140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2153 "engines/director/lingo/lingo-gr.cpp"
+#line 2146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
 #line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2159 "engines/director/lingo/lingo-gr.cpp"
+#line 2152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2165 "engines/director/lingo/lingo-gr.cpp"
+#line 2158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2171 "engines/director/lingo/lingo-gr.cpp"
+#line 2164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2177 "engines/director/lingo/lingo-gr.cpp"
+#line 2170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2183 "engines/director/lingo/lingo-gr.cpp"
+#line 2176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2189 "engines/director/lingo/lingo-gr.cpp"
+#line 2182 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tFIELD  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2195 "engines/director/lingo/lingo-gr.cpp"
+#line 2188 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFRAME  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2201 "engines/director/lingo/lingo-gr.cpp"
+#line 2194 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2207 "engines/director/lingo/lingo-gr.cpp"
+#line 2200 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2213 "engines/director/lingo/lingo-gr.cpp"
+#line 2206 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2219 "engines/director/lingo/lingo-gr.cpp"
+#line 2212 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2225 "engines/director/lingo/lingo-gr.cpp"
+#line 2218 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2231 "engines/director/lingo/lingo-gr.cpp"
+#line 2224 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2237 "engines/director/lingo/lingo-gr.cpp"
+#line 2230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2243 "engines/director/lingo/lingo-gr.cpp"
+#line 2236 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2249 "engines/director/lingo/lingo-gr.cpp"
+#line 2242 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2255 "engines/director/lingo/lingo-gr.cpp"
+#line 2248 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2261 "engines/director/lingo/lingo-gr.cpp"
+#line 2254 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2267 "engines/director/lingo/lingo-gr.cpp"
+#line 2260 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2273 "engines/director/lingo/lingo-gr.cpp"
+#line 2266 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPREVIOUS  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2279 "engines/director/lingo/lingo-gr.cpp"
+#line 2272 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tREPEAT  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2285 "engines/director/lingo/lingo-gr.cpp"
+#line 2278 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tSCRIPT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2291 "engines/director/lingo/lingo-gr.cpp"
+#line 2284 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tSET  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2297 "engines/director/lingo/lingo-gr.cpp"
+#line 2290 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSTARTS  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2303 "engines/director/lingo/lingo-gr.cpp"
+#line 2296 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tTELL  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2309 "engines/director/lingo/lingo-gr.cpp"
+#line 2302 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tTO  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2315 "engines/director/lingo/lingo-gr.cpp"
+#line 2308 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tASSERTERROR  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2321 "engines/director/lingo/lingo-gr.cpp"
+#line 2314 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tSPRITE  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2327 "engines/director/lingo/lingo-gr.cpp"
+#line 2320 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tWHEN  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2333 "engines/director/lingo/lingo-gr.cpp"
+#line 2326 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tWHILE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2339 "engines/director/lingo/lingo-gr.cpp"
+#line 2332 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tWINDOW  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2345 "engines/director/lingo/lingo-gr.cpp"
+#line 2338 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWITH  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2351 "engines/director/lingo/lingo-gr.cpp"
+#line 2344 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWITHIN  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2357 "engines/director/lingo/lingo-gr.cpp"
+#line 2350 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWORD  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2363 "engines/director/lingo/lingo-gr.cpp"
+#line 2356 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* idlist: %empty  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2369 "engines/director/lingo/lingo-gr.cpp"
+#line 2362 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* nonemptyidlist: ID  */
@@ -2374,7 +2367,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2378 "engines/director/lingo/lingo-gr.cpp"
+#line 2371 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2382,660 +2375,672 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2386 "engines/director/lingo/lingo-gr.cpp"
+#line 2379 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* proc: ID cmdargs '\n'  */
 #line 371 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2392 "engines/director/lingo/lingo-gr.cpp"
+#line 2385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* proc: tPUT cmdargs '\n'  */
 #line 372 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2398 "engines/director/lingo/lingo-gr.cpp"
+#line 2391 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* proc: tPLAY cmdargs '\n'  */
+  case 73: /* proc: tGO cmdargs '\n'  */
 #line 373 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2404 "engines/director/lingo/lingo-gr.cpp"
+                                                                { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
+#line 2397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* proc: tPLAY frameargs '\n'  */
+  case 74: /* proc: tGO frameargs '\n'  */
 #line 374 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2410 "engines/director/lingo/lingo-gr.cpp"
+                                                        { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
+#line 2403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tNEXT tREPEAT '\n'  */
+  case 75: /* proc: tPLAY cmdargs '\n'  */
 #line 375 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new NextRepeatNode(); }
-#line 2416 "engines/director/lingo/lingo-gr.cpp"
+                                                        { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
+#line 2409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tEXIT tREPEAT '\n'  */
+  case 76: /* proc: tPLAY frameargs '\n'  */
 #line 376 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new ExitRepeatNode(); }
-#line 2422 "engines/director/lingo/lingo-gr.cpp"
+                                                        { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
+#line 2415 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* proc: tEXIT '\n'  */
+  case 77: /* proc: tNEXT tREPEAT '\n'  */
 #line 377 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new NextRepeatNode(); }
+#line 2421 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 78: /* proc: tEXIT tREPEAT '\n'  */
+#line 378 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new ExitRepeatNode(); }
+#line 2427 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 79: /* proc: tEXIT '\n'  */
+#line 379 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2428 "engines/director/lingo/lingo-gr.cpp"
+#line 2433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* cmdargs: %empty  */
-#line 380 "engines/director/lingo/lingo-gr.y"
+  case 80: /* cmdargs: %empty  */
+#line 382 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2436 "engines/director/lingo/lingo-gr.cpp"
+#line 2441 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* cmdargs: expr  */
-#line 383 "engines/director/lingo/lingo-gr.y"
+  case 81: /* cmdargs: expr  */
+#line 385 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2446 "engines/director/lingo/lingo-gr.cpp"
+#line 2451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 388 "engines/director/lingo/lingo-gr.y"
+  case 82: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 390 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2455 "engines/director/lingo/lingo-gr.cpp"
+#line 2460 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* cmdargs: expr expr_nounarymath  */
-#line 392 "engines/director/lingo/lingo-gr.y"
+  case 83: /* cmdargs: expr expr_nounarymath  */
+#line 394 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2466 "engines/director/lingo/lingo-gr.cpp"
+#line 2471 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 398 "engines/director/lingo/lingo-gr.y"
+  case 84: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 400 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2476 "engines/director/lingo/lingo-gr.cpp"
+#line 2481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* cmdargs: '(' ')'  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+  case 85: /* cmdargs: '(' ')'  */
+#line 405 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2484 "engines/director/lingo/lingo-gr.cpp"
+#line 2489 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+  case 86: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 408 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2493 "engines/director/lingo/lingo-gr.cpp"
+#line 2498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* frameargs: tFRAME expr  */
-#line 416 "engines/director/lingo/lingo-gr.y"
+  case 87: /* frameargs: tFRAME expr  */
+#line 418 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2503 "engines/director/lingo/lingo-gr.cpp"
+#line 2508 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* frameargs: tMOVIE expr  */
-#line 421 "engines/director/lingo/lingo-gr.y"
+  case 88: /* frameargs: tMOVIE expr  */
+#line 423 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2514 "engines/director/lingo/lingo-gr.cpp"
+#line 2519 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 89: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 429 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2530 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* frameargs: expr tOF tMOVIE expr  */
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 90: /* frameargs: expr tOF tMOVIE expr  */
+#line 435 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2536 "engines/director/lingo/lingo-gr.cpp"
+#line 2541 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 91: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 441 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2547 "engines/director/lingo/lingo-gr.cpp"
+#line 2552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 447 "engines/director/lingo/lingo-gr.y"
+  case 92: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 449 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2553 "engines/director/lingo/lingo-gr.cpp"
+#line 2558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 93: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 450 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2559 "engines/director/lingo/lingo-gr.cpp"
+#line 2564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 94: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2565 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* asgn: tSET varorthe to expr '\n'  */
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 95: /* asgn: tSET varorthe to expr '\n'  */
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2571 "engines/director/lingo/lingo-gr.cpp"
+#line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* definevars: tGLOBAL idlist '\n'  */
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 98: /* definevars: tGLOBAL idlist '\n'  */
+#line 457 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2577 "engines/director/lingo/lingo-gr.cpp"
+#line 2582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* definevars: tPROPERTY idlist '\n'  */
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 99: /* definevars: tPROPERTY idlist '\n'  */
+#line 458 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2583 "engines/director/lingo/lingo-gr.cpp"
+#line 2588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* definevars: tINSTANCE idlist '\n'  */
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 100: /* definevars: tINSTANCE idlist '\n'  */
+#line 459 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2589 "engines/director/lingo/lingo-gr.cpp"
+#line 2594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* ifstmt: tIF expr tTHEN stmt  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 101: /* ifstmt: tIF expr tTHEN stmt  */
+#line 462 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2598 "engines/director/lingo/lingo-gr.cpp"
+#line 2603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 464 "engines/director/lingo/lingo-gr.y"
+  case 102: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 466 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 468 "engines/director/lingo/lingo-gr.y"
+  case 103: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 470 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2616 "engines/director/lingo/lingo-gr.cpp"
+#line 2621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+  case 104: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 476 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2625 "engines/director/lingo/lingo-gr.cpp"
+#line 2630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 105: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2634 "engines/director/lingo/lingo-gr.cpp"
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 482 "engines/director/lingo/lingo-gr.y"
+  case 106: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2641 "engines/director/lingo/lingo-gr.cpp"
+#line 2646 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+  case 107: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2648 "engines/director/lingo/lingo-gr.cpp"
+#line 2653 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 108: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2655 "engines/director/lingo/lingo-gr.cpp"
+#line 2660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 109: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2662 "engines/director/lingo/lingo-gr.cpp"
+#line 2667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* stmtlist: %empty  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+  case 110: /* stmtlist: %empty  */
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2668 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* nonemptystmtlist: stmtlistline  */
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 112: /* nonemptystmtlist: stmtlistline  */
+#line 501 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2684 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 505 "engines/director/lingo/lingo-gr.y"
+  case 113: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 507 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2689 "engines/director/lingo/lingo-gr.cpp"
+#line 2694 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* stmtlistline: '\n'  */
-#line 512 "engines/director/lingo/lingo-gr.y"
+  case 114: /* stmtlistline: '\n'  */
+#line 514 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 2700 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 519 "engines/director/lingo/lingo-gr.y"
+  case 116: /* simpleexpr_noparens_nounarymath: tINT  */
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2701 "engines/director/lingo/lingo-gr.cpp"
+#line 2706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 520 "engines/director/lingo/lingo-gr.y"
+  case 117: /* simpleexpr_noparens_nounarymath: tFLOAT  */
+#line 522 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2707 "engines/director/lingo/lingo-gr.cpp"
+#line 2712 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 521 "engines/director/lingo/lingo-gr.y"
+  case 118: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
+#line 523 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2713 "engines/director/lingo/lingo-gr.cpp"
+#line 2718 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 119: /* simpleexpr_noparens_nounarymath: tSTRING  */
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2719 "engines/director/lingo/lingo-gr.cpp"
+#line 2724 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 120: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
+#line 525 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2725 "engines/director/lingo/lingo-gr.cpp"
+#line 2730 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 121: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
+#line 526 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2731 "engines/director/lingo/lingo-gr.cpp"
+#line 2736 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* var: ID  */
-#line 529 "engines/director/lingo/lingo-gr.y"
+  case 124: /* var: ID  */
+#line 531 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2737 "engines/director/lingo/lingo-gr.cpp"
+#line 2742 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* list: '[' exprlist ']'  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 127: /* list: '[' exprlist ']'  */
+#line 541 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2743 "engines/director/lingo/lingo-gr.cpp"
+#line 2748 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* list: '[' ':' ']'  */
-#line 540 "engines/director/lingo/lingo-gr.y"
+  case 128: /* list: '[' ':' ']'  */
+#line 542 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2754 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* list: '[' proplist ']'  */
-#line 541 "engines/director/lingo/lingo-gr.y"
+  case 129: /* list: '[' proplist ']'  */
+#line 543 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2755 "engines/director/lingo/lingo-gr.cpp"
+#line 2760 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* proplist: proppair  */
-#line 544 "engines/director/lingo/lingo-gr.y"
+  case 130: /* proplist: proppair  */
+#line 546 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2764 "engines/director/lingo/lingo-gr.cpp"
+#line 2769 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* proplist: proplist ',' proppair  */
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 131: /* proplist: proplist ',' proppair  */
+#line 550 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2772 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* proppair: tSYMBOL ':' expr  */
-#line 553 "engines/director/lingo/lingo-gr.y"
+  case 132: /* proppair: tSYMBOL ':' expr  */
+#line 555 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2778 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* proppair: ID ':' expr  */
-#line 554 "engines/director/lingo/lingo-gr.y"
+  case 133: /* proppair: ID ':' expr  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2784 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* proppair: tSTRING ':' expr  */
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 134: /* proppair: tSTRING ':' expr  */
+#line 557 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2790 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* parens: '(' expr ')'  */
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 135: /* parens: '(' expr ')'  */
+#line 560 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2796 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* unarymath: '+' simpleexpr  */
-#line 560 "engines/director/lingo/lingo-gr.y"
+  case 136: /* unarymath: '+' simpleexpr  */
+#line 562 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2802 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* unarymath: '-' simpleexpr  */
-#line 561 "engines/director/lingo/lingo-gr.y"
+  case 137: /* unarymath: '-' simpleexpr  */
+#line 563 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2808 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* expr: expr '+' expr  */
-#line 579 "engines/director/lingo/lingo-gr.y"
+  case 144: /* expr: expr '+' expr  */
+#line 581 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2814 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* expr: expr '-' expr  */
-#line 580 "engines/director/lingo/lingo-gr.y"
+  case 145: /* expr: expr '-' expr  */
+#line 582 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2820 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* expr: expr '*' expr  */
-#line 581 "engines/director/lingo/lingo-gr.y"
+  case 146: /* expr: expr '*' expr  */
+#line 583 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2826 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* expr: expr '/' expr  */
-#line 582 "engines/director/lingo/lingo-gr.y"
+  case 147: /* expr: expr '/' expr  */
+#line 584 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2832 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* expr: expr tMOD expr  */
-#line 583 "engines/director/lingo/lingo-gr.y"
+  case 148: /* expr: expr tMOD expr  */
+#line 585 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2838 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* expr: expr '>' expr  */
-#line 584 "engines/director/lingo/lingo-gr.y"
+  case 149: /* expr: expr '>' expr  */
+#line 586 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2844 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* expr: expr '<' expr  */
-#line 585 "engines/director/lingo/lingo-gr.y"
+  case 150: /* expr: expr '<' expr  */
+#line 587 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2850 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* expr: expr tEQ expr  */
-#line 586 "engines/director/lingo/lingo-gr.y"
+  case 151: /* expr: expr tEQ expr  */
+#line 588 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2856 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* expr: expr tNEQ expr  */
-#line 587 "engines/director/lingo/lingo-gr.y"
+  case 152: /* expr: expr tNEQ expr  */
+#line 589 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2862 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* expr: expr tGE expr  */
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 153: /* expr: expr tGE expr  */
+#line 590 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2868 "engines/director/lingo/lingo-gr.cpp"
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* expr: expr tLE expr  */
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 154: /* expr: expr tLE expr  */
+#line 591 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2874 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* expr: expr tAND expr  */
-#line 590 "engines/director/lingo/lingo-gr.y"
+  case 155: /* expr: expr tAND expr  */
+#line 592 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2880 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* expr: expr tOR expr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 156: /* expr: expr tOR expr  */
+#line 593 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2886 "engines/director/lingo/lingo-gr.cpp"
+#line 2891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* expr: expr '&' expr  */
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 157: /* expr: expr '&' expr  */
+#line 594 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2892 "engines/director/lingo/lingo-gr.cpp"
+#line 2897 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* expr: expr tCONCAT expr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 158: /* expr: expr tCONCAT expr  */
+#line 595 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2898 "engines/director/lingo/lingo-gr.cpp"
+#line 2903 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* expr: expr tCONTAINS expr  */
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 159: /* expr: expr tCONTAINS expr  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2904 "engines/director/lingo/lingo-gr.cpp"
+#line 2909 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* expr: expr tSTARTS expr  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 160: /* expr: expr tSTARTS expr  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2910 "engines/director/lingo/lingo-gr.cpp"
+#line 2915 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 603 "engines/director/lingo/lingo-gr.y"
+  case 162: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 605 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2916 "engines/director/lingo/lingo-gr.cpp"
+#line 2921 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 163: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2922 "engines/director/lingo/lingo-gr.cpp"
+#line 2927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 164: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2928 "engines/director/lingo/lingo-gr.cpp"
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 165: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 608 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2934 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 166: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2940 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+  case 167: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2946 "engines/director/lingo/lingo-gr.cpp"
+#line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+  case 168: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 611 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2952 "engines/director/lingo/lingo-gr.cpp"
+#line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 169: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 612 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2958 "engines/director/lingo/lingo-gr.cpp"
+#line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 170: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 613 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2964 "engines/director/lingo/lingo-gr.cpp"
+#line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+  case 171: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 614 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2970 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 172: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 615 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2976 "engines/director/lingo/lingo-gr.cpp"
+#line 2981 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 173: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2982 "engines/director/lingo/lingo-gr.cpp"
+#line 2987 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 615 "engines/director/lingo/lingo-gr.y"
+  case 174: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 617 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2988 "engines/director/lingo/lingo-gr.cpp"
+#line 2993 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
+  case 175: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2994 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 617 "engines/director/lingo/lingo-gr.y"
+  case 176: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 619 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3000 "engines/director/lingo/lingo-gr.cpp"
+#line 3005 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 177: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 620 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3006 "engines/director/lingo/lingo-gr.cpp"
+#line 3011 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 178: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 621 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3012 "engines/director/lingo/lingo-gr.cpp"
+#line 3017 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* exprlist: %empty  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 179: /* exprlist: %empty  */
+#line 624 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3018 "engines/director/lingo/lingo-gr.cpp"
+#line 3023 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* nonemptyexprlist: expr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+  case 181: /* nonemptyexprlist: expr  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3027 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 182: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3035 "engines/director/lingo/lingo-gr.cpp"
+#line 3040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3039 "engines/director/lingo/lingo-gr.cpp"
+#line 3044 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3234,7 +3239,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 635 "engines/director/lingo/lingo-gr.y"
+#line 637 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 03c4243a80..9b14b3717f 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -81,55 +81,54 @@ extern int yydebug;
     tFRAME = 282,                  /* tFRAME  */
     tGLOBAL = 283,                 /* tGLOBAL  */
     tGO = 284,                     /* tGO  */
-    tGOLOOP = 285,                 /* tGOLOOP  */
-    tIF = 286,                     /* tIF  */
-    tIN = 287,                     /* tIN  */
-    tINTO = 288,                   /* tINTO  */
-    tMACRO = 289,                  /* tMACRO  */
-    tMOVIE = 290,                  /* tMOVIE  */
-    tNEXT = 291,                   /* tNEXT  */
-    tOF = 292,                     /* tOF  */
-    tPREVIOUS = 293,               /* tPREVIOUS  */
-    tPUT = 294,                    /* tPUT  */
-    tREPEAT = 295,                 /* tREPEAT  */
-    tSET = 296,                    /* tSET  */
-    tTHEN = 297,                   /* tTHEN  */
-    tTO = 298,                     /* tTO  */
-    tWHEN = 299,                   /* tWHEN  */
-    tWITH = 300,                   /* tWITH  */
-    tWHILE = 301,                  /* tWHILE  */
-    tFACTORY = 302,                /* tFACTORY  */
-    tOPEN = 303,                   /* tOPEN  */
-    tPLAY = 304,                   /* tPLAY  */
-    tINSTANCE = 305,               /* tINSTANCE  */
-    tGE = 306,                     /* tGE  */
-    tLE = 307,                     /* tLE  */
-    tEQ = 308,                     /* tEQ  */
-    tNEQ = 309,                    /* tNEQ  */
-    tAND = 310,                    /* tAND  */
-    tOR = 311,                     /* tOR  */
-    tNOT = 312,                    /* tNOT  */
-    tMOD = 313,                    /* tMOD  */
-    tAFTER = 314,                  /* tAFTER  */
-    tBEFORE = 315,                 /* tBEFORE  */
-    tCONCAT = 316,                 /* tCONCAT  */
-    tCONTAINS = 317,               /* tCONTAINS  */
-    tSTARTS = 318,                 /* tSTARTS  */
-    tCHAR = 319,                   /* tCHAR  */
-    tITEM = 320,                   /* tITEM  */
-    tLINE = 321,                   /* tLINE  */
-    tWORD = 322,                   /* tWORD  */
-    tSPRITE = 323,                 /* tSPRITE  */
-    tINTERSECTS = 324,             /* tINTERSECTS  */
-    tWITHIN = 325,                 /* tWITHIN  */
-    tTELL = 326,                   /* tTELL  */
-    tPROPERTY = 327,               /* tPROPERTY  */
-    tON = 328,                     /* tON  */
-    tMETHOD = 329,                 /* tMETHOD  */
-    tENDIF = 330,                  /* tENDIF  */
-    tENDREPEAT = 331,              /* tENDREPEAT  */
-    tENDTELL = 332,                /* tENDTELL  */
-    tASSERTERROR = 333             /* tASSERTERROR  */
+    tIF = 285,                     /* tIF  */
+    tIN = 286,                     /* tIN  */
+    tINTO = 287,                   /* tINTO  */
+    tMACRO = 288,                  /* tMACRO  */
+    tMOVIE = 289,                  /* tMOVIE  */
+    tNEXT = 290,                   /* tNEXT  */
+    tOF = 291,                     /* tOF  */
+    tPREVIOUS = 292,               /* tPREVIOUS  */
+    tPUT = 293,                    /* tPUT  */
+    tREPEAT = 294,                 /* tREPEAT  */
+    tSET = 295,                    /* tSET  */
+    tTHEN = 296,                   /* tTHEN  */
+    tTO = 297,                     /* tTO  */
+    tWHEN = 298,                   /* tWHEN  */
+    tWITH = 299,                   /* tWITH  */
+    tWHILE = 300,                  /* tWHILE  */
+    tFACTORY = 301,                /* tFACTORY  */
+    tOPEN = 302,                   /* tOPEN  */
+    tPLAY = 303,                   /* tPLAY  */
+    tINSTANCE = 304,               /* tINSTANCE  */
+    tGE = 305,                     /* tGE  */
+    tLE = 306,                     /* tLE  */
+    tEQ = 307,                     /* tEQ  */
+    tNEQ = 308,                    /* tNEQ  */
+    tAND = 309,                    /* tAND  */
+    tOR = 310,                     /* tOR  */
+    tNOT = 311,                    /* tNOT  */
+    tMOD = 312,                    /* tMOD  */
+    tAFTER = 313,                  /* tAFTER  */
+    tBEFORE = 314,                 /* tBEFORE  */
+    tCONCAT = 315,                 /* tCONCAT  */
+    tCONTAINS = 316,               /* tCONTAINS  */
+    tSTARTS = 317,                 /* tSTARTS  */
+    tCHAR = 318,                   /* tCHAR  */
+    tITEM = 319,                   /* tITEM  */
+    tLINE = 320,                   /* tLINE  */
+    tWORD = 321,                   /* tWORD  */
+    tSPRITE = 322,                 /* tSPRITE  */
+    tINTERSECTS = 323,             /* tINTERSECTS  */
+    tWITHIN = 324,                 /* tWITHIN  */
+    tTELL = 325,                   /* tTELL  */
+    tPROPERTY = 326,               /* tPROPERTY  */
+    tON = 327,                     /* tON  */
+    tMETHOD = 328,                 /* tMETHOD  */
+    tENDIF = 329,                  /* tENDIF  */
+    tENDREPEAT = 330,              /* tENDREPEAT  */
+    tENDTELL = 331,                /* tENDTELL  */
+    tASSERTERROR = 332             /* tASSERTERROR  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -154,7 +153,7 @@ union YYSTYPE
 	Director::Node *node;
 	Director::NodeList *nodelist;
 
-#line 158 "engines/director/lingo/lingo-gr.h"
+#line 157 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 6b33f5549f..6690399b7a 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -135,7 +135,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %token<s> tENDCLAUSE tPLAYACCEL
 %token<objectprop> tTHEOBJECTPROP
 %token tCAST tFIELD tSCRIPT tWINDOW
-%token tDOWN tELSE tELSIF tEXIT tFRAME tGLOBAL tGO tGOLOOP tIF tIN tINTO tMACRO
+%token tDOWN tELSE tELSIF tEXIT tFRAME tGLOBAL tGO tIF tIN tINTO tMACRO
 %token tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
 %token tWITH tWHILE tFACTORY tOPEN tPLAY tINSTANCE
 %token tGE tLE tEQ tNEQ tAND tOR tNOT tMOD
@@ -370,6 +370,8 @@ stmtoneliner: proc
 
 proc: ID cmdargs '\n'					{ $$ = new CmdNode($ID, $cmdargs); }
 	| tPUT cmdargs '\n'					{ $$ = new CmdNode(new Common::String("put"), $cmdargs); }
+	| tGO cmdargs '\n'					{ $$ = new CmdNode(new Common::String("go"), $cmdargs); }
+	| tGO frameargs '\n'				{ $$ = new CmdNode(new Common::String("go"), $frameargs); }
 	| tPLAY cmdargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $cmdargs); }
 	| tPLAY frameargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $frameargs); }
 	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 5b2d3b4b5a..01af757442 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -355,8 +355,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 73
-#define YY_END_OF_BUFFER 74
+#define YY_NUM_RULES 71
+#define YY_END_OF_BUFFER 72
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -364,43 +364,42 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[320] =
+static const flex_int16_t yy_accept[310] =
     {   0,
-        0,    0,   74,   72,    1,   70,   70,   72,   72,   69,
-       69,   68,   69,   65,   69,   66,   66,   66,   66,   66,
-       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,    1,   66,    1,   70,    0,   71,    2,
-       64,   67,   68,   63,   61,   62,   66,   66,   66,   66,
-       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-       66,   10,   24,   66,   66,   66,   66,   66,   66,   66,
-       33,   34,   66,   36,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,   66,   52,   66,   66,   66,    1,    0,
-       66,    2,   67,   66,    4,   66,   66,   66,   66,   66,
-
-       66,   12,   66,   66,   66,   66,   19,   66,   66,   66,
-       66,   66,   66,   29,   66,   66,   32,   66,   66,   66,
-       66,   40,   66,   66,   66,   43,   66,   66,   66,   66,
-       66,   66,   66,   66,   66,    0,   66,   66,   66,    6,
-        7,   66,    9,   11,    0,   14,   66,   66,   66,    0,
-        0,    0,   66,   66,   23,   25,   26,   66,   66,   66,
-       31,   35,   37,   66,   66,   66,   66,   66,   66,   66,
-       45,    0,   51,   57,   66,   66,   55,   60,    0,   66,
-        3,   66,   66,   12,   15,   16,   66,    0,    0,   19,
-       66,   66,   27,   66,   30,   66,   66,   66,   66,   66,
-
-       66,   66,   50,   50,   50,   58,   66,   66,    0,   66,
-        5,   66,   12,   17,    0,    0,    0,   66,   66,   28,
-       66,   66,   41,   42,   66,   54,   44,    0,   50,   50,
-       59,   56,    0,   66,   66,    0,   20,   66,   66,   66,
-       66,   66,    0,    0,    0,   50,   50,    0,   13,    8,
-       18,   21,   66,   38,   39,   66,    0,    0,    0,   50,
-       50,   13,   66,   66,    0,    0,    0,    0,   50,   22,
-       66,   49,   48,   49,    0,    0,    0,    0,   50,   66,
-       48,    0,    0,    0,    0,    0,   66,    0,    0,    0,
-        0,    0,    0,   66,    0,    0,   49,   48,   48,   49,
-
-        0,   66,   47,   48,   48,    0,   66,   48,   66,    0,
-       48,   66,    0,    0,   53,    0,    0,   46,    0
+        0,    0,   72,   70,    1,   68,   68,   70,   70,   67,
+       67,   66,   67,   63,   67,   64,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,    1,   64,    1,   68,    0,   69,    2,
+       62,   65,   66,   61,   59,   60,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,   10,   22,   64,   64,   64,   64,   64,   64,   64,
+       31,   32,   64,   34,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,   64,   50,   64,   64,   64,    1,    0,
+       64,    2,   65,   64,    4,   64,   64,   64,   64,   64,
+
+       64,   12,   64,   64,   64,   64,   18,   64,   64,   64,
+       64,   64,   64,   27,   64,   64,   30,   64,   64,   64,
+       64,   38,   64,   64,   64,   41,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,    0,   64,   64,   64,    6,
+        7,   64,    9,   11,    0,   14,   64,   64,   64,    0,
+       64,   64,   21,   23,   24,   64,   64,   64,   29,   33,
+       35,   64,   64,   64,   64,   64,   64,   64,   43,    0,
+       49,   55,   64,   64,   53,   58,    0,   64,    3,   64,
+       64,   12,   15,   16,   64,   18,   64,   64,   25,   64,
+       28,   64,   64,   64,   64,   64,   64,   64,   48,   48,
+
+       48,   56,   64,   64,    0,   64,    5,   64,   12,   17,
+       64,   64,   26,   64,   64,   39,   40,   64,   52,   42,
+        0,   48,   48,   57,   54,    0,   64,   64,   64,   64,
+       64,   64,   64,    0,    0,    0,   48,   48,    0,   13,
+        8,   19,   64,   36,   37,   64,    0,    0,    0,   48,
+       48,   13,   64,   64,    0,    0,    0,    0,   48,   20,
+       64,   47,   46,   47,    0,    0,    0,    0,   48,   64,
+       46,    0,    0,    0,    0,    0,   64,    0,    0,    0,
+        0,    0,    0,   64,    0,    0,   47,   46,   46,   47,
+        0,   64,   45,   46,   46,    0,   64,   46,   64,    0,
+
+       46,   64,    0,    0,   51,    0,    0,   44,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -445,89 +444,87 @@ static const YY_CHAR yy_meta[60] =
         5,    5,    5,    5,    5,    5,    5,    5,    5
     } ;
 
-static const flex_int16_t yy_base[332] =
+static const flex_int16_t yy_base[322] =
     {   0,
-        0,   58,  642,  710,   59,  710,  710,  636,    0,  710,
-      632,   55,   54,  710,  627,   49,   51,   57,   46,   50,
+        0,   58,  618,  698,   59,  698,  698,  612,    0,  698,
+      607,   55,   54,  698,  600,   49,   51,   57,   46,   50,
        57,   63,    0,   63,   58,   97,   87,   97,   98,  100,
-      136,  138,  136,  117,  155,  129,  710,  633,  710,    0,
-      710,  626,  134,  710,  710,  710,    0,   97,  121,  136,
+      136,  138,  136,  117,  155,  129,  698,  603,  698,    0,
+      698,  594,  134,  698,  698,  698,    0,   97,  121,  136,
       136,  147,  142,  137,  142,  156,  152,  157,  178,  169,
-      629,    0,  172,  182,  178,  189,  177,  189,  174,  179,
+      601,    0,  172,  182,  178,  189,  177,  189,  174,  179,
         0,    0,  193,    0,  198,  196,  186,  190,  205,  189,
       192,  201,  204,  224,    0,  230,  224,  218,  260,  239,
-      240,    0,  620,  240,    0,  234,  234,  238,  237,  243,
-
-      241,  627,  240,  250,  250,  266,  283,  255,  269,  264,
-      275,  266,  278,    0,  278,  273,    0,  280,  272,  277,
-      285,    0,  283,  293,  295,    0,  294,  292,  298,  326,
-      306,  310,  318,  317,  324,  326,  315,  318,  319,    0,
-        0,  335,    0,    0,  618,    0,  333,  335,  340,  327,
-      331,  333,  347,  334,    0,    0,    0,  337,  340,  350,
-        0,    0,    0,  350,  358,  366,  354,  359,  357,  358,
-        0,  389,    0,    0,  375,  368,  375,    0,  368,  374,
-        0,  384,  381,    0,    0,    0,  382,  394,  383,  614,
-      388,  386,    0,  402,    0,  396,  396,  397,  399,  398,
-
-      402,  404,  571,  433,  438,    0,  407,  416,  418,  420,
-        0,  424,    0,    0,  427,  427,  457,  440,  440,    0,
-      428,  430,    0,    0,  437,    0,    0,  464,  467,  461,
-        0,    0,  438,  443,  457,  456,  710,  459,  472,  462,
-      458,  475,  485,  484,  482,  494,  504,  471,    0,    0,
-      710,    0,  477,    0,    0,  481,  485,  407,  496,  396,
-      520,  710,  494,  496,  511,  392,  514,  533,  534,    0,
-      515,  710,    0,  710,  349,  538,  535,  539,  252,  513,
-        0,  544,  549,  247,  543,  565,  527,  544,  536,  557,
-      575,  570,  565,  571,  211,  168,  139,  569,  579,  132,
-
-       98,  571,   89,   86,   81,  567,  572,  607,  578,  605,
-      624,  581,  588,  592,    0,   79,   70,   68,  710,  661,
-      663,  666,  669,  674,  679,  681,  686,  691,  693,  698,
-      703
+      240,    0,  576,  240,    0,  234,  234,  238,  237,  243,
+
+      241,  544,  240,  250,  250,  266,  283,  255,  269,  264,
+      275,  266,  278,    0,  278,  271,    0,  278,  270,  274,
+      280,    0,  292,  293,  288,    0,  294,  291,  297,  320,
+      300,  304,  315,  312,  318,  322,  310,  313,  316,    0,
+        0,  333,    0,    0,  532,    0,  331,  332,  338,  327,
+      341,  329,    0,    0,    0,  333,  334,  345,    0,    0,
+        0,  344,  349,  356,  345,  350,  347,  349,    0,  380,
+        0,    0,  367,  361,  364,    0,  358,  365,    0,  375,
+      373,    0,    0,    0,  373,  698,  373,  370,    0,  385,
+        0,  378,  378,  377,  382,  381,  398,  388,  531,  419,
+
+      422,    0,  391,  406,  408,  409,    0,  413,    0,    0,
+      426,  425,    0,  413,  415,    0,    0,  422,    0,    0,
+      432,  442,  449,    0,    0,  423,  417,  426,  442,  448,
+      441,  442,  451,  466,  462,  461,  483,  485,  454,    0,
+        0,    0,  461,    0,    0,  463,  465,  489,  473,  448,
+      500,  698,  469,  473,  488,  351,  490,  508,  507,    0,
+      499,  698,    0,  698,  299,  509,  510,  518,  252,  498,
+        0,  529,  526,  247,  536,  546,  512,  518,  526,  550,
+      563,  552,  552,  556,  211,  168,  139,  529,  562,  132,
+       98,  531,   89,   86,   81,  570,  547,  587,  561,  599,
+
+      600,  562,  567,  563,    0,   79,   70,   68,  698,  649,
+      651,  654,  657,  662,  667,  669,  674,  679,  681,  686,
+      691
     } ;
 
-static const flex_int16_t yy_def[332] =
+static const flex_int16_t yy_def[322] =
     {   0,
-      319,    1,  319,  319,  319,  319,  319,  320,  321,  319,
-      319,  319,  319,  319,  319,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  319,  322,  319,  319,  320,  319,  323,
-      319,  319,  319,  319,  319,  319,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  319,  319,
-      322,  323,  319,  322,  322,  322,  322,  322,  322,  322,
-
-      322,  322,  322,  322,  322,  322,  319,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  319,  322,  322,  322,  322,
-      322,  322,  322,  322,  324,  322,  322,  322,  322,  319,
-      319,  319,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  325,  322,  322,  322,  322,  322,  322,  319,  322,
-      322,  322,  322,  326,  322,  322,  322,  319,  319,  319,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-
-      322,  322,  325,  325,  325,  322,  322,  322,  319,  322,
-      322,  322,  326,  322,  319,  319,  319,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  322,  319,  325,  325,
-      322,  322,  319,  322,  322,  319,  319,  322,  322,  322,
-      322,  322,  319,  319,  319,  325,  325,  319,  322,  322,
-      319,  322,  322,  322,  322,  322,  319,  319,  319,  325,
-      325,  319,  322,  322,  319,  327,  319,  328,  325,  322,
-      322,  319,  329,  319,  328,  328,  328,  328,  325,  322,
-      329,  319,  328,  328,  328,  319,  322,  319,  319,  328,
-      327,  328,  319,  322,  319,  319,  328,  329,  329,  328,
-
-      319,  322,  319,  329,  329,  330,  322,  331,  322,  319,
-      331,  322,  319,  319,  322,  319,  319,  319,    0,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319
+      309,    1,  309,  309,  309,  309,  309,  310,  311,  309,
+      309,  309,  309,  309,  309,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  309,  312,  309,  309,  310,  309,  313,
+      309,  309,  309,  309,  309,  309,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  309,  309,
+      312,  313,  309,  312,  312,  312,  312,  312,  312,  312,
+
+      312,  312,  312,  312,  312,  312,  309,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  309,  312,  312,  312,  312,
+      312,  312,  312,  312,  314,  312,  312,  312,  312,  309,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  315,
+      312,  312,  312,  312,  312,  312,  309,  312,  312,  312,
+      312,  316,  312,  312,  312,  309,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  315,  315,
+
+      315,  312,  312,  312,  309,  312,  312,  312,  316,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      309,  315,  315,  312,  312,  309,  312,  312,  312,  312,
+      312,  312,  312,  309,  309,  309,  315,  315,  309,  312,
+      312,  312,  312,  312,  312,  312,  309,  309,  309,  315,
+      315,  309,  312,  312,  309,  317,  309,  318,  315,  312,
+      312,  309,  319,  309,  318,  318,  318,  318,  315,  312,
+      319,  309,  318,  318,  318,  309,  312,  309,  309,  318,
+      317,  318,  309,  312,  309,  309,  318,  319,  319,  318,
+      309,  312,  309,  319,  319,  320,  312,  321,  312,  309,
+
+      321,  312,  309,  309,  312,  309,  309,  309,    0,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309
     } ;
 
-static const flex_int16_t yy_nxt[770] =
+static const flex_int16_t yy_nxt[758] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,    4,   12,
        13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
@@ -535,87 +532,86 @@ static const flex_int16_t yy_nxt[770] =
        32,   23,   23,   33,   23,   23,   23,   16,   17,   18,
        19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
        29,   30,   31,   32,   23,   23,   33,   23,   23,   34,
-       36,   37,   37,   42,   43,   44,   45,   48,   50,  318,
-       51,  318,   54,   55,   49,   56,   35,   52,   58,   65,
-      318,   62,  303,   53,   57,   59,   60,  303,   63,   61,
-      303,   48,   50,   64,   51,   54,   55,   49,   56,  306,
+       36,   37,   37,   42,   43,   44,   45,   48,   50,  308,
+       51,  308,   54,   55,   49,   56,   35,   52,   58,   65,
+      308,   62,  293,   53,   57,   59,   60,  293,   63,   61,
+      293,   48,   50,   64,   51,   54,   55,   49,   56,  296,
 
        35,   52,   58,   65,   69,   62,   53,   57,   59,   60,
        66,   63,   61,   70,   67,   71,   64,   78,   89,   37,
        37,   75,   72,   68,   73,   74,   76,   94,   69,   77,
-       36,   37,   37,  282,   66,   90,   70,   95,   67,   71,
-      282,   78,   42,   43,   75,   72,   68,   73,   74,   76,
+       36,   37,   37,  272,   66,   90,   70,   95,   67,   71,
+      272,   78,   42,   43,   75,   72,   68,   73,   74,   76,
        94,   79,   77,   80,   96,   83,   86,   87,   84,   90,
-       98,   95,   88,   81,   85,   97,   82,   99,   91,  303,
+       98,   95,   88,   81,   85,   97,   82,   99,   91,  293,
       100,  101,  102,  103,  104,   79,   58,   80,   96,   83,
        86,   87,   84,   59,   98,   88,   81,   85,   97,   82,
        99,  105,   91,  100,  101,  106,  102,  103,  104,  110,
 
        58,  108,  109,  111,  112,  114,   59,  113,  116,  117,
-      118,  119,  303,  120,  128,  105,  122,  123,  106,  126,
+      118,  119,  293,  120,  128,  105,  122,  123,  106,  126,
       127,  115,  121,  110,  108,  109,  111,  129,  112,  114,
       113,  116,  117,  124,  118,  119,  125,  120,  128,  122,
-      123,  130,  126,  127,  115,  121,  135,  131,  291,  133,
-      129,  132,  136,  286,  134,  137,  124,  138,  144,  125,
+      123,  130,  126,  127,  115,  121,  135,  131,  281,  133,
+      129,  132,  136,  276,  134,  137,  124,  138,  144,  125,
       139,   89,   37,   37,  140,  130,  141,  142,  143,  135,
       146,  131,  133,  147,  148,  132,  136,  134,   90,  137,
-      149,  138,  144,  139,  107,  153,  154,  140,  156,  141,
-      142,  143,  157,  146,  158,  155,  147,  148,  159,  160,
-
-      166,  150,   90,  161,  149,  162,  151,  163,  153,  164,
-      154,  156,  165,  152,  167,  169,  157,  158,  155,  168,
-      170,  171,  159,  160,  166,  150,  161,  172,  162,  151,
-      163,  174,  164,  175,  176,  165,  152,  177,  167,  169,
-      178,  179,  168,  170,  171,  180,  181,  182,  183,  185,
-      282,  173,  186,  187,  174,  188,  175,  189,  176,  190,
-      191,  177,  192,  193,  178,  179,  194,  195,  180,  181,
-      182,  196,  183,  185,  173,  197,  186,  187,  188,  198,
-      189,  199,  190,  200,  191,  192,  193,  201,  202,  194,
-      172,  195,  206,  266,  207,  196,  208,  268,  209,  197,
-
-      210,  211,  212,  198,  199,  214,  200,  215,  266,  216,
-      201,  202,  204,  218,  205,  219,  206,  207,  220,  226,
-      208,  209,  221,  210,  222,  211,  212,  223,  214,  224,
-      225,  215,  216,  227,  228,  204,  218,  205,  219,  228,
-      231,  232,  220,  226,  233,  221,  229,  222,  234,  235,
-      223,  236,  224,  225,  237,  238,  227,  239,  217,  240,
-      241,  242,  228,  231,  232,  228,  248,  233,  228,  230,
-      229,  234,  235,  251,  236,  150,  252,  237,  249,  238,
-      243,  239,  240,  241,  242,  247,  250,  253,  256,  248,
-      244,  254,  230,  255,  245,  228,  246,  251,  257,  150,
-
-      252,  249,  258,  259,  243,  228,  262,  263,  247,  250,
-      264,  253,  256,  244,  254,  265,  255,  245,  261,  246,
-      267,  228,  257,  270,  260,  271,  258,  259,  272,  262,
-      263,  274,  280,  264,  268,  228,  282,  269,  265,  282,
-      282,  287,  261,  267,  282,  282,  270,  260,  271,  276,
-      282,  283,  272,  284,  296,  274,  280,  294,  282,  277,
-      285,  269,  279,  278,  287,  288,  286,  292,  306,  295,
-      289,  282,  228,  276,  297,  283,  291,  284,  296,  290,
-      294,  243,  277,  301,  285,  279,  278,  300,  302,  288,
-      292,  293,  295,  289,  304,  245,  298,  305,  297,  307,
-
-      309,  299,  290,  273,  312,  243,  310,  301,  310,  315,
-      317,  300,  302,  316,  293,  217,  281,  304,  245,  145,
-      298,  305,  307,  309,  299,  310,  313,  312,  145,   93,
-      107,  314,  315,  281,  317,   93,  316,   39,   46,   41,
-       39,  319,  319,  281,  319,  319,  319,  319,  319,  319,
-      313,  319,  319,  319,  314,  319,  319,  319,  319,  319,
-      281,   38,   38,  319,   38,   38,   38,   40,   40,   47,
-       47,   47,   92,   92,   92,  184,  319,  319,  184,  184,
-      203,  319,  319,  203,  213,  213,  213,  273,  319,  319,
-      273,  273,  275,  319,  319,  275,  281,  281,  281,  308,
-
-      319,  319,  308,  308,  311,  319,  311,  311,  311,    3,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319
+      149,  138,  144,  139,  107,  151,  152,  140,  154,  141,
+      142,  143,  155,  146,  156,  153,  147,  148,  157,  158,
+
+      272,  159,   90,  160,  149,  161,  162,  163,  151,  164,
+      152,  154,  166,  150,  165,  167,  155,  156,  153,  168,
+      169,  170,  157,  158,  159,  172,  160,  173,  161,  162,
+      163,  174,  175,  164,  176,  166,  150,  177,  165,  167,
+      178,  179,  168,  169,  180,  171,  181,  183,  172,  184,
+      173,  185,  256,  186,  187,  174,  175,  188,  176,  189,
+      190,  177,  191,  178,  179,  192,  193,  180,  171,  194,
+      181,  183,  195,  184,  196,  185,  186,  197,  187,  198,
+      188,  170,  189,  190,  202,  204,  191,  203,  205,  192,
+      193,  206,  207,  194,  208,  195,  210,  196,  211,  212,
+
+      197,  213,  198,  200,  214,  201,  215,  216,  202,  204,
+      203,  205,  217,  218,  206,  219,  207,  220,  208,  210,
+      221,  211,  212,  221,  224,  213,  200,  214,  201,  215,
+      216,  225,  222,  221,  226,  217,  218,  227,  228,  219,
+      220,  229,  230,  221,  231,  232,  233,  224,  234,  258,
+      221,  239,  240,  223,  225,  241,  222,  226,  235,  242,
+      227,  228,  236,  243,  246,  229,  230,  231,  232,  233,
+      244,  237,  234,  238,  239,  240,  223,  245,  241,  247,
+      248,  235,  249,  242,  221,  236,  221,  243,  246,  252,
+      256,  253,  254,  244,  237,  255,  238,  257,  260,  251,
+
+      245,  221,  261,  247,  248,  262,  249,  264,  221,  258,
+      272,  272,  252,  250,  253,  254,  270,  259,  255,  272,
+      257,  260,  273,  251,  266,  261,  277,  272,  274,  262,
+      272,  264,  221,  145,  267,  269,  250,  272,  268,  275,
+      270,  259,  284,  285,  286,  145,  273,  276,  266,  277,
+      278,  272,  274,  272,  294,  279,  280,  267,  269,  297,
+      282,  268,  234,  275,  281,  284,  285,  287,  286,  290,
+      291,  296,  283,  292,  278,  299,  236,  294,  279,  280,
+      295,  307,  297,  282,  288,   93,  234,  302,  300,  289,
+      305,  287,  306,  290,  291,  283,  271,  292,  299,  236,
+
+      300,  300,  107,   93,  295,  307,  263,   39,  288,  271,
+      302,   46,  289,  305,   41,  306,   39,  309,  309,  309,
+      303,  309,  309,  271,  309,  304,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  271,  309,  309,  309,
+      309,  309,  309,  309,  303,  309,  309,  309,  304,   38,
+       38,  309,   38,   38,   38,   40,   40,   47,   47,   47,
+       92,   92,   92,  182,  309,  309,  182,  182,  199,  309,
+      309,  199,  209,  209,  209,  263,  309,  309,  263,  263,
+      265,  309,  309,  265,  271,  271,  271,  298,  309,  309,
+      298,  298,  301,  309,  301,  301,  301,    3,  309,  309,
+
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309
     } ;
 
-static const flex_int16_t yy_chk[770] =
+static const flex_int16_t yy_chk[758] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -623,84 +619,83 @@ static const flex_int16_t yy_chk[770] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
-        5,    5,    5,   12,   12,   13,   13,   16,   17,  318,
-       18,  317,   19,   20,   16,   20,    2,   18,   21,   25,
-      316,   24,  305,   18,   20,   21,   22,  304,   24,   22,
-      303,   16,   17,   24,   18,   19,   20,   16,   20,  301,
+        5,    5,    5,   12,   12,   13,   13,   16,   17,  308,
+       18,  307,   19,   20,   16,   20,    2,   18,   21,   25,
+      306,   24,  295,   18,   20,   21,   22,  294,   24,   22,
+      293,   16,   17,   24,   18,   19,   20,   16,   20,  291,
 
         2,   18,   21,   25,   27,   24,   18,   20,   21,   22,
        26,   24,   22,   27,   26,   28,   24,   30,   34,   34,
        34,   29,   28,   26,   28,   28,   29,   48,   27,   29,
-       36,   36,   36,  300,   26,   34,   27,   49,   26,   28,
-      297,   30,   43,   43,   29,   28,   26,   28,   28,   29,
+       36,   36,   36,  290,   26,   34,   27,   49,   26,   28,
+      287,   30,   43,   43,   29,   28,   26,   28,   28,   29,
        48,   31,   29,   31,   50,   32,   33,   33,   32,   34,
-       52,   49,   33,   31,   32,   51,   31,   53,   35,  296,
+       52,   49,   33,   31,   32,   51,   31,   53,   35,  286,
        54,   55,   56,   57,   58,   31,   35,   31,   50,   32,
        33,   33,   32,   35,   52,   33,   31,   32,   51,   31,
        53,   59,   35,   54,   55,   60,   56,   57,   58,   64,
 
        35,   63,   63,   65,   66,   68,   35,   67,   69,   70,
-       73,   75,  295,   76,   82,   59,   77,   78,   60,   80,
+       73,   75,  285,   76,   82,   59,   77,   78,   60,   80,
        81,   68,   76,   64,   63,   63,   65,   83,   66,   68,
        67,   69,   70,   79,   73,   75,   79,   76,   82,   77,
-       78,   84,   80,   81,   68,   76,   88,   86,  284,   87,
-       83,   86,   90,  279,   87,   91,   79,   94,  101,   79,
+       78,   84,   80,   81,   68,   76,   88,   86,  274,   87,
+       83,   86,   90,  269,   87,   91,   79,   94,  101,   79,
        96,   89,   89,   89,   97,   84,   98,   99,  100,   88,
       103,   86,   87,  104,  105,   86,   90,   87,   89,   91,
       106,   94,  101,   96,  107,  108,  109,   97,  110,   98,
        99,  100,  111,  103,  112,  109,  104,  105,  113,  115,
 
-      123,  107,   89,  116,  106,  118,  107,  119,  108,  120,
-      109,  110,  121,  107,  124,  127,  111,  112,  109,  125,
-      128,  129,  113,  115,  123,  107,  116,  130,  118,  107,
-      119,  131,  120,  132,  133,  121,  107,  134,  124,  127,
-      135,  136,  125,  128,  129,  137,  138,  139,  142,  147,
-      275,  130,  148,  149,  131,  150,  132,  151,  133,  152,
-      153,  134,  154,  158,  135,  136,  159,  160,  137,  138,
-      139,  164,  142,  147,  130,  165,  148,  149,  150,  166,
-      151,  167,  152,  168,  153,  154,  158,  169,  170,  159,
-      172,  160,  175,  266,  176,  164,  177,  260,  179,  165,
-
-      180,  182,  183,  166,  167,  187,  168,  188,  258,  189,
-      169,  170,  172,  191,  172,  192,  175,  176,  194,  201,
-      177,  179,  196,  180,  197,  182,  183,  198,  187,  199,
-      200,  188,  189,  202,  204,  172,  191,  172,  192,  205,
-      207,  208,  194,  201,  209,  196,  204,  197,  210,  212,
-      198,  215,  199,  200,  216,  218,  202,  219,  217,  221,
-      222,  225,  230,  207,  208,  228,  233,  209,  229,  205,
-      204,  210,  212,  236,  215,  217,  238,  216,  234,  218,
-      228,  219,  221,  222,  225,  230,  235,  239,  242,  233,
-      228,  240,  205,  241,  228,  246,  229,  236,  243,  217,
-
-      238,  234,  244,  245,  228,  247,  248,  253,  230,  235,
-      256,  239,  242,  228,  240,  257,  241,  228,  247,  229,
-      259,  261,  243,  263,  246,  264,  244,  245,  265,  248,
-      253,  267,  271,  256,  268,  269,  277,  261,  257,  276,
-      278,  280,  247,  259,  285,  282,  263,  246,  264,  268,
-      283,  276,  265,  277,  289,  267,  271,  287,  290,  268,
-      278,  261,  269,  268,  280,  282,  286,  285,  306,  288,
-      282,  292,  203,  268,  290,  276,  291,  277,  289,  283,
-      287,  286,  268,  293,  278,  269,  268,  292,  294,  282,
-      285,  286,  288,  282,  298,  286,  291,  299,  290,  302,
-
-      307,  291,  283,  306,  309,  286,  310,  293,  308,  312,
-      314,  292,  294,  313,  286,  190,  308,  298,  286,  145,
-      291,  299,  302,  307,  291,  311,  310,  309,  102,   93,
-       61,  310,  312,  311,  314,   42,  313,   38,   15,   11,
-        8,    3,    0,  308,    0,    0,    0,    0,    0,    0,
-      310,    0,    0,    0,  310,    0,    0,    0,    0,    0,
-      311,  320,  320,    0,  320,  320,  320,  321,  321,  322,
-      322,  322,  323,  323,  323,  324,    0,    0,  324,  324,
-      325,    0,    0,  325,  326,  326,  326,  327,    0,    0,
-      327,  327,  328,    0,    0,  328,  329,  329,  329,  330,
-
-        0,    0,  330,  330,  331,    0,  331,  331,  331,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319
+      265,  116,   89,  118,  106,  119,  120,  121,  108,  123,
+      109,  110,  125,  107,  124,  127,  111,  112,  109,  128,
+      129,  130,  113,  115,  116,  131,  118,  132,  119,  120,
+      121,  133,  134,  123,  135,  125,  107,  136,  124,  127,
+      137,  138,  128,  129,  139,  130,  142,  147,  131,  148,
+      132,  149,  256,  150,  151,  133,  134,  152,  135,  156,
+      157,  136,  158,  137,  138,  162,  163,  139,  130,  164,
+      142,  147,  165,  148,  166,  149,  150,  167,  151,  168,
+      152,  170,  156,  157,  173,  175,  158,  174,  177,  162,
+      163,  178,  180,  164,  181,  165,  185,  166,  187,  188,
+
+      167,  190,  168,  170,  192,  170,  193,  194,  173,  175,
+      174,  177,  195,  196,  178,  197,  180,  198,  181,  185,
+      200,  187,  188,  201,  203,  190,  170,  192,  170,  193,
+      194,  204,  200,  221,  205,  195,  196,  206,  208,  197,
+      198,  211,  212,  222,  214,  215,  218,  203,  221,  250,
+      223,  226,  227,  201,  204,  228,  200,  205,  221,  229,
+      206,  208,  221,  230,  233,  211,  212,  214,  215,  218,
+      231,  222,  221,  223,  226,  227,  201,  232,  228,  234,
+      235,  221,  236,  229,  237,  221,  238,  230,  233,  239,
+      248,  243,  246,  231,  222,  247,  223,  249,  253,  238,
+
+      232,  251,  254,  234,  235,  255,  236,  257,  259,  258,
+      266,  267,  239,  237,  243,  246,  261,  251,  247,  268,
+      249,  253,  266,  238,  258,  254,  270,  273,  267,  255,
+      272,  257,  199,  145,  258,  259,  237,  275,  258,  268,
+      261,  251,  277,  278,  279,  102,  266,  276,  258,  270,
+      272,  280,  267,  282,  288,  272,  273,  258,  259,  292,
+      275,  258,  276,  268,  281,  277,  278,  280,  279,  282,
+      283,  296,  276,  284,  272,  297,  276,  288,  272,  273,
+      289,  304,  292,  275,  281,   93,  276,  299,  298,  281,
+      302,  280,  303,  282,  283,  276,  298,  284,  297,  276,
+
+      300,  301,   61,   42,  289,  304,  296,   38,  281,  301,
+      299,   15,  281,  302,   11,  303,    8,    3,    0,    0,
+      300,    0,    0,  298,    0,  300,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  301,    0,    0,    0,
+        0,    0,    0,    0,  300,    0,    0,    0,  300,  310,
+      310,    0,  310,  310,  310,  311,  311,  312,  312,  312,
+      313,  313,  313,  314,    0,    0,  314,  314,  315,    0,
+        0,  315,  316,  316,  316,  317,    0,    0,  317,  317,
+      318,    0,    0,  318,  319,  319,  319,  320,    0,    0,
+      320,  320,  321,    0,  321,  321,  321,  309,  309,  309,
+
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -811,8 +806,8 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-#line 814 "engines/director/lingo/lingo-lex.cpp"
-#line 815 "engines/director/lingo/lingo-lex.cpp"
+#line 809 "engines/director/lingo/lingo-lex.cpp"
+#line 810 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1035,7 +1030,7 @@ YY_DECL
 #line 111 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1038 "engines/director/lingo/lingo-lex.cpp"
+#line 1033 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1063,13 +1058,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 320 )
+				if ( yy_current_state >= 310 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 319 );
+		while ( yy_current_state != 309 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1199,141 +1194,131 @@ YY_RULE_SETUP
 case 19:
 YY_RULE_SETUP
 #line 150 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tINSTANCE; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 151 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGOLOOP; }
+{ count(); return tINTERSECTS;}
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 152 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINSTANCE; }
+{ count(); return tINTO; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 153 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS;}
+{ count(); return tIN; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 154 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tITEM; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 155 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIN; }
+{ count(); return tLINE; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 156 "engines/director/lingo/lingo-lex.l"
-{ count(); return tITEM; }
+{ count(); return tMACRO;; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 157 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLINE; }
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 158 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO;; }
+{ count(); return tMOD;}
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 159 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMETHOD; }
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 160 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOD;}
+{ count(); return tNEXT; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 161 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 162 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tOF; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 163 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tON; }		// D3
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tOPEN; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tON; }		// D3
+{ count(); return tOR; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOPEN; }
+{ count(); return tPLAY; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 167 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 168 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAY; }
+{ count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 169 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); return tPUT; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 170 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPROPERTY; }	// D4
+{ count(); return tREPEAT; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 171 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tSCRIPT; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 172 "engines/director/lingo/lingo-lex.l"
-{ count(); return tREPEAT; }
+{ count(); return tSET; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 173 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSCRIPT; }
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 174 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return tTELL; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 175 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
-	YY_BREAK
-case 45:
-YY_RULE_SETUP
-#line 176 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTELL; }
-	YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 177 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1370,9 +1355,9 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 47:
+case 45:
 YY_RULE_SETUP
-#line 212 "engines/director/lingo/lingo-lex.l"
+#line 210 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1396,9 +1381,9 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 48:
+case 46:
 YY_RULE_SETUP
-#line 234 "engines/director/lingo/lingo-lex.l"
+#line 232 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1473,9 +1458,9 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s', field '%s'", ptr, field.c_str());
 	}
 	YY_BREAK
-case 49:
+case 47:
 YY_RULE_SETUP
-#line 307 "engines/director/lingo/lingo-lex.l"
+#line 305 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1511,9 +1496,9 @@ YY_RULE_SETUP
 			return tTHEENTITY;
 	}
 	YY_BREAK
-case 50:
+case 48:
 YY_RULE_SETUP
-#line 341 "engines/director/lingo/lingo-lex.l"
+#line 339 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1541,84 +1526,84 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s'", ptr);
 	}
 	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 365 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTHEN; }
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 366 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTO; }
+	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 367 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
+{ count(); return tASSERTERROR; }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 368 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 369 "engines/director/lingo/lingo-lex.l"
-{ count(); return tASSERTERROR; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 370 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 371 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tWHEN; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 372 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tWHILE; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 373 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWINDOW; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 374 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWORD; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 375 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWINDOW; }
+#line 376 "engines/director/lingo/lingo-lex.l"
+{ count(); return tNEQ; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 376 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+#line 377 "engines/director/lingo/lingo-lex.l"
+{ count(); return tGE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 378 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+{ count(); return tLE; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 379 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tCONCAT; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 380 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tEQ; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 381 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
-	YY_BREAK
-case 65:
-YY_RULE_SETUP
 #line 382 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEQ; }
-	YY_BREAK
-case 66:
-YY_RULE_SETUP
-#line 384 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1626,43 +1611,43 @@ YY_RULE_SETUP
 		return tVARID;
 	}
 	YY_BREAK
-case 67:
+case 65:
 YY_RULE_SETUP
-#line 390 "engines/director/lingo/lingo-lex.l"
+#line 388 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return tFLOAT; }
 	YY_BREAK
-case 68:
+case 66:
 YY_RULE_SETUP
-#line 391 "engines/director/lingo/lingo-lex.l"
+#line 389 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
 	YY_BREAK
-case 69:
+case 67:
 YY_RULE_SETUP
-#line 392 "engines/director/lingo/lingo-lex.l"
+#line 390 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
-case 70:
-/* rule 70 can match eol */
+case 68:
+/* rule 68 can match eol */
 YY_RULE_SETUP
-#line 393 "engines/director/lingo/lingo-lex.l"
+#line 391 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
-case 71:
+case 69:
 YY_RULE_SETUP
-#line 394 "engines/director/lingo/lingo-lex.l"
+#line 392 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
 	YY_BREAK
-case 72:
+case 70:
 YY_RULE_SETUP
-#line 395 "engines/director/lingo/lingo-lex.l"
+#line 393 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
-case 73:
+case 71:
 YY_RULE_SETUP
-#line 397 "engines/director/lingo/lingo-lex.l"
+#line 395 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1665 "engines/director/lingo/lingo-lex.cpp"
+#line 1650 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1961,7 +1946,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 320 )
+			if ( yy_current_state >= 310 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1989,11 +1974,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 320 )
+		if ( yy_current_state >= 310 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 319);
+	yy_is_jam = (yy_current_state == 309);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2671,7 +2656,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 397 "engines/director/lingo/lingo-lex.l"
+#line 395 "engines/director/lingo/lingo-lex.l"
 
 
 extern int yydebug;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 4dda68ec6a..1776101089 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -146,9 +146,7 @@ exit		{ count(); return tEXIT; }
 field		{ count(); return tFIELD; }
 frame		{ count(); return tFRAME; }
 global		{ count(); return tGLOBAL; }
-go{spc}+(to{spc}+)?frame	{ count(); return tGO; }
 go{spc}+(to)?	{ count(); return tGO; }
-go{spc}+loop	{ count(); return tGOLOOP; }
 instance	{ count(); return tINSTANCE; }
 intersects	{ count(); return tINTERSECTS;}
 into		{ count(); return tINTO; }


Commit: 9a2eaee9227aa892ce96cf7feae79c8e4099606a
    https://github.com/scummvm/scummvm/commit/9a2eaee9227aa892ce96cf7feae79c8e4099606a
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Remove c_goto* and c_play

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-code.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 594fb9cd89..37c1adc4c5 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -87,10 +87,6 @@ static struct FuncDescr {
 	{ LC::c_globalpush,		"c_globalpush",		"s" },
 	{ LC::c_globalrefpush,	"c_globalrefpush",	"s" },
 	{ LC::c_ge,				"c_ge",				"" },
-	{ LC::c_goto,			"c_goto",			"" },
-	{ LC::c_gotoloop,		"c_gotoloop",		"" },
-	{ LC::c_gotonext,		"c_gotonext",		"" },
-	{ LC::c_gotoprevious,	"c_gotoprevious",	"" },
 	{ LC::c_gt,				"c_gt",				"" },
 	{ LC::c_hilite,			"c_hilite",			"" },
 	{ LC::c_intersects,		"c_intersects",		"" },
@@ -115,7 +111,6 @@ static struct FuncDescr {
 	{ LC::c_objectproppush,	"c_objectproppush","ss" }, // object, prop
 	{ LC::c_of,				"c_of",				"" },
 	{ LC::c_or,				"c_or",				"" },
-	{ LC::c_play,			"c_play",			"" },
 	{ LC::c_procret,		"c_procret",		"" },
 	{ LC::c_proparraypush,	"c_proparraypush",	"i" },
 	{ LC::c_proppush,		"c_proppush",		"s" },
@@ -1404,43 +1399,6 @@ void LC::c_telldone() {
 //************************
 // Built-in functions
 //************************
-void LC::c_goto() {
-	Datum mode = g_lingo->pop();
-	Datum frame, movie;
-
-	if (mode.u.i == 2 || mode.u.i == 3)
-		movie = g_lingo->pop();
-
-	if (mode.u.i == 1 || mode.u.i == 3)
-		frame = g_lingo->pop();
-
-	g_lingo->func_goto(frame, movie);
-}
-
-void LC::c_gotoloop() {
-	g_lingo->func_gotoloop();
-}
-
-void LC::c_gotonext() {
-	g_lingo->func_gotonext();
-}
-
-void LC::c_gotoprevious() {
-	g_lingo->func_gotoprevious();
-}
-
-void LC::c_play() {
-	Datum mode = g_lingo->pop();
-	Datum frame, movie;
-
-	if (mode.u.i == 2 || mode.u.i == 3)
-		movie = g_lingo->pop();
-
-	if (mode.u.i == 1 || mode.u.i == 3)
-		frame = g_lingo->pop();
-
-	g_lingo->func_play(frame, movie);
-}
 
 void LC::c_callcmd() {
 	Common::String name(g_lingo->readString());
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 9bd1d94c75..bcedfda681 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -130,12 +130,6 @@ void c_procret();
 
 void c_mci();
 void c_mciwait();
-void c_goto();
-void c_gotoloop();
-void c_gotonext();
-void c_gotoprevious();
-
-void c_play();
 
 void c_open();
 void c_hilite();


Commit: 35c103de10a9b23930169933f1dd5ab767e60a34
    https://github.com/scummvm/scummvm/commit/35c103de10a9b23930169933f1dd5ab767e60a34
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Replace sound preprocessor

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-preprocessor.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 314c7aaaa0..c9c6ec8ecf 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -493,6 +493,23 @@ void LingoCompiler::visitCmdNode(CmdNode *node) {
 		return;
 	}
 
+	if (node->name->equalsIgnoreCase("sound") && node->args->size() >= 1 && (*node->args)[0]->type == kVarNode) {
+		VarNode *var = static_cast<VarNode *>((*node->args)[0]);
+		if (var->name->equalsIgnoreCase("close") ||
+				var->name->equalsIgnoreCase("fadeIn") ||
+				var->name->equalsIgnoreCase("fadeOut") ||
+				var->name->equalsIgnoreCase("playFile") ||
+				var->name->equalsIgnoreCase("stop")) {
+			code1(LC::c_symbolpush);
+			codeString(var->name->c_str());
+			for (uint i = 1; i < node->args->size(); i++) {
+				compile((*node->args)[i]);
+			}
+			codeCmd(node->name, node->args->size());
+			return;
+		}
+	}
+
 	compileList(node->args);
 	codeCmd(node->name, node->args->size());
 }
diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index b9832e1278..bec5b18121 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -27,7 +27,6 @@
 namespace Director {
 
 Common::String preprocessWhen(Common::String in, bool *changed);
-Common::String preprocessSound(Common::String in);
 
 bool isspec(char c) {
 	return strchr("-+*/%%^:,()><&[]=", c) != NULL;
@@ -209,10 +208,6 @@ Common::String LingoCompiler::codePreprocessor(const char *s, LingoArchive *arch
 		bool changed = false;
 		res1 = preprocessWhen(res1, &changed);
 
-		if (!changed) {
-			res1 = preprocessSound(res1);
-		}
-
 		res += res1;
 
 		linenumber++;	// We do it here because of 'continue' statements
@@ -299,60 +294,4 @@ Common::String preprocessWhen(Common::String in, bool *changed) {
 	return res;
 }
 
-// sound fadeIn 5, 10 -> sound #fadeIn, 5, 10
-Common::String preprocessSound(Common::String in) {
-	Common::String res, next;
-	const char *ptr = in.c_str();
-	const char *beg = ptr;
-	const char *nextPtr;
-
-	while ((ptr = scumm_strcasestr(beg, "sound")) != NULL) {
-		if (ptr != findtokstart(in.c_str(), ptr)) { // If we're in the middle of a word
-			res += *beg++;
-			continue;
-		}
-
-		ptr += 5; // end of 'sound'
-		res += Common::String(beg, ptr);
-
-		if (!*ptr)	// If it is end of the line
-			break;
-
-		if (Common::isAlnum(*ptr)) { // If it is in the middle of the word
-			beg = ptr;
-			continue;
-		}
-
-		next = nexttok(ptr, &nextPtr);
-
-		debugC(2, kDebugParse | kDebugPreprocess, "SOUND: nexttok: %s", next.c_str());
-
-		bool modified = false;
-
-		if (next.equalsIgnoreCase("close") ||
-				next.equalsIgnoreCase("fadeIn") ||
-				next.equalsIgnoreCase("fadeOut") ||
-				next.equalsIgnoreCase("playFile") ||
-				next.equalsIgnoreCase("stop")) {
-			res += '#'; // Turn it into SYMBOL
-			modified = true;
-		} else {
-			res += ' ';
-		}
-
-		res += next;
-		if (modified)
-			res += ',';
-		ptr = nextPtr;
-		beg = ptr;
-	}
-
-	res += Common::String(beg);
-
-	if (in.size() != res.size())
-		debugC(2, kDebugParse | kDebugPreprocess, "SOUND: in: %s\nout: %s", in.c_str(), res.c_str());
-
-	return res;
-}
-
 } // End of namespace Director


Commit: 884db621b4c393eb40b5908a48f805c290788e6a
    https://github.com/scummvm/scummvm/commit/884db621b4c393eb40b5908a48f805c290788e6a
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement scummvmAssertError

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index 26e92e7b81..c7fafc4919 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -44,6 +44,7 @@ struct RepeatWithToNode;
 struct NextRepeatNode;
 struct ExitRepeatNode;
 struct ExitNode;
+struct AssertErrorNode;
 struct IntNode;
 struct FloatNode;
 struct SymbolNode;
@@ -91,6 +92,7 @@ enum NodeType {
 	kNextRepeatNode,
 	kExitRepeatNode,
 	kExitNode,
+	kAssertErrorNode,
 	kIntNode,
 	kFloatNode,
 	kSymbolNode,
@@ -132,6 +134,7 @@ public:
 	virtual void visitNextRepeatNode(NextRepeatNode *node) = 0;
 	virtual void visitExitRepeatNode(ExitRepeatNode *node) = 0;
 	virtual void visitExitNode(ExitNode *node) = 0;
+	virtual void visitAssertErrorNode(AssertErrorNode *node) = 0;
 	virtual void visitIntNode(IntNode *node) = 0;
 	virtual void visitFloatNode(FloatNode *node) = 0;
 	virtual void visitSymbolNode(SymbolNode *node) = 0;
@@ -473,6 +476,20 @@ struct ExitNode : StmtNode {
 	}
 };
 
+/* AssertErrorNode */
+
+struct AssertErrorNode : StmtNode {
+	Node *stmt;
+
+	AssertErrorNode(Node *stmtIn) : StmtNode(kAssertErrorNode), stmt(stmtIn) {}
+	virtual ~AssertErrorNode() {
+		delete stmt;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitAssertErrorNode(this);
+	}
+};
+
 /* IntNode */
 
 struct IntNode : ExprNode {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index c9c6ec8ecf..3d6d6dea2d 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -723,6 +723,14 @@ void LingoCompiler::visitExitNode(ExitNode *node) {
 	code1(LC::c_procret);
 }
 
+/* AssertErrorNode */
+
+void LingoCompiler::visitAssertErrorNode(AssertErrorNode *node) {
+	code1(LC::c_asserterror);
+	compile(node->stmt);
+	code1(LC::c_asserterrordone);
+}
+
 /* IntNode */
 
 void LingoCompiler::visitIntNode(IntNode *node) {
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 2969bbf1c8..c1d5d83ab0 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -95,6 +95,7 @@ public:
 	virtual void visitNextRepeatNode(NextRepeatNode *node);
 	virtual void visitExitRepeatNode(ExitRepeatNode *node);
 	virtual void visitExitNode(ExitNode *node);
+	virtual void visitAssertErrorNode(AssertErrorNode *node);
 	virtual void visitIntNode(IntNode *node);
 	virtual void visitFloatNode(FloatNode *node);
 	virtual void visitSymbolNode(SymbolNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 490b328dae..77ebf9d67c 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -608,18 +608,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  110
+#define YYFINAL  112
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2439
+#define YYLAST   2506
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  93
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  44
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  182
+#define YYNRULES  183
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  338
+#define YYNSTATES  340
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -684,17 +684,17 @@ static const yytype_int16 yyrline[] =
      329,   331,   332,   333,   334,   335,   336,   337,   338,   339,
      342,   343,   346,   350,   360,   361,   362,   363,   366,   367,
      368,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     382,   385,   390,   394,   400,   405,   408,   418,   423,   429,
-     435,   441,   449,   450,   451,   452,   455,   455,   457,   458,
-     459,   462,   466,   470,   476,   480,   484,   488,   490,   492,
-     496,   497,   501,   507,   514,   515,   521,   522,   523,   524,
-     525,   526,   527,   528,   531,   533,   537,   541,   542,   543,
-     546,   550,   555,   556,   557,   560,   562,   563,   566,   567,
-     568,   575,   576,   580,   581,   582,   583,   584,   585,   586,
+     380,   383,   386,   391,   395,   401,   406,   409,   419,   424,
+     430,   436,   442,   450,   451,   452,   453,   456,   456,   458,
+     459,   460,   463,   467,   471,   477,   481,   485,   489,   491,
+     493,   497,   498,   502,   508,   515,   516,   522,   523,   524,
+     525,   526,   527,   528,   529,   532,   534,   538,   542,   543,
+     544,   547,   551,   556,   557,   558,   561,   563,   564,   567,
+     568,   569,   576,   577,   581,   582,   583,   584,   585,   586,
      587,   588,   589,   590,   591,   592,   593,   594,   595,   596,
-     597,   604,   605,   606,   607,   608,   609,   610,   611,   612,
-     613,   614,   615,   616,   617,   618,   619,   620,   621,   624,
-     625,   628,   632
+     597,   598,   605,   606,   607,   608,   609,   610,   611,   612,
+     613,   614,   615,   616,   617,   618,   619,   620,   621,   622,
+     625,   626,   629,   633
 };
 #endif
 
@@ -757,7 +757,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-224)
+#define YYPACT_NINF (-262)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -771,40 +771,40 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1275,  -224,  -224,  -224,  -224,  -224,  -224,   -33,  -224,  2075,
-     808,   887,  -224,  -224,  2075,  -224,   -16,  -224,  -224,   966,
-      31,  2075,  -224,  -224,  -224,  -224,  2075,  -224,   808,  2075,
-    -224,  -224,  -224,  -224,  -224,  -224,  -224,  -224,  -224,  -224,
-    -224,  -224,  -224,  -224,  -224,  2075,  2075,  -224,  -224,    44,
-    1275,  -224,  -224,  -224,  -224,   966,  -224,  -224,  -224,  -224,
-    -224,  -224,  -224,  -224,   -55,  -224,  -224,  -224,  -224,  -224,
-     -15,   -24,  -224,  -224,  -224,  -224,   887,   887,   887,   887,
-     887,   727,   322,    -5,    -9,    -6,  -224,  -224,  -224,  -224,
-    -224,  -224,   403,   887,  2119,  2075,    15,    19,   484,  2075,
-     887,  -224,  -224,    10,    21,    24,    26,    27,    28,  2075,
-    -224,  -224,    29,   565,  -224,  -224,  2075,   646,  2320,  -224,
-    -224,  -224,  -224,  2154,    -2,    25,     5,   -64,   -31,  -224,
-    2320,    30,    -1,   887,  -224,  -224,    84,   887,   887,   887,
-     887,  1045,  1045,  1203,   887,   887,  1124,   887,   887,   887,
-     887,   887,   887,   887,   887,  -224,  -224,  -224,  2207,  2167,
-    1773,   887,   887,   887,   887,    33,  -224,  -224,  2075,  2075,
-    2075,    68,  2220,  -224,  -224,   887,   -61,  -224,  -224,  -224,
-    -224,    36,  -224,  -224,    89,  2355,   887,  -224,   887,   887,
-    -224,   887,  2016,  -224,  -224,   887,    35,   887,   -42,   -42,
-     -42,   -42,   178,   178,  -224,   -49,   -42,   -42,   -42,   -42,
-     -49,   -35,   -35,  -224,  -224,    -1,   887,   887,   887,   887,
-     887,   887,   887,   887,   887,   887,   887,   887,   887,   887,
-     887,   887,   887,   887,  1834,   101,  1834,  -224,    40,    41,
-      42,   887,  1834,  2257,  2075,  -224,  -224,    60,  -224,  -224,
-    1834,   887,   -23,  2320,  2320,  2320,    -2,    25,    55,  -224,
-    2320,  -224,  2320,   -42,   -42,   -42,   -42,   178,   178,  -224,
-     -49,   -42,   -42,   -42,   -42,   -49,   -35,   -35,  -224,  -224,
-      -1,  -224,  -224,  1336,  -224,  -224,  1895,  1834,  -224,  -224,
-    -224,  2104,  1398,  -224,  2075,   -61,  1466,  2320,  -224,  1956,
-      62,  -224,  1834,  -224,   107,   887,    64,    65,  -224,  2075,
-    1834,  -224,  -224,  1527,   887,  2270,  -224,  1834,     2,  -224,
-    1589,    66,  2307,  1834,  1834,  -224,  2075,    75,  -224,  1834,
-    1651,  -224,  -224,  1712,    76,    77,  -224,  -224
+    1281,  -262,  -262,  -262,  -262,  -262,  -262,   -31,  -262,  2141,
+     814,   893,  -262,  -262,  2141,  -262,   -28,  -262,  -262,   972,
+      32,  2141,  -262,  -262,  -262,  -262,  2141,  -262,   814,  2141,
+    -262,  -262,  -262,  -262,  -262,  -262,  -262,  -262,  -262,  -262,
+    -262,  -262,  -262,  -262,  -262,  2141,  2141,  2023,  -262,    20,
+    1281,  -262,  -262,  -262,  -262,   972,  -262,  -262,  -262,  -262,
+    -262,  -262,  -262,  -262,   -59,  -262,  -262,  -262,  -262,  -262,
+    -262,   -50,   -36,  -262,  -262,  -262,  -262,   893,   893,   893,
+     893,   893,   733,   328,   -32,   -14,    -6,  -262,  -262,  -262,
+    -262,  -262,  -262,   409,   893,    76,  2141,     6,    12,   490,
+    2141,   893,  -262,  -262,   -29,    13,    15,    16,    17,    23,
+    2141,  -262,  -262,  -262,    25,   571,  -262,  -262,  2141,   652,
+    2374,  -262,  -262,  -262,  -262,  2183,   -34,   -30,    -5,   -58,
+     -24,  -262,  2374,    21,    26,   893,  -262,  -262,    80,   893,
+     893,   893,   893,  1051,  1051,  1209,   893,   893,  1130,   893,
+     893,   893,   893,   893,   893,   893,   893,  -262,  -262,  -262,
+    2236,  2223,  1779,   893,   893,   893,   893,    33,  -262,  -262,
+    2141,  2141,  2141,    69,  2274,  -262,  -262,   893,   -61,  -262,
+    -262,  -262,  -262,    36,  -262,  -262,    89,  2387,   893,  -262,
+     893,   893,  -262,   893,  2082,  -262,  -262,   893,    35,   893,
+      24,    24,    24,    24,  2422,  2422,  -262,   -42,    24,    24,
+      24,    24,   -42,   -52,   -52,  -262,  -262,    26,   893,   893,
+     893,   893,   893,   893,   893,   893,   893,   893,   893,   893,
+     893,   893,   893,   893,   893,   893,  1840,   101,  1840,  -262,
+      48,    49,    54,   893,  1840,  2287,  2141,  -262,  -262,    55,
+    -262,  -262,  1840,   893,   -70,  2374,  2374,  2374,   -34,   -30,
+      50,  -262,  2374,  -262,  2374,    24,    24,    24,    24,  2422,
+    2422,  -262,   -42,    24,    24,    24,    24,   -42,   -52,   -52,
+    -262,  -262,    26,  -262,  -262,  1342,  -262,  -262,  1901,  1840,
+    -262,  -262,  -262,  2170,  1404,  -262,  2141,   -61,  1472,  2374,
+    -262,  1962,    57,  -262,  1840,  -262,   102,   893,    59,    60,
+    -262,  2141,  1840,  -262,  -262,  1533,   893,  2324,  -262,  1840,
+     -18,  -262,  1595,    61,  2337,  1840,  1840,  -262,  2141,    62,
+    -262,  1840,  1657,  -262,  -262,  1718,    63,    67,  -262,  -262
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -813,59 +813,59 @@ static const yytype_int16 yypact[] =
 static const yytype_uint8 yydefact[] =
 {
        0,    24,    28,    31,    47,    56,    30,     0,    32,    60,
-      80,     0,    33,    35,     0,    39,    40,    42,    45,    80,
-      46,    48,    51,    54,    57,    55,     0,    43,    80,    60,
+      81,     0,    33,    35,     0,    39,    40,    42,    45,    81,
+      46,    48,    51,    54,    57,    55,     0,    43,    81,    60,
       26,    44,    41,    38,    25,    27,    49,    29,    36,    37,
       59,    53,    34,    58,    50,    60,     0,    52,     5,     0,
-       2,     3,     6,     7,     8,    80,     9,    64,    68,    69,
-      70,    65,    66,    67,     0,    79,    40,    46,    48,    62,
-       0,    61,   116,   117,   119,   118,    32,    39,    41,     0,
-       0,     0,   179,   124,     0,     0,   138,   122,   123,   139,
-     140,   143,    81,     0,     0,    60,     0,     0,    81,     0,
-       0,   124,   126,     0,     0,     0,     0,     0,     0,    60,
-       1,     4,     0,    81,    78,    98,     0,    87,    88,   120,
-     136,   137,    85,     0,   119,   118,     0,   124,     0,   130,
-     181,     0,   180,   179,    73,    74,    42,     0,     0,     0,
-       0,    26,    44,    38,     0,     0,    49,     0,     0,     0,
-       0,     0,     0,     0,     0,   141,   142,   161,    83,     0,
-       0,     0,     0,     0,     0,     0,    77,    72,    35,    25,
-      27,     0,     0,    96,    97,     0,    13,    75,    76,   100,
-      99,     0,    71,    63,    42,    91,     0,   135,     0,     0,
-     128,     0,     0,   129,   127,     0,     0,     0,   153,   154,
-     151,   152,   155,   156,   148,   158,   159,   160,   150,   149,
-     157,   144,   145,   146,   147,    82,     0,     0,     0,     0,
+       2,     3,     6,     7,     8,    81,     9,    64,    68,    69,
+      70,    65,    66,    67,     0,    79,    40,    46,    48,    52,
+      62,     0,    61,   117,   118,   120,   119,    32,    39,    41,
+       0,     0,     0,   180,   125,     0,     0,   139,   123,   124,
+     140,   141,   144,    82,     0,     0,    60,     0,     0,    82,
+       0,     0,   125,   127,     0,     0,     0,     0,     0,     0,
+      60,    80,     1,     4,     0,    82,    78,    99,     0,    88,
+      89,   121,   137,   138,    86,     0,   120,   119,     0,   125,
+       0,   131,   182,     0,   181,   180,    73,    74,    42,     0,
+       0,     0,     0,    26,    44,    38,     0,     0,    49,     0,
+       0,     0,     0,     0,     0,     0,     0,   142,   143,   162,
+      84,     0,     0,     0,     0,     0,     0,     0,    77,    72,
+      35,    25,    27,     0,     0,    97,    98,     0,    13,    75,
+      76,   101,   100,     0,    71,    63,    42,    92,     0,   136,
+       0,     0,   129,     0,     0,   130,   128,     0,     0,     0,
+     154,   155,   152,   153,   156,   157,   149,   159,   160,   161,
+     151,   150,   158,   145,   146,   147,   148,    83,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   110,   101,   110,   125,     0,     0,
-       0,     0,   110,     0,     0,    17,    18,    11,    14,    15,
-     110,     0,     0,   134,   132,   133,     0,     0,     0,   131,
-     182,   121,    90,   171,   172,   169,   170,   173,   174,   166,
-     176,   177,   178,   168,   167,   175,   162,   163,   164,   165,
-      84,   114,   115,     0,   111,   112,     0,    10,    92,    93,
-      94,     0,     0,    95,    60,     0,    20,    89,    86,     0,
-       0,   113,   110,   103,     0,     0,     0,     0,    16,    21,
-     110,   105,   102,     0,     0,     0,   107,   110,     0,    22,
-       0,     0,     0,   110,    12,    19,     0,     0,   104,   110,
-       0,    23,   106,     0,     0,     0,   108,   109
+       0,     0,     0,     0,     0,     0,   111,   102,   111,   126,
+       0,     0,     0,     0,   111,     0,     0,    17,    18,    11,
+      14,    15,   111,     0,     0,   135,   133,   134,     0,     0,
+       0,   132,   183,   122,    91,   172,   173,   170,   171,   174,
+     175,   167,   177,   178,   179,   169,   168,   176,   163,   164,
+     165,   166,    85,   115,   116,     0,   112,   113,     0,    10,
+      93,    94,    95,     0,     0,    96,    60,     0,    20,    90,
+      87,     0,     0,   114,   111,   104,     0,     0,     0,     0,
+      16,    21,   111,   106,   103,     0,     0,     0,   108,   111,
+       0,    22,     0,     0,     0,   111,    12,    19,     0,     0,
+     105,   111,     0,    23,   107,     0,     0,     0,   109,   110
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -224,  -224,  -224,   115,  -224,  -224,  -224,  -224,  -224,  -129,
-    -224,  -224,     0,   -28,  -224,     4,  -224,  -224,   -12,   143,
-    -224,  -224,  -224,  -224,  -224,  -224,  -223,  -224,  -222,   -62,
-     -11,   -66,  -224,  -224,  -224,   -19,   -20,  -224,   -21,  -224,
-      -8,    57,    39,  -149
+    -262,  -262,  -262,   111,  -262,  -262,  -262,  -262,  -262,  -134,
+    -262,  -262,     0,   -23,  -262,     2,   118,  -262,   -12,   138,
+    -262,  -262,  -262,  -262,  -262,  -262,  -234,  -262,  -261,   -55,
+     -20,   -77,  -262,  -262,  -262,   -27,   -40,  -262,     9,  -262,
+      38,    56,    34,  -153
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    49,    50,    51,    52,    53,   246,   247,   248,   249,
-      54,   318,    83,    70,    71,   282,    57,    58,    84,    85,
-      59,   175,    60,    61,    62,    63,   283,   284,   285,    86,
-      87,   238,   103,    88,   128,   129,    89,    90,    91,   157,
-     130,   158,   131,   132
+       0,    49,    50,    51,    52,    53,   248,   249,   250,   251,
+      54,   320,    84,    71,    72,   284,    57,    58,    85,    86,
+      59,   177,    60,    61,    62,    63,   285,   286,   287,    87,
+      88,   240,   104,    89,   130,   131,    90,    91,    92,   159,
+     132,   160,   133,   134
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -873,498 +873,512 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      55,   107,    92,    94,    56,   215,    64,    97,   163,    69,
-     102,    98,   244,   287,    95,   163,   105,   108,   144,   292,
-      92,   101,   163,    96,   133,   245,   104,   296,   191,    69,
-     155,   114,   150,   151,   152,   153,   155,   252,   149,   150,
-     151,   152,   153,   112,   110,    69,   109,   113,   152,   153,
-      55,   155,   173,    65,    56,   155,   192,   119,   120,   121,
-     193,   301,   174,   116,   195,   301,   298,   165,   117,   118,
-     301,   115,   156,   123,   301,    99,   100,   134,   156,   313,
-     135,   181,   127,   133,   280,   159,   195,   320,   325,   326,
-     188,   301,   172,   156,   324,    69,   190,   156,   301,   171,
-     330,   166,   301,   239,   240,   167,   333,   176,   301,    69,
-     177,   301,   178,   179,   180,   182,   183,   189,   197,   236,
-     241,   194,   250,   251,   261,   286,   288,   289,   290,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   295,   191,   312,   314,
-     316,   317,   328,   202,   203,   204,   207,   237,   237,   237,
-      55,   332,   336,   337,   235,   111,   308,   243,   101,   101,
-     101,   106,   196,   259,   185,     0,     0,     0,     0,     0,
-     253,   254,     0,   255,     0,     0,     0,   260,     0,   262,
-       0,     0,   258,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,     0,     0,     0,   137,   138,
-     139,   140,     0,   291,    55,   163,    55,     0,   144,   145,
-     164,     0,    55,   297,   294,     0,     0,     0,     0,     0,
-      55,     0,     0,     0,     0,     0,   147,   148,   149,   150,
-     151,   152,   153,     0,     0,     0,   307,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    55,     0,     0,    55,    55,     0,     0,
-     303,     0,    55,     0,    69,     0,    55,   315,     0,    55,
-       0,     0,    55,   311,     0,     0,   322,     0,     0,   319,
-      55,     0,     0,    55,     0,     0,     0,    55,     0,     0,
-      55,     0,     0,    55,    55,     0,   331,    72,     0,    55,
-      55,     0,    73,    55,     0,     1,   124,   125,     0,     0,
+      55,   103,    56,   217,   289,   165,   108,    98,    64,    70,
+     294,    97,   246,   175,    96,   165,   106,   197,   298,   300,
+     112,   102,   109,   176,   303,   247,   105,   116,   303,    70,
+     135,   154,   155,   303,   193,   254,   117,   303,   157,   152,
+     153,   154,   155,   114,   157,    70,   110,    55,    93,    95,
+      55,   118,    56,   158,   303,    65,   135,    99,   190,   158,
+     157,   303,   191,   194,   157,   303,    93,   195,   327,   328,
+     315,   303,   136,   167,   303,   158,   100,   101,   322,   158,
+     137,   165,   282,   129,   146,   326,   192,   183,   121,   122,
+     123,   332,   168,   115,   241,   242,    70,   335,   169,   178,
+     173,   179,   180,   181,   151,   152,   153,   154,   155,   182,
+      70,   184,   196,   197,   199,   119,   120,   162,   185,   238,
+     125,   243,   252,   253,   263,   288,   139,   140,   141,   142,
+     163,   164,   161,   165,   290,   291,   146,   147,   166,   174,
+     292,   297,   193,   314,   316,   318,   319,   330,   334,   338,
+     239,   239,   239,   339,   149,   150,   151,   152,   153,   154,
+     155,   113,    55,   310,   237,   111,   107,   261,     0,   198,
+     102,   102,   102,     0,     0,   187,     0,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   260,     0,     0,     0,     0,     0,
+       0,   204,   205,   206,   209,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   245,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   255,   256,
+       0,   257,     0,     0,     0,   262,    55,   264,    55,     0,
+       0,     0,     0,     0,    55,     0,   296,     0,     0,     0,
+       0,     0,    55,     0,     0,     0,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   309,     0,     0,     0,     0,     0,     0,
+       0,   293,     0,     0,     0,    55,     0,     0,    55,    55,
+     305,   299,     0,     0,    55,     0,    70,     0,    55,     0,
+       0,    55,     0,   313,    55,     0,     0,     0,     0,     0,
+       0,   321,    55,     0,     0,    55,     0,     0,     0,    55,
+       0,     0,    55,     0,     0,    55,    55,     0,   333,     0,
+       0,    55,    55,    73,     0,    55,     0,     0,    74,     0,
+       0,     1,   126,   127,     0,   317,     0,     2,     3,     4,
+       5,     6,     0,     0,   324,     8,     0,     0,     0,    12,
+      13,     0,    15,    66,    17,    18,     0,    67,    68,     0,
+      22,    23,    24,    25,     0,    27,     0,     0,     0,     0,
+       0,     0,    30,    31,    79,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
+       0,     0,     0,     0,     0,    69,     0,     0,     0,    80,
+      81,     0,     0,     0,    73,     0,    94,     0,    83,    74,
+     128,     0,     1,    75,    76,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+      12,    13,     0,    15,    66,   138,    18,     0,    67,    68,
+       0,    22,    23,    24,    25,     0,    27,     0,     0,   139,
+     140,   141,   142,   143,   144,    79,   145,    34,    35,   146,
+     147,   148,    37,    38,    39,    40,    41,    42,    43,    44,
+       0,     0,     0,     0,     0,     0,    69,   149,   150,   151,
+     152,   153,   154,   155,     0,    73,   156,    94,     0,    83,
+      74,     0,     0,     1,    75,    76,     0,     0,     0,     2,
+       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
+       0,    12,   170,     0,    15,    66,    17,    18,     0,    67,
+      68,     0,    22,    23,    24,    25,     0,    27,     0,     0,
+     139,   140,   141,   142,   143,   144,    79,   145,   171,   172,
+     146,   147,   148,    37,    38,    39,    40,    41,    42,    43,
+      44,     0,     0,     0,     0,     0,     0,    69,   149,   150,
+     151,   152,   153,   154,   155,     0,    73,   156,    94,     0,
+      83,    74,     0,     0,     1,    75,    76,     0,     0,     0,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,   139,   140,   141,   142,   143,   144,    79,   145,    34,
+      35,   146,   147,   148,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     0,     0,     0,     0,    69,   149,
+     150,   151,   152,   153,   154,   155,     0,    73,   156,    94,
+       0,    83,    74,     0,     0,     1,    75,    76,     0,     0,
        0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    66,    17,    18,
+       0,     0,     0,    12,    13,     0,    15,    66,   186,    18,
        0,    67,    68,     0,    22,    23,    24,    25,     0,    27,
-       0,     0,     0,     0,     0,     0,    30,    31,    78,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     0,     0,     0,     0,    47,
-       0,     0,     0,    79,    80,     0,     0,     0,    72,     0,
-      93,     0,    82,    73,   126,     0,     1,    74,    75,     0,
+       0,     0,   139,   140,   141,   142,   143,   144,    79,   145,
+      34,    35,   146,   147,   148,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,     0,     0,     0,     0,    69,
+     149,   150,   151,   152,   153,   154,   155,     0,    73,     0,
+      94,     0,    83,    74,     0,     0,     1,    75,    76,     0,
        0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    66,   136,
+       8,     0,     0,     0,    12,    13,     0,    15,    66,    17,
       18,     0,    67,    68,     0,    22,    23,    24,    25,     0,
-      27,     0,     0,   137,   138,   139,   140,   141,   142,    78,
-     143,    34,    35,   144,   145,   146,    37,    38,    39,    40,
+      27,     0,     0,     0,     0,     0,     0,    30,    31,    79,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
       41,    42,    43,    44,     0,     0,     0,     0,     0,     0,
-      47,   147,   148,   149,   150,   151,   152,   153,     0,    72,
-     154,    93,     0,    82,    73,     0,     0,     1,    74,    75,
+      69,     0,     0,     0,    80,    81,     0,     0,     0,    73,
+       0,    94,   124,    83,    74,     0,     0,     1,    75,    76,
        0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,   168,     0,    15,    66,
+       0,    77,     0,     0,     0,    12,    13,     0,    78,    66,
       17,    18,     0,    67,    68,     0,    22,    23,    24,    25,
-       0,    27,     0,     0,   137,   138,   139,   140,   141,   142,
-      78,   143,   169,   170,   144,   145,   146,    37,    38,    39,
+       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
+      79,    33,    34,    35,     0,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,     0,     0,     0,     0,     0,
-       0,    47,   147,   148,   149,   150,   151,   152,   153,     0,
-      72,   154,    93,     0,    82,    73,     0,     0,     1,    74,
-      75,     0,     0,     0,     2,     3,     4,     5,     6,     0,
-       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
-      66,    17,    18,     0,    67,    68,     0,    22,    23,    24,
-      25,     0,    27,     0,     0,   137,   138,   139,   140,   141,
-     142,    78,   143,    34,    35,   144,   145,   146,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,     0,     0,
-       0,     0,    47,   147,   148,   149,   150,   151,   152,   153,
-       0,    72,   154,    93,     0,    82,    73,     0,     0,     1,
-      74,    75,     0,     0,     0,     2,     3,     4,     5,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    66,   184,    18,     0,    67,    68,     0,    22,    23,
-      24,    25,     0,    27,     0,     0,   137,   138,   139,   140,
-     141,   142,    78,   143,    34,    35,   144,   145,   146,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,     0,
-       0,     0,     0,    47,   147,   148,   149,   150,   151,   152,
-     153,     0,    72,     0,    93,     0,    82,    73,     0,     0,
-       1,    74,    75,     0,     0,     0,     2,     3,     4,     5,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    66,    17,    18,     0,    67,    68,     0,    22,
-      23,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,    30,    31,    78,    33,    34,    35,     0,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-       0,     0,     0,     0,    47,     0,     0,     0,    79,    80,
-       0,     0,     0,    72,     0,    93,   122,    82,    73,     0,
-       0,     1,    74,    75,     0,     0,     0,     2,     3,     4,
-       5,     6,     0,     0,     0,    76,     0,     0,     0,    12,
-      13,     0,    77,    66,    17,    18,     0,    67,    68,     0,
-      22,    23,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,    30,    31,    78,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,     0,     0,     0,     0,    47,     0,     0,     0,    79,
-      80,     0,    72,     0,     0,     0,    81,    73,    82,     0,
-       1,    74,    75,     0,     0,     0,     2,     3,     4,     5,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    66,    17,    18,     0,    67,    68,     0,    22,
-      23,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,    30,    31,    78,    33,    34,    35,     0,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-       0,     0,     0,     0,    47,     0,     0,     0,    79,    80,
-       0,    72,     0,     0,     0,    93,    73,    82,     0,     1,
-      74,    75,     0,     0,     0,     2,     3,     4,     5,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    66,    17,    18,     0,    67,    68,     0,    22,    23,
-      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
-      30,    31,    78,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,     0,
-       0,     0,     0,    47,     0,     0,     0,    79,    80,     0,
-      72,     0,     0,     0,    81,    73,    82,     0,     1,    74,
-      75,     0,     0,     0,     2,     3,     4,     5,     6,     0,
-       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
-      66,    17,    18,     0,    67,    68,     0,    22,    23,    24,
-      25,     0,    27,     0,     0,     0,     0,     0,     0,     0,
-       0,    78,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,     0,     0,     0,     0,
-       0,     0,    47,     0,     0,     0,    79,    80,     0,    72,
-       0,     0,     0,    93,    73,    82,     0,     1,    74,    75,
-       0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    66,
-      17,    18,     0,    67,    68,     0,    22,    23,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
-      78,    33,    34,    35,     0,     0,     0,    37,    38,    39,
-      40,    41,    42,    43,    44,     0,     0,     0,     0,     0,
-       0,    47,     0,     0,     0,    79,    80,     0,    72,     0,
-       0,     0,    93,    73,    82,     0,     1,    74,    75,     0,
+       0,    69,     0,     0,     0,    80,    81,     0,    73,     0,
+       0,     0,    82,    74,    83,     0,     1,    75,    76,     0,
        0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
        8,     0,     0,     0,    12,    13,     0,    15,    66,    17,
       18,     0,    67,    68,     0,    22,    23,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,     0,     0,    78,
-       0,    34,    35,     0,     0,     0,    37,    38,    39,    40,
+      27,     0,     0,     0,     0,     0,     0,    30,    31,    79,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
       41,    42,    43,    44,     0,     0,     0,     0,     0,     0,
-      47,     0,     0,     0,     0,     0,     0,     0,     1,     0,
-       0,    93,     0,    82,     2,     3,     4,     5,     6,     0,
-       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      69,     0,     0,     0,    80,    81,     0,    73,     0,     0,
+       0,    94,    74,    83,     0,     1,    75,    76,     0,     0,
+       0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    66,    17,    18,
+       0,    67,    68,     0,    22,    23,    24,    25,     0,    27,
+       0,     0,     0,     0,     0,     0,    30,    31,    79,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     0,     0,     0,     0,     0,    69,
+       0,     0,     0,    80,    81,     0,    73,     0,     0,     0,
+      82,    74,    83,     0,     1,    75,    76,     0,     0,     0,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,     0,     0,    79,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,     0,     0,     0,     0,     0,     0,    69,     0,
+       0,     0,    80,    81,     0,    73,     0,     0,     0,    94,
+      74,    83,     0,     1,    75,    76,     0,     0,     0,     2,
+       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
+       0,    12,    13,     0,    15,    66,    17,    18,     0,    67,
+      68,     0,    22,    23,    24,    25,     0,    27,     0,     0,
+       0,     0,     0,     0,     0,     0,    79,    33,    34,    35,
+       0,     0,     0,    37,    38,    39,    40,    41,    42,    43,
+      44,     0,     0,     0,     0,     0,     0,    69,     0,     0,
+       0,    80,    81,     0,    73,     0,     0,     0,    94,    74,
+      83,     0,     1,    75,    76,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+      12,    13,     0,    15,    66,    17,    18,     0,    67,    68,
+       0,    22,    23,    24,    25,     0,    27,     0,     0,     0,
+       0,     0,     0,     0,     0,    79,     0,    34,    35,     0,
+       0,     0,    37,    38,    39,    40,    41,    42,    43,    44,
+       0,     0,     0,     0,     0,     0,    69,     0,     0,     0,
+       0,     0,     0,     0,     1,     0,     0,    94,     0,    83,
+       2,     3,     4,     5,     6,     0,     0,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,    26,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,     0,     1,     0,     0,    47,     0,
+       0,     2,     3,     4,     5,     6,   301,    48,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,     0,     0,   302,     1,     0,    47,
+       0,     0,     0,     2,     3,     4,     5,     6,   283,     0,
+       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
+      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
+       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     0,     0,   308,
+       0,    47,     0,     0,     0,     1,     0,     0,   311,     0,
+     283,     2,     3,     4,     5,     6,     0,     0,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
+       0,     0,     2,     3,     4,     5,     6,     0,   283,     7,
+       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
+      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
+      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,     0,     0,   323,     1,     0,
+      47,     0,     0,     0,     2,     3,     4,     5,     6,   283,
+       0,     7,     8,     9,    10,    11,    12,    13,     0,    15,
       16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,     0,     1,
-       0,     0,    47,     0,     0,     2,     3,     4,     5,     6,
-     299,    48,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
-     300,     1,     0,    47,     0,     0,     0,     2,     3,     4,
-       5,     6,   281,     0,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-       0,     0,     0,   306,     0,    47,     0,     0,     0,     1,
-       0,     0,   309,     0,   281,     2,     3,     4,     5,     6,
-       0,     0,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
-       1,     0,     0,    47,     0,     0,     2,     3,     4,     5,
-       6,     0,   281,     7,     8,     9,    10,    11,    12,    13,
+      39,    40,    41,    42,    43,    44,    45,     0,     0,   329,
+       1,     0,    47,     0,     0,     0,     2,     3,     4,     5,
+       6,   283,     0,     7,     8,     9,    10,    11,    12,    13,
        0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
       23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
        0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
-       0,   321,     1,     0,    47,     0,     0,     0,     2,     3,
-       4,     5,     6,   281,     0,     7,     8,     9,    10,    11,
+       0,     1,   336,     0,    47,     0,     0,     2,     3,     4,
+       5,     6,     0,   283,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+       0,     0,     1,   337,     0,    47,     0,     0,     2,     3,
+       4,     5,     6,     0,   283,     7,     8,     9,    10,    11,
       12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
        0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
        0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
        0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,     0,     0,   327,     1,     0,    47,     0,     0,     0,
-       2,     3,     4,     5,     6,   281,     0,     7,     8,     9,
+      45,     0,     0,     1,     0,     0,    47,     0,     0,     2,
+       3,     4,     5,     6,     0,   236,     7,     8,     9,    10,
+      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
+      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,     0,     0,     1,     0,     0,    47,     0,     0,
+       2,     3,     4,     5,     6,     0,   283,     7,     8,     9,
       10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
       20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
       29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
       35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,     0,     0,     1,   334,     0,    47,     0,
-       0,     2,     3,     4,     5,     6,     0,   281,     7,     8,
+      43,    44,    45,     0,     0,     1,     0,     0,    47,     0,
+       0,     2,     3,     4,     5,     6,     0,   304,     7,     8,
        9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
       19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,     1,   335,     0,    47,
-       0,     0,     2,     3,     4,     5,     6,     0,   281,     7,
-       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
-      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
+      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
+       0,     0,     2,     3,     4,     5,     6,     0,   312,     7,
+       8,     9,    10,     0,    12,    13,     0,    15,    16,    17,
+      18,    19,    67,    21,     0,    22,    23,    24,    25,     0,
       27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
       33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     0,     0,     1,     0,     0,
-      47,     0,     0,     2,     3,     4,     5,     6,     0,   234,
-       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     0,     1,     0,
-       0,    47,     0,     0,     2,     3,     4,     5,     6,     0,
-     281,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,     0,     0,     1,
-       0,     0,    47,     0,     0,     2,     3,     4,     5,     6,
-       0,   302,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,     0,     1,
-     256,   257,     0,    47,     0,     2,     3,     4,     5,     6,
-       0,     0,   310,     8,     0,     0,     0,    12,    13,     0,
-      15,    66,    17,    18,     0,    67,    68,     0,    22,    23,
-      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     1,     0,
-       0,     0,     0,    47,     2,     3,     4,     5,     6,     0,
-       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
-      66,    17,    18,     0,    67,    68,     0,    22,    23,    24,
-      25,     0,    27,     0,     0,     0,     0,   304,     0,    30,
-      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,   305,     0,     0,     0,
-       0,     0,    47,     0,   137,   138,   139,   140,   161,   162,
-     160,   163,     0,     0,   144,   145,   164,     0,     0,   137,
-     138,   139,   140,   161,   162,     0,   163,     0,     0,   144,
-     145,   164,   147,   148,   149,   150,   151,   152,   153,     0,
-       0,     0,     0,     0,     0,     0,     0,   147,   148,   149,
-     150,   151,   152,   153,   137,   138,   139,   140,   161,   162,
-       0,   163,     0,     0,   144,   145,   164,   137,   138,   139,
-     140,   161,   162,     0,   163,     0,     0,   144,   145,   164,
-       0,     0,   147,   148,   149,   150,   151,   152,   153,     0,
-       0,   186,     0,   187,     0,   147,   148,   149,   150,   151,
-     152,   153,     0,     0,     0,     0,   187,   216,   217,   218,
-     219,   220,   221,     0,   222,     0,     0,   223,   224,   225,
-     137,   138,   139,   140,   161,   162,     0,   163,     0,     0,
-     144,   145,   164,     0,     0,   226,   227,   228,   229,   230,
-     231,   232,     0,     0,   233,     0,     0,     0,   147,   148,
-     149,   150,   151,   152,   153,     0,   242,   137,   138,   139,
-     140,   161,   162,     0,   163,     0,     0,   144,   145,   164,
-     137,   138,   139,   140,   161,   162,     0,   163,     0,     0,
-     144,   145,   164,     0,     0,   147,   148,   149,   150,   151,
-     152,   153,     0,   293,     0,     0,     0,     0,   147,   148,
-     149,   150,   151,   152,   153,     0,   323,   137,   138,   139,
-     140,   161,   162,     0,   163,     0,     0,   144,   145,   164,
-     137,   138,   139,   140,   161,   162,     0,   163,     0,     0,
-     144,   145,   164,     0,     0,   147,   148,   149,   150,   151,
-     152,   153,     0,   329,     0,     0,     0,     0,   147,   148,
-     149,   150,   151,   152,   153,   216,   217,   218,   219,   220,
-     221,     0,   222,     0,     0,   223,   224,   225,     0,     0,
+      41,    42,    43,    44,    45,     1,   258,   259,     0,     0,
+      47,     2,     3,     4,     5,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    66,    17,    18,
+       0,    67,    68,     0,    22,    23,    24,    25,     0,    27,
+       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,     0,     1,     0,     0,     0,     0,    69,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
+      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,     0,     0,   306,     0,    30,    31,    32,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,   307,     0,     0,     0,     0,     0,    69,     0,
+     139,   140,   141,   142,   163,   164,     0,   165,     0,     0,
+     146,   147,   166,   139,   140,   141,   142,   163,   164,     0,
+     165,     0,     0,   146,   147,   166,     0,     0,   149,   150,
+     151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
+       0,   149,   150,   151,   152,   153,   154,   155,     0,     0,
+     188,     0,   189,   139,   140,   141,   142,   163,   164,     0,
+     165,     0,     0,   146,   147,   166,   218,   219,   220,   221,
+     222,   223,     0,   224,     0,     0,   225,   226,   227,     0,
+       0,   149,   150,   151,   152,   153,   154,   155,     0,     0,
+       0,     0,   189,     0,   228,   229,   230,   231,   232,   233,
+     234,     0,     0,   235,   139,   140,   141,   142,   163,   164,
+       0,   165,     0,     0,   146,   147,   166,   139,   140,   141,
+     142,   163,   164,     0,   165,     0,     0,   146,   147,   166,
+       0,     0,   149,   150,   151,   152,   153,   154,   155,     0,
+     244,     0,     0,     0,     0,   149,   150,   151,   152,   153,
+     154,   155,     0,   295,   139,   140,   141,   142,   163,   164,
+       0,   165,     0,     0,   146,   147,   166,   139,   140,   141,
+     142,   163,   164,     0,   165,     0,     0,   146,   147,   166,
+       0,     0,   149,   150,   151,   152,   153,   154,   155,     0,
+     325,     0,     0,     0,     0,   149,   150,   151,   152,   153,
+     154,   155,     0,   331,   139,   140,   141,   142,   163,   164,
+       0,   165,     0,     0,   146,   147,   166,   218,   219,   220,
+     221,   222,   223,     0,   224,     0,     0,   225,   226,   227,
+       0,     0,   149,   150,   151,   152,   153,   154,   155,     0,
+       0,     0,     0,     0,     0,   228,   229,   230,   231,   232,
+     233,   234,   139,   140,   141,   142,     0,     0,     0,   165,
+       0,     0,   146,   147,   166,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   226,   227,   228,   229,   230,   231,   232
+     149,   150,   151,   152,   153,   154,   155
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,    10,    11,     0,   154,    39,    19,    57,     9,
-      21,    19,    73,   236,    14,    57,    28,    45,    60,   242,
-      28,    21,    57,    39,    88,    86,    26,   250,    92,    29,
-      92,    86,    81,    82,    83,    84,    98,   186,    80,    81,
-      82,    83,    84,    55,     0,    45,    46,    55,    83,    84,
-      50,   113,    42,    86,    50,   117,    87,    78,    79,    80,
-      91,   283,    52,    87,    87,   287,    89,    95,    76,    77,
-     292,    86,    92,    81,   296,    44,    45,    86,    98,   302,
-      86,   109,    82,    88,   233,    93,    87,   310,    86,    87,
-      92,   313,   100,   113,   317,    95,    91,   117,   320,    99,
-     323,    86,   324,   169,   170,    86,   329,    86,   330,   109,
-      86,   333,    86,    86,    86,    86,   116,    92,    34,    86,
-      52,    91,    86,    34,    89,    24,    86,    86,    86,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,    86,    92,    86,    42,
-      86,    86,    86,   161,   162,   163,   164,   168,   169,   170,
-     160,    86,    86,    86,   160,    50,   295,   175,   168,   169,
-     170,    28,   133,   192,   117,    -1,    -1,    -1,    -1,    -1,
-     188,   189,    -1,   191,    -1,    -1,    -1,   195,    -1,   197,
-      -1,    -1,   192,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,    -1,    -1,    -1,    50,    51,
-      52,    53,    -1,   241,   234,    57,   236,    -1,    60,    61,
-      62,    -1,   242,   251,   244,    -1,    -1,    -1,    -1,    -1,
-     250,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    -1,    -1,   294,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   283,    -1,    -1,   286,   287,    -1,    -1,
-     286,    -1,   292,    -1,   294,    -1,   296,   305,    -1,   299,
-      -1,    -1,   302,   299,    -1,    -1,   314,    -1,    -1,   309,
-     310,    -1,    -1,   313,    -1,    -1,    -1,   317,    -1,    -1,
-     320,    -1,    -1,   323,   324,    -1,   326,     5,    -1,   329,
-     330,    -1,    10,   333,    -1,    13,    14,    15,    -1,    -1,
+       0,    21,     0,   156,   238,    57,    29,    19,    39,     9,
+     244,    39,    73,    42,    14,    57,    28,    87,   252,    89,
+       0,    21,    45,    52,   285,    86,    26,    86,   289,    29,
+      88,    83,    84,   294,    92,   188,    86,   298,    93,    81,
+      82,    83,    84,    55,    99,    45,    46,    47,    10,    11,
+      50,    87,    50,    93,   315,    86,    88,    19,    92,    99,
+     115,   322,    92,    87,   119,   326,    28,    91,    86,    87,
+     304,   332,    86,    96,   335,   115,    44,    45,   312,   119,
+      86,    57,   235,    83,    60,   319,    91,   110,    79,    80,
+      81,   325,    86,    55,   171,   172,    96,   331,    86,    86,
+     100,    86,    86,    86,    80,    81,    82,    83,    84,    86,
+     110,    86,    91,    87,    34,    77,    78,    41,   118,    86,
+      82,    52,    86,    34,    89,    24,    50,    51,    52,    53,
+      54,    55,    94,    57,    86,    86,    60,    61,    62,   101,
+      86,    86,    92,    86,    42,    86,    86,    86,    86,    86,
+     170,   171,   172,    86,    78,    79,    80,    81,    82,    83,
+      84,    50,   162,   297,   162,    47,    28,   194,    -1,   135,
+     170,   171,   172,    -1,    -1,   119,    -1,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   194,    -1,    -1,    -1,    -1,    -1,
+      -1,   163,   164,   165,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   177,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   190,   191,
+      -1,   193,    -1,    -1,    -1,   197,   236,   199,   238,    -1,
+      -1,    -1,    -1,    -1,   244,    -1,   246,    -1,    -1,    -1,
+      -1,    -1,   252,    -1,    -1,    -1,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   296,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   243,    -1,    -1,    -1,   285,    -1,    -1,   288,   289,
+     288,   253,    -1,    -1,   294,    -1,   296,    -1,   298,    -1,
+      -1,   301,    -1,   301,   304,    -1,    -1,    -1,    -1,    -1,
+      -1,   311,   312,    -1,    -1,   315,    -1,    -1,    -1,   319,
+      -1,    -1,   322,    -1,    -1,   325,   326,    -1,   328,    -1,
+      -1,   331,   332,     5,    -1,   335,    -1,    -1,    10,    -1,
+      -1,    13,    14,    15,    -1,   307,    -1,    19,    20,    21,
+      22,    23,    -1,    -1,   316,    27,    -1,    -1,    -1,    31,
+      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
+      82,    -1,    -1,    -1,     5,    -1,    88,    -1,    90,    10,
+      92,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    80,
+      81,    82,    83,    84,    -1,     5,    87,    88,    -1,    90,
+      10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,
+      80,    81,    82,    83,    84,    -1,     5,    87,    88,    -1,
+      90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,
+      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
+      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    -1,
+      -1,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,     5,    87,    88,
+      -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,
       -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
       -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
       -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      -1,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      -1,    -1,    -1,    81,    82,    -1,    -1,    -1,     5,    -1,
-      88,    -1,    90,    10,    92,    -1,    13,    14,    15,    -1,
+      78,    79,    80,    81,    82,    83,    84,    -1,     5,    -1,
+      88,    -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,
       -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
       27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
       37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    -1,    -1,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    78,    79,    80,    81,    82,    83,    84,    -1,     5,
-      87,    88,    -1,    90,    10,    -1,    -1,    13,    14,    15,
-      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    -1,    -1,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-       5,    87,    88,    -1,    90,    10,    -1,    -1,    13,    14,
-      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    -1,    -1,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,     5,    87,    88,    -1,    90,    10,    -1,    -1,    13,
-      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    -1,    -1,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,     5,    -1,    88,    -1,    90,    10,    -1,    -1,
-      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
-      -1,    -1,    -1,     5,    -1,    88,    89,    90,    10,    -1,
-      -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
-      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
-      82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
-      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
-      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
-      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,
-       5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,
-      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,
-      -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,    15,
+      77,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,     5,
+      -1,    88,    89,    90,    10,    -1,    -1,    13,    14,    15,
       -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
       -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
       36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      56,    57,    58,    59,    -1,    -1,    -1,    63,    64,    65,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
       -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,
       -1,    -1,    88,    10,    90,    -1,    13,    14,    15,    -1,
       -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
       27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
       37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,
-      -1,    58,    59,    -1,    -1,    -1,    63,    64,    65,    66,
+      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,
-      -1,    88,    -1,    90,    19,    20,    21,    22,    23,    -1,
-      -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,
+      -1,    88,    10,    90,    -1,    13,    14,    15,    -1,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
+      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
+      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+      -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,
+      88,    10,    90,    -1,    13,    14,    15,    -1,    -1,    -1,
+      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
+      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
+      -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,
+      10,    90,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    58,    59,
+      -1,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
+      -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,    10,
+      90,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    56,    -1,    58,    59,    -1,
+      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    13,    -1,    -1,    88,    -1,    90,
+      19,    20,    21,    22,    23,    -1,    -1,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    46,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    -1,    13,    -1,    -1,    77,    -1,
+      -1,    19,    20,    21,    22,    23,    24,    86,    26,    27,
+      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    74,    13,    -1,    77,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    86,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    75,
+      -1,    77,    -1,    -1,    -1,    13,    -1,    -1,    16,    -1,
+      86,    19,    20,    21,    22,    23,    -1,    -1,    26,    27,
+      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
+      -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    74,    13,    -1,
+      77,    -1,    -1,    -1,    19,    20,    21,    22,    23,    86,
+      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
       35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    46,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    13,
-      -1,    -1,    77,    -1,    -1,    19,    20,    21,    22,    23,
-      24,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      74,    13,    -1,    77,    -1,    -1,    -1,    19,    20,    21,
-      22,    23,    86,    -1,    26,    27,    28,    29,    30,    31,
-      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    -1,    75,    -1,    77,    -1,    -1,    -1,    13,
-      -1,    -1,    16,    -1,    86,    19,    20,    21,    22,    23,
-      -1,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    86,    26,    27,    28,    29,    30,    31,    32,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
+      13,    -1,    77,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    86,    -1,    26,    27,    28,    29,    30,    31,    32,
       -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    74,    13,    -1,    77,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    86,    -1,    26,    27,    28,    29,    30,
+      -1,    13,    75,    -1,    77,    -1,    -1,    19,    20,    21,
+      22,    23,    -1,    86,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    13,    75,    -1,    77,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    86,    26,    27,    28,    29,    30,
       31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
       -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
       -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
       -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    74,    13,    -1,    77,    -1,    -1,    -1,
-      19,    20,    21,    22,    23,    86,    -1,    26,    27,    28,
+      71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,
+      20,    21,    22,    23,    -1,    86,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,
+      19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
       29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
       39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
       49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
       59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    13,    75,    -1,    77,    -1,
+      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,
       -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
       28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
       38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
       48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
       58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    75,    -1,    77,
+      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
       -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      27,    28,    29,    -1,    31,    32,    -1,    34,    35,    36,
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
       47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
       57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
-      77,    -1,    -1,    19,    20,    21,    22,    23,    -1,    86,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
-      -1,    77,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      86,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
-      -1,    -1,    77,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    13,
-      14,    15,    -1,    77,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    86,    27,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    13,    -1,
-      -1,    -1,    -1,    77,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    -1,    -1,    -1,    -1,    23,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    42,    -1,    -1,    -1,
-      -1,    -1,    77,    -1,    50,    51,    52,    53,    54,    55,
-      41,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    50,
-      51,    52,    53,    54,    55,    -1,    57,    -1,    -1,    60,
-      61,    62,    78,    79,    80,    81,    82,    83,    84,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    84,    50,    51,    52,    53,    54,    55,
+      67,    68,    69,    70,    71,    13,    14,    15,    -1,    -1,
+      77,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
+      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
+      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    13,    -1,    -1,    -1,    -1,    77,
+      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
+      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    -1,
+      -1,    -1,    -1,    23,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    42,    -1,    -1,    -1,    -1,    -1,    77,    -1,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      87,    -1,    89,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
+      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      -1,    -1,    89,    -1,    78,    79,    80,    81,    82,    83,
+      84,    -1,    -1,    87,    50,    51,    52,    53,    54,    55,
       -1,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
       53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
       -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      -1,    87,    -1,    89,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    -1,    -1,    89,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    87,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    -1,    86,    50,    51,    52,
+      86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    86,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
       53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    86,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    -1,    86,    50,    51,    52,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    86,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
       53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    86,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    50,    51,    52,    53,    -1,    -1,    -1,    57,
+      -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84
+      78,    79,    80,    81,    82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1377,34 +1391,34 @@ static const yytype_uint8 yystos[] =
       54,    55,    56,    57,    58,    59,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    77,    86,    94,
       95,    96,    97,    98,   103,   105,   108,   109,   110,   113,
-     115,   116,   117,   118,    39,    86,    35,    39,    40,   105,
-     106,   107,     5,    10,    14,    15,    27,    34,    56,    81,
-      82,    88,    90,   105,   111,   112,   122,   123,   126,   129,
-     130,   131,   133,    88,   133,   105,    39,   111,   133,    44,
-      45,   105,   123,   125,   105,   111,   112,   106,   106,   105,
-       0,    96,   111,   133,    86,    86,    87,   133,   133,   131,
-     131,   131,    89,   133,    14,    15,    92,   105,   127,   128,
-     133,   135,   136,    88,    86,    86,    36,    50,    51,    52,
-      53,    54,    55,    57,    60,    61,    62,    78,    79,    80,
-      81,    82,    83,    84,    87,   122,   129,   132,   134,   133,
-      41,    54,    55,    57,    62,   106,    86,    86,    32,    58,
-      59,   105,   133,    42,    52,   114,    86,    86,    86,    86,
-      86,   106,    86,   105,    36,   134,    87,    89,    92,    92,
-      91,    92,    87,    91,    91,    87,   135,    34,   133,   133,
+     115,   116,   117,   118,    39,    86,    35,    39,    40,    77,
+     105,   106,   107,     5,    10,    14,    15,    27,    34,    56,
+      81,    82,    88,    90,   105,   111,   112,   122,   123,   126,
+     129,   130,   131,   133,    88,   133,   105,    39,   111,   133,
+      44,    45,   105,   123,   125,   105,   111,   112,   106,   106,
+     105,   109,     0,    96,   111,   133,    86,    86,    87,   133,
+     133,   131,   131,   131,    89,   133,    14,    15,    92,   105,
+     127,   128,   133,   135,   136,    88,    86,    86,    36,    50,
+      51,    52,    53,    54,    55,    57,    60,    61,    62,    78,
+      79,    80,    81,    82,    83,    84,    87,   122,   129,   132,
+     134,   133,    41,    54,    55,    57,    62,   106,    86,    86,
+      32,    58,    59,   105,   133,    42,    52,   114,    86,    86,
+      86,    86,    86,   106,    86,   105,    36,   134,    87,    89,
+      92,    92,    91,    92,    87,    91,    91,    87,   135,    34,
      133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   136,    50,    51,    52,    53,
-      54,    55,    57,    60,    61,    62,    78,    79,    80,    81,
-      82,    83,    84,    87,    86,   108,    86,   123,   124,   124,
-     124,    52,    86,   133,    73,    86,    99,   100,   101,   102,
-      86,    34,   136,   133,   133,   133,    14,    15,   105,   128,
-     133,    89,   133,   133,   133,   133,   133,   133,   133,   133,
+     133,   133,   133,   133,   133,   133,   133,   136,    50,    51,
+      52,    53,    54,    55,    57,    60,    61,    62,    78,    79,
+      80,    81,    82,    83,    84,    87,    86,   108,    86,   123,
+     124,   124,   124,    52,    86,   133,    73,    86,    99,   100,
+     101,   102,    86,    34,   136,   133,   133,   133,    14,    15,
+     105,   128,   133,    89,   133,   133,   133,   133,   133,   133,
      133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     136,    86,   108,   119,   120,   121,    24,   119,    86,    86,
-      86,   133,   119,    86,   105,    86,   119,   133,    89,    24,
-      74,   121,    86,   108,    23,    42,    75,   106,   102,    16,
-      86,   108,    86,   119,    42,   133,    86,    86,   104,   105,
-     119,    74,   133,    86,   119,    86,    87,    74,    86,    86,
-     119,   105,    86,   119,    75,    75,    86,    86
+     133,   133,   136,    86,   108,   119,   120,   121,    24,   119,
+      86,    86,    86,   133,   119,    86,   105,    86,   119,   133,
+      89,    24,    74,   121,    86,   108,    23,    42,    75,   106,
+     102,    16,    86,   108,    86,   119,    42,   133,    86,    86,
+     104,   105,   119,    74,   133,    86,   119,    86,    87,    74,
+      86,    86,   119,   105,    86,   119,    75,    75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1418,17 +1432,17 @@ static const yytype_uint8 yyr1[] =
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
      106,   106,   107,   107,   108,   108,   108,   108,   109,   109,
      109,   110,   110,   110,   110,   110,   110,   110,   110,   110,
-     111,   111,   111,   111,   111,   111,   111,   112,   112,   112,
-     112,   112,   113,   113,   113,   113,   114,   114,   115,   115,
-     115,   116,   116,   117,   117,   117,   117,   118,   118,   118,
-     119,   119,   120,   120,   121,   121,   122,   122,   122,   122,
-     122,   122,   122,   122,   123,   124,   125,   126,   126,   126,
-     127,   127,   128,   128,   128,   129,   130,   130,   131,   131,
-     131,   132,   132,   133,   133,   133,   133,   133,   133,   133,
+     110,   111,   111,   111,   111,   111,   111,   111,   112,   112,
+     112,   112,   112,   113,   113,   113,   113,   114,   114,   115,
+     115,   115,   116,   116,   117,   117,   117,   117,   118,   118,
+     118,   119,   119,   120,   120,   121,   121,   122,   122,   122,
+     122,   122,   122,   122,   122,   123,   124,   125,   126,   126,
+     126,   127,   127,   128,   128,   128,   129,   130,   130,   131,
+     131,   131,   132,   132,   133,   133,   133,   133,   133,   133,
      133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   135,
-     135,   136,   136
+     133,   133,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     135,   135,   136,   136
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1442,17 +1456,17 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
        1,     3,     3,     3,     3,     3,     3,     3,     3,     2,
-       0,     1,     3,     2,     4,     2,     5,     2,     2,     5,
-       4,     3,     5,     5,     5,     5,     1,     1,     3,     3,
-       3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
-       0,     1,     1,     2,     1,     1,     1,     1,     1,     1,
-       2,     4,     1,     1,     1,     1,     1,     3,     3,     3,
-       1,     3,     3,     3,     3,     3,     2,     2,     1,     1,
-       1,     1,     1,     1,     3,     3,     3,     3,     3,     3,
+       2,     0,     1,     3,     2,     4,     2,     5,     2,     2,
+       5,     4,     3,     5,     5,     5,     5,     1,     1,     3,
+       3,     3,     4,     7,     6,     9,     7,    10,     7,    11,
+      12,     0,     1,     1,     2,     1,     1,     1,     1,     1,
+       1,     2,     4,     1,     1,     1,     1,     1,     3,     3,
+       3,     1,     3,     3,     3,     3,     3,     2,     2,     1,
+       1,     1,     1,     1,     1,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     1,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     0,
-       1,     1,     3
+       3,     3,     1,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       0,     1,     1,     3
 };
 
 
@@ -1726,49 +1740,49 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1730 "engines/director/lingo/lingo-gr.cpp"
+#line 1744 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1736 "engines/director/lingo/lingo-gr.cpp"
+#line 1750 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1742 "engines/director/lingo/lingo-gr.cpp"
+#line 1756 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1748 "engines/director/lingo/lingo-gr.cpp"
+#line 1762 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1754 "engines/director/lingo/lingo-gr.cpp"
+#line 1768 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1760 "engines/director/lingo/lingo-gr.cpp"
+#line 1774 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1766 "engines/director/lingo/lingo-gr.cpp"
+#line 1780 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1772 "engines/director/lingo/lingo-gr.cpp"
+#line 1786 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2036,7 +2050,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 196 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2040 "engines/director/lingo/lingo-gr.cpp"
+#line 2054 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2047,7 +2061,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2051 "engines/director/lingo/lingo-gr.cpp"
+#line 2065 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2057,37 +2071,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2061 "engines/director/lingo/lingo-gr.cpp"
+#line 2075 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 211 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2067 "engines/director/lingo/lingo-gr.cpp"
+#line 2081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2073 "engines/director/lingo/lingo-gr.cpp"
+#line 2087 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2079 "engines/director/lingo/lingo-gr.cpp"
+#line 2093 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 250 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2085 "engines/director/lingo/lingo-gr.cpp"
+#line 2099 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 252 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2091 "engines/director/lingo/lingo-gr.cpp"
+#line 2105 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2098,7 +2112,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2102 "engines/director/lingo/lingo-gr.cpp"
+#line 2116 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2108,13 +2122,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2112 "engines/director/lingo/lingo-gr.cpp"
+#line 2126 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 269 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2118 "engines/director/lingo/lingo-gr.cpp"
+#line 2132 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2123,242 +2137,242 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2127 "engines/director/lingo/lingo-gr.cpp"
+#line 2141 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 279 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2134 "engines/director/lingo/lingo-gr.cpp"
+#line 2148 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2140 "engines/director/lingo/lingo-gr.cpp"
+#line 2154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2146 "engines/director/lingo/lingo-gr.cpp"
+#line 2160 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
 #line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2152 "engines/director/lingo/lingo-gr.cpp"
+#line 2166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2158 "engines/director/lingo/lingo-gr.cpp"
+#line 2172 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2164 "engines/director/lingo/lingo-gr.cpp"
+#line 2178 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2170 "engines/director/lingo/lingo-gr.cpp"
+#line 2184 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2176 "engines/director/lingo/lingo-gr.cpp"
+#line 2190 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2182 "engines/director/lingo/lingo-gr.cpp"
+#line 2196 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tFIELD  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2188 "engines/director/lingo/lingo-gr.cpp"
+#line 2202 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFRAME  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2194 "engines/director/lingo/lingo-gr.cpp"
+#line 2208 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2200 "engines/director/lingo/lingo-gr.cpp"
+#line 2214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2206 "engines/director/lingo/lingo-gr.cpp"
+#line 2220 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2212 "engines/director/lingo/lingo-gr.cpp"
+#line 2226 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2218 "engines/director/lingo/lingo-gr.cpp"
+#line 2232 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2224 "engines/director/lingo/lingo-gr.cpp"
+#line 2238 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2230 "engines/director/lingo/lingo-gr.cpp"
+#line 2244 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2236 "engines/director/lingo/lingo-gr.cpp"
+#line 2250 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2242 "engines/director/lingo/lingo-gr.cpp"
+#line 2256 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2248 "engines/director/lingo/lingo-gr.cpp"
+#line 2262 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2254 "engines/director/lingo/lingo-gr.cpp"
+#line 2268 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2260 "engines/director/lingo/lingo-gr.cpp"
+#line 2274 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2266 "engines/director/lingo/lingo-gr.cpp"
+#line 2280 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPREVIOUS  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2272 "engines/director/lingo/lingo-gr.cpp"
+#line 2286 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tREPEAT  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2278 "engines/director/lingo/lingo-gr.cpp"
+#line 2292 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tSCRIPT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2284 "engines/director/lingo/lingo-gr.cpp"
+#line 2298 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tSET  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2290 "engines/director/lingo/lingo-gr.cpp"
+#line 2304 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSTARTS  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2296 "engines/director/lingo/lingo-gr.cpp"
+#line 2310 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tTELL  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2302 "engines/director/lingo/lingo-gr.cpp"
+#line 2316 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tTO  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2308 "engines/director/lingo/lingo-gr.cpp"
+#line 2322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tASSERTERROR  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2314 "engines/director/lingo/lingo-gr.cpp"
+#line 2328 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tSPRITE  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2320 "engines/director/lingo/lingo-gr.cpp"
+#line 2334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tWHEN  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2326 "engines/director/lingo/lingo-gr.cpp"
+#line 2340 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tWHILE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2332 "engines/director/lingo/lingo-gr.cpp"
+#line 2346 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tWINDOW  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2338 "engines/director/lingo/lingo-gr.cpp"
+#line 2352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWITH  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2344 "engines/director/lingo/lingo-gr.cpp"
+#line 2358 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWITHIN  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2350 "engines/director/lingo/lingo-gr.cpp"
+#line 2364 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWORD  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2356 "engines/director/lingo/lingo-gr.cpp"
+#line 2370 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* idlist: %empty  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2362 "engines/director/lingo/lingo-gr.cpp"
+#line 2376 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* nonemptyidlist: ID  */
@@ -2367,7 +2381,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2371 "engines/director/lingo/lingo-gr.cpp"
+#line 2385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2375,672 +2389,678 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2379 "engines/director/lingo/lingo-gr.cpp"
+#line 2393 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* proc: ID cmdargs '\n'  */
 #line 371 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2385 "engines/director/lingo/lingo-gr.cpp"
+#line 2399 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* proc: tPUT cmdargs '\n'  */
 #line 372 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2391 "engines/director/lingo/lingo-gr.cpp"
+#line 2405 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* proc: tGO cmdargs '\n'  */
 #line 373 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2397 "engines/director/lingo/lingo-gr.cpp"
+#line 2411 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* proc: tGO frameargs '\n'  */
 #line 374 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2403 "engines/director/lingo/lingo-gr.cpp"
+#line 2417 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* proc: tPLAY cmdargs '\n'  */
 #line 375 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2409 "engines/director/lingo/lingo-gr.cpp"
+#line 2423 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* proc: tPLAY frameargs '\n'  */
 #line 376 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2415 "engines/director/lingo/lingo-gr.cpp"
+#line 2429 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* proc: tNEXT tREPEAT '\n'  */
 #line 377 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2421 "engines/director/lingo/lingo-gr.cpp"
+#line 2435 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* proc: tEXIT tREPEAT '\n'  */
 #line 378 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2427 "engines/director/lingo/lingo-gr.cpp"
+#line 2441 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* proc: tEXIT '\n'  */
 #line 379 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2433 "engines/director/lingo/lingo-gr.cpp"
+#line 2447 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* cmdargs: %empty  */
-#line 382 "engines/director/lingo/lingo-gr.y"
+  case 80: /* proc: tASSERTERROR stmtoneliner  */
+#line 380 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
+#line 2453 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 81: /* cmdargs: %empty  */
+#line 383 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* cmdargs: expr  */
-#line 385 "engines/director/lingo/lingo-gr.y"
+  case 82: /* cmdargs: expr  */
+#line 386 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2451 "engines/director/lingo/lingo-gr.cpp"
+#line 2471 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 390 "engines/director/lingo/lingo-gr.y"
+  case 83: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 391 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2460 "engines/director/lingo/lingo-gr.cpp"
+#line 2480 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* cmdargs: expr expr_nounarymath  */
-#line 394 "engines/director/lingo/lingo-gr.y"
+  case 84: /* cmdargs: expr expr_nounarymath  */
+#line 395 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2491 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 400 "engines/director/lingo/lingo-gr.y"
+  case 85: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 401 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2481 "engines/director/lingo/lingo-gr.cpp"
+#line 2501 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* cmdargs: '(' ')'  */
-#line 405 "engines/director/lingo/lingo-gr.y"
+  case 86: /* cmdargs: '(' ')'  */
+#line 406 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2489 "engines/director/lingo/lingo-gr.cpp"
+#line 2509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 408 "engines/director/lingo/lingo-gr.y"
+  case 87: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 409 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2498 "engines/director/lingo/lingo-gr.cpp"
+#line 2518 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* frameargs: tFRAME expr  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+  case 88: /* frameargs: tFRAME expr  */
+#line 419 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2508 "engines/director/lingo/lingo-gr.cpp"
+#line 2528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* frameargs: tMOVIE expr  */
-#line 423 "engines/director/lingo/lingo-gr.y"
+  case 89: /* frameargs: tMOVIE expr  */
+#line 424 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2519 "engines/director/lingo/lingo-gr.cpp"
+#line 2539 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 429 "engines/director/lingo/lingo-gr.y"
+  case 90: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 430 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2530 "engines/director/lingo/lingo-gr.cpp"
+#line 2550 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* frameargs: expr tOF tMOVIE expr  */
-#line 435 "engines/director/lingo/lingo-gr.y"
+  case 91: /* frameargs: expr tOF tMOVIE expr  */
+#line 436 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2541 "engines/director/lingo/lingo-gr.cpp"
+#line 2561 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 441 "engines/director/lingo/lingo-gr.y"
+  case 92: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 442 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2552 "engines/director/lingo/lingo-gr.cpp"
+#line 2572 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 93: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 450 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2558 "engines/director/lingo/lingo-gr.cpp"
+#line 2578 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 94: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2564 "engines/director/lingo/lingo-gr.cpp"
+#line 2584 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 95: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2570 "engines/director/lingo/lingo-gr.cpp"
+#line 2590 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* asgn: tSET varorthe to expr '\n'  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 96: /* asgn: tSET varorthe to expr '\n'  */
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2576 "engines/director/lingo/lingo-gr.cpp"
+#line 2596 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* definevars: tGLOBAL idlist '\n'  */
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 99: /* definevars: tGLOBAL idlist '\n'  */
+#line 458 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2582 "engines/director/lingo/lingo-gr.cpp"
+#line 2602 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* definevars: tPROPERTY idlist '\n'  */
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 100: /* definevars: tPROPERTY idlist '\n'  */
+#line 459 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2588 "engines/director/lingo/lingo-gr.cpp"
+#line 2608 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* definevars: tINSTANCE idlist '\n'  */
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 101: /* definevars: tINSTANCE idlist '\n'  */
+#line 460 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2594 "engines/director/lingo/lingo-gr.cpp"
+#line 2614 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* ifstmt: tIF expr tTHEN stmt  */
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 102: /* ifstmt: tIF expr tTHEN stmt  */
+#line 463 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2603 "engines/director/lingo/lingo-gr.cpp"
+#line 2623 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 466 "engines/director/lingo/lingo-gr.y"
+  case 103: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 467 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2610 "engines/director/lingo/lingo-gr.cpp"
+#line 2630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 470 "engines/director/lingo/lingo-gr.y"
+  case 104: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 471 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2621 "engines/director/lingo/lingo-gr.cpp"
+#line 2641 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 105: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 477 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2630 "engines/director/lingo/lingo-gr.cpp"
+#line 2650 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 106: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2659 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 107: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 485 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2646 "engines/director/lingo/lingo-gr.cpp"
+#line 2666 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 108: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 489 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2653 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 109: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2660 "engines/director/lingo/lingo-gr.cpp"
+#line 2680 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 110: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 493 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2667 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* stmtlist: %empty  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 111: /* stmtlist: %empty  */
+#line 497 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2673 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* nonemptystmtlist: stmtlistline  */
-#line 501 "engines/director/lingo/lingo-gr.y"
+  case 113: /* nonemptystmtlist: stmtlistline  */
+#line 502 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2684 "engines/director/lingo/lingo-gr.cpp"
+#line 2704 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 507 "engines/director/lingo/lingo-gr.y"
+  case 114: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 508 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2694 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* stmtlistline: '\n'  */
-#line 514 "engines/director/lingo/lingo-gr.y"
+  case 115: /* stmtlistline: '\n'  */
+#line 515 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2700 "engines/director/lingo/lingo-gr.cpp"
+#line 2720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 521 "engines/director/lingo/lingo-gr.y"
+  case 117: /* simpleexpr_noparens_nounarymath: tINT  */
+#line 522 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 118: /* simpleexpr_noparens_nounarymath: tFLOAT  */
+#line 523 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2712 "engines/director/lingo/lingo-gr.cpp"
+#line 2732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 119: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2718 "engines/director/lingo/lingo-gr.cpp"
+#line 2738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 120: /* simpleexpr_noparens_nounarymath: tSTRING  */
+#line 525 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2724 "engines/director/lingo/lingo-gr.cpp"
+#line 2744 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 525 "engines/director/lingo/lingo-gr.y"
+  case 121: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
+#line 526 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2730 "engines/director/lingo/lingo-gr.cpp"
+#line 2750 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 122: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
+#line 527 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2736 "engines/director/lingo/lingo-gr.cpp"
+#line 2756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* var: ID  */
-#line 531 "engines/director/lingo/lingo-gr.y"
+  case 125: /* var: ID  */
+#line 532 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2742 "engines/director/lingo/lingo-gr.cpp"
+#line 2762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* list: '[' exprlist ']'  */
-#line 541 "engines/director/lingo/lingo-gr.y"
+  case 128: /* list: '[' exprlist ']'  */
+#line 542 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2748 "engines/director/lingo/lingo-gr.cpp"
+#line 2768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* list: '[' ':' ']'  */
-#line 542 "engines/director/lingo/lingo-gr.y"
+  case 129: /* list: '[' ':' ']'  */
+#line 543 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2754 "engines/director/lingo/lingo-gr.cpp"
+#line 2774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* list: '[' proplist ']'  */
-#line 543 "engines/director/lingo/lingo-gr.y"
+  case 130: /* list: '[' proplist ']'  */
+#line 544 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2760 "engines/director/lingo/lingo-gr.cpp"
+#line 2780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* proplist: proppair  */
-#line 546 "engines/director/lingo/lingo-gr.y"
+  case 131: /* proplist: proppair  */
+#line 547 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2769 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* proplist: proplist ',' proppair  */
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 132: /* proplist: proplist ',' proppair  */
+#line 551 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2777 "engines/director/lingo/lingo-gr.cpp"
+#line 2797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* proppair: tSYMBOL ':' expr  */
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 133: /* proppair: tSYMBOL ':' expr  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* proppair: ID ':' expr  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 134: /* proppair: ID ':' expr  */
+#line 557 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* proppair: tSTRING ':' expr  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 135: /* proppair: tSTRING ':' expr  */
+#line 558 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* parens: '(' expr ')'  */
-#line 560 "engines/director/lingo/lingo-gr.y"
+  case 136: /* parens: '(' expr ')'  */
+#line 561 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* unarymath: '+' simpleexpr  */
-#line 562 "engines/director/lingo/lingo-gr.y"
+  case 137: /* unarymath: '+' simpleexpr  */
+#line 563 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* unarymath: '-' simpleexpr  */
-#line 563 "engines/director/lingo/lingo-gr.y"
+  case 138: /* unarymath: '-' simpleexpr  */
+#line 564 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2833 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* expr: expr '+' expr  */
-#line 581 "engines/director/lingo/lingo-gr.y"
+  case 145: /* expr: expr '+' expr  */
+#line 582 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* expr: expr '-' expr  */
-#line 582 "engines/director/lingo/lingo-gr.y"
+  case 146: /* expr: expr '-' expr  */
+#line 583 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* expr: expr '*' expr  */
-#line 583 "engines/director/lingo/lingo-gr.y"
+  case 147: /* expr: expr '*' expr  */
+#line 584 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* expr: expr '/' expr  */
-#line 584 "engines/director/lingo/lingo-gr.y"
+  case 148: /* expr: expr '/' expr  */
+#line 585 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* expr: expr tMOD expr  */
-#line 585 "engines/director/lingo/lingo-gr.y"
+  case 149: /* expr: expr tMOD expr  */
+#line 586 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* expr: expr '>' expr  */
-#line 586 "engines/director/lingo/lingo-gr.y"
+  case 150: /* expr: expr '>' expr  */
+#line 587 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* expr: expr '<' expr  */
-#line 587 "engines/director/lingo/lingo-gr.y"
+  case 151: /* expr: expr '<' expr  */
+#line 588 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* expr: expr tEQ expr  */
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 152: /* expr: expr tEQ expr  */
+#line 589 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* expr: expr tNEQ expr  */
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 153: /* expr: expr tNEQ expr  */
+#line 590 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* expr: expr tGE expr  */
-#line 590 "engines/director/lingo/lingo-gr.y"
+  case 154: /* expr: expr tGE expr  */
+#line 591 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* expr: expr tLE expr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 155: /* expr: expr tLE expr  */
+#line 592 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* expr: expr tAND expr  */
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 156: /* expr: expr tAND expr  */
+#line 593 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 2905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* expr: expr tOR expr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 157: /* expr: expr tOR expr  */
+#line 594 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2891 "engines/director/lingo/lingo-gr.cpp"
+#line 2911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* expr: expr '&' expr  */
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 158: /* expr: expr '&' expr  */
+#line 595 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2897 "engines/director/lingo/lingo-gr.cpp"
+#line 2917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* expr: expr tCONCAT expr  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 159: /* expr: expr tCONCAT expr  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2903 "engines/director/lingo/lingo-gr.cpp"
+#line 2923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* expr: expr tCONTAINS expr  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 160: /* expr: expr tCONTAINS expr  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2909 "engines/director/lingo/lingo-gr.cpp"
+#line 2929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* expr: expr tSTARTS expr  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 161: /* expr: expr tSTARTS expr  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2915 "engines/director/lingo/lingo-gr.cpp"
+#line 2935 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 163: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2921 "engines/director/lingo/lingo-gr.cpp"
+#line 2941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 164: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2927 "engines/director/lingo/lingo-gr.cpp"
+#line 2947 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 165: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 608 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2933 "engines/director/lingo/lingo-gr.cpp"
+#line 2953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+  case 166: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 2959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+  case 167: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 2965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 168: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 611 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2951 "engines/director/lingo/lingo-gr.cpp"
+#line 2971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 169: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 612 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2957 "engines/director/lingo/lingo-gr.cpp"
+#line 2977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+  case 170: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 613 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2963 "engines/director/lingo/lingo-gr.cpp"
+#line 2983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 171: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 614 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2969 "engines/director/lingo/lingo-gr.cpp"
+#line 2989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 172: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 615 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 2995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 615 "engines/director/lingo/lingo-gr.y"
+  case 173: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2981 "engines/director/lingo/lingo-gr.cpp"
+#line 3001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
+  case 174: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 617 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2987 "engines/director/lingo/lingo-gr.cpp"
+#line 3007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 617 "engines/director/lingo/lingo-gr.y"
+  case 175: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2993 "engines/director/lingo/lingo-gr.cpp"
+#line 3013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 176: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 619 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2999 "engines/director/lingo/lingo-gr.cpp"
+#line 3019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 177: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 620 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3005 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 178: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 621 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3011 "engines/director/lingo/lingo-gr.cpp"
+#line 3031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 179: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 622 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3017 "engines/director/lingo/lingo-gr.cpp"
+#line 3037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* exprlist: %empty  */
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 180: /* exprlist: %empty  */
+#line 625 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* nonemptyexprlist: expr  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 182: /* nonemptyexprlist: expr  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 183: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3040 "engines/director/lingo/lingo-gr.cpp"
+#line 3060 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3044 "engines/director/lingo/lingo-gr.cpp"
+#line 3064 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3239,7 +3259,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 637 "engines/director/lingo/lingo-gr.y"
+#line 638 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 6690399b7a..1465fb0877 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -377,6 +377,7 @@ proc: ID cmdargs '\n'					{ $$ = new CmdNode($ID, $cmdargs); }
 	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
 	| tEXIT tREPEAT '\n'				{ $$ = new ExitRepeatNode(); }
 	| tEXIT '\n'						{ $$ = new ExitNode(); }
+	| tASSERTERROR stmtoneliner			{ $$ = new AssertErrorNode($stmtoneliner); }
 	;
 
 cmdargs: /* empty */					{


Commit: 3f1df58337748d10f5a9417dbb25dccae543ae77
    https://github.com/scummvm/scummvm/commit/3f1df58337748d10f5a9417dbb25dccae543ae77
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement tell

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index c7fafc4919..032dcefd63 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -44,6 +44,7 @@ struct RepeatWithToNode;
 struct NextRepeatNode;
 struct ExitRepeatNode;
 struct ExitNode;
+struct TellNode;
 struct AssertErrorNode;
 struct IntNode;
 struct FloatNode;
@@ -92,6 +93,7 @@ enum NodeType {
 	kNextRepeatNode,
 	kExitRepeatNode,
 	kExitNode,
+	kTellNode,
 	kAssertErrorNode,
 	kIntNode,
 	kFloatNode,
@@ -134,6 +136,7 @@ public:
 	virtual void visitNextRepeatNode(NextRepeatNode *node) = 0;
 	virtual void visitExitRepeatNode(ExitRepeatNode *node) = 0;
 	virtual void visitExitNode(ExitNode *node) = 0;
+	virtual void visitTellNode(TellNode *node) = 0;
 	virtual void visitAssertErrorNode(AssertErrorNode *node) = 0;
 	virtual void visitIntNode(IntNode *node) = 0;
 	virtual void visitFloatNode(FloatNode *node) = 0;
@@ -476,6 +479,23 @@ struct ExitNode : StmtNode {
 	}
 };
 
+/* TellNode */
+
+struct TellNode : StmtNode {
+	Node *target;
+	NodeList *stmts;
+
+	TellNode(Node *targetIn, NodeList *stmtsIn)
+		: StmtNode(kTellNode), target(targetIn), stmts(stmtsIn) {}
+	virtual ~TellNode() {
+		delete target;
+		deleteList(stmts);
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitTellNode(this);
+	}
+};
+
 /* AssertErrorNode */
 
 struct AssertErrorNode : StmtNode {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 3d6d6dea2d..2f051cc4f8 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -723,6 +723,15 @@ void LingoCompiler::visitExitNode(ExitNode *node) {
 	code1(LC::c_procret);
 }
 
+/* TellNode */
+
+void LingoCompiler::visitTellNode(TellNode *node) {
+	compile(node->target);
+	code1(LC::c_tell);
+	compileList(node->stmts);
+	code1(LC::c_telldone);
+}
+
 /* AssertErrorNode */
 
 void LingoCompiler::visitAssertErrorNode(AssertErrorNode *node) {
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index c1d5d83ab0..1bfe959285 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -95,6 +95,7 @@ public:
 	virtual void visitNextRepeatNode(NextRepeatNode *node);
 	virtual void visitExitRepeatNode(ExitRepeatNode *node);
 	virtual void visitExitNode(ExitNode *node);
+	virtual void visitTellNode(TellNode *node);
 	virtual void visitAssertErrorNode(AssertErrorNode *node);
 	virtual void visitIntNode(IntNode *node);
 	virtual void visitFloatNode(FloatNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 77ebf9d67c..34343359fd 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -271,24 +271,25 @@ enum yysymbol_kind_t
   YYSYMBOL_ifstmt = 116,                   /* ifstmt  */
   YYSYMBOL_ifelsestmt = 117,               /* ifelsestmt  */
   YYSYMBOL_loop = 118,                     /* loop  */
-  YYSYMBOL_stmtlist = 119,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 120,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 121,             /* stmtlistline  */
-  YYSYMBOL_simpleexpr_noparens_nounarymath = 122, /* simpleexpr_noparens_nounarymath  */
-  YYSYMBOL_var = 123,                      /* var  */
-  YYSYMBOL_varorchunk = 124,               /* varorchunk  */
-  YYSYMBOL_varorthe = 125,                 /* varorthe  */
-  YYSYMBOL_list = 126,                     /* list  */
-  YYSYMBOL_proplist = 127,                 /* proplist  */
-  YYSYMBOL_proppair = 128,                 /* proppair  */
-  YYSYMBOL_parens = 129,                   /* parens  */
-  YYSYMBOL_unarymath = 130,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 131,               /* simpleexpr  */
-  YYSYMBOL_simpleexpr_nounarymath = 132,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_expr = 133,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 134,         /* expr_nounarymath  */
-  YYSYMBOL_exprlist = 135,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 136          /* nonemptyexprlist  */
+  YYSYMBOL_tell = 119,                     /* tell  */
+  YYSYMBOL_stmtlist = 120,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 121,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 122,             /* stmtlistline  */
+  YYSYMBOL_simpleexpr_noparens_nounarymath = 123, /* simpleexpr_noparens_nounarymath  */
+  YYSYMBOL_var = 124,                      /* var  */
+  YYSYMBOL_varorchunk = 125,               /* varorchunk  */
+  YYSYMBOL_varorthe = 126,                 /* varorthe  */
+  YYSYMBOL_list = 127,                     /* list  */
+  YYSYMBOL_proplist = 128,                 /* proplist  */
+  YYSYMBOL_proppair = 129,                 /* proppair  */
+  YYSYMBOL_parens = 130,                   /* parens  */
+  YYSYMBOL_unarymath = 131,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 132,               /* simpleexpr  */
+  YYSYMBOL_simpleexpr_nounarymath = 133,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_expr = 134,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 135,         /* expr_nounarymath  */
+  YYSYMBOL_exprlist = 136,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 137          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -608,18 +609,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  112
+#define YYFINAL  115
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2506
+#define YYLAST   2619
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  93
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  44
+#define YYNNTS  45
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  183
+#define YYNRULES  186
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  340
+#define YYNSTATES  349
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -682,19 +683,19 @@ static const yytype_int16 yyrline[] =
      296,   301,   302,   305,   307,   308,   309,   310,   313,   314,
      315,   316,   317,   319,   320,   322,   325,   326,   327,   328,
      329,   331,   332,   333,   334,   335,   336,   337,   338,   339,
-     342,   343,   346,   350,   360,   361,   362,   363,   366,   367,
-     368,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   383,   386,   391,   395,   401,   406,   409,   419,   424,
-     430,   436,   442,   450,   451,   452,   453,   456,   456,   458,
-     459,   460,   463,   467,   471,   477,   481,   485,   489,   491,
-     493,   497,   498,   502,   508,   515,   516,   522,   523,   524,
-     525,   526,   527,   528,   529,   532,   534,   538,   542,   543,
-     544,   547,   551,   556,   557,   558,   561,   563,   564,   567,
-     568,   569,   576,   577,   581,   582,   583,   584,   585,   586,
-     587,   588,   589,   590,   591,   592,   593,   594,   595,   596,
-     597,   598,   605,   606,   607,   608,   609,   610,   611,   612,
-     613,   614,   615,   616,   617,   618,   619,   620,   621,   622,
-     625,   626,   629,   633
+     342,   343,   346,   350,   360,   361,   362,   363,   364,   367,
+     368,   369,   372,   373,   374,   375,   376,   377,   378,   379,
+     380,   381,   384,   387,   392,   396,   402,   407,   410,   420,
+     425,   431,   437,   443,   451,   452,   453,   454,   457,   457,
+     459,   460,   461,   464,   468,   472,   478,   482,   486,   490,
+     492,   494,   498,   502,   506,   507,   511,   517,   524,   525,
+     531,   532,   533,   534,   535,   536,   537,   538,   541,   543,
+     547,   551,   552,   553,   556,   560,   565,   566,   567,   570,
+     572,   573,   576,   577,   578,   585,   586,   590,   591,   592,
+     593,   594,   595,   596,   597,   598,   599,   600,   601,   602,
+     603,   604,   605,   606,   607,   614,   615,   616,   617,   618,
+     619,   620,   621,   622,   623,   624,   625,   626,   627,   628,
+     629,   630,   631,   634,   635,   638,   642
 };
 #endif
 
@@ -729,11 +730,11 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "methodlist", "nonemptymethodlist", "methodlistline", "handler",
   "endargdef", "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner",
   "proc", "cmdargs", "frameargs", "asgn", "to", "definevars", "ifstmt",
-  "ifelsestmt", "loop", "stmtlist", "nonemptystmtlist", "stmtlistline",
-  "simpleexpr_noparens_nounarymath", "var", "varorchunk", "varorthe",
-  "list", "proplist", "proppair", "parens", "unarymath", "simpleexpr",
-  "simpleexpr_nounarymath", "expr", "expr_nounarymath", "exprlist",
-  "nonemptyexprlist", YY_NULLPTR
+  "ifelsestmt", "loop", "tell", "stmtlist", "nonemptystmtlist",
+  "stmtlistline", "simpleexpr_noparens_nounarymath", "var", "varorchunk",
+  "varorthe", "list", "proplist", "proppair", "parens", "unarymath",
+  "simpleexpr", "simpleexpr_nounarymath", "expr", "expr_nounarymath",
+  "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -757,7 +758,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-262)
+#define YYPACT_NINF (-236)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -771,40 +772,41 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1281,  -262,  -262,  -262,  -262,  -262,  -262,   -31,  -262,  2141,
-     814,   893,  -262,  -262,  2141,  -262,   -28,  -262,  -262,   972,
-      32,  2141,  -262,  -262,  -262,  -262,  2141,  -262,   814,  2141,
-    -262,  -262,  -262,  -262,  -262,  -262,  -262,  -262,  -262,  -262,
-    -262,  -262,  -262,  -262,  -262,  2141,  2141,  2023,  -262,    20,
-    1281,  -262,  -262,  -262,  -262,   972,  -262,  -262,  -262,  -262,
-    -262,  -262,  -262,  -262,   -59,  -262,  -262,  -262,  -262,  -262,
-    -262,   -50,   -36,  -262,  -262,  -262,  -262,   893,   893,   893,
-     893,   893,   733,   328,   -32,   -14,    -6,  -262,  -262,  -262,
-    -262,  -262,  -262,   409,   893,    76,  2141,     6,    12,   490,
-    2141,   893,  -262,  -262,   -29,    13,    15,    16,    17,    23,
-    2141,  -262,  -262,  -262,    25,   571,  -262,  -262,  2141,   652,
-    2374,  -262,  -262,  -262,  -262,  2183,   -34,   -30,    -5,   -58,
-     -24,  -262,  2374,    21,    26,   893,  -262,  -262,    80,   893,
-     893,   893,   893,  1051,  1051,  1209,   893,   893,  1130,   893,
-     893,   893,   893,   893,   893,   893,   893,  -262,  -262,  -262,
-    2236,  2223,  1779,   893,   893,   893,   893,    33,  -262,  -262,
-    2141,  2141,  2141,    69,  2274,  -262,  -262,   893,   -61,  -262,
-    -262,  -262,  -262,    36,  -262,  -262,    89,  2387,   893,  -262,
-     893,   893,  -262,   893,  2082,  -262,  -262,   893,    35,   893,
-      24,    24,    24,    24,  2422,  2422,  -262,   -42,    24,    24,
-      24,    24,   -42,   -52,   -52,  -262,  -262,    26,   893,   893,
-     893,   893,   893,   893,   893,   893,   893,   893,   893,   893,
-     893,   893,   893,   893,   893,   893,  1840,   101,  1840,  -262,
-      48,    49,    54,   893,  1840,  2287,  2141,  -262,  -262,    55,
-    -262,  -262,  1840,   893,   -70,  2374,  2374,  2374,   -34,   -30,
-      50,  -262,  2374,  -262,  2374,    24,    24,    24,    24,  2422,
-    2422,  -262,   -42,    24,    24,    24,    24,   -42,   -52,   -52,
-    -262,  -262,    26,  -262,  -262,  1342,  -262,  -262,  1901,  1840,
-    -262,  -262,  -262,  2170,  1404,  -262,  2141,   -61,  1472,  2374,
-    -262,  1962,    57,  -262,  1840,  -262,   102,   893,    59,    60,
-    -262,  2141,  1840,  -262,  -262,  1533,   893,  2324,  -262,  1840,
-     -18,  -262,  1595,    61,  2337,  1840,  1840,  -262,  2141,    62,
-    -262,  1840,  1657,  -262,  -262,  1718,    63,    67,  -262,  -262
+    1392,  -236,  -236,  -236,  -236,  -236,  -236,   -34,  -236,  2313,
+     925,  1004,  -236,  -236,  2313,  -236,     2,  -236,  -236,  1083,
+     -17,  2313,  -236,  -236,  -236,  -236,  2313,  -236,   925,  2313,
+    -236,  -236,  -236,  -236,  -236,  -236,  -236,  -236,  -236,  -236,
+    -236,  -236,  -236,  -236,  1004,  2313,  2313,  2195,  -236,    20,
+    1392,  -236,  -236,  -236,  -236,  1083,  -236,  -236,  -236,  -236,
+    -236,  -236,  -236,  -236,  -236,   -28,  -236,  -236,  -236,  -236,
+    -236,  -236,  -236,   -13,   -32,  -236,  -236,  -236,  -236,  1004,
+    1004,  1004,  1004,  1004,   844,   439,   -21,    -9,    -3,  -236,
+    -236,  -236,  -236,  -236,  -236,   520,  1004,   155,  2313,    -2,
+       4,   601,  2313,  1004,  -236,  -236,    12,     5,     6,     7,
+       8,   334,    11,  2313,  -236,  -236,  -236,    13,   682,  -236,
+    -236,  2313,   763,  2487,  -236,  -236,  -236,  -236,  2334,    16,
+      18,    14,   -69,   -31,  -236,  2487,    21,    17,  1004,  -236,
+    -236,    69,  1004,  1004,  1004,  1004,  1162,  1162,  1320,  1004,
+    1004,  1241,  1004,  1004,  1004,  1004,  1004,  1004,  1004,  1004,
+    -236,  -236,  -236,    65,  2347,  1951,  1004,  1004,  1004,  1004,
+      25,  -236,  -236,  2313,  2313,  2313,    62,  2387,  -236,  -236,
+    1004,   -62,  -236,  -236,  -236,  2195,  2012,  -236,    37,  -236,
+    -236,    90,  2500,  1004,  -236,  1004,  1004,  -236,  1004,  2254,
+    -236,  -236,  1004,    39,  1004,   -45,   -45,   -45,   -45,  2535,
+    2535,  -236,   -50,   -45,   -45,   -45,   -45,   -50,   -40,   -40,
+    -236,  -236,    17,  1004,  1004,  1004,  1004,  1004,  1004,  1004,
+    1004,  1004,  1004,  1004,  1004,  1004,  1004,  1004,  1004,  1004,
+    1004,  2012,   105,  2012,  -236,    44,    45,    47,  1004,  2012,
+    2400,  2313,  -236,  -236,    48,  -236,  -236,  -236,  -236,  -236,
+    1515,  -236,  -236,  2012,  1004,   -19,  2487,  2487,  2487,    16,
+      18,    43,  -236,  2487,  -236,  2487,   -45,   -45,   -45,   -45,
+    2535,  2535,  -236,   -50,   -45,   -45,   -45,   -45,   -50,   -40,
+     -40,  -236,  -236,    17,  1453,  2073,  2012,  -236,  -236,  -236,
+     109,  1576,  -236,  2313,   -62,    50,  -236,  1644,  2487,  -236,
+    2134,    51,  2012,  -236,    96,  1004,    53,    54,  -236,  -236,
+    2313,  2012,  -236,  -236,  1705,  1004,  2437,  -236,  2012,   -24,
+    -236,  1767,    55,  2450,  2012,  2012,  -236,  2313,    64,  -236,
+    2012,  1829,  -236,  -236,  1890,    70,    71,  -236,  -236
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -813,59 +815,60 @@ static const yytype_int16 yypact[] =
 static const yytype_uint8 yydefact[] =
 {
        0,    24,    28,    31,    47,    56,    30,     0,    32,    60,
-      81,     0,    33,    35,     0,    39,    40,    42,    45,    81,
-      46,    48,    51,    54,    57,    55,     0,    43,    81,    60,
+      82,     0,    33,    35,     0,    39,    40,    42,    45,    82,
+      46,    48,    51,    54,    57,    55,     0,    43,    82,    60,
       26,    44,    41,    38,    25,    27,    49,    29,    36,    37,
       59,    53,    34,    58,    50,    60,     0,    52,     5,     0,
-       2,     3,     6,     7,     8,    81,     9,    64,    68,    69,
-      70,    65,    66,    67,     0,    79,    40,    46,    48,    52,
-      62,     0,    61,   117,   118,   120,   119,    32,    39,    41,
-       0,     0,     0,   180,   125,     0,     0,   139,   123,   124,
-     140,   141,   144,    82,     0,     0,    60,     0,     0,    82,
-       0,     0,   125,   127,     0,     0,     0,     0,     0,     0,
-      60,    80,     1,     4,     0,    82,    78,    99,     0,    88,
-      89,   121,   137,   138,    86,     0,   120,   119,     0,   125,
-       0,   131,   182,     0,   181,   180,    73,    74,    42,     0,
-       0,     0,     0,    26,    44,    38,     0,     0,    49,     0,
-       0,     0,     0,     0,     0,     0,     0,   142,   143,   162,
-      84,     0,     0,     0,     0,     0,     0,     0,    77,    72,
-      35,    25,    27,     0,     0,    97,    98,     0,    13,    75,
-      76,   101,   100,     0,    71,    63,    42,    92,     0,   136,
-       0,     0,   129,     0,     0,   130,   128,     0,     0,     0,
-     154,   155,   152,   153,   156,   157,   149,   159,   160,   161,
-     151,   150,   158,   145,   146,   147,   148,    83,     0,     0,
+       2,     3,     6,     7,     8,    82,     9,    64,    69,    70,
+      71,    65,    66,    67,    68,     0,    80,    40,    46,    48,
+      50,    52,    62,     0,    61,   120,   121,   123,   122,    32,
+      39,    41,     0,     0,     0,   183,   128,     0,     0,   142,
+     126,   127,   143,   144,   147,    83,     0,     0,    60,     0,
+       0,    83,     0,     0,   128,   130,     0,     0,     0,     0,
+       0,     0,     0,    60,    81,     1,     4,     0,    83,    79,
+     100,     0,    89,    90,   124,   140,   141,    87,     0,   123,
+     122,     0,   128,     0,   134,   185,     0,   184,   183,    74,
+      75,    42,     0,     0,     0,     0,    26,    44,    38,     0,
+       0,    49,     0,     0,     0,     0,     0,     0,     0,     0,
+     145,   146,   165,    85,     0,     0,     0,     0,     0,     0,
+       0,    78,    73,    35,    25,    27,     0,     0,    98,    99,
+       0,    13,    76,    77,   102,     0,   114,   101,     0,    72,
+      63,    42,    93,     0,   139,     0,     0,   132,     0,     0,
+     133,   131,     0,     0,     0,   157,   158,   155,   156,   159,
+     160,   152,   162,   163,   164,   154,   153,   161,   148,   149,
+     150,   151,    84,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   111,   102,   111,   126,
-       0,     0,     0,     0,   111,     0,     0,    17,    18,    11,
-      14,    15,   111,     0,     0,   135,   133,   134,     0,     0,
-       0,   132,   183,   122,    91,   172,   173,   170,   171,   174,
-     175,   167,   177,   178,   179,   169,   168,   176,   163,   164,
-     165,   166,    85,   115,   116,     0,   112,   113,     0,    10,
-      93,    94,    95,     0,     0,    96,    60,     0,    20,    90,
-      87,     0,     0,   114,   111,   104,     0,     0,     0,     0,
-      16,    21,   111,   106,   103,     0,     0,     0,   108,   111,
-       0,    22,     0,     0,     0,   111,    12,    19,     0,     0,
-     105,   111,     0,    23,   107,     0,     0,     0,   109,   110
+       0,   114,   103,   114,   129,     0,     0,     0,     0,   114,
+       0,     0,    17,    18,    11,    14,    15,   112,   118,   119,
+       0,   115,   116,   114,     0,     0,   138,   136,   137,     0,
+       0,     0,   135,   186,   125,    92,   175,   176,   173,   174,
+     177,   178,   170,   180,   181,   182,   172,   171,   179,   166,
+     167,   168,   169,    86,     0,     0,    10,    94,    95,    96,
+       0,     0,    97,    60,     0,     0,   117,    20,    91,    88,
+       0,     0,   114,   105,     0,     0,     0,     0,    16,   113,
+      21,   114,   107,   104,     0,     0,     0,   109,   114,     0,
+      22,     0,     0,     0,   114,    12,    19,     0,     0,   106,
+     114,     0,    23,   108,     0,     0,     0,   110,   111
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -262,  -262,  -262,   111,  -262,  -262,  -262,  -262,  -262,  -134,
-    -262,  -262,     0,   -23,  -262,     2,   118,  -262,   -12,   138,
-    -262,  -262,  -262,  -262,  -262,  -262,  -234,  -262,  -261,   -55,
-     -20,   -77,  -262,  -262,  -262,   -27,   -40,  -262,     9,  -262,
-      38,    56,    34,  -153
+    -236,  -236,  -236,   108,  -236,  -236,  -236,  -236,  -236,  -137,
+    -236,  -236,     0,   -27,  -236,     3,   -43,  -236,    -6,   144,
+    -236,  -236,  -236,  -236,  -236,  -236,  -236,  -233,  -236,  -235,
+     -53,   -20,   -99,  -236,  -236,  -236,   -23,   -44,  -236,    -1,
+    -236,   203,    56,    41,  -153
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    49,    50,    51,    52,    53,   248,   249,   250,   251,
-      54,   320,    84,    71,    72,   284,    57,    58,    85,    86,
-      59,   177,    60,    61,    62,    63,   285,   286,   287,    87,
-      88,   240,   104,    89,   130,   131,    90,    91,    92,   159,
-     132,   160,   133,   134
+       0,    49,    50,    51,    52,    53,   253,   254,   255,   256,
+      54,   329,    86,    73,    74,   259,    57,    58,    87,    88,
+      59,   180,    60,    61,    62,    63,    64,   260,   261,   262,
+      89,    90,   245,   106,    91,   133,   134,    92,    93,    94,
+     162,   135,   163,   136,   137
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -873,312 +876,326 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      55,   103,    56,   217,   289,   165,   108,    98,    64,    70,
-     294,    97,   246,   175,    96,   165,   106,   197,   298,   300,
-     112,   102,   109,   176,   303,   247,   105,   116,   303,    70,
-     135,   154,   155,   303,   193,   254,   117,   303,   157,   152,
-     153,   154,   155,   114,   157,    70,   110,    55,    93,    95,
-      55,   118,    56,   158,   303,    65,   135,    99,   190,   158,
-     157,   303,   191,   194,   157,   303,    93,   195,   327,   328,
-     315,   303,   136,   167,   303,   158,   100,   101,   322,   158,
-     137,   165,   282,   129,   146,   326,   192,   183,   121,   122,
-     123,   332,   168,   115,   241,   242,    70,   335,   169,   178,
-     173,   179,   180,   181,   151,   152,   153,   154,   155,   182,
-      70,   184,   196,   197,   199,   119,   120,   162,   185,   238,
-     125,   243,   252,   253,   263,   288,   139,   140,   141,   142,
-     163,   164,   161,   165,   290,   291,   146,   147,   166,   174,
-     292,   297,   193,   314,   316,   318,   319,   330,   334,   338,
-     239,   239,   239,   339,   149,   150,   151,   152,   153,   154,
-     155,   113,    55,   310,   237,   111,   107,   261,     0,   198,
-     102,   102,   102,     0,     0,   187,     0,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   260,     0,     0,     0,     0,     0,
-       0,   204,   205,   206,   209,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   245,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   255,   256,
-       0,   257,     0,     0,     0,   262,    55,   264,    55,     0,
-       0,     0,     0,     0,    55,     0,   296,     0,     0,     0,
-       0,     0,    55,     0,     0,     0,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   309,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,     0,     0,    55,     0,     0,    55,    55,
-     305,   299,     0,     0,    55,     0,    70,     0,    55,     0,
-       0,    55,     0,   313,    55,     0,     0,     0,     0,     0,
-       0,   321,    55,     0,     0,    55,     0,     0,     0,    55,
-       0,     0,    55,     0,     0,    55,    55,     0,   333,     0,
-       0,    55,    55,    73,     0,    55,     0,     0,    74,     0,
-       0,     1,   126,   127,     0,   317,     0,     2,     3,     4,
-       5,     6,     0,     0,   324,     8,     0,     0,     0,    12,
-      13,     0,    15,    66,    17,    18,     0,    67,    68,     0,
-      22,    23,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,    30,    31,    79,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,     0,
-       0,     0,     0,     0,     0,    69,     0,     0,     0,    80,
-      81,     0,     0,     0,    73,     0,    94,     0,    83,    74,
-     128,     0,     1,    75,    76,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    66,   138,    18,     0,    67,    68,
-       0,    22,    23,    24,    25,     0,    27,     0,     0,   139,
-     140,   141,   142,   143,   144,    79,   145,    34,    35,   146,
-     147,   148,    37,    38,    39,    40,    41,    42,    43,    44,
-       0,     0,     0,     0,     0,     0,    69,   149,   150,   151,
-     152,   153,   154,   155,     0,    73,   156,    94,     0,    83,
-      74,     0,     0,     1,    75,    76,     0,     0,     0,     2,
+      55,   105,   110,    56,   114,    65,   222,   168,   294,    72,
+     296,   251,   168,   100,    98,   149,   301,   168,   112,   138,
+     115,   104,   108,   198,   252,   306,   107,   102,   103,    72,
+     307,   155,   156,   157,   158,   154,   155,   156,   157,   158,
+     265,    99,   160,   157,   158,    72,   113,    55,   160,   117,
+      55,   161,    66,    56,   178,   121,   199,   161,   119,   306,
+     200,   306,   336,   337,   179,   160,   306,   138,   202,   160,
+     309,   170,   306,   120,   161,   246,   247,   139,   161,   324,
+     124,   125,   126,   140,   171,   132,   188,   293,   331,   306,
+     172,   181,   182,   183,   184,   335,   306,   187,    72,   189,
+     306,   341,   176,   204,   202,   197,   306,   344,   195,   306,
+     196,   243,   201,    72,   248,   223,   224,   225,   226,   227,
+     228,   190,   229,   263,   264,   230,   231,   232,   274,   295,
+     297,   298,   314,   299,   304,   198,   319,   323,   325,   327,
+     328,   339,   257,   233,   234,   235,   236,   237,   238,   239,
+     343,   315,   240,   244,   244,   244,   347,   348,   116,   142,
+     143,   144,   145,   166,   167,    55,   168,   318,   242,   149,
+     150,   169,   109,   104,   104,   104,   272,     0,   192,   203,
+       0,     0,     0,     0,     0,    55,    55,   152,   153,   154,
+     155,   156,   157,   158,     0,     0,   165,     0,     0,   271,
+       0,     0,     0,     0,     0,   142,   143,   144,   145,   166,
+     167,     0,   168,    95,    97,   149,   150,   169,     0,     0,
+       0,     0,   101,     0,     0,     0,     0,     0,     0,     0,
+       0,    95,     0,   152,   153,   154,   155,   156,   157,   158,
+       0,    55,     0,    55,     0,     0,     0,   111,     0,    55,
+       0,   303,     0,     0,     0,     0,     0,     0,   118,     0,
+      55,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   317,     0,     0,     0,
+       0,     0,   122,   123,     0,     0,     0,   128,     0,     0,
+       0,     0,     0,     0,    55,    55,    55,     0,   313,   164,
+       0,    55,     0,    72,     0,     0,   177,    55,     0,     0,
+      55,     0,    55,   322,     0,     0,     0,     0,     0,     0,
+     330,    55,     0,     0,    55,     0,     0,     0,    55,     0,
+       0,    55,     0,     0,    55,    55,     0,   342,     0,     0,
+      55,    55,     0,     0,    55,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,     0,     0,     0,     0,     0,     0,     0,   209,
+     210,   211,   214,     0,     0,     0,   185,     0,     0,     0,
+       0,     0,     0,   250,   142,   143,   144,   145,   166,   167,
+       0,   168,     0,     0,   149,   150,   169,     0,   266,   267,
+       0,   268,     0,     0,     0,   273,     0,   275,     0,     0,
+       0,     0,   152,   153,   154,   155,   156,   157,   158,     0,
+     186,     0,     0,     0,     0,     0,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,     0,    75,     0,     0,     0,     0,    76,
+       0,   300,     1,   129,   130,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,   308,     0,     0,
+      12,    13,     0,    15,    67,    17,    18,     0,    68,    69,
+       0,    22,    23,    24,    25,     0,    27,     0,     0,     0,
+       0,     0,     0,    30,    31,    81,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    70,
+       0,     0,     0,     0,     0,     0,    71,     0,   326,     0,
+      82,    83,     0,     0,     0,    75,     0,    96,   333,    85,
+      76,   131,     0,     1,    77,    78,     0,     0,     0,     2,
        3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,   170,     0,    15,    66,    17,    18,     0,    67,
-      68,     0,    22,    23,    24,    25,     0,    27,     0,     0,
-     139,   140,   141,   142,   143,   144,    79,   145,   171,   172,
-     146,   147,   148,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,     0,     0,     0,     0,    69,   149,   150,
-     151,   152,   153,   154,   155,     0,    73,   156,    94,     0,
-      83,    74,     0,     0,     1,    75,    76,     0,     0,     0,
+       0,    12,    13,     0,    15,    67,   141,    18,     0,    68,
+      69,     0,    22,    23,    24,    25,     0,    27,     0,     0,
+     142,   143,   144,   145,   146,   147,    81,   148,    34,    35,
+     149,   150,   151,    37,    38,    39,    40,    41,    42,    43,
+      70,     0,     0,     0,     0,     0,     0,    71,   152,   153,
+     154,   155,   156,   157,   158,     0,    75,   159,    96,     0,
+      85,    76,     0,     0,     1,    77,    78,     0,     0,     0,
        2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,   139,   140,   141,   142,   143,   144,    79,   145,    34,
-      35,   146,   147,   148,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     0,     0,     0,     0,    69,   149,
-     150,   151,   152,   153,   154,   155,     0,    73,   156,    94,
-       0,    83,    74,     0,     0,     1,    75,    76,     0,     0,
+       0,     0,    12,   173,     0,    15,    67,    17,    18,     0,
+      68,    69,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,   142,   143,   144,   145,   146,   147,    81,   148,   174,
+     175,   149,   150,   151,    37,    38,    39,    40,    41,    42,
+      43,    70,     0,     0,     0,     0,     0,     0,    71,   152,
+     153,   154,   155,   156,   157,   158,     0,    75,   159,    96,
+       0,    85,    76,     0,     0,     1,    77,    78,     0,     0,
        0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    66,   186,    18,
-       0,    67,    68,     0,    22,    23,    24,    25,     0,    27,
-       0,     0,   139,   140,   141,   142,   143,   144,    79,   145,
-      34,    35,   146,   147,   148,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     0,     0,     0,     0,    69,
-     149,   150,   151,   152,   153,   154,   155,     0,    73,     0,
-      94,     0,    83,    74,     0,     0,     1,    75,    76,     0,
+       0,     0,     0,    12,    13,     0,    15,    67,    17,    18,
+       0,    68,    69,     0,    22,    23,    24,    25,     0,    27,
+       0,     0,   142,   143,   144,   145,   146,   147,    81,   148,
+      34,    35,   149,   150,   151,    37,    38,    39,    40,    41,
+      42,    43,    70,     0,     0,     0,     0,     0,     0,    71,
+     152,   153,   154,   155,   156,   157,   158,     0,    75,   159,
+      96,     0,    85,    76,     0,     0,     1,    77,    78,     0,
        0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    66,    17,
-      18,     0,    67,    68,     0,    22,    23,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,    30,    31,    79,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,     0,     0,     0,     0,
-      69,     0,     0,     0,    80,    81,     0,     0,     0,    73,
-       0,    94,   124,    83,    74,     0,     0,     1,    75,    76,
+       8,     0,     0,     0,    12,    13,     0,    15,    67,   191,
+      18,     0,    68,    69,     0,    22,    23,    24,    25,     0,
+      27,     0,     0,   142,   143,   144,   145,   146,   147,    81,
+     148,    34,    35,   149,   150,   151,    37,    38,    39,    40,
+      41,    42,    43,    70,     0,     0,     0,     0,     0,     0,
+      71,   152,   153,   154,   155,   156,   157,   158,     0,    75,
+       0,    96,     0,    85,    76,     0,     0,     1,    77,    78,
        0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
-       0,    77,     0,     0,     0,    12,    13,     0,    78,    66,
-      17,    18,     0,    67,    68,     0,    22,    23,    24,    25,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    67,
+      17,    18,     0,    68,    69,     0,    22,    23,    24,    25,
        0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
-      79,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,     0,     0,     0,     0,     0,
-       0,    69,     0,     0,     0,    80,    81,     0,    73,     0,
-       0,     0,    82,    74,    83,     0,     1,    75,    76,     0,
+      81,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    70,     0,     0,     0,     0,     0,
+       0,    71,     0,     0,     0,    82,    83,     0,     0,     0,
+      75,     0,    96,   127,    85,    76,     0,     0,     1,    77,
+      78,     0,     0,     0,     2,     3,     4,     5,     6,     0,
+       0,     0,    79,     0,     0,     0,    12,    13,     0,    80,
+      67,    17,    18,     0,    68,    69,     0,    22,    23,    24,
+      25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
+      31,    81,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    70,     0,     0,     0,     0,
+       0,     0,    71,     0,     0,     0,    82,    83,     0,    75,
+       0,     0,     0,    84,    76,    85,     0,     1,    77,    78,
+       0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    67,
+      17,    18,     0,    68,    69,     0,    22,    23,    24,    25,
+       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
+      81,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    70,     0,     0,     0,     0,     0,
+       0,    71,     0,     0,     0,    82,    83,     0,    75,     0,
+       0,     0,    96,    76,    85,     0,     1,    77,    78,     0,
        0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    66,    17,
-      18,     0,    67,    68,     0,    22,    23,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,    30,    31,    79,
+       8,     0,     0,     0,    12,    13,     0,    15,    67,    17,
+      18,     0,    68,    69,     0,    22,    23,    24,    25,     0,
+      27,     0,     0,     0,     0,     0,     0,    30,    31,    81,
       33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,     0,     0,     0,     0,     0,     0,
-      69,     0,     0,     0,    80,    81,     0,    73,     0,     0,
-       0,    94,    74,    83,     0,     1,    75,    76,     0,     0,
+      41,    42,    43,    70,     0,     0,     0,     0,     0,     0,
+      71,     0,     0,     0,    82,    83,     0,    75,     0,     0,
+       0,    84,    76,    85,     0,     1,    77,    78,     0,     0,
        0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    66,    17,    18,
-       0,    67,    68,     0,    22,    23,    24,    25,     0,    27,
-       0,     0,     0,     0,     0,     0,    30,    31,    79,    33,
+       0,     0,     0,    12,    13,     0,    15,    67,    17,    18,
+       0,    68,    69,     0,    22,    23,    24,    25,     0,    27,
+       0,     0,     0,     0,     0,     0,     0,     0,    81,    33,
       34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     0,     0,     0,     0,     0,    69,
-       0,     0,     0,    80,    81,     0,    73,     0,     0,     0,
-      82,    74,    83,     0,     1,    75,    76,     0,     0,     0,
+      42,    43,    70,     0,     0,     0,     0,     0,     0,    71,
+       0,     0,     0,    82,    83,     0,    75,     0,     0,     0,
+      96,    76,    85,     0,     1,    77,    78,     0,     0,     0,
        2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,     0,     0,    79,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,     0,     0,     0,     0,     0,     0,    69,     0,
-       0,     0,    80,    81,     0,    73,     0,     0,     0,    94,
-      74,    83,     0,     1,    75,    76,     0,     0,     0,     2,
+       0,     0,    12,    13,     0,    15,    67,    17,    18,     0,
+      68,    69,     0,    22,    23,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,     0,     0,    81,    33,    34,
+      35,     0,     0,     0,    37,    38,    39,    40,    41,    42,
+      43,    70,     0,     0,     0,     0,     0,     0,    71,     0,
+       0,     0,    82,    83,     0,    75,     0,     0,     0,    96,
+      76,    85,     0,     1,    77,    78,     0,     0,     0,     2,
        3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    66,    17,    18,     0,    67,
-      68,     0,    22,    23,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,     0,     0,    79,    33,    34,    35,
+       0,    12,    13,     0,    15,    67,    17,    18,     0,    68,
+      69,     0,    22,    23,    24,    25,     0,    27,     0,     0,
+       0,     0,     0,     0,     0,     0,    81,     0,    34,    35,
        0,     0,     0,    37,    38,    39,    40,    41,    42,    43,
-      44,     0,     0,     0,     0,     0,     0,    69,     0,     0,
-       0,    80,    81,     0,    73,     0,     0,     0,    94,    74,
-      83,     0,     1,    75,    76,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    66,    17,    18,     0,    67,    68,
-       0,    22,    23,    24,    25,     0,    27,     0,     0,     0,
-       0,     0,     0,     0,     0,    79,     0,    34,    35,     0,
-       0,     0,    37,    38,    39,    40,    41,    42,    43,    44,
-       0,     0,     0,     0,     0,     0,    69,     0,     0,     0,
-       0,     0,     0,     0,     1,     0,     0,    94,     0,    83,
-       2,     3,     4,     5,     6,     0,     0,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,    26,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,     0,     1,     0,     0,    47,     0,
-       0,     2,     3,     4,     5,     6,   301,    48,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,   302,     1,     0,    47,
-       0,     0,     0,     2,     3,     4,     5,     6,   283,     0,
-       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     0,     0,   308,
-       0,    47,     0,     0,     0,     1,     0,     0,   311,     0,
-     283,     2,     3,     4,     5,     6,     0,     0,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      70,     0,     0,     0,     0,     0,     0,    71,     0,     0,
+       0,     0,     0,     0,     0,     1,     0,     0,    96,     0,
+      85,     2,     3,     4,     5,     6,     0,     0,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,    26,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
-       0,     0,     2,     3,     4,     5,     6,     0,   283,     7,
+      42,    43,    44,    45,    46,     0,     1,     0,     0,    47,
+       0,     0,     2,     3,     4,     5,     6,   310,    48,     7,
        8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
       18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
       27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
       33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     0,     0,   323,     1,     0,
-      47,     0,     0,     0,     2,     3,     4,     5,     6,   283,
+      41,    42,    43,    44,    45,     0,     0,   311,     1,     0,
+      47,     0,     0,     0,     2,     3,     4,     5,     6,   258,
        0,     7,     8,     9,    10,    11,    12,    13,     0,    15,
       16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
       25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,     0,     0,   329,
+      39,    40,    41,    42,    43,    44,    45,     0,     0,     1,
+       0,   305,    47,     0,     0,     2,     3,     4,     5,     6,
+       0,   258,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
+       0,   316,     0,    47,     0,     0,     0,     1,     0,     0,
+     320,     0,   258,     2,     3,     4,     5,     6,     0,     0,
+       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
+      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
+       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     0,     1,     0,
+       0,    47,     0,     0,     2,     3,     4,     5,     6,     0,
+     258,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,     0,     0,   332,
        1,     0,    47,     0,     0,     0,     2,     3,     4,     5,
-       6,   283,     0,     7,     8,     9,    10,    11,    12,    13,
+       6,   258,     0,     7,     8,     9,    10,    11,    12,    13,
        0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
       23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
        0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
-       0,     1,   336,     0,    47,     0,     0,     2,     3,     4,
-       5,     6,     0,   283,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-       0,     0,     1,   337,     0,    47,     0,     0,     2,     3,
-       4,     5,     6,     0,   283,     7,     8,     9,    10,    11,
+       0,   338,     1,     0,    47,     0,     0,     0,     2,     3,
+       4,     5,     6,   258,     0,     7,     8,     9,    10,    11,
       12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
        0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
        0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
        0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,     0,     0,     1,     0,     0,    47,     0,     0,     2,
-       3,     4,     5,     6,     0,   236,     7,     8,     9,    10,
+      45,     0,     0,     1,   345,     0,    47,     0,     0,     2,
+       3,     4,     5,     6,     0,   258,     7,     8,     9,    10,
       11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
       21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
        0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
        0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,     0,     0,     1,     0,     0,    47,     0,     0,
-       2,     3,     4,     5,     6,     0,   283,     7,     8,     9,
+      44,    45,     0,     0,     1,   346,     0,    47,     0,     0,
+       2,     3,     4,     5,     6,     0,   258,     7,     8,     9,
       10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
       20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
       29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
       35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,     0,     0,     1,     0,     0,    47,     0,
-       0,     2,     3,     4,     5,     6,     0,   304,     7,     8,
+       0,     2,     3,     4,     5,     6,     0,   241,     7,     8,
        9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
       19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
-       0,     0,     2,     3,     4,     5,     6,     0,   312,     7,
-       8,     9,    10,     0,    12,    13,     0,    15,    16,    17,
-      18,    19,    67,    21,     0,    22,    23,    24,    25,     0,
+       0,     0,     2,     3,     4,     5,     6,     0,   258,     7,
+       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
+      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
       27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
       33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     1,   258,   259,     0,     0,
-      47,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    66,    17,    18,
-       0,    67,    68,     0,    22,    23,    24,    25,     0,    27,
-       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,     0,     1,     0,     0,     0,     0,    69,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    66,    17,    18,     0,
-      67,    68,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,     0,     0,   306,     0,    30,    31,    32,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,   307,     0,     0,     0,     0,     0,    69,     0,
-     139,   140,   141,   142,   163,   164,     0,   165,     0,     0,
-     146,   147,   166,   139,   140,   141,   142,   163,   164,     0,
-     165,     0,     0,   146,   147,   166,     0,     0,   149,   150,
-     151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
-       0,   149,   150,   151,   152,   153,   154,   155,     0,     0,
-     188,     0,   189,   139,   140,   141,   142,   163,   164,     0,
-     165,     0,     0,   146,   147,   166,   218,   219,   220,   221,
-     222,   223,     0,   224,     0,     0,   225,   226,   227,     0,
-       0,   149,   150,   151,   152,   153,   154,   155,     0,     0,
-       0,     0,   189,     0,   228,   229,   230,   231,   232,   233,
-     234,     0,     0,   235,   139,   140,   141,   142,   163,   164,
-       0,   165,     0,     0,   146,   147,   166,   139,   140,   141,
-     142,   163,   164,     0,   165,     0,     0,   146,   147,   166,
-       0,     0,   149,   150,   151,   152,   153,   154,   155,     0,
-     244,     0,     0,     0,     0,   149,   150,   151,   152,   153,
-     154,   155,     0,   295,   139,   140,   141,   142,   163,   164,
-       0,   165,     0,     0,   146,   147,   166,   139,   140,   141,
-     142,   163,   164,     0,   165,     0,     0,   146,   147,   166,
-       0,     0,   149,   150,   151,   152,   153,   154,   155,     0,
-     325,     0,     0,     0,     0,   149,   150,   151,   152,   153,
-     154,   155,     0,   331,   139,   140,   141,   142,   163,   164,
-       0,   165,     0,     0,   146,   147,   166,   218,   219,   220,
-     221,   222,   223,     0,   224,     0,     0,   225,   226,   227,
-       0,     0,   149,   150,   151,   152,   153,   154,   155,     0,
-       0,     0,     0,     0,     0,   228,   229,   230,   231,   232,
-     233,   234,   139,   140,   141,   142,     0,     0,     0,   165,
-       0,     0,   146,   147,   166,     0,     0,     0,     0,     0,
+      41,    42,    43,    44,    45,     0,     0,     1,     0,     0,
+      47,     0,     0,     2,     3,     4,     5,     6,     0,   312,
+       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
+      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
+       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     0,     1,     0,
+       0,    47,     0,     0,     2,     3,     4,     5,     6,     0,
+     321,     7,     8,     9,    10,     0,    12,    13,     0,    15,
+      16,    17,    18,    19,    68,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    70,    45,     1,   269,   270,
+       0,     0,    47,     2,     3,     4,     5,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    67,
+      17,    18,     0,    68,    69,     0,    22,    23,    24,    25,
+       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    70,     0,     1,     0,     0,     0,
+       0,    71,     2,     3,     4,     5,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,    13,     0,    15,    67,    17,
+      18,     0,    68,    69,     0,    22,    23,    24,    25,     0,
+      27,     0,     0,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    70,   142,   143,   144,   145,   166,   167,
+      71,   168,     0,     0,   149,   150,   169,   142,   143,   144,
+     145,   166,   167,     0,   168,     0,     0,   149,   150,   169,
+       0,     0,   152,   153,   154,   155,   156,   157,   158,     0,
+       0,   193,     0,   194,     0,   152,   153,   154,   155,   156,
+     157,   158,     0,     0,     0,     0,   194,   142,   143,   144,
+     145,   166,   167,     0,   168,     0,     0,   149,   150,   169,
+     142,   143,   144,   145,   166,   167,     0,   168,     0,     0,
+     149,   150,   169,     0,     0,   152,   153,   154,   155,   156,
+     157,   158,     0,   249,     0,     0,     0,     0,   152,   153,
+     154,   155,   156,   157,   158,     0,   302,   142,   143,   144,
+     145,   166,   167,     0,   168,     0,     0,   149,   150,   169,
+     142,   143,   144,   145,   166,   167,     0,   168,     0,     0,
+     149,   150,   169,     0,     0,   152,   153,   154,   155,   156,
+     157,   158,     0,   334,     0,     0,     0,     0,   152,   153,
+     154,   155,   156,   157,   158,     0,   340,   142,   143,   144,
+     145,   166,   167,     0,   168,     0,     0,   149,   150,   169,
+     223,   224,   225,   226,   227,   228,     0,   229,     0,     0,
+     230,   231,   232,     0,     0,   152,   153,   154,   155,   156,
+     157,   158,     0,     0,     0,     0,     0,     0,   233,   234,
+     235,   236,   237,   238,   239,   142,   143,   144,   145,     0,
+       0,     0,   168,     0,     0,   149,   150,   169,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     149,   150,   151,   152,   153,   154,   155
+       0,     0,     0,   152,   153,   154,   155,   156,   157,   158
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    21,     0,   156,   238,    57,    29,    19,    39,     9,
-     244,    39,    73,    42,    14,    57,    28,    87,   252,    89,
-       0,    21,    45,    52,   285,    86,    26,    86,   289,    29,
-      88,    83,    84,   294,    92,   188,    86,   298,    93,    81,
-      82,    83,    84,    55,    99,    45,    46,    47,    10,    11,
-      50,    87,    50,    93,   315,    86,    88,    19,    92,    99,
-     115,   322,    92,    87,   119,   326,    28,    91,    86,    87,
-     304,   332,    86,    96,   335,   115,    44,    45,   312,   119,
-      86,    57,   235,    83,    60,   319,    91,   110,    79,    80,
-      81,   325,    86,    55,   171,   172,    96,   331,    86,    86,
-     100,    86,    86,    86,    80,    81,    82,    83,    84,    86,
-     110,    86,    91,    87,    34,    77,    78,    41,   118,    86,
-      82,    52,    86,    34,    89,    24,    50,    51,    52,    53,
-      54,    55,    94,    57,    86,    86,    60,    61,    62,   101,
-      86,    86,    92,    86,    42,    86,    86,    86,    86,    86,
-     170,   171,   172,    86,    78,    79,    80,    81,    82,    83,
-      84,    50,   162,   297,   162,    47,    28,   194,    -1,   135,
-     170,   171,   172,    -1,    -1,   119,    -1,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   194,    -1,    -1,    -1,    -1,    -1,
-      -1,   163,   164,   165,   166,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   177,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   190,   191,
-      -1,   193,    -1,    -1,    -1,   197,   236,   199,   238,    -1,
-      -1,    -1,    -1,    -1,   244,    -1,   246,    -1,    -1,    -1,
-      -1,    -1,   252,    -1,    -1,    -1,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   296,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   243,    -1,    -1,    -1,   285,    -1,    -1,   288,   289,
-     288,   253,    -1,    -1,   294,    -1,   296,    -1,   298,    -1,
-      -1,   301,    -1,   301,   304,    -1,    -1,    -1,    -1,    -1,
-      -1,   311,   312,    -1,    -1,   315,    -1,    -1,    -1,   319,
-      -1,    -1,   322,    -1,    -1,   325,   326,    -1,   328,    -1,
-      -1,   331,   332,     5,    -1,   335,    -1,    -1,    10,    -1,
-      -1,    13,    14,    15,    -1,   307,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,   316,    27,    -1,    -1,    -1,    31,
-      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
-      82,    -1,    -1,    -1,     5,    -1,    88,    -1,    90,    10,
-      92,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+       0,    21,    29,     0,    47,    39,   159,    57,   241,     9,
+     243,    73,    57,    19,    14,    60,   249,    57,    45,    88,
+       0,    21,    28,    92,    86,   260,    26,    44,    45,    29,
+     263,    81,    82,    83,    84,    80,    81,    82,    83,    84,
+     193,    39,    95,    83,    84,    45,    46,    47,   101,    55,
+      50,    95,    86,    50,    42,    87,    87,   101,    86,   294,
+      91,   296,    86,    87,    52,   118,   301,    88,    87,   122,
+      89,    98,   307,    86,   118,   174,   175,    86,   122,   312,
+      81,    82,    83,    86,    86,    85,   113,   240,   321,   324,
+      86,    86,    86,    86,    86,   328,   331,    86,    98,    86,
+     335,   334,   102,    34,    87,    91,   341,   340,    92,   344,
+      92,    86,    91,   113,    52,    50,    51,    52,    53,    54,
+      55,   121,    57,    86,    34,    60,    61,    62,    89,    24,
+      86,    86,    23,    86,    86,    92,    86,    86,    42,    86,
+      86,    86,   185,    78,    79,    80,    81,    82,    83,    84,
+      86,    42,    87,   173,   174,   175,    86,    86,    50,    50,
+      51,    52,    53,    54,    55,   165,    57,   304,   165,    60,
+      61,    62,    28,   173,   174,   175,   199,    -1,   122,   138,
+      -1,    -1,    -1,    -1,    -1,   185,   186,    78,    79,    80,
+      81,    82,    83,    84,    -1,    -1,    41,    -1,    -1,   199,
+      -1,    -1,    -1,    -1,    -1,    50,    51,    52,    53,    54,
+      55,    -1,    57,    10,    11,    60,    61,    62,    -1,    -1,
+      -1,    -1,    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    28,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,   241,    -1,   243,    -1,    -1,    -1,    44,    -1,   249,
+      -1,   251,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,
+     260,    -1,    -1,   263,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   303,    -1,    -1,    -1,
+      -1,    -1,    79,    80,    -1,    -1,    -1,    84,    -1,    -1,
+      -1,    -1,    -1,    -1,   294,   295,   296,    -1,   295,    96,
+      -1,   301,    -1,   303,    -1,    -1,   103,   307,    -1,    -1,
+     310,    -1,   312,   310,    -1,    -1,    -1,    -1,    -1,    -1,
+     320,   321,    -1,    -1,   324,    -1,    -1,    -1,   328,    -1,
+      -1,   331,    -1,    -1,   334,   335,    -1,   337,    -1,    -1,
+     340,   341,    -1,    -1,   344,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   166,
+     167,   168,   169,    -1,    -1,    -1,    42,    -1,    -1,    -1,
+      -1,    -1,    -1,   180,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    -1,   195,   196,
+      -1,   198,    -1,    -1,    -1,   202,    -1,   204,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      86,    -1,    -1,    -1,    -1,    -1,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,    -1,     5,    -1,    -1,    -1,    -1,    10,
+      -1,   248,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,   264,    -1,    -1,
       31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,     5,    87,    88,    -1,    90,
-      10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
+      -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,   315,    -1,
+      81,    82,    -1,    -1,    -1,     5,    -1,    88,   325,    90,
+      10,    92,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
       20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
       -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
       40,    -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,
@@ -1201,16 +1218,32 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    79,    80,    81,    82,    83,    84,    -1,     5,    -1,
+      78,    79,    80,    81,    82,    83,    84,    -1,     5,    87,
       88,    -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,
       -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
       27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
       37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      47,    -1,    -1,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,     5,
-      -1,    88,    89,    90,    10,    -1,    -1,    13,    14,    15,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,     5,
+      -1,    88,    -1,    90,    10,    -1,    -1,    13,    14,    15,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,
+       5,    -1,    88,    89,    90,    10,    -1,    -1,    13,    14,
+      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,
+      -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,    15,
       -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
       -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
       36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
@@ -1230,7 +1263,7 @@ static const yytype_int16 yycheck[] =
       -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
       -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
       -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
       58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
       -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,
@@ -1239,51 +1272,24 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
       39,    40,    -1,    42,    43,    44,    45,    -1,    47,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      59,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
       69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
       -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,
       10,    90,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
       20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
       -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
       40,    -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    58,    59,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,    58,    59,
       -1,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
       70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
-      -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,    10,
-      90,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    56,    -1,    58,    59,    -1,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    13,    -1,    -1,    88,    -1,    90,
-      19,    20,    21,    22,    23,    -1,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    46,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    -1,    13,    -1,    -1,    77,    -1,
-      -1,    19,    20,    21,    22,    23,    24,    86,    26,    27,
-      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    88,    -1,
+      90,    19,    20,    21,    22,    23,    -1,    -1,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    46,    47,
       48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
       58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    74,    13,    -1,    77,
-      -1,    -1,    -1,    19,    20,    21,    22,    23,    86,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    75,
-      -1,    77,    -1,    -1,    -1,    13,    -1,    -1,    16,    -1,
-      86,    19,    20,    21,    22,    23,    -1,    -1,    26,    27,
-      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
-      -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
+      68,    69,    70,    71,    72,    -1,    13,    -1,    -1,    77,
+      -1,    -1,    19,    20,    21,    22,    23,    24,    86,    26,
       27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
       47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
@@ -1294,6 +1300,25 @@ static const yytype_int16 yycheck[] =
       35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
       45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
+      -1,    76,    77,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      -1,    75,    -1,    77,    -1,    -1,    -1,    13,    -1,    -1,
+      16,    -1,    86,    19,    20,    21,    22,    23,    -1,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
+      -1,    77,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      86,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
       13,    -1,    77,    -1,    -1,    -1,    19,    20,    21,    22,
       23,    86,    -1,    26,    27,    28,    29,    30,    31,    32,
@@ -1301,25 +1326,19 @@ static const yytype_int16 yycheck[] =
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    13,    75,    -1,    77,    -1,    -1,    19,    20,    21,
-      22,    23,    -1,    86,    26,    27,    28,    29,    30,    31,
-      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    13,    75,    -1,    77,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    86,    26,    27,    28,    29,    30,
+      -1,    74,    13,    -1,    77,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    86,    -1,    26,    27,    28,    29,    30,
       31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
       -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
       -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
       -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,
+      71,    -1,    -1,    13,    75,    -1,    77,    -1,    -1,    19,
       20,    21,    22,    23,    -1,    86,    26,    27,    28,    29,
       30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
       40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
       -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,
+      70,    71,    -1,    -1,    13,    75,    -1,    77,    -1,    -1,
       19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
       29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
       39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
@@ -1333,52 +1352,58 @@ static const yytype_int16 yycheck[] =
       58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
       -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
-      27,    28,    29,    -1,    31,    32,    -1,    34,    35,    36,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
       47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
       57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    13,    14,    15,    -1,    -1,
-      77,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
-      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    13,    -1,    -1,    -1,    -1,    77,
-      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
-      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    -1,
-      -1,    -1,    -1,    23,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    42,    -1,    -1,    -1,    -1,    -1,    77,    -1,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      87,    -1,    89,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    89,    -1,    78,    79,    80,    81,    82,    83,
-      84,    -1,    -1,    87,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
+      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
+      77,    -1,    -1,    19,    20,    21,    22,    23,    -1,    86,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
+      -1,    77,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      86,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
+      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    13,    14,    15,
+      -1,    -1,    77,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    13,    -1,    -1,    -1,
+      -1,    77,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    50,    51,    52,    53,    54,    55,
+      77,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
       53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
       -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    86,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
+      -1,    87,    -1,    89,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    -1,    -1,    -1,    89,    50,    51,    52,
       53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    86,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    86,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    -1,    86,    50,    51,    52,
       53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    50,    51,    52,    53,    -1,    -1,    -1,    57,
-      -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    86,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    -1,    86,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    50,    51,    52,    53,    -1,
+      -1,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    84
+      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1391,34 +1416,35 @@ static const yytype_uint8 yystos[] =
       54,    55,    56,    57,    58,    59,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    77,    86,    94,
       95,    96,    97,    98,   103,   105,   108,   109,   110,   113,
-     115,   116,   117,   118,    39,    86,    35,    39,    40,    77,
-     105,   106,   107,     5,    10,    14,    15,    27,    34,    56,
-      81,    82,    88,    90,   105,   111,   112,   122,   123,   126,
-     129,   130,   131,   133,    88,   133,   105,    39,   111,   133,
-      44,    45,   105,   123,   125,   105,   111,   112,   106,   106,
-     105,   109,     0,    96,   111,   133,    86,    86,    87,   133,
-     133,   131,   131,   131,    89,   133,    14,    15,    92,   105,
-     127,   128,   133,   135,   136,    88,    86,    86,    36,    50,
-      51,    52,    53,    54,    55,    57,    60,    61,    62,    78,
-      79,    80,    81,    82,    83,    84,    87,   122,   129,   132,
-     134,   133,    41,    54,    55,    57,    62,   106,    86,    86,
-      32,    58,    59,   105,   133,    42,    52,   114,    86,    86,
-      86,    86,    86,   106,    86,   105,    36,   134,    87,    89,
-      92,    92,    91,    92,    87,    91,    91,    87,   135,    34,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   136,    50,    51,
-      52,    53,    54,    55,    57,    60,    61,    62,    78,    79,
-      80,    81,    82,    83,    84,    87,    86,   108,    86,   123,
-     124,   124,   124,    52,    86,   133,    73,    86,    99,   100,
-     101,   102,    86,    34,   136,   133,   133,   133,    14,    15,
-     105,   128,   133,    89,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   136,    86,   108,   119,   120,   121,    24,   119,
-      86,    86,    86,   133,   119,    86,   105,    86,   119,   133,
-      89,    24,    74,   121,    86,   108,    23,    42,    75,   106,
-     102,    16,    86,   108,    86,   119,    42,   133,    86,    86,
-     104,   105,   119,    74,   133,    86,   119,    86,    87,    74,
-      86,    86,   119,   105,    86,   119,    75,    75,    86,    86
+     115,   116,   117,   118,   119,    39,    86,    35,    39,    40,
+      70,    77,   105,   106,   107,     5,    10,    14,    15,    27,
+      34,    56,    81,    82,    88,    90,   105,   111,   112,   123,
+     124,   127,   130,   131,   132,   134,    88,   134,   105,    39,
+     111,   134,    44,    45,   105,   124,   126,   105,   111,   112,
+     106,   134,   106,   105,   109,     0,    96,   111,   134,    86,
+      86,    87,   134,   134,   132,   132,   132,    89,   134,    14,
+      15,    92,   105,   128,   129,   134,   136,   137,    88,    86,
+      86,    36,    50,    51,    52,    53,    54,    55,    57,    60,
+      61,    62,    78,    79,    80,    81,    82,    83,    84,    87,
+     123,   130,   133,   135,   134,    41,    54,    55,    57,    62,
+     106,    86,    86,    32,    58,    59,   105,   134,    42,    52,
+     114,    86,    86,    86,    86,    42,    86,    86,   106,    86,
+     105,    36,   135,    87,    89,    92,    92,    91,    92,    87,
+      91,    91,    87,   136,    34,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   137,    50,    51,    52,    53,    54,    55,    57,
+      60,    61,    62,    78,    79,    80,    81,    82,    83,    84,
+      87,    86,   108,    86,   124,   125,   125,   125,    52,    86,
+     134,    73,    86,    99,   100,   101,   102,   109,    86,   108,
+     120,   121,   122,    86,    34,   137,   134,   134,   134,    14,
+      15,   105,   129,   134,    89,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   137,   120,    24,   120,    86,    86,    86,
+     134,   120,    86,   105,    86,    76,   122,   120,   134,    89,
+      24,    74,    86,   108,    23,    42,    75,   106,   102,    86,
+      16,    86,   108,    86,   120,    42,   134,    86,    86,   104,
+     105,   120,    74,   134,    86,   120,    86,    87,    74,    86,
+      86,   120,   105,    86,   120,    75,    75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1430,19 +1456,19 @@ static const yytype_uint8 yyr1[] =
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     106,   106,   107,   107,   108,   108,   108,   108,   109,   109,
-     109,   110,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   111,   111,   111,   111,   111,   111,   111,   112,   112,
-     112,   112,   112,   113,   113,   113,   113,   114,   114,   115,
-     115,   115,   116,   116,   117,   117,   117,   117,   118,   118,
-     118,   119,   119,   120,   120,   121,   121,   122,   122,   122,
-     122,   122,   122,   122,   122,   123,   124,   125,   126,   126,
-     126,   127,   127,   128,   128,   128,   129,   130,   130,   131,
-     131,   131,   132,   132,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   134,   134,   134,   134,   134,   134,   134,   134,
+     106,   106,   107,   107,   108,   108,   108,   108,   108,   109,
+     109,   109,   110,   110,   110,   110,   110,   110,   110,   110,
+     110,   110,   111,   111,   111,   111,   111,   111,   111,   112,
+     112,   112,   112,   112,   113,   113,   113,   113,   114,   114,
+     115,   115,   115,   116,   116,   117,   117,   117,   117,   118,
+     118,   118,   119,   119,   120,   120,   121,   121,   122,   122,
+     123,   123,   123,   123,   123,   123,   123,   123,   124,   125,
+     126,   127,   127,   127,   128,   128,   129,   129,   129,   130,
+     131,   131,   132,   132,   132,   133,   133,   134,   134,   134,
      134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     135,   135,   136,   136
+     134,   134,   134,   134,   134,   135,   135,   135,   135,   135,
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   135,   135,   136,   136,   137,   137
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1455,18 +1481,18 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     3,     3,     3,     3,     3,     3,     3,     3,     2,
-       2,     0,     1,     3,     2,     4,     2,     5,     2,     2,
-       5,     4,     3,     5,     5,     5,     5,     1,     1,     3,
-       3,     3,     4,     7,     6,     9,     7,    10,     7,    11,
-      12,     0,     1,     1,     2,     1,     1,     1,     1,     1,
-       1,     2,     4,     1,     1,     1,     1,     1,     3,     3,
-       3,     1,     3,     3,     3,     3,     3,     2,     2,     1,
-       1,     1,     1,     1,     1,     3,     3,     3,     3,     3,
+       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       2,     2,     0,     1,     3,     2,     4,     2,     5,     2,
+       2,     5,     4,     3,     5,     5,     5,     5,     1,     1,
+       3,     3,     3,     4,     7,     6,     9,     7,    10,     7,
+      11,    12,     4,     6,     0,     1,     1,     2,     1,     1,
+       1,     1,     1,     1,     2,     4,     1,     1,     1,     1,
+       1,     3,     3,     3,     1,     3,     3,     3,     3,     3,
+       2,     2,     1,     1,     1,     1,     1,     1,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     1,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     1,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       0,     1,     1,     3
+       3,     3,     3,     0,     1,     1,     3
 };
 
 
@@ -1740,49 +1766,49 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1744 "engines/director/lingo/lingo-gr.cpp"
+#line 1770 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1750 "engines/director/lingo/lingo-gr.cpp"
+#line 1776 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1756 "engines/director/lingo/lingo-gr.cpp"
+#line 1782 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1762 "engines/director/lingo/lingo-gr.cpp"
+#line 1788 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1768 "engines/director/lingo/lingo-gr.cpp"
+#line 1794 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1774 "engines/director/lingo/lingo-gr.cpp"
+#line 1800 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1780 "engines/director/lingo/lingo-gr.cpp"
+#line 1806 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1786 "engines/director/lingo/lingo-gr.cpp"
+#line 1812 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2050,7 +2076,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 196 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2054 "engines/director/lingo/lingo-gr.cpp"
+#line 2080 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2061,7 +2087,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2065 "engines/director/lingo/lingo-gr.cpp"
+#line 2091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2071,37 +2097,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2075 "engines/director/lingo/lingo-gr.cpp"
+#line 2101 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 211 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2081 "engines/director/lingo/lingo-gr.cpp"
+#line 2107 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2087 "engines/director/lingo/lingo-gr.cpp"
+#line 2113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2093 "engines/director/lingo/lingo-gr.cpp"
+#line 2119 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 250 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2099 "engines/director/lingo/lingo-gr.cpp"
+#line 2125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 252 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2105 "engines/director/lingo/lingo-gr.cpp"
+#line 2131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2112,7 +2138,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2116 "engines/director/lingo/lingo-gr.cpp"
+#line 2142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2122,13 +2148,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2126 "engines/director/lingo/lingo-gr.cpp"
+#line 2152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 269 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2132 "engines/director/lingo/lingo-gr.cpp"
+#line 2158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2137,242 +2163,242 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2141 "engines/director/lingo/lingo-gr.cpp"
+#line 2167 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 279 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2148 "engines/director/lingo/lingo-gr.cpp"
+#line 2174 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2154 "engines/director/lingo/lingo-gr.cpp"
+#line 2180 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2160 "engines/director/lingo/lingo-gr.cpp"
+#line 2186 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
 #line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2166 "engines/director/lingo/lingo-gr.cpp"
+#line 2192 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2172 "engines/director/lingo/lingo-gr.cpp"
+#line 2198 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2178 "engines/director/lingo/lingo-gr.cpp"
+#line 2204 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2184 "engines/director/lingo/lingo-gr.cpp"
+#line 2210 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2190 "engines/director/lingo/lingo-gr.cpp"
+#line 2216 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2196 "engines/director/lingo/lingo-gr.cpp"
+#line 2222 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tFIELD  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2202 "engines/director/lingo/lingo-gr.cpp"
+#line 2228 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFRAME  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2208 "engines/director/lingo/lingo-gr.cpp"
+#line 2234 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2214 "engines/director/lingo/lingo-gr.cpp"
+#line 2240 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2220 "engines/director/lingo/lingo-gr.cpp"
+#line 2246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2226 "engines/director/lingo/lingo-gr.cpp"
+#line 2252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2232 "engines/director/lingo/lingo-gr.cpp"
+#line 2258 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2238 "engines/director/lingo/lingo-gr.cpp"
+#line 2264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2244 "engines/director/lingo/lingo-gr.cpp"
+#line 2270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2250 "engines/director/lingo/lingo-gr.cpp"
+#line 2276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2256 "engines/director/lingo/lingo-gr.cpp"
+#line 2282 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2262 "engines/director/lingo/lingo-gr.cpp"
+#line 2288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2268 "engines/director/lingo/lingo-gr.cpp"
+#line 2294 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2274 "engines/director/lingo/lingo-gr.cpp"
+#line 2300 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2280 "engines/director/lingo/lingo-gr.cpp"
+#line 2306 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPREVIOUS  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2286 "engines/director/lingo/lingo-gr.cpp"
+#line 2312 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tREPEAT  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2292 "engines/director/lingo/lingo-gr.cpp"
+#line 2318 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tSCRIPT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2298 "engines/director/lingo/lingo-gr.cpp"
+#line 2324 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tSET  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2304 "engines/director/lingo/lingo-gr.cpp"
+#line 2330 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSTARTS  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2310 "engines/director/lingo/lingo-gr.cpp"
+#line 2336 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tTELL  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2316 "engines/director/lingo/lingo-gr.cpp"
+#line 2342 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tTO  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2322 "engines/director/lingo/lingo-gr.cpp"
+#line 2348 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tASSERTERROR  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2328 "engines/director/lingo/lingo-gr.cpp"
+#line 2354 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tSPRITE  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2334 "engines/director/lingo/lingo-gr.cpp"
+#line 2360 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tWHEN  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2340 "engines/director/lingo/lingo-gr.cpp"
+#line 2366 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tWHILE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2346 "engines/director/lingo/lingo-gr.cpp"
+#line 2372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tWINDOW  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2352 "engines/director/lingo/lingo-gr.cpp"
+#line 2378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWITH  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2358 "engines/director/lingo/lingo-gr.cpp"
+#line 2384 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWITHIN  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2364 "engines/director/lingo/lingo-gr.cpp"
+#line 2390 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tWORD  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2370 "engines/director/lingo/lingo-gr.cpp"
+#line 2396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* idlist: %empty  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2376 "engines/director/lingo/lingo-gr.cpp"
+#line 2402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* nonemptyidlist: ID  */
@@ -2381,7 +2407,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2385 "engines/director/lingo/lingo-gr.cpp"
+#line 2411 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2389,678 +2415,694 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2393 "engines/director/lingo/lingo-gr.cpp"
+#line 2419 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71: /* proc: ID cmdargs '\n'  */
-#line 371 "engines/director/lingo/lingo-gr.y"
+  case 72: /* proc: ID cmdargs '\n'  */
+#line 372 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2399 "engines/director/lingo/lingo-gr.cpp"
+#line 2425 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* proc: tPUT cmdargs '\n'  */
-#line 372 "engines/director/lingo/lingo-gr.y"
+  case 73: /* proc: tPUT cmdargs '\n'  */
+#line 373 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2405 "engines/director/lingo/lingo-gr.cpp"
+#line 2431 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* proc: tGO cmdargs '\n'  */
-#line 373 "engines/director/lingo/lingo-gr.y"
+  case 74: /* proc: tGO cmdargs '\n'  */
+#line 374 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2411 "engines/director/lingo/lingo-gr.cpp"
+#line 2437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* proc: tGO frameargs '\n'  */
-#line 374 "engines/director/lingo/lingo-gr.y"
+  case 75: /* proc: tGO frameargs '\n'  */
+#line 375 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2417 "engines/director/lingo/lingo-gr.cpp"
+#line 2443 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tPLAY cmdargs '\n'  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+  case 76: /* proc: tPLAY cmdargs '\n'  */
+#line 376 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2423 "engines/director/lingo/lingo-gr.cpp"
+#line 2449 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tPLAY frameargs '\n'  */
-#line 376 "engines/director/lingo/lingo-gr.y"
+  case 77: /* proc: tPLAY frameargs '\n'  */
+#line 377 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2429 "engines/director/lingo/lingo-gr.cpp"
+#line 2455 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* proc: tNEXT tREPEAT '\n'  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+  case 78: /* proc: tNEXT tREPEAT '\n'  */
+#line 378 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2435 "engines/director/lingo/lingo-gr.cpp"
+#line 2461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* proc: tEXIT tREPEAT '\n'  */
-#line 378 "engines/director/lingo/lingo-gr.y"
+  case 79: /* proc: tEXIT tREPEAT '\n'  */
+#line 379 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* proc: tEXIT '\n'  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+  case 80: /* proc: tEXIT '\n'  */
+#line 380 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2447 "engines/director/lingo/lingo-gr.cpp"
+#line 2473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* proc: tASSERTERROR stmtoneliner  */
-#line 380 "engines/director/lingo/lingo-gr.y"
+  case 81: /* proc: tASSERTERROR stmtoneliner  */
+#line 381 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2453 "engines/director/lingo/lingo-gr.cpp"
+#line 2479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* cmdargs: %empty  */
-#line 383 "engines/director/lingo/lingo-gr.y"
+  case 82: /* cmdargs: %empty  */
+#line 384 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2461 "engines/director/lingo/lingo-gr.cpp"
+#line 2487 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* cmdargs: expr  */
-#line 386 "engines/director/lingo/lingo-gr.y"
+  case 83: /* cmdargs: expr  */
+#line 387 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 391 "engines/director/lingo/lingo-gr.y"
+  case 84: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 392 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2480 "engines/director/lingo/lingo-gr.cpp"
+#line 2506 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* cmdargs: expr expr_nounarymath  */
-#line 395 "engines/director/lingo/lingo-gr.y"
+  case 85: /* cmdargs: expr expr_nounarymath  */
+#line 396 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2491 "engines/director/lingo/lingo-gr.cpp"
+#line 2517 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 401 "engines/director/lingo/lingo-gr.y"
+  case 86: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 402 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2501 "engines/director/lingo/lingo-gr.cpp"
+#line 2527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* cmdargs: '(' ')'  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+  case 87: /* cmdargs: '(' ')'  */
+#line 407 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 2535 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+  case 88: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 410 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2518 "engines/director/lingo/lingo-gr.cpp"
+#line 2544 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* frameargs: tFRAME expr  */
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 89: /* frameargs: tFRAME expr  */
+#line 420 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2528 "engines/director/lingo/lingo-gr.cpp"
+#line 2554 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* frameargs: tMOVIE expr  */
-#line 424 "engines/director/lingo/lingo-gr.y"
+  case 90: /* frameargs: tMOVIE expr  */
+#line 425 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2539 "engines/director/lingo/lingo-gr.cpp"
+#line 2565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 430 "engines/director/lingo/lingo-gr.y"
+  case 91: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 431 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2550 "engines/director/lingo/lingo-gr.cpp"
+#line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* frameargs: expr tOF tMOVIE expr  */
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 92: /* frameargs: expr tOF tMOVIE expr  */
+#line 437 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2561 "engines/director/lingo/lingo-gr.cpp"
+#line 2587 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 442 "engines/director/lingo/lingo-gr.y"
+  case 93: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 443 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2572 "engines/director/lingo/lingo-gr.cpp"
+#line 2598 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 94: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2578 "engines/director/lingo/lingo-gr.cpp"
+#line 2604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 95: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2584 "engines/director/lingo/lingo-gr.cpp"
+#line 2610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 96: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2590 "engines/director/lingo/lingo-gr.cpp"
+#line 2616 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* asgn: tSET varorthe to expr '\n'  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 97: /* asgn: tSET varorthe to expr '\n'  */
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2596 "engines/director/lingo/lingo-gr.cpp"
+#line 2622 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* definevars: tGLOBAL idlist '\n'  */
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 100: /* definevars: tGLOBAL idlist '\n'  */
+#line 459 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2602 "engines/director/lingo/lingo-gr.cpp"
+#line 2628 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* definevars: tPROPERTY idlist '\n'  */
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 101: /* definevars: tPROPERTY idlist '\n'  */
+#line 460 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2608 "engines/director/lingo/lingo-gr.cpp"
+#line 2634 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* definevars: tINSTANCE idlist '\n'  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 102: /* definevars: tINSTANCE idlist '\n'  */
+#line 461 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2614 "engines/director/lingo/lingo-gr.cpp"
+#line 2640 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* ifstmt: tIF expr tTHEN stmt  */
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 103: /* ifstmt: tIF expr tTHEN stmt  */
+#line 464 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2623 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 467 "engines/director/lingo/lingo-gr.y"
+  case 104: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 468 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2630 "engines/director/lingo/lingo-gr.cpp"
+#line 2656 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 471 "engines/director/lingo/lingo-gr.y"
+  case 105: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 472 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2641 "engines/director/lingo/lingo-gr.cpp"
+#line 2667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 106: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 478 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2650 "engines/director/lingo/lingo-gr.cpp"
+#line 2676 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 107: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 482 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2659 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 108: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2666 "engines/director/lingo/lingo-gr.cpp"
+#line 2692 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 109: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2673 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 110: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2680 "engines/director/lingo/lingo-gr.cpp"
+#line 2706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 493 "engines/director/lingo/lingo-gr.y"
+  case 111: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* stmtlist: %empty  */
-#line 497 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.nodelist) = new NodeList; }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+  case 112: /* tell: tTELL expr tTO stmtoneliner  */
+#line 498 "engines/director/lingo/lingo-gr.y"
+                                                                {
+		NodeList *stmtlist = new NodeList;
+		stmtlist->push_back((yyvsp[0].node));
+		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
+#line 2722 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* nonemptystmtlist: stmtlistline  */
+  case 113: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
 #line 502 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 114: /* stmtlist: %empty  */
+#line 506 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.nodelist) = new NodeList; }
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 116: /* nonemptystmtlist: stmtlistline  */
+#line 511 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2704 "engines/director/lingo/lingo-gr.cpp"
+#line 2746 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 117: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 517 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* stmtlistline: '\n'  */
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 118: /* stmtlistline: '\n'  */
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2720 "engines/director/lingo/lingo-gr.cpp"
+#line 2762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 120: /* simpleexpr_noparens_nounarymath: tINT  */
+#line 531 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2726 "engines/director/lingo/lingo-gr.cpp"
+#line 2768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 121: /* simpleexpr_noparens_nounarymath: tFLOAT  */
+#line 532 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2732 "engines/director/lingo/lingo-gr.cpp"
+#line 2774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 122: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
+#line 533 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2738 "engines/director/lingo/lingo-gr.cpp"
+#line 2780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 525 "engines/director/lingo/lingo-gr.y"
+  case 123: /* simpleexpr_noparens_nounarymath: tSTRING  */
+#line 534 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2744 "engines/director/lingo/lingo-gr.cpp"
+#line 2786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 124: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
+#line 535 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2750 "engines/director/lingo/lingo-gr.cpp"
+#line 2792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 125: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
+#line 536 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2756 "engines/director/lingo/lingo-gr.cpp"
+#line 2798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* var: ID  */
-#line 532 "engines/director/lingo/lingo-gr.y"
+  case 128: /* var: ID  */
+#line 541 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2762 "engines/director/lingo/lingo-gr.cpp"
+#line 2804 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* list: '[' exprlist ']'  */
-#line 542 "engines/director/lingo/lingo-gr.y"
+  case 131: /* list: '[' exprlist ']'  */
+#line 551 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2768 "engines/director/lingo/lingo-gr.cpp"
+#line 2810 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* list: '[' ':' ']'  */
-#line 543 "engines/director/lingo/lingo-gr.y"
+  case 132: /* list: '[' ':' ']'  */
+#line 552 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2774 "engines/director/lingo/lingo-gr.cpp"
+#line 2816 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* list: '[' proplist ']'  */
-#line 544 "engines/director/lingo/lingo-gr.y"
+  case 133: /* list: '[' proplist ']'  */
+#line 553 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2780 "engines/director/lingo/lingo-gr.cpp"
+#line 2822 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* proplist: proppair  */
-#line 547 "engines/director/lingo/lingo-gr.y"
+  case 134: /* proplist: proppair  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* proplist: proplist ',' proppair  */
-#line 551 "engines/director/lingo/lingo-gr.y"
+  case 135: /* proplist: proplist ',' proppair  */
+#line 560 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2797 "engines/director/lingo/lingo-gr.cpp"
+#line 2839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* proppair: tSYMBOL ':' expr  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 136: /* proppair: tSYMBOL ':' expr  */
+#line 565 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2803 "engines/director/lingo/lingo-gr.cpp"
+#line 2845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* proppair: ID ':' expr  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 137: /* proppair: ID ':' expr  */
+#line 566 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2809 "engines/director/lingo/lingo-gr.cpp"
+#line 2851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* proppair: tSTRING ':' expr  */
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 138: /* proppair: tSTRING ':' expr  */
+#line 567 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2815 "engines/director/lingo/lingo-gr.cpp"
+#line 2857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* parens: '(' expr ')'  */
-#line 561 "engines/director/lingo/lingo-gr.y"
+  case 139: /* parens: '(' expr ')'  */
+#line 570 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2821 "engines/director/lingo/lingo-gr.cpp"
+#line 2863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* unarymath: '+' simpleexpr  */
-#line 563 "engines/director/lingo/lingo-gr.y"
+  case 140: /* unarymath: '+' simpleexpr  */
+#line 572 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2827 "engines/director/lingo/lingo-gr.cpp"
+#line 2869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* unarymath: '-' simpleexpr  */
-#line 564 "engines/director/lingo/lingo-gr.y"
+  case 141: /* unarymath: '-' simpleexpr  */
+#line 573 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2833 "engines/director/lingo/lingo-gr.cpp"
+#line 2875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* expr: expr '+' expr  */
-#line 582 "engines/director/lingo/lingo-gr.y"
+  case 148: /* expr: expr '+' expr  */
+#line 591 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2839 "engines/director/lingo/lingo-gr.cpp"
+#line 2881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* expr: expr '-' expr  */
-#line 583 "engines/director/lingo/lingo-gr.y"
+  case 149: /* expr: expr '-' expr  */
+#line 592 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2845 "engines/director/lingo/lingo-gr.cpp"
+#line 2887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* expr: expr '*' expr  */
-#line 584 "engines/director/lingo/lingo-gr.y"
+  case 150: /* expr: expr '*' expr  */
+#line 593 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2851 "engines/director/lingo/lingo-gr.cpp"
+#line 2893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* expr: expr '/' expr  */
-#line 585 "engines/director/lingo/lingo-gr.y"
+  case 151: /* expr: expr '/' expr  */
+#line 594 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2857 "engines/director/lingo/lingo-gr.cpp"
+#line 2899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* expr: expr tMOD expr  */
-#line 586 "engines/director/lingo/lingo-gr.y"
+  case 152: /* expr: expr tMOD expr  */
+#line 595 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2863 "engines/director/lingo/lingo-gr.cpp"
+#line 2905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* expr: expr '>' expr  */
-#line 587 "engines/director/lingo/lingo-gr.y"
+  case 153: /* expr: expr '>' expr  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2869 "engines/director/lingo/lingo-gr.cpp"
+#line 2911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* expr: expr '<' expr  */
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 154: /* expr: expr '<' expr  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2875 "engines/director/lingo/lingo-gr.cpp"
+#line 2917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* expr: expr tEQ expr  */
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 155: /* expr: expr tEQ expr  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2881 "engines/director/lingo/lingo-gr.cpp"
+#line 2923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* expr: expr tNEQ expr  */
-#line 590 "engines/director/lingo/lingo-gr.y"
+  case 156: /* expr: expr tNEQ expr  */
+#line 599 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2887 "engines/director/lingo/lingo-gr.cpp"
+#line 2929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* expr: expr tGE expr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 157: /* expr: expr tGE expr  */
+#line 600 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2893 "engines/director/lingo/lingo-gr.cpp"
+#line 2935 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* expr: expr tLE expr  */
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 158: /* expr: expr tLE expr  */
+#line 601 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2899 "engines/director/lingo/lingo-gr.cpp"
+#line 2941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* expr: expr tAND expr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 159: /* expr: expr tAND expr  */
+#line 602 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2905 "engines/director/lingo/lingo-gr.cpp"
+#line 2947 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* expr: expr tOR expr  */
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 160: /* expr: expr tOR expr  */
+#line 603 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2911 "engines/director/lingo/lingo-gr.cpp"
+#line 2953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* expr: expr '&' expr  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 161: /* expr: expr '&' expr  */
+#line 604 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2917 "engines/director/lingo/lingo-gr.cpp"
+#line 2959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* expr: expr tCONCAT expr  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 162: /* expr: expr tCONCAT expr  */
+#line 605 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2923 "engines/director/lingo/lingo-gr.cpp"
+#line 2965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* expr: expr tCONTAINS expr  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 163: /* expr: expr tCONTAINS expr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2929 "engines/director/lingo/lingo-gr.cpp"
+#line 2971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* expr: expr tSTARTS expr  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 164: /* expr: expr tSTARTS expr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2935 "engines/director/lingo/lingo-gr.cpp"
+#line 2977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 166: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 615 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2941 "engines/director/lingo/lingo-gr.cpp"
+#line 2983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 167: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2947 "engines/director/lingo/lingo-gr.cpp"
+#line 2989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+  case 168: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 617 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2953 "engines/director/lingo/lingo-gr.cpp"
+#line 2995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+  case 169: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2959 "engines/director/lingo/lingo-gr.cpp"
+#line 3001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 170: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 619 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2965 "engines/director/lingo/lingo-gr.cpp"
+#line 3007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 171: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 620 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2971 "engines/director/lingo/lingo-gr.cpp"
+#line 3013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+  case 172: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 621 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2977 "engines/director/lingo/lingo-gr.cpp"
+#line 3019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 173: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 622 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2983 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 174: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 623 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2989 "engines/director/lingo/lingo-gr.cpp"
+#line 3031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 615 "engines/director/lingo/lingo-gr.y"
+  case 175: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 624 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2995 "engines/director/lingo/lingo-gr.cpp"
+#line 3037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
+  case 176: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 625 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3001 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 617 "engines/director/lingo/lingo-gr.y"
+  case 177: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 626 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3007 "engines/director/lingo/lingo-gr.cpp"
+#line 3049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 178: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 627 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3013 "engines/director/lingo/lingo-gr.cpp"
+#line 3055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 179: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3019 "engines/director/lingo/lingo-gr.cpp"
+#line 3061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 180: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3025 "engines/director/lingo/lingo-gr.cpp"
+#line 3067 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 181: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 630 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3031 "engines/director/lingo/lingo-gr.cpp"
+#line 3073 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 182: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 631 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3037 "engines/director/lingo/lingo-gr.cpp"
+#line 3079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* exprlist: %empty  */
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 183: /* exprlist: %empty  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3043 "engines/director/lingo/lingo-gr.cpp"
+#line 3085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* nonemptyexprlist: expr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+  case 185: /* nonemptyexprlist: expr  */
+#line 638 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 186: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3060 "engines/director/lingo/lingo-gr.cpp"
+#line 3102 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3064 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3259,7 +3301,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 638 "engines/director/lingo/lingo-gr.y"
+#line 647 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 1465fb0877..640ab942bd 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -166,7 +166,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 // STATEMENT
 %type<node> stmt stmtoneliner
 %type<node> proc asgn definevars
-%type<node> ifstmt ifelsestmt loop
+%type<node> ifstmt ifelsestmt loop tell
 %type<nodelist> cmdargs frameargs stmtlist nonemptystmtlist
 %type<node> stmtlistline
 
@@ -361,6 +361,7 @@ stmt: stmtoneliner
 	| ifstmt
 	| ifelsestmt
 	| loop
+	| tell
 	;
 
 stmtoneliner: proc
@@ -494,6 +495,14 @@ loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n' {
 		$$ = new RepeatWithToNode($ID, $start, true, $end, $stmtlist); }
 	;
 
+tell: tTELL expr tTO stmtoneliner				{
+		NodeList *stmtlist = new NodeList;
+		stmtlist->push_back($stmtoneliner);
+		$$ = new TellNode($expr, stmtlist); }
+	| tTELL expr '\n' stmtlist tENDTELL '\n'	{
+		$$ = new TellNode($expr, $stmtlist); }
+	;
+
 stmtlist: /* empty */				{ $$ = new NodeList; }
 	| nonemptystmtlist
 	;


Commit: a5865079a1a13f2a29c80c58e61e0c807cc7c621
    https://github.com/scummvm/scummvm/commit/a5865079a1a13f2a29c80c58e61e0c807cc7c621
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement when

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index 032dcefd63..d3e639c80c 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -45,6 +45,7 @@ struct NextRepeatNode;
 struct ExitRepeatNode;
 struct ExitNode;
 struct TellNode;
+struct WhenNode;
 struct AssertErrorNode;
 struct IntNode;
 struct FloatNode;
@@ -94,6 +95,7 @@ enum NodeType {
 	kExitRepeatNode,
 	kExitNode,
 	kTellNode,
+	kWhenNode,
 	kAssertErrorNode,
 	kIntNode,
 	kFloatNode,
@@ -137,6 +139,7 @@ public:
 	virtual void visitExitRepeatNode(ExitRepeatNode *node) = 0;
 	virtual void visitExitNode(ExitNode *node) = 0;
 	virtual void visitTellNode(TellNode *node) = 0;
+	virtual void visitWhenNode(WhenNode *node) = 0;
 	virtual void visitAssertErrorNode(AssertErrorNode *node) = 0;
 	virtual void visitIntNode(IntNode *node) = 0;
 	virtual void visitFloatNode(FloatNode *node) = 0;
@@ -496,6 +499,23 @@ struct TellNode : StmtNode {
 	}
 };
 
+/* WhenNode */
+
+struct WhenNode : StmtNode {
+	Common::String *event;
+	Node *code;
+
+	WhenNode(Common::String *eventIn, Node *codeIn)
+		: StmtNode(kWhenNode), event(eventIn), code(codeIn) {}
+	virtual ~WhenNode() {
+		delete event;
+		delete code;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitWhenNode(this);
+	}
+};
+
 /* AssertErrorNode */
 
 struct AssertErrorNode : StmtNode {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 2f051cc4f8..e62d058ffe 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -732,6 +732,14 @@ void LingoCompiler::visitTellNode(TellNode *node) {
 	code1(LC::c_telldone);
 }
 
+/* WhenNode */
+
+void LingoCompiler::visitWhenNode(WhenNode *node) {
+	compile(node->code);
+	code1(LC::c_whencode);
+	codeString(node->event->c_str());
+}
+
 /* AssertErrorNode */
 
 void LingoCompiler::visitAssertErrorNode(AssertErrorNode *node) {
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 1bfe959285..fe43dafab3 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -96,6 +96,7 @@ public:
 	virtual void visitExitRepeatNode(ExitRepeatNode *node);
 	virtual void visitExitNode(ExitNode *node);
 	virtual void visitTellNode(TellNode *node);
+	virtual void visitWhenNode(WhenNode *node);
 	virtual void visitAssertErrorNode(AssertErrorNode *node);
 	virtual void visitIntNode(IntNode *node);
 	virtual void visitFloatNode(FloatNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 34343359fd..c28a7b5da5 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -272,24 +272,25 @@ enum yysymbol_kind_t
   YYSYMBOL_ifelsestmt = 117,               /* ifelsestmt  */
   YYSYMBOL_loop = 118,                     /* loop  */
   YYSYMBOL_tell = 119,                     /* tell  */
-  YYSYMBOL_stmtlist = 120,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 121,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 122,             /* stmtlistline  */
-  YYSYMBOL_simpleexpr_noparens_nounarymath = 123, /* simpleexpr_noparens_nounarymath  */
-  YYSYMBOL_var = 124,                      /* var  */
-  YYSYMBOL_varorchunk = 125,               /* varorchunk  */
-  YYSYMBOL_varorthe = 126,                 /* varorthe  */
-  YYSYMBOL_list = 127,                     /* list  */
-  YYSYMBOL_proplist = 128,                 /* proplist  */
-  YYSYMBOL_proppair = 129,                 /* proppair  */
-  YYSYMBOL_parens = 130,                   /* parens  */
-  YYSYMBOL_unarymath = 131,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 132,               /* simpleexpr  */
-  YYSYMBOL_simpleexpr_nounarymath = 133,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_expr = 134,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 135,         /* expr_nounarymath  */
-  YYSYMBOL_exprlist = 136,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 137          /* nonemptyexprlist  */
+  YYSYMBOL_when = 120,                     /* when  */
+  YYSYMBOL_stmtlist = 121,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 122,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 123,             /* stmtlistline  */
+  YYSYMBOL_simpleexpr_noparens_nounarymath = 124, /* simpleexpr_noparens_nounarymath  */
+  YYSYMBOL_var = 125,                      /* var  */
+  YYSYMBOL_varorchunk = 126,               /* varorchunk  */
+  YYSYMBOL_varorthe = 127,                 /* varorthe  */
+  YYSYMBOL_list = 128,                     /* list  */
+  YYSYMBOL_proplist = 129,                 /* proplist  */
+  YYSYMBOL_proppair = 130,                 /* proppair  */
+  YYSYMBOL_parens = 131,                   /* parens  */
+  YYSYMBOL_unarymath = 132,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 133,               /* simpleexpr  */
+  YYSYMBOL_simpleexpr_nounarymath = 134,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_expr = 135,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 136,         /* expr_nounarymath  */
+  YYSYMBOL_exprlist = 137,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 138          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -609,18 +610,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  115
+#define YYFINAL  117
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2619
+#define YYLAST   2625
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  93
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  45
+#define YYNNTS  46
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  186
+#define YYNRULES  187
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  349
+#define YYNSTATES  353
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -682,20 +683,20 @@ static const yytype_int16 yyrline[] =
      279,   283,   284,   285,   290,   291,   292,   293,   294,   295,
      296,   301,   302,   305,   307,   308,   309,   310,   313,   314,
      315,   316,   317,   319,   320,   322,   325,   326,   327,   328,
-     329,   331,   332,   333,   334,   335,   336,   337,   338,   339,
-     342,   343,   346,   350,   360,   361,   362,   363,   364,   367,
-     368,   369,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   384,   387,   392,   396,   402,   407,   410,   420,
-     425,   431,   437,   443,   451,   452,   453,   454,   457,   457,
-     459,   460,   461,   464,   468,   472,   478,   482,   486,   490,
-     492,   494,   498,   502,   506,   507,   511,   517,   524,   525,
-     531,   532,   533,   534,   535,   536,   537,   538,   541,   543,
-     547,   551,   552,   553,   556,   560,   565,   566,   567,   570,
-     572,   573,   576,   577,   578,   585,   586,   590,   591,   592,
-     593,   594,   595,   596,   597,   598,   599,   600,   601,   602,
-     603,   604,   605,   606,   607,   614,   615,   616,   617,   618,
-     619,   620,   621,   622,   623,   624,   625,   626,   627,   628,
-     629,   630,   631,   634,   635,   638,   642
+     329,   331,   332,   333,   335,   336,   337,   338,   339,   342,
+     343,   346,   350,   360,   361,   362,   363,   364,   365,   368,
+     369,   370,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   385,   388,   393,   397,   403,   408,   411,   421,
+     426,   432,   438,   444,   452,   453,   454,   455,   458,   458,
+     460,   461,   462,   465,   469,   473,   479,   483,   487,   491,
+     493,   495,   499,   503,   507,   509,   510,   514,   520,   527,
+     528,   534,   535,   536,   537,   538,   539,   540,   541,   544,
+     546,   550,   554,   555,   556,   559,   563,   568,   569,   570,
+     573,   575,   576,   579,   580,   581,   588,   589,   593,   594,
+     595,   596,   597,   598,   599,   600,   601,   602,   603,   604,
+     605,   606,   607,   608,   609,   610,   617,   618,   619,   620,
+     621,   622,   623,   624,   625,   626,   627,   628,   629,   630,
+     631,   632,   633,   634,   637,   638,   641,   645
 };
 #endif
 
@@ -730,7 +731,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "methodlist", "nonemptymethodlist", "methodlistline", "handler",
   "endargdef", "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner",
   "proc", "cmdargs", "frameargs", "asgn", "to", "definevars", "ifstmt",
-  "ifelsestmt", "loop", "tell", "stmtlist", "nonemptystmtlist",
+  "ifelsestmt", "loop", "tell", "when", "stmtlist", "nonemptystmtlist",
   "stmtlistline", "simpleexpr_noparens_nounarymath", "var", "varorchunk",
   "varorthe", "list", "proplist", "proppair", "parens", "unarymath",
   "simpleexpr", "simpleexpr_nounarymath", "expr", "expr_nounarymath",
@@ -758,7 +759,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-236)
+#define YYPACT_NINF (-237)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -772,41 +773,42 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1392,  -236,  -236,  -236,  -236,  -236,  -236,   -34,  -236,  2313,
-     925,  1004,  -236,  -236,  2313,  -236,     2,  -236,  -236,  1083,
-     -17,  2313,  -236,  -236,  -236,  -236,  2313,  -236,   925,  2313,
-    -236,  -236,  -236,  -236,  -236,  -236,  -236,  -236,  -236,  -236,
-    -236,  -236,  -236,  -236,  1004,  2313,  2313,  2195,  -236,    20,
-    1392,  -236,  -236,  -236,  -236,  1083,  -236,  -236,  -236,  -236,
-    -236,  -236,  -236,  -236,  -236,   -28,  -236,  -236,  -236,  -236,
-    -236,  -236,  -236,   -13,   -32,  -236,  -236,  -236,  -236,  1004,
-    1004,  1004,  1004,  1004,   844,   439,   -21,    -9,    -3,  -236,
-    -236,  -236,  -236,  -236,  -236,   520,  1004,   155,  2313,    -2,
-       4,   601,  2313,  1004,  -236,  -236,    12,     5,     6,     7,
-       8,   334,    11,  2313,  -236,  -236,  -236,    13,   682,  -236,
-    -236,  2313,   763,  2487,  -236,  -236,  -236,  -236,  2334,    16,
-      18,    14,   -69,   -31,  -236,  2487,    21,    17,  1004,  -236,
-    -236,    69,  1004,  1004,  1004,  1004,  1162,  1162,  1320,  1004,
-    1004,  1241,  1004,  1004,  1004,  1004,  1004,  1004,  1004,  1004,
-    -236,  -236,  -236,    65,  2347,  1951,  1004,  1004,  1004,  1004,
-      25,  -236,  -236,  2313,  2313,  2313,    62,  2387,  -236,  -236,
-    1004,   -62,  -236,  -236,  -236,  2195,  2012,  -236,    37,  -236,
-    -236,    90,  2500,  1004,  -236,  1004,  1004,  -236,  1004,  2254,
-    -236,  -236,  1004,    39,  1004,   -45,   -45,   -45,   -45,  2535,
-    2535,  -236,   -50,   -45,   -45,   -45,   -45,   -50,   -40,   -40,
-    -236,  -236,    17,  1004,  1004,  1004,  1004,  1004,  1004,  1004,
-    1004,  1004,  1004,  1004,  1004,  1004,  1004,  1004,  1004,  1004,
-    1004,  2012,   105,  2012,  -236,    44,    45,    47,  1004,  2012,
-    2400,  2313,  -236,  -236,    48,  -236,  -236,  -236,  -236,  -236,
-    1515,  -236,  -236,  2012,  1004,   -19,  2487,  2487,  2487,    16,
-      18,    43,  -236,  2487,  -236,  2487,   -45,   -45,   -45,   -45,
-    2535,  2535,  -236,   -50,   -45,   -45,   -45,   -45,   -50,   -40,
-     -40,  -236,  -236,    17,  1453,  2073,  2012,  -236,  -236,  -236,
-     109,  1576,  -236,  2313,   -62,    50,  -236,  1644,  2487,  -236,
-    2134,    51,  2012,  -236,    96,  1004,    53,    54,  -236,  -236,
-    2313,  2012,  -236,  -236,  1705,  1004,  2437,  -236,  2012,   -24,
-    -236,  1767,    55,  2450,  2012,  2012,  -236,  2313,    64,  -236,
-    2012,  1829,  -236,  -236,  1890,    70,    71,  -236,  -236
+    1398,  -237,  -237,  -237,  -237,  -237,  -237,   -34,  -237,  2319,
+     931,  1010,  -237,  -237,  2319,  -237,   -12,  -237,  -237,  1089,
+     -26,  2319,  -237,  2319,  -237,  -237,  2319,  -237,   931,  2319,
+    -237,  -237,  -237,  -237,  -237,  -237,  -237,  -237,  -237,  -237,
+    -237,  -237,  -237,  -237,  1010,  2319,  2319,  2201,  -237,    12,
+    1398,  -237,  -237,  -237,  -237,  1089,  -237,  -237,  -237,  -237,
+    -237,  -237,  -237,  -237,  -237,  -237,   -56,  -237,  -237,  -237,
+    -237,  -237,  -237,  -237,   -38,   -47,  -237,  -237,  -237,  -237,
+    1010,  1010,  1010,  1010,  1010,   850,   445,   -35,   -10,    -8,
+    -237,  -237,  -237,  -237,  -237,  -237,   526,  1010,    81,  2319,
+      -2,    -1,   607,  2319,  1010,  -237,  -237,   -27,    33,    11,
+      19,    20,    23,   339,    24,  2319,  -237,  -237,  -237,    26,
+     688,  -237,  -237,  2319,   769,  2506,  -237,  -237,  -237,  -237,
+    2340,     6,    21,    25,   -64,   -32,  -237,  2506,    27,     3,
+    1010,  -237,  -237,    80,  1010,  1010,  1010,  1010,  1168,  1168,
+    1326,  1010,  1010,  1247,  1010,  1010,  1010,  1010,  1010,  1010,
+    1010,  1010,  -237,  -237,  -237,  2393,  2353,  1957,  1010,  1010,
+    1010,  1010,    43,  -237,  -237,  2319,  2319,  2319,    67,  2406,
+    -237,  -237,  1010,  1010,   -66,  -237,  -237,  -237,  2201,  2018,
+    -237,    51,  -237,  -237,    96,  2541,  1010,  -237,  1010,  1010,
+    -237,  1010,  2260,  -237,  -237,  1010,    50,  1010,    44,    44,
+      44,    44,   -18,   -18,  -237,    64,    44,    44,    44,    44,
+      64,   -46,   -46,  -237,  -237,     3,  1010,  1010,  1010,  1010,
+    1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,
+    1010,  1010,  1010,  1010,  2018,   116,  2018,  -237,    63,    65,
+      66,  1010,  2018,  2443,  2506,  2319,  -237,  -237,    68,  -237,
+    -237,  -237,  -237,  -237,  1521,  -237,  -237,  2018,  1010,   -31,
+    2506,  2506,  2506,     6,    21,    58,  -237,  2506,  -237,  2506,
+      44,    44,    44,    44,   -18,   -18,  -237,    64,    44,    44,
+      44,    44,    64,   -46,   -46,  -237,  -237,     3,  1459,  2079,
+    2018,  -237,  -237,  -237,   130,  1582,  -237,  2319,   -66,    69,
+    -237,  1650,  2506,  -237,  2140,    82,  2018,  -237,   124,  1010,
+      83,    84,  -237,  -237,  2319,  2018,  -237,  -237,  1711,  1010,
+    2456,  -237,  2018,    -5,  -237,  1773,    87,  2493,  2018,  2018,
+    -237,  2319,    88,  -237,  2018,  1835,  -237,  -237,  1896,    92,
+      93,  -237,  -237
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -814,61 +816,62 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,    24,    28,    31,    47,    56,    30,     0,    32,    60,
+       0,    24,    28,    31,    47,    55,    30,     0,    32,    59,
       82,     0,    33,    35,     0,    39,    40,    42,    45,    82,
-      46,    48,    51,    54,    57,    55,     0,    43,    82,    60,
+      46,    48,    51,     0,    56,    54,     0,    43,    82,    59,
       26,    44,    41,    38,    25,    27,    49,    29,    36,    37,
-      59,    53,    34,    58,    50,    60,     0,    52,     5,     0,
-       2,     3,     6,     7,     8,    82,     9,    64,    69,    70,
-      71,    65,    66,    67,    68,     0,    80,    40,    46,    48,
-      50,    52,    62,     0,    61,   120,   121,   123,   122,    32,
-      39,    41,     0,     0,     0,   183,   128,     0,     0,   142,
-     126,   127,   143,   144,   147,    83,     0,     0,    60,     0,
-       0,    83,     0,     0,   128,   130,     0,     0,     0,     0,
-       0,     0,     0,    60,    81,     1,     4,     0,    83,    79,
-     100,     0,    89,    90,   124,   140,   141,    87,     0,   123,
-     122,     0,   128,     0,   134,   185,     0,   184,   183,    74,
-      75,    42,     0,     0,     0,     0,    26,    44,    38,     0,
-       0,    49,     0,     0,     0,     0,     0,     0,     0,     0,
-     145,   146,   165,    85,     0,     0,     0,     0,     0,     0,
-       0,    78,    73,    35,    25,    27,     0,     0,    98,    99,
-       0,    13,    76,    77,   102,     0,   114,   101,     0,    72,
-      63,    42,    93,     0,   139,     0,     0,   132,     0,     0,
-     133,   131,     0,     0,     0,   157,   158,   155,   156,   159,
-     160,   152,   162,   163,   164,   154,   153,   161,   148,   149,
-     150,   151,    84,     0,     0,     0,     0,     0,     0,     0,
+      58,    53,    34,    57,    50,    59,     0,    52,     5,     0,
+       2,     3,     6,     7,     8,    82,     9,    63,    69,    70,
+      71,    64,    65,    66,    67,    68,     0,    80,    40,    46,
+      48,    50,    52,    61,     0,    60,   121,   122,   124,   123,
+      32,    39,    41,     0,     0,     0,   184,   129,     0,     0,
+     143,   127,   128,   144,   145,   148,    83,     0,     0,    59,
+       0,     0,    83,     0,     0,   129,   131,     0,     0,     0,
+       0,     0,     0,     0,     0,    59,    81,     1,     4,     0,
+      83,    79,   100,     0,    89,    90,   125,   141,   142,    87,
+       0,   124,   123,     0,   129,     0,   135,   186,     0,   185,
+     184,    74,    75,    42,     0,     0,     0,     0,    26,    44,
+      38,     0,     0,    49,     0,     0,     0,     0,     0,     0,
+       0,     0,   146,   147,   166,    85,     0,     0,     0,     0,
+       0,     0,     0,    78,    73,    35,    25,    27,     0,     0,
+      98,    99,     0,     0,    13,    76,    77,   102,     0,   115,
+     101,     0,    72,    62,    42,    93,     0,   140,     0,     0,
+     133,     0,     0,   134,   132,     0,     0,     0,   158,   159,
+     156,   157,   160,   161,   153,   163,   164,   165,   155,   154,
+     162,   149,   150,   151,   152,    84,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   114,   103,   114,   129,     0,     0,     0,     0,   114,
-       0,     0,    17,    18,    11,    14,    15,   112,   118,   119,
-       0,   115,   116,   114,     0,     0,   138,   136,   137,     0,
-       0,     0,   135,   186,   125,    92,   175,   176,   173,   174,
-     177,   178,   170,   180,   181,   182,   172,   171,   179,   166,
-     167,   168,   169,    86,     0,     0,    10,    94,    95,    96,
-       0,     0,    97,    60,     0,     0,   117,    20,    91,    88,
-       0,     0,   114,   105,     0,     0,     0,     0,    16,   113,
-      21,   114,   107,   104,     0,     0,     0,   109,   114,     0,
-      22,     0,     0,     0,   114,    12,    19,     0,     0,   106,
-     114,     0,    23,   108,     0,     0,     0,   110,   111
+       0,     0,     0,     0,   115,   103,   115,   130,     0,     0,
+       0,     0,   115,     0,   114,     0,    17,    18,    11,    14,
+      15,   112,   119,   120,     0,   116,   117,   115,     0,     0,
+     139,   137,   138,     0,     0,     0,   136,   187,   126,    92,
+     176,   177,   174,   175,   178,   179,   171,   181,   182,   183,
+     173,   172,   180,   167,   168,   169,   170,    86,     0,     0,
+      10,    94,    95,    96,     0,     0,    97,    59,     0,     0,
+     118,    20,    91,    88,     0,     0,   115,   105,     0,     0,
+       0,     0,    16,   113,    21,   115,   107,   104,     0,     0,
+       0,   109,   115,     0,    22,     0,     0,     0,   115,    12,
+      19,     0,     0,   106,   115,     0,    23,   108,     0,     0,
+       0,   110,   111
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -236,  -236,  -236,   108,  -236,  -236,  -236,  -236,  -236,  -137,
-    -236,  -236,     0,   -27,  -236,     3,   -43,  -236,    -6,   144,
-    -236,  -236,  -236,  -236,  -236,  -236,  -236,  -233,  -236,  -235,
-     -53,   -20,   -99,  -236,  -236,  -236,   -23,   -44,  -236,    -1,
-    -236,   203,    56,    41,  -153
+    -237,  -237,  -237,   136,  -237,  -237,  -237,  -237,  -237,  -115,
+    -237,  -237,     0,   -28,  -237,     4,   -44,  -237,    -6,   166,
+    -237,  -237,  -237,  -237,  -237,  -237,  -237,  -237,  -236,  -237,
+    -228,   -45,   -19,  -108,  -237,  -237,  -237,    -7,   -29,  -237,
+      10,  -237,   205,    72,    57,  -155
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    49,    50,    51,    52,    53,   253,   254,   255,   256,
-      54,   329,    86,    73,    74,   259,    57,    58,    87,    88,
-      59,   180,    60,    61,    62,    63,    64,   260,   261,   262,
-      89,    90,   245,   106,    91,   133,   134,    92,    93,    94,
-     162,   135,   163,   136,   137
+       0,    49,    50,    51,    52,    53,   257,   258,   259,   260,
+      54,   333,    87,    74,    75,   263,    57,    58,    88,    89,
+      59,   182,    60,    61,    62,    63,    64,    65,   264,   265,
+     266,    90,    91,   248,   107,    92,   135,   136,    93,    94,
+      95,   164,   137,   165,   138,   139
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -876,420 +879,453 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      55,   105,   110,    56,   114,    65,   222,   168,   294,    72,
-     296,   251,   168,   100,    98,   149,   301,   168,   112,   138,
-     115,   104,   108,   198,   252,   306,   107,   102,   103,    72,
-     307,   155,   156,   157,   158,   154,   155,   156,   157,   158,
-     265,    99,   160,   157,   158,    72,   113,    55,   160,   117,
-      55,   161,    66,    56,   178,   121,   199,   161,   119,   306,
-     200,   306,   336,   337,   179,   160,   306,   138,   202,   160,
-     309,   170,   306,   120,   161,   246,   247,   139,   161,   324,
-     124,   125,   126,   140,   171,   132,   188,   293,   331,   306,
-     172,   181,   182,   183,   184,   335,   306,   187,    72,   189,
-     306,   341,   176,   204,   202,   197,   306,   344,   195,   306,
-     196,   243,   201,    72,   248,   223,   224,   225,   226,   227,
-     228,   190,   229,   263,   264,   230,   231,   232,   274,   295,
-     297,   298,   314,   299,   304,   198,   319,   323,   325,   327,
-     328,   339,   257,   233,   234,   235,   236,   237,   238,   239,
-     343,   315,   240,   244,   244,   244,   347,   348,   116,   142,
-     143,   144,   145,   166,   167,    55,   168,   318,   242,   149,
-     150,   169,   109,   104,   104,   104,   272,     0,   192,   203,
-       0,     0,     0,     0,     0,    55,    55,   152,   153,   154,
-     155,   156,   157,   158,     0,     0,   165,     0,     0,   271,
-       0,     0,     0,     0,     0,   142,   143,   144,   145,   166,
-     167,     0,   168,    95,    97,   149,   150,   169,     0,     0,
-       0,     0,   101,     0,     0,     0,     0,     0,     0,     0,
-       0,    95,     0,   152,   153,   154,   155,   156,   157,   158,
-       0,    55,     0,    55,     0,     0,     0,   111,     0,    55,
-       0,   303,     0,     0,     0,     0,     0,     0,   118,     0,
-      55,     0,     0,    55,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   317,     0,     0,     0,
-       0,     0,   122,   123,     0,     0,     0,   128,     0,     0,
-       0,     0,     0,     0,    55,    55,    55,     0,   313,   164,
-       0,    55,     0,    72,     0,     0,   177,    55,     0,     0,
-      55,     0,    55,   322,     0,     0,     0,     0,     0,     0,
-     330,    55,     0,     0,    55,     0,     0,     0,    55,     0,
-       0,    55,     0,     0,    55,    55,     0,   342,     0,     0,
-      55,    55,     0,     0,    55,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,     0,     0,     0,     0,     0,     0,     0,   209,
-     210,   211,   214,     0,     0,     0,   185,     0,     0,     0,
-       0,     0,     0,   250,   142,   143,   144,   145,   166,   167,
-       0,   168,     0,     0,   149,   150,   169,     0,   266,   267,
-       0,   268,     0,     0,     0,   273,     0,   275,     0,     0,
-       0,     0,   152,   153,   154,   155,   156,   157,   158,     0,
-     186,     0,     0,     0,     0,     0,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,     0,    75,     0,     0,     0,     0,    76,
-       0,   300,     1,   129,   130,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,   308,     0,     0,
-      12,    13,     0,    15,    67,    17,    18,     0,    68,    69,
-       0,    22,    23,    24,    25,     0,    27,     0,     0,     0,
-       0,     0,     0,    30,    31,    81,    33,    34,    35,     0,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    70,
-       0,     0,     0,     0,     0,     0,    71,     0,   326,     0,
-      82,    83,     0,     0,     0,    75,     0,    96,   333,    85,
-      76,   131,     0,     1,    77,    78,     0,     0,     0,     2,
-       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    67,   141,    18,     0,    68,
-      69,     0,    22,    23,    24,    25,     0,    27,     0,     0,
-     142,   143,   144,   145,   146,   147,    81,   148,    34,    35,
-     149,   150,   151,    37,    38,    39,    40,    41,    42,    43,
-      70,     0,     0,     0,     0,     0,     0,    71,   152,   153,
-     154,   155,   156,   157,   158,     0,    75,   159,    96,     0,
-      85,    76,     0,     0,     1,    77,    78,     0,     0,     0,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,   173,     0,    15,    67,    17,    18,     0,
-      68,    69,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,   142,   143,   144,   145,   146,   147,    81,   148,   174,
-     175,   149,   150,   151,    37,    38,    39,    40,    41,    42,
-      43,    70,     0,     0,     0,     0,     0,     0,    71,   152,
-     153,   154,   155,   156,   157,   158,     0,    75,   159,    96,
-       0,    85,    76,     0,     0,     1,    77,    78,     0,     0,
-       0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    67,    17,    18,
-       0,    68,    69,     0,    22,    23,    24,    25,     0,    27,
-       0,     0,   142,   143,   144,   145,   146,   147,    81,   148,
-      34,    35,   149,   150,   151,    37,    38,    39,    40,    41,
-      42,    43,    70,     0,     0,     0,     0,     0,     0,    71,
-     152,   153,   154,   155,   156,   157,   158,     0,    75,   159,
-      96,     0,    85,    76,     0,     0,     1,    77,    78,     0,
-       0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    67,   191,
-      18,     0,    68,    69,     0,    22,    23,    24,    25,     0,
-      27,     0,     0,   142,   143,   144,   145,   146,   147,    81,
-     148,    34,    35,   149,   150,   151,    37,    38,    39,    40,
-      41,    42,    43,    70,     0,     0,     0,     0,     0,     0,
-      71,   152,   153,   154,   155,   156,   157,   158,     0,    75,
-       0,    96,     0,    85,    76,     0,     0,     1,    77,    78,
-       0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    67,
-      17,    18,     0,    68,    69,     0,    22,    23,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
-      81,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    70,     0,     0,     0,     0,     0,
-       0,    71,     0,     0,     0,    82,    83,     0,     0,     0,
-      75,     0,    96,   127,    85,    76,     0,     0,     1,    77,
-      78,     0,     0,     0,     2,     3,     4,     5,     6,     0,
-       0,     0,    79,     0,     0,     0,    12,    13,     0,    80,
-      67,    17,    18,     0,    68,    69,     0,    22,    23,    24,
+      55,   112,   106,   116,    56,    66,   225,   255,   298,    73,
+     300,   170,   117,   101,    99,   180,   305,   114,   103,   104,
+     256,   105,   110,   108,   140,   181,   109,   100,   201,    73,
+     121,   311,   144,   145,   146,   147,   310,   159,   160,   170,
+     123,   269,   151,   152,   171,    73,   115,    55,   122,   119,
+      55,   162,    67,   140,    56,   202,   205,   162,   313,   203,
+     154,   155,   156,   157,   158,   159,   160,   163,   249,   250,
+     310,   172,   310,   163,   183,   162,   141,   310,   142,   162,
+     328,   340,   341,   310,   173,   174,   134,   191,   297,   335,
+     205,   163,   126,   127,   128,   163,   339,   184,   198,    73,
+     310,   170,   345,   178,   151,   185,   186,   310,   348,   187,
+     190,   310,   192,   199,   207,    73,   200,   310,   204,   251,
+     310,   170,   167,   193,   156,   157,   158,   159,   160,   246,
+     268,   144,   145,   146,   147,   168,   169,   267,   170,   278,
+     299,   151,   152,   171,   261,   157,   158,   159,   160,   301,
+     201,   302,   303,   318,   308,   323,   247,   247,   247,   154,
+     155,   156,   157,   158,   159,   160,   329,    55,   327,   331,
+     332,   245,   319,   343,   347,   105,   105,   105,   351,   352,
+     144,   145,   146,   147,   168,   169,   118,   170,    55,    55,
+     151,   152,   171,   322,   111,   276,   195,   206,     0,     0,
+       0,     0,   275,     0,     0,     0,     0,     0,   154,   155,
+     156,   157,   158,   159,   160,    96,    98,     0,     0,     0,
+       0,     0,     0,     0,   102,     0,     0,     0,     0,     0,
+       0,     0,     0,    96,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    55,     0,    55,     0,     0,   113,
+       0,     0,    55,     0,     0,   307,     0,     0,     0,     0,
+     120,     0,     0,     0,    55,     0,     0,    55,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
+       0,     0,     0,     0,     0,   124,   125,     0,     0,     0,
+     130,     0,     0,     0,     0,     0,     0,     0,    55,    55,
+      55,     0,   166,   317,     0,    55,     0,    73,     0,   179,
+       0,    55,     0,     0,    55,     0,    55,     0,   326,     0,
+       0,     0,     0,     0,   334,    55,     0,     0,    55,     0,
+       0,     0,    55,     0,     0,    55,     0,     0,    55,    55,
+       0,   346,     0,     0,    55,    55,     0,     0,    55,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,     0,     0,     0,     0,
+       0,     0,     0,   212,   213,   214,   217,     0,     0,     0,
+       0,   188,     0,     0,     0,     0,     0,   253,   254,   144,
+     145,   146,   147,   168,   169,     0,   170,     0,     0,   151,
+     152,   171,     0,   270,   271,     0,   272,     0,     0,     0,
+     277,     0,   279,     0,     0,     0,     0,   154,   155,   156,
+     157,   158,   159,   160,     0,   189,     0,     0,     0,     0,
+       0,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,     0,     0,
+      76,     0,     0,     0,     0,    77,   304,     0,     1,   131,
+     132,     0,     0,     0,     2,     3,     4,     5,     6,     0,
+       0,     0,     8,   312,     0,     0,    12,    13,     0,    15,
+      68,    17,    18,     0,    69,    70,     0,    22,     0,    24,
       25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
-      31,    81,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    70,     0,     0,     0,     0,
-       0,     0,    71,     0,     0,     0,    82,    83,     0,    75,
-       0,     0,     0,    84,    76,    85,     0,     1,    77,    78,
-       0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    67,
-      17,    18,     0,    68,    69,     0,    22,    23,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
-      81,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    70,     0,     0,     0,     0,     0,
-       0,    71,     0,     0,     0,    82,    83,     0,    75,     0,
-       0,     0,    96,    76,    85,     0,     1,    77,    78,     0,
-       0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    67,    17,
-      18,     0,    68,    69,     0,    22,    23,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,    30,    31,    81,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    70,     0,     0,     0,     0,     0,     0,
-      71,     0,     0,     0,    82,    83,     0,    75,     0,     0,
-       0,    84,    76,    85,     0,     1,    77,    78,     0,     0,
-       0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    67,    17,    18,
-       0,    68,    69,     0,    22,    23,    24,    25,     0,    27,
-       0,     0,     0,     0,     0,     0,     0,     0,    81,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    70,     0,     0,     0,     0,     0,     0,    71,
-       0,     0,     0,    82,    83,     0,    75,     0,     0,     0,
-      96,    76,    85,     0,     1,    77,    78,     0,     0,     0,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    67,    17,    18,     0,
-      68,    69,     0,    22,    23,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,     0,     0,    81,    33,    34,
-      35,     0,     0,     0,    37,    38,    39,    40,    41,    42,
-      43,    70,     0,     0,     0,     0,     0,     0,    71,     0,
-       0,     0,    82,    83,     0,    75,     0,     0,     0,    96,
-      76,    85,     0,     1,    77,    78,     0,     0,     0,     2,
+      31,    82,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    71,     0,     0,     0,     0,
+       0,     0,    72,     0,   330,     0,    83,    84,     0,     0,
+       0,    76,     0,    97,   337,    86,    77,   133,     0,     1,
+      78,    79,     0,     0,     0,     2,     3,     4,     5,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    68,   143,    18,     0,    69,    70,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,   144,   145,   146,   147,
+     148,   149,    82,   150,    34,    35,   151,   152,   153,    37,
+      38,    39,    40,    41,    42,    43,    71,     0,     0,     0,
+       0,     0,     0,    72,   154,   155,   156,   157,   158,   159,
+     160,     0,    76,   161,    97,     0,    86,    77,     0,     0,
+       1,    78,    79,     0,     0,     0,     2,     3,     4,     5,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,   175,
+       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,   144,   145,   146,
+     147,   148,   149,    82,   150,   176,   177,   151,   152,   153,
+      37,    38,    39,    40,    41,    42,    43,    71,     0,     0,
+       0,     0,     0,     0,    72,   154,   155,   156,   157,   158,
+     159,   160,     0,    76,   161,    97,     0,    86,    77,     0,
+       0,     1,    78,    79,     0,     0,     0,     2,     3,     4,
+       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
+      13,     0,    15,    68,    17,    18,     0,    69,    70,     0,
+      22,     0,    24,    25,     0,    27,     0,     0,   144,   145,
+     146,   147,   148,   149,    82,   150,    34,    35,   151,   152,
+     153,    37,    38,    39,    40,    41,    42,    43,    71,     0,
+       0,     0,     0,     0,     0,    72,   154,   155,   156,   157,
+     158,   159,   160,     0,    76,   161,    97,     0,    86,    77,
+       0,     0,     1,    78,    79,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+      12,    13,     0,    15,    68,   194,    18,     0,    69,    70,
+       0,    22,     0,    24,    25,     0,    27,     0,     0,   144,
+     145,   146,   147,   148,   149,    82,   150,    34,    35,   151,
+     152,   153,    37,    38,    39,    40,    41,    42,    43,    71,
+       0,     0,     0,     0,     0,     0,    72,   154,   155,   156,
+     157,   158,   159,   160,     0,    76,     0,    97,     0,    86,
+      77,     0,     0,     1,    78,    79,     0,     0,     0,     2,
        3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    67,    17,    18,     0,    68,
-      69,     0,    22,    23,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,     0,     0,    81,     0,    34,    35,
-       0,     0,     0,    37,    38,    39,    40,    41,    42,    43,
-      70,     0,     0,     0,     0,     0,     0,    71,     0,     0,
-       0,     0,     0,     0,     0,     1,     0,     0,    96,     0,
-      85,     2,     3,     4,     5,     6,     0,     0,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,    26,    27,
+       0,    12,    13,     0,    15,    68,    17,    18,     0,    69,
+      70,     0,    22,     0,    24,    25,     0,    27,     0,     0,
+       0,     0,     0,     0,    30,    31,    82,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      71,     0,     0,     0,     0,     0,     0,    72,     0,     0,
+       0,    83,    84,     0,     0,     0,    76,     0,    97,   129,
+      86,    77,     0,     0,     1,    78,    79,     0,     0,     0,
+       2,     3,     4,     5,     6,     0,     0,     0,    80,     0,
+       0,     0,    12,    13,     0,    81,    68,    17,    18,     0,
+      69,    70,     0,    22,     0,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,    30,    31,    82,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    71,     0,     0,     0,     0,     0,     0,    72,     0,
+       0,     0,    83,    84,     0,    76,     0,     0,     0,    85,
+      77,    86,     0,     1,    78,    79,     0,     0,     0,     2,
+       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
+       0,    12,    13,     0,    15,    68,    17,    18,     0,    69,
+      70,     0,    22,     0,    24,    25,     0,    27,     0,     0,
+       0,     0,     0,     0,    30,    31,    82,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      71,     0,     0,     0,     0,     0,     0,    72,     0,     0,
+       0,    83,    84,     0,    76,     0,     0,     0,    97,    77,
+      86,     0,     1,    78,    79,     0,     0,     0,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+      12,    13,     0,    15,    68,    17,    18,     0,    69,    70,
+       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
+       0,     0,     0,    30,    31,    82,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    71,
+       0,     0,     0,     0,     0,     0,    72,     0,     0,     0,
+      83,    84,     0,    76,     0,     0,     0,    85,    77,    86,
+       0,     1,    78,    79,     0,     0,     0,     2,     3,     4,
+       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
+      13,     0,    15,    68,    17,    18,     0,    69,    70,     0,
+      22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
+       0,     0,     0,     0,    82,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    71,     0,
+       0,     0,     0,     0,     0,    72,     0,     0,     0,    83,
+      84,     0,    76,     0,     0,     0,    97,    77,    86,     0,
+       1,    78,    79,     0,     0,     0,     2,     3,     4,     5,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,     0,     0,    82,    33,    34,    35,     0,     0,     0,
+      37,    38,    39,    40,    41,    42,    43,    71,     0,     0,
+       0,     0,     0,     0,    72,     0,     0,     0,    83,    84,
+       0,    76,     0,     0,     0,    97,    77,    86,     0,     1,
+      78,    79,     0,     0,     0,     2,     3,     4,     5,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    68,    17,    18,     0,    69,    70,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+       0,     0,    82,     0,    34,    35,     0,     0,     0,    37,
+      38,    39,    40,    41,    42,    43,    71,     0,     0,     0,
+       0,     0,     0,    72,     0,     0,     0,     0,     0,     0,
+       0,     1,     0,     0,    97,     0,    86,     2,     3,     4,
+       5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,     0,     1,     0,     0,    47,     0,     0,     2,     3,
+       4,     5,     6,   314,    48,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,     0,     0,   315,     1,     0,    47,     0,     0,     0,
+       2,     3,     4,     5,     6,   262,     0,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,     0,     0,     1,     0,   309,    47,     0,
+       0,     2,     3,     4,     5,     6,     0,   262,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,     0,     1,     0,     0,    47,
-       0,     0,     2,     3,     4,     5,     6,   310,    48,     7,
+      42,    43,    44,    45,     0,     0,     0,   320,     0,    47,
+       0,     0,     0,     1,     0,     0,   324,     0,   262,     2,
+       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
+      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
+      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,     0,     0,     1,     0,     0,    47,     0,     0,
+       2,     3,     4,     5,     6,     0,   262,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,     0,     0,   336,     1,     0,    47,     0,
+       0,     0,     2,     3,     4,     5,     6,   262,     0,     7,
        8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
       18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
       27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
       33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     0,     0,   311,     1,     0,
-      47,     0,     0,     0,     2,     3,     4,     5,     6,   258,
+      41,    42,    43,    44,    45,     0,     0,   342,     1,     0,
+      47,     0,     0,     0,     2,     3,     4,     5,     6,   262,
        0,     7,     8,     9,    10,    11,    12,    13,     0,    15,
       16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
       25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
       39,    40,    41,    42,    43,    44,    45,     0,     0,     1,
-       0,   305,    47,     0,     0,     2,     3,     4,     5,     6,
-       0,   258,     7,     8,     9,    10,    11,    12,    13,     0,
+     349,     0,    47,     0,     0,     2,     3,     4,     5,     6,
+       0,   262,     7,     8,     9,    10,    11,    12,    13,     0,
       15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
       24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
       30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
-       0,   316,     0,    47,     0,     0,     0,     1,     0,     0,
-     320,     0,   258,     2,     3,     4,     5,     6,     0,     0,
-       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     0,     1,     0,
-       0,    47,     0,     0,     2,     3,     4,     5,     6,     0,
-     258,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,     0,     0,   332,
-       1,     0,    47,     0,     0,     0,     2,     3,     4,     5,
-       6,   258,     0,     7,     8,     9,    10,    11,    12,    13,
+       1,   350,     0,    47,     0,     0,     2,     3,     4,     5,
+       6,     0,   262,     7,     8,     9,    10,    11,    12,    13,
        0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
       23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
        0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
-       0,   338,     1,     0,    47,     0,     0,     0,     2,     3,
-       4,     5,     6,   258,     0,     7,     8,     9,    10,    11,
+       0,     1,     0,     0,    47,     0,     0,     2,     3,     4,
+       5,     6,     0,   244,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+       0,     0,     1,     0,     0,    47,     0,     0,     2,     3,
+       4,     5,     6,     0,   262,     7,     8,     9,    10,    11,
       12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
        0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
        0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
        0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,     0,     0,     1,   345,     0,    47,     0,     0,     2,
-       3,     4,     5,     6,     0,   258,     7,     8,     9,    10,
+      45,     0,     0,     1,     0,     0,    47,     0,     0,     2,
+       3,     4,     5,     6,     0,   316,     7,     8,     9,    10,
       11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
       21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
        0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
        0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,     0,     0,     1,   346,     0,    47,     0,     0,
-       2,     3,     4,     5,     6,     0,   258,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      44,    45,     0,     0,     1,     0,     0,    47,     0,     0,
+       2,     3,     4,     5,     6,     0,   325,     7,     8,     9,
+      10,     0,    12,    13,     0,    15,    16,    17,    18,    19,
+      69,    21,     0,    22,     0,    24,    25,     0,    27,    28,
       29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
       35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,     0,     0,     1,     0,     0,    47,     0,
-       0,     2,     3,     4,     5,     6,     0,   241,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
-       0,     0,     2,     3,     4,     5,     6,     0,   258,     7,
-       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
-      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
-      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     0,     0,     1,     0,     0,
-      47,     0,     0,     2,     3,     4,     5,     6,     0,   312,
-       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     0,     1,     0,
-       0,    47,     0,     0,     2,     3,     4,     5,     6,     0,
-     321,     7,     8,     9,    10,     0,    12,    13,     0,    15,
-      16,    17,    18,    19,    68,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    70,    45,     1,   269,   270,
-       0,     0,    47,     2,     3,     4,     5,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    67,
-      17,    18,     0,    68,    69,     0,    22,    23,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    70,     0,     1,     0,     0,     0,
-       0,    71,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    67,    17,
-      18,     0,    68,    69,     0,    22,    23,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    70,   142,   143,   144,   145,   166,   167,
-      71,   168,     0,     0,   149,   150,   169,   142,   143,   144,
-     145,   166,   167,     0,   168,     0,     0,   149,   150,   169,
-       0,     0,   152,   153,   154,   155,   156,   157,   158,     0,
-       0,   193,     0,   194,     0,   152,   153,   154,   155,   156,
-     157,   158,     0,     0,     0,     0,   194,   142,   143,   144,
-     145,   166,   167,     0,   168,     0,     0,   149,   150,   169,
-     142,   143,   144,   145,   166,   167,     0,   168,     0,     0,
-     149,   150,   169,     0,     0,   152,   153,   154,   155,   156,
-     157,   158,     0,   249,     0,     0,     0,     0,   152,   153,
-     154,   155,   156,   157,   158,     0,   302,   142,   143,   144,
-     145,   166,   167,     0,   168,     0,     0,   149,   150,   169,
-     142,   143,   144,   145,   166,   167,     0,   168,     0,     0,
-     149,   150,   169,     0,     0,   152,   153,   154,   155,   156,
-     157,   158,     0,   334,     0,     0,     0,     0,   152,   153,
-     154,   155,   156,   157,   158,     0,   340,   142,   143,   144,
-     145,   166,   167,     0,   168,     0,     0,   149,   150,   169,
-     223,   224,   225,   226,   227,   228,     0,   229,     0,     0,
-     230,   231,   232,     0,     0,   152,   153,   154,   155,   156,
-     157,   158,     0,     0,     0,     0,     0,     0,   233,   234,
-     235,   236,   237,   238,   239,   142,   143,   144,   145,     0,
-       0,     0,   168,     0,     0,   149,   150,   169,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   152,   153,   154,   155,   156,   157,   158
+      43,    71,    45,     1,   273,   274,     0,     0,    47,     2,
+       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
+       0,    12,    13,     0,    15,    68,    17,    18,     0,    69,
+      70,     0,    22,     0,    24,    25,     0,    27,     0,     0,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      71,     0,     1,     0,     0,     0,     0,    72,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+      12,    13,     0,    15,    68,    17,    18,     0,    69,    70,
+       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    71,
+     144,   145,   146,   147,   168,   169,    72,   170,     0,     0,
+     151,   152,   171,   144,   145,   146,   147,   168,   169,     0,
+     170,     0,     0,   151,   152,   171,     0,     0,   154,   155,
+     156,   157,   158,   159,   160,     0,     0,   196,     0,   197,
+       0,   154,   155,   156,   157,   158,   159,   160,     0,     0,
+       0,     0,   197,   226,   227,   228,   229,   230,   231,     0,
+     232,     0,     0,   233,   234,   235,   144,   145,   146,   147,
+     168,   169,     0,   170,     0,     0,   151,   152,   171,     0,
+       0,   236,   237,   238,   239,   240,   241,   242,     0,     0,
+     243,     0,     0,     0,   154,   155,   156,   157,   158,   159,
+     160,     0,   252,   144,   145,   146,   147,   168,   169,     0,
+     170,     0,     0,   151,   152,   171,   144,   145,   146,   147,
+     168,   169,     0,   170,     0,     0,   151,   152,   171,     0,
+       0,   154,   155,   156,   157,   158,   159,   160,     0,   306,
+       0,     0,     0,     0,   154,   155,   156,   157,   158,   159,
+     160,     0,   338,   144,   145,   146,   147,   168,   169,     0,
+     170,     0,     0,   151,   152,   171,   144,   145,   146,   147,
+     168,   169,     0,   170,     0,     0,   151,   152,   171,     0,
+       0,   154,   155,   156,   157,   158,   159,   160,     0,   344,
+       0,     0,     0,     0,   154,   155,   156,   157,   158,   159,
+     160,   226,   227,   228,   229,   230,   231,     0,   232,     0,
+       0,   233,   234,   235,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   236,
+     237,   238,   239,   240,   241,   242
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    21,    29,     0,    47,    39,   159,    57,   241,     9,
-     243,    73,    57,    19,    14,    60,   249,    57,    45,    88,
-       0,    21,    28,    92,    86,   260,    26,    44,    45,    29,
-     263,    81,    82,    83,    84,    80,    81,    82,    83,    84,
-     193,    39,    95,    83,    84,    45,    46,    47,   101,    55,
-      50,    95,    86,    50,    42,    87,    87,   101,    86,   294,
-      91,   296,    86,    87,    52,   118,   301,    88,    87,   122,
-      89,    98,   307,    86,   118,   174,   175,    86,   122,   312,
-      81,    82,    83,    86,    86,    85,   113,   240,   321,   324,
-      86,    86,    86,    86,    86,   328,   331,    86,    98,    86,
-     335,   334,   102,    34,    87,    91,   341,   340,    92,   344,
-      92,    86,    91,   113,    52,    50,    51,    52,    53,    54,
-      55,   121,    57,    86,    34,    60,    61,    62,    89,    24,
-      86,    86,    23,    86,    86,    92,    86,    86,    42,    86,
-      86,    86,   185,    78,    79,    80,    81,    82,    83,    84,
-      86,    42,    87,   173,   174,   175,    86,    86,    50,    50,
-      51,    52,    53,    54,    55,   165,    57,   304,   165,    60,
-      61,    62,    28,   173,   174,   175,   199,    -1,   122,   138,
-      -1,    -1,    -1,    -1,    -1,   185,   186,    78,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    41,    -1,    -1,   199,
-      -1,    -1,    -1,    -1,    -1,    50,    51,    52,    53,    54,
-      55,    -1,    57,    10,    11,    60,    61,    62,    -1,    -1,
-      -1,    -1,    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    28,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,   241,    -1,   243,    -1,    -1,    -1,    44,    -1,   249,
-      -1,   251,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,
-     260,    -1,    -1,   263,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   303,    -1,    -1,    -1,
-      -1,    -1,    79,    80,    -1,    -1,    -1,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,   294,   295,   296,    -1,   295,    96,
-      -1,   301,    -1,   303,    -1,    -1,   103,   307,    -1,    -1,
-     310,    -1,   312,   310,    -1,    -1,    -1,    -1,    -1,    -1,
-     320,   321,    -1,    -1,   324,    -1,    -1,    -1,   328,    -1,
-      -1,   331,    -1,    -1,   334,   335,    -1,   337,    -1,    -1,
-     340,   341,    -1,    -1,   344,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   166,
-     167,   168,   169,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-      -1,    -1,    -1,   180,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    -1,   195,   196,
-      -1,   198,    -1,    -1,    -1,   202,    -1,   204,    -1,    -1,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      86,    -1,    -1,    -1,    -1,    -1,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,    -1,     5,    -1,    -1,    -1,    -1,    10,
-      -1,   248,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,   264,    -1,    -1,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,   315,    -1,
-      81,    82,    -1,    -1,    -1,     5,    -1,    88,   325,    90,
-      10,    92,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,
-      80,    81,    82,    83,    84,    -1,     5,    87,    88,    -1,
-      90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,
-      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
-      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    -1,
-      -1,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,     5,    87,    88,
-      -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
-      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      -1,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    79,    80,    81,    82,    83,    84,    -1,     5,    87,
-      88,    -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,
-      -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    -1,    -1,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    78,    79,    80,    81,    82,    83,    84,    -1,     5,
-      -1,    88,    -1,    90,    10,    -1,    -1,    13,    14,    15,
-      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,
-       5,    -1,    88,    89,    90,    10,    -1,    -1,    13,    14,
+       0,    29,    21,    47,     0,    39,   161,    73,   244,     9,
+     246,    57,     0,    19,    14,    42,   252,    45,    44,    45,
+      86,    21,    28,    23,    88,    52,    26,    39,    92,    29,
+      86,   267,    50,    51,    52,    53,   264,    83,    84,    57,
+      87,   196,    60,    61,    62,    45,    46,    47,    86,    55,
+      50,    96,    86,    88,    50,    87,    87,   102,    89,    91,
+      78,    79,    80,    81,    82,    83,    84,    96,   176,   177,
+     298,    99,   300,   102,    41,   120,    86,   305,    86,   124,
+     316,    86,    87,   311,    86,    86,    86,   115,   243,   325,
+      87,   120,    82,    83,    84,   124,   332,    86,    92,    99,
+     328,    57,   338,   103,    60,    86,    86,   335,   344,    86,
+      86,   339,    86,    92,    34,   115,    91,   345,    91,    52,
+     348,    57,    41,   123,    80,    81,    82,    83,    84,    86,
+      34,    50,    51,    52,    53,    54,    55,    86,    57,    89,
+      24,    60,    61,    62,   188,    81,    82,    83,    84,    86,
+      92,    86,    86,    23,    86,    86,   175,   176,   177,    78,
+      79,    80,    81,    82,    83,    84,    42,   167,    86,    86,
+      86,   167,    42,    86,    86,   175,   176,   177,    86,    86,
+      50,    51,    52,    53,    54,    55,    50,    57,   188,   189,
+      60,    61,    62,   308,    28,   202,   124,   140,    -1,    -1,
+      -1,    -1,   202,    -1,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    10,    11,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    19,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   244,    -1,   246,    -1,    -1,    44,
+      -1,    -1,   252,    -1,    -1,   255,    -1,    -1,    -1,    -1,
+      55,    -1,    -1,    -1,   264,    -1,    -1,   267,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,
+      -1,    -1,    -1,    -1,    -1,    80,    81,    -1,    -1,    -1,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   298,   299,
+     300,    -1,    97,   299,    -1,   305,    -1,   307,    -1,   104,
+      -1,   311,    -1,    -1,   314,    -1,   316,    -1,   314,    -1,
+      -1,    -1,    -1,    -1,   324,   325,    -1,    -1,   328,    -1,
+      -1,    -1,   332,    -1,    -1,   335,    -1,    -1,   338,   339,
+      -1,   341,    -1,    -1,   344,   345,    -1,    -1,   348,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   168,   169,   170,   171,    -1,    -1,    -1,
+      -1,    42,    -1,    -1,    -1,    -1,    -1,   182,   183,    50,
+      51,    52,    53,    54,    55,    -1,    57,    -1,    -1,    60,
+      61,    62,    -1,   198,   199,    -1,   201,    -1,    -1,    -1,
+     205,    -1,   207,    -1,    -1,    -1,    -1,    78,    79,    80,
+      81,    82,    83,    84,    -1,    86,    -1,    -1,    -1,    -1,
+      -1,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,    -1,    -1,
+       5,    -1,    -1,    -1,    -1,    10,   251,    -1,    13,    14,
       15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    43,    44,
+      -1,    -1,    27,   268,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    -1,    44,
       45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,
-      -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,    15,
-      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,
-      -1,    -1,    88,    10,    90,    -1,    13,    14,    15,    -1,
-      -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,
-      -1,    88,    10,    90,    -1,    13,    14,    15,    -1,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
-      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,
-      88,    10,    90,    -1,    13,    14,    15,    -1,    -1,    -1,
+      -1,    -1,    77,    -1,   319,    -1,    81,    82,    -1,    -1,
+      -1,     5,    -1,    88,   329,    90,    10,    92,    -1,    13,
+      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
+      44,    45,    -1,    47,    -1,    -1,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    78,    79,    80,    81,    82,    83,
+      84,    -1,     5,    87,    88,    -1,    90,    10,    -1,    -1,
+      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      -1,    44,    45,    -1,    47,    -1,    -1,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    78,    79,    80,    81,    82,
+      83,    84,    -1,     5,    87,    88,    -1,    90,    10,    -1,
+      -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
+      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
+      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
+      42,    -1,    44,    45,    -1,    47,    -1,    -1,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    78,    79,    80,    81,
+      82,    83,    84,    -1,     5,    87,    88,    -1,    90,    10,
+      -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    80,
+      81,    82,    83,    84,    -1,     5,    -1,    88,    -1,    90,
+      10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
+      -1,    81,    82,    -1,    -1,    -1,     5,    -1,    88,    89,
+      90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,
       19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
       -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    58,
-      59,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
+      39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,
+      -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
       69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
       -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,
       10,    90,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
       20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
       -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,    58,    59,
-      -1,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    88,    -1,
-      90,    19,    20,    21,    22,    23,    -1,    -1,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    46,    47,
+      -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,    10,
+      90,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,
+      81,    82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,
+      -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
+      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
+      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
+      42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
+      82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
+      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    56,    57,    58,    59,    -1,    -1,    -1,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
+      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
+      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
+      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    56,    -1,    58,    59,    -1,    -1,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    13,    -1,    -1,    88,    -1,    90,    19,    20,    21,
+      22,    23,    -1,    -1,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    -1,
+      42,    43,    44,    45,    46,    47,    48,    49,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,
+      21,    22,    23,    24,    86,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    74,    13,    -1,    77,    -1,    -1,    -1,
+      19,    20,    21,    22,    23,    86,    -1,    26,    27,    28,
+      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    13,    -1,    76,    77,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
+      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
       48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
       58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    -1,    13,    -1,    -1,    77,
-      -1,    -1,    19,    20,    21,    22,    23,    24,    86,    26,
+      68,    69,    70,    71,    -1,    -1,    -1,    75,    -1,    77,
+      -1,    -1,    -1,    13,    -1,    -1,    16,    -1,    86,    19,
+      20,    21,    22,    23,    -1,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,
+      19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
+      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,
+      -1,    -1,    19,    20,    21,    22,    23,    86,    -1,    26,
       27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
       47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
@@ -1301,109 +1337,78 @@ static const yytype_int16 yycheck[] =
       45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
-      -1,    76,    77,    -1,    -1,    19,    20,    21,    22,    23,
+      75,    -1,    77,    -1,    -1,    19,    20,    21,    22,    23,
       -1,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
       34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
       44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
       54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      -1,    75,    -1,    77,    -1,    -1,    -1,    13,    -1,    -1,
-      16,    -1,    86,    19,    20,    21,    22,    23,    -1,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
-      -1,    77,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      86,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
-      13,    -1,    77,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    86,    -1,    26,    27,    28,    29,    30,    31,    32,
+      13,    75,    -1,    77,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    86,    26,    27,    28,    29,    30,    31,    32,
       -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    74,    13,    -1,    77,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    86,    -1,    26,    27,    28,    29,    30,
+      -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,
+      22,    23,    -1,    86,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,
+      21,    22,    23,    -1,    86,    26,    27,    28,    29,    30,
       31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
       -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
       -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
       -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    13,    75,    -1,    77,    -1,    -1,    19,
+      71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,
       20,    21,    22,    23,    -1,    86,    26,    27,    28,    29,
       30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
       40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
       -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    13,    75,    -1,    77,    -1,    -1,
+      70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,
       19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
-      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
+      29,    -1,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    48,
       49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
       59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
-      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
-      -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,
-      77,    -1,    -1,    19,    20,    21,    22,    23,    -1,    86,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    -1,
-      -1,    77,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      86,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    13,    14,    15,
-      -1,    -1,    77,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    13,    -1,    -1,    -1,
-      -1,    77,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    50,    51,    52,    53,    54,    55,
-      77,    57,    -1,    -1,    60,    61,    62,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      -1,    87,    -1,    89,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    -1,    -1,    89,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    86,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    -1,    86,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    86,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    -1,    86,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    50,    51,    52,    53,    -1,
-      -1,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84
+      69,    70,    71,    13,    14,    15,    -1,    -1,    77,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
+      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    13,    -1,    -1,    -1,    -1,    77,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      50,    51,    52,    53,    54,    55,    77,    57,    -1,    -1,
+      60,    61,    62,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    -1,    -1,    87,    -1,    89,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      -1,    -1,    89,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
+      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      87,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
+      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
+      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1416,35 +1421,36 @@ static const yytype_uint8 yystos[] =
       54,    55,    56,    57,    58,    59,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    77,    86,    94,
       95,    96,    97,    98,   103,   105,   108,   109,   110,   113,
-     115,   116,   117,   118,   119,    39,    86,    35,    39,    40,
-      70,    77,   105,   106,   107,     5,    10,    14,    15,    27,
-      34,    56,    81,    82,    88,    90,   105,   111,   112,   123,
-     124,   127,   130,   131,   132,   134,    88,   134,   105,    39,
-     111,   134,    44,    45,   105,   124,   126,   105,   111,   112,
-     106,   134,   106,   105,   109,     0,    96,   111,   134,    86,
-      86,    87,   134,   134,   132,   132,   132,    89,   134,    14,
-      15,    92,   105,   128,   129,   134,   136,   137,    88,    86,
-      86,    36,    50,    51,    52,    53,    54,    55,    57,    60,
-      61,    62,    78,    79,    80,    81,    82,    83,    84,    87,
-     123,   130,   133,   135,   134,    41,    54,    55,    57,    62,
-     106,    86,    86,    32,    58,    59,   105,   134,    42,    52,
-     114,    86,    86,    86,    86,    42,    86,    86,   106,    86,
-     105,    36,   135,    87,    89,    92,    92,    91,    92,    87,
-      91,    91,    87,   136,    34,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   137,    50,    51,    52,    53,    54,    55,    57,
-      60,    61,    62,    78,    79,    80,    81,    82,    83,    84,
-      87,    86,   108,    86,   124,   125,   125,   125,    52,    86,
-     134,    73,    86,    99,   100,   101,   102,   109,    86,   108,
-     120,   121,   122,    86,    34,   137,   134,   134,   134,    14,
-      15,   105,   129,   134,    89,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   137,   120,    24,   120,    86,    86,    86,
-     134,   120,    86,   105,    86,    76,   122,   120,   134,    89,
-      24,    74,    86,   108,    23,    42,    75,   106,   102,    86,
-      16,    86,   108,    86,   120,    42,   134,    86,    86,   104,
-     105,   120,    74,   134,    86,   120,    86,    87,    74,    86,
-      86,   120,   105,    86,   120,    75,    75,    86,    86
+     115,   116,   117,   118,   119,   120,    39,    86,    35,    39,
+      40,    70,    77,   105,   106,   107,     5,    10,    14,    15,
+      27,    34,    56,    81,    82,    88,    90,   105,   111,   112,
+     124,   125,   128,   131,   132,   133,   135,    88,   135,   105,
+      39,   111,   135,    44,    45,   105,   125,   127,   105,   105,
+     111,   112,   106,   135,   106,   105,   109,     0,    96,   111,
+     135,    86,    86,    87,   135,   135,   133,   133,   133,    89,
+     135,    14,    15,    92,   105,   129,   130,   135,   137,   138,
+      88,    86,    86,    36,    50,    51,    52,    53,    54,    55,
+      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
+      84,    87,   124,   131,   134,   136,   135,    41,    54,    55,
+      57,    62,   106,    86,    86,    32,    58,    59,   105,   135,
+      42,    52,   114,    41,    86,    86,    86,    86,    42,    86,
+      86,   106,    86,   105,    36,   136,    87,    89,    92,    92,
+      91,    92,    87,    91,    91,    87,   137,    34,   135,   135,
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   135,   135,   135,   135,   138,    50,    51,    52,    53,
+      54,    55,    57,    60,    61,    62,    78,    79,    80,    81,
+      82,    83,    84,    87,    86,   108,    86,   125,   126,   126,
+     126,    52,    86,   135,   135,    73,    86,    99,   100,   101,
+     102,   109,    86,   108,   121,   122,   123,    86,    34,   138,
+     135,   135,   135,    14,    15,   105,   130,   135,    89,   135,
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   135,   135,   135,   135,   135,   135,   138,   121,    24,
+     121,    86,    86,    86,   135,   121,    86,   105,    86,    76,
+     123,   121,   135,    89,    24,    74,    86,   108,    23,    42,
+      75,   106,   102,    86,    16,    86,   108,    86,   121,    42,
+     135,    86,    86,   104,   105,   121,    74,   135,    86,   121,
+      86,    87,    74,    86,    86,   121,   105,    86,   121,    75,
+      75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1455,20 +1461,20 @@ static const yytype_uint8 yyr1[] =
      103,   104,   104,   104,   105,   105,   105,   105,   105,   105,
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     106,   106,   107,   107,   108,   108,   108,   108,   108,   109,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   106,
+     106,   107,   107,   108,   108,   108,   108,   108,   108,   109,
      109,   109,   110,   110,   110,   110,   110,   110,   110,   110,
      110,   110,   111,   111,   111,   111,   111,   111,   111,   112,
      112,   112,   112,   112,   113,   113,   113,   113,   114,   114,
      115,   115,   115,   116,   116,   117,   117,   117,   117,   118,
-     118,   118,   119,   119,   120,   120,   121,   121,   122,   122,
-     123,   123,   123,   123,   123,   123,   123,   123,   124,   125,
-     126,   127,   127,   127,   128,   128,   129,   129,   129,   130,
-     131,   131,   132,   132,   132,   133,   133,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   135,   135,   135,   135,   135,
+     118,   118,   119,   119,   120,   121,   121,   122,   122,   123,
+     123,   124,   124,   124,   124,   124,   124,   124,   124,   125,
+     126,   127,   128,   128,   128,   129,   129,   130,   130,   130,
+     131,   132,   132,   133,   133,   133,   134,   134,   135,   135,
      135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   136,   136,   137,   137
+     135,   135,   135,   135,   135,   135,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   137,   137,   138,   138
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1479,20 +1485,20 @@ static const yytype_int8 yyr2[] =
        5,     0,     1,     3,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
        2,     2,     0,     1,     3,     2,     4,     2,     5,     2,
        2,     5,     4,     3,     5,     5,     5,     5,     1,     1,
        3,     3,     3,     4,     7,     6,     9,     7,    10,     7,
-      11,    12,     4,     6,     0,     1,     1,     2,     1,     1,
-       1,     1,     1,     1,     2,     4,     1,     1,     1,     1,
-       1,     3,     3,     3,     1,     3,     3,     3,     3,     3,
-       2,     2,     1,     1,     1,     1,     1,     1,     3,     3,
+      11,    12,     4,     6,     4,     0,     1,     1,     2,     1,
+       1,     1,     1,     1,     1,     2,     4,     1,     1,     1,
+       1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
+       3,     2,     2,     1,     1,     1,     1,     1,     1,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     1,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     1,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     0,     1,     1,     3
+       3,     3,     3,     3,     0,     1,     1,     3
 };
 
 
@@ -1766,49 +1772,49 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1770 "engines/director/lingo/lingo-gr.cpp"
+#line 1776 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1776 "engines/director/lingo/lingo-gr.cpp"
+#line 1782 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1782 "engines/director/lingo/lingo-gr.cpp"
+#line 1788 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1788 "engines/director/lingo/lingo-gr.cpp"
+#line 1794 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1794 "engines/director/lingo/lingo-gr.cpp"
+#line 1800 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1800 "engines/director/lingo/lingo-gr.cpp"
+#line 1806 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1806 "engines/director/lingo/lingo-gr.cpp"
+#line 1812 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1812 "engines/director/lingo/lingo-gr.cpp"
+#line 1818 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2076,7 +2082,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 196 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2080 "engines/director/lingo/lingo-gr.cpp"
+#line 2086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2087,7 +2093,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2091 "engines/director/lingo/lingo-gr.cpp"
+#line 2097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2097,37 +2103,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2101 "engines/director/lingo/lingo-gr.cpp"
+#line 2107 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 211 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2107 "engines/director/lingo/lingo-gr.cpp"
+#line 2113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2113 "engines/director/lingo/lingo-gr.cpp"
+#line 2119 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2119 "engines/director/lingo/lingo-gr.cpp"
+#line 2125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 250 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2125 "engines/director/lingo/lingo-gr.cpp"
+#line 2131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 252 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2131 "engines/director/lingo/lingo-gr.cpp"
+#line 2137 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2138,7 +2144,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2142 "engines/director/lingo/lingo-gr.cpp"
+#line 2148 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2148,13 +2154,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2152 "engines/director/lingo/lingo-gr.cpp"
+#line 2158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 269 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2158 "engines/director/lingo/lingo-gr.cpp"
+#line 2164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2163,245 +2169,239 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2167 "engines/director/lingo/lingo-gr.cpp"
+#line 2173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 279 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2174 "engines/director/lingo/lingo-gr.cpp"
+#line 2180 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2180 "engines/director/lingo/lingo-gr.cpp"
+#line 2186 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2186 "engines/director/lingo/lingo-gr.cpp"
+#line 2192 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
 #line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2192 "engines/director/lingo/lingo-gr.cpp"
+#line 2198 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2198 "engines/director/lingo/lingo-gr.cpp"
+#line 2204 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2204 "engines/director/lingo/lingo-gr.cpp"
+#line 2210 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2210 "engines/director/lingo/lingo-gr.cpp"
+#line 2216 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2216 "engines/director/lingo/lingo-gr.cpp"
+#line 2222 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2222 "engines/director/lingo/lingo-gr.cpp"
+#line 2228 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tFIELD  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2228 "engines/director/lingo/lingo-gr.cpp"
+#line 2234 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFRAME  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2234 "engines/director/lingo/lingo-gr.cpp"
+#line 2240 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2240 "engines/director/lingo/lingo-gr.cpp"
+#line 2246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2246 "engines/director/lingo/lingo-gr.cpp"
+#line 2252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2252 "engines/director/lingo/lingo-gr.cpp"
+#line 2258 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2258 "engines/director/lingo/lingo-gr.cpp"
+#line 2264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2264 "engines/director/lingo/lingo-gr.cpp"
+#line 2270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2270 "engines/director/lingo/lingo-gr.cpp"
+#line 2276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2276 "engines/director/lingo/lingo-gr.cpp"
+#line 2282 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2282 "engines/director/lingo/lingo-gr.cpp"
+#line 2288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2288 "engines/director/lingo/lingo-gr.cpp"
+#line 2294 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2294 "engines/director/lingo/lingo-gr.cpp"
+#line 2300 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2300 "engines/director/lingo/lingo-gr.cpp"
+#line 2306 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2306 "engines/director/lingo/lingo-gr.cpp"
+#line 2312 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPREVIOUS  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2312 "engines/director/lingo/lingo-gr.cpp"
+#line 2318 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tREPEAT  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2318 "engines/director/lingo/lingo-gr.cpp"
+#line 2324 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tSCRIPT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2324 "engines/director/lingo/lingo-gr.cpp"
+#line 2330 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tSET  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2330 "engines/director/lingo/lingo-gr.cpp"
+#line 2336 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSTARTS  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2336 "engines/director/lingo/lingo-gr.cpp"
+#line 2342 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tTELL  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2342 "engines/director/lingo/lingo-gr.cpp"
+#line 2348 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tTO  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2348 "engines/director/lingo/lingo-gr.cpp"
+#line 2354 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tASSERTERROR  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2354 "engines/director/lingo/lingo-gr.cpp"
+#line 2360 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tSPRITE  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2360 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 54: /* ID: tWHEN  */
-#line 334 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("when"); }
 #line 2366 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 55: /* ID: tWHILE  */
+  case 54: /* ID: tWHILE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
 #line 2372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56: /* ID: tWINDOW  */
+  case 55: /* ID: tWINDOW  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
 #line 2378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57: /* ID: tWITH  */
+  case 56: /* ID: tWITH  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
 #line 2384 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58: /* ID: tWITHIN  */
+  case 57: /* ID: tWITHIN  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
 #line 2390 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* ID: tWORD  */
+  case 58: /* ID: tWORD  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
 #line 2396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 60: /* idlist: %empty  */
+  case 59: /* idlist: %empty  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
 #line 2402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62: /* nonemptyidlist: ID  */
+  case 61: /* nonemptyidlist: ID  */
 #line 346 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
@@ -2410,7 +2410,7 @@ yyreduce:
 #line 2411 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63: /* nonemptyidlist: nonemptyidlist ',' ID  */
+  case 62: /* nonemptyidlist: nonemptyidlist ',' ID  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
@@ -2419,67 +2419,67 @@ yyreduce:
     break;
 
   case 72: /* proc: ID cmdargs '\n'  */
-#line 372 "engines/director/lingo/lingo-gr.y"
+#line 373 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
 #line 2425 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* proc: tPUT cmdargs '\n'  */
-#line 373 "engines/director/lingo/lingo-gr.y"
+#line 374 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
 #line 2431 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* proc: tGO cmdargs '\n'  */
-#line 374 "engines/director/lingo/lingo-gr.y"
+#line 375 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
 #line 2437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* proc: tGO frameargs '\n'  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+#line 376 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
 #line 2443 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* proc: tPLAY cmdargs '\n'  */
-#line 376 "engines/director/lingo/lingo-gr.y"
+#line 377 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
 #line 2449 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* proc: tPLAY frameargs '\n'  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
 #line 2455 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* proc: tNEXT tREPEAT '\n'  */
-#line 378 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
 #line 2461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* proc: tEXIT tREPEAT '\n'  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
 #line 2467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* proc: tEXIT '\n'  */
-#line 380 "engines/director/lingo/lingo-gr.y"
+#line 381 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
 #line 2473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* proc: tASSERTERROR stmtoneliner  */
-#line 381 "engines/director/lingo/lingo-gr.y"
+#line 382 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
 #line 2479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* cmdargs: %empty  */
-#line 384 "engines/director/lingo/lingo-gr.y"
+#line 385 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
@@ -2487,7 +2487,7 @@ yyreduce:
     break;
 
   case 83: /* cmdargs: expr  */
-#line 387 "engines/director/lingo/lingo-gr.y"
+#line 388 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
@@ -2497,7 +2497,7 @@ yyreduce:
     break;
 
   case 84: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 392 "engines/director/lingo/lingo-gr.y"
+#line 393 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
@@ -2506,7 +2506,7 @@ yyreduce:
     break;
 
   case 85: /* cmdargs: expr expr_nounarymath  */
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 397 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
@@ -2517,7 +2517,7 @@ yyreduce:
     break;
 
   case 86: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 402 "engines/director/lingo/lingo-gr.y"
+#line 403 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
@@ -2527,7 +2527,7 @@ yyreduce:
     break;
 
   case 87: /* cmdargs: '(' ')'  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 408 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
@@ -2535,7 +2535,7 @@ yyreduce:
     break;
 
   case 88: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 410 "engines/director/lingo/lingo-gr.y"
+#line 411 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
@@ -2544,7 +2544,7 @@ yyreduce:
     break;
 
   case 89: /* frameargs: tFRAME expr  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+#line 421 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
@@ -2554,7 +2554,7 @@ yyreduce:
     break;
 
   case 90: /* frameargs: tMOVIE expr  */
-#line 425 "engines/director/lingo/lingo-gr.y"
+#line 426 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
@@ -2565,7 +2565,7 @@ yyreduce:
     break;
 
   case 91: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 431 "engines/director/lingo/lingo-gr.y"
+#line 432 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
@@ -2576,7 +2576,7 @@ yyreduce:
     break;
 
   case 92: /* frameargs: expr tOF tMOVIE expr  */
-#line 437 "engines/director/lingo/lingo-gr.y"
+#line 438 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
@@ -2587,7 +2587,7 @@ yyreduce:
     break;
 
   case 93: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 443 "engines/director/lingo/lingo-gr.y"
+#line 444 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
@@ -2598,49 +2598,49 @@ yyreduce:
     break;
 
   case 94: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2616 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* asgn: tSET varorthe to expr '\n'  */
-#line 454 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 2622 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100: /* definevars: tGLOBAL idlist '\n'  */
-#line 459 "engines/director/lingo/lingo-gr.y"
+#line 460 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
 #line 2628 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* definevars: tPROPERTY idlist '\n'  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 461 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
 #line 2634 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102: /* definevars: tINSTANCE idlist '\n'  */
-#line 461 "engines/director/lingo/lingo-gr.y"
+#line 462 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
 #line 2640 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* ifstmt: tIF expr tTHEN stmt  */
-#line 464 "engines/director/lingo/lingo-gr.y"
+#line 465 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
@@ -2649,14 +2649,14 @@ yyreduce:
     break;
 
   case 104: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 468 "engines/director/lingo/lingo-gr.y"
+#line 469 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
 #line 2656 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 472 "engines/director/lingo/lingo-gr.y"
+#line 473 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
@@ -2667,7 +2667,7 @@ yyreduce:
     break;
 
   case 106: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 478 "engines/director/lingo/lingo-gr.y"
+#line 479 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
@@ -2676,7 +2676,7 @@ yyreduce:
     break;
 
   case 107: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 482 "engines/director/lingo/lingo-gr.y"
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
@@ -2685,35 +2685,35 @@ yyreduce:
     break;
 
   case 108: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
 #line 2692 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 492 "engines/director/lingo/lingo-gr.y"
+#line 493 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 495 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* tell: tTELL expr tTO stmtoneliner  */
-#line 498 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
@@ -2722,387 +2722,393 @@ yyreduce:
     break;
 
   case 113: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* stmtlist: %empty  */
-#line 506 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.nodelist) = new NodeList; }
+  case 114: /* when: tWHEN ID tTHEN expr  */
+#line 507 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
 #line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* nonemptystmtlist: stmtlistline  */
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 115: /* stmtlist: %empty  */
+#line 509 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.nodelist) = new NodeList; }
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 117: /* nonemptystmtlist: stmtlistline  */
+#line 514 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2746 "engines/director/lingo/lingo-gr.cpp"
+#line 2752 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 517 "engines/director/lingo/lingo-gr.y"
+  case 118: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2756 "engines/director/lingo/lingo-gr.cpp"
+#line 2762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* stmtlistline: '\n'  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 119: /* stmtlistline: '\n'  */
+#line 527 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2762 "engines/director/lingo/lingo-gr.cpp"
+#line 2768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 531 "engines/director/lingo/lingo-gr.y"
+  case 121: /* simpleexpr_noparens_nounarymath: tINT  */
+#line 534 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2768 "engines/director/lingo/lingo-gr.cpp"
+#line 2774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 532 "engines/director/lingo/lingo-gr.y"
+  case 122: /* simpleexpr_noparens_nounarymath: tFLOAT  */
+#line 535 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2774 "engines/director/lingo/lingo-gr.cpp"
+#line 2780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 533 "engines/director/lingo/lingo-gr.y"
+  case 123: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
+#line 536 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2780 "engines/director/lingo/lingo-gr.cpp"
+#line 2786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 534 "engines/director/lingo/lingo-gr.y"
+  case 124: /* simpleexpr_noparens_nounarymath: tSTRING  */
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2786 "engines/director/lingo/lingo-gr.cpp"
+#line 2792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 125: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2792 "engines/director/lingo/lingo-gr.cpp"
+#line 2798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 536 "engines/director/lingo/lingo-gr.y"
+  case 126: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2798 "engines/director/lingo/lingo-gr.cpp"
+#line 2804 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* var: ID  */
-#line 541 "engines/director/lingo/lingo-gr.y"
+  case 129: /* var: ID  */
+#line 544 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2804 "engines/director/lingo/lingo-gr.cpp"
+#line 2810 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* list: '[' exprlist ']'  */
-#line 551 "engines/director/lingo/lingo-gr.y"
+  case 132: /* list: '[' exprlist ']'  */
+#line 554 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2810 "engines/director/lingo/lingo-gr.cpp"
+#line 2816 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* list: '[' ':' ']'  */
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 133: /* list: '[' ':' ']'  */
+#line 555 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2816 "engines/director/lingo/lingo-gr.cpp"
+#line 2822 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* list: '[' proplist ']'  */
-#line 553 "engines/director/lingo/lingo-gr.y"
+  case 134: /* list: '[' proplist ']'  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2822 "engines/director/lingo/lingo-gr.cpp"
+#line 2828 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* proplist: proppair  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 135: /* proplist: proppair  */
+#line 559 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* proplist: proplist ',' proppair  */
-#line 560 "engines/director/lingo/lingo-gr.y"
+  case 136: /* proplist: proplist ',' proppair  */
+#line 563 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2839 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 136: /* proppair: tSYMBOL ':' expr  */
-#line 565 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* proppair: ID ':' expr  */
-#line 566 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
+  case 137: /* proppair: tSYMBOL ':' expr  */
+#line 568 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* proppair: tSTRING ':' expr  */
-#line 567 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
+  case 138: /* proppair: ID ':' expr  */
+#line 569 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* parens: '(' expr ')'  */
+  case 139: /* proppair: tSTRING ':' expr  */
 #line 570 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = (yyvsp[-1].node); }
+                                                { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 2863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* unarymath: '+' simpleexpr  */
-#line 572 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = (yyvsp[0].node); }
+  case 140: /* parens: '(' expr ')'  */
+#line 573 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = (yyvsp[-1].node); }
 #line 2869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* unarymath: '-' simpleexpr  */
-#line 573 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
+  case 141: /* unarymath: '+' simpleexpr  */
+#line 575 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = (yyvsp[0].node); }
 #line 2875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* expr: expr '+' expr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 142: /* unarymath: '-' simpleexpr  */
+#line 576 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
 #line 2881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* expr: expr '-' expr  */
-#line 592 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 149: /* expr: expr '+' expr  */
+#line 594 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* expr: expr '*' expr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 150: /* expr: expr '-' expr  */
+#line 595 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* expr: expr '/' expr  */
-#line 594 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 151: /* expr: expr '*' expr  */
+#line 596 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* expr: expr tMOD expr  */
-#line 595 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 152: /* expr: expr '/' expr  */
+#line 597 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* expr: expr '>' expr  */
-#line 596 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 153: /* expr: expr tMOD expr  */
+#line 598 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* expr: expr '<' expr  */
-#line 597 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 154: /* expr: expr '>' expr  */
+#line 599 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* expr: expr tEQ expr  */
-#line 598 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 155: /* expr: expr '<' expr  */
+#line 600 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* expr: expr tNEQ expr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 156: /* expr: expr tEQ expr  */
+#line 601 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* expr: expr tGE expr  */
-#line 600 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 157: /* expr: expr tNEQ expr  */
+#line 602 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2935 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* expr: expr tLE expr  */
-#line 601 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 158: /* expr: expr tGE expr  */
+#line 603 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* expr: expr tAND expr  */
-#line 602 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 159: /* expr: expr tLE expr  */
+#line 604 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2947 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* expr: expr tOR expr  */
-#line 603 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 160: /* expr: expr tAND expr  */
+#line 605 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* expr: expr '&' expr  */
-#line 604 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 161: /* expr: expr tOR expr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* expr: expr tCONCAT expr  */
-#line 605 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 162: /* expr: expr '&' expr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr: expr tCONTAINS expr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 163: /* expr: expr tCONCAT expr  */
+#line 608 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr: expr tSTARTS expr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 164: /* expr: expr tCONTAINS expr  */
+#line 609 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 615 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 165: /* expr: expr tSTARTS expr  */
+#line 610 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 167: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 618 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 617 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 168: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 619 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 2995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 618 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 169: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 620 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 619 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 170: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 621 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 620 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 171: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 622 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 621 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 172: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 623 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 622 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 173: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 624 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 623 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 174: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 625 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 624 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 175: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 626 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 625 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 176: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 627 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 177: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 628 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 178: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 629 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 628 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 179: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 630 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 180: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 631 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3067 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 181: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3073 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 631 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
+  case 182: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 633 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* exprlist: %empty  */
+  case 183: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
 #line 634 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.nodelist) = new NodeList; }
+                                                { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 3085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* nonemptyexprlist: expr  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+  case 184: /* exprlist: %empty  */
+#line 637 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.nodelist) = new NodeList; }
+#line 3091 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 186: /* nonemptyexprlist: expr  */
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 187: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 645 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3102 "engines/director/lingo/lingo-gr.cpp"
+#line 3108 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3112 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3301,7 +3307,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 647 "engines/director/lingo/lingo-gr.y"
+#line 650 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 640ab942bd..d7f080a388 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -166,7 +166,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 // STATEMENT
 %type<node> stmt stmtoneliner
 %type<node> proc asgn definevars
-%type<node> ifstmt ifelsestmt loop tell
+%type<node> ifstmt ifelsestmt loop tell when
 %type<nodelist> cmdargs frameargs stmtlist nonemptystmtlist
 %type<node> stmtlistline
 
@@ -331,7 +331,7 @@ ID: tVARID
 	| tTO			{ $$ = new Common::String("to"); }
 	| tASSERTERROR	{ $$ = new Common::String("scummvmAssertError"); }
 	| tSPRITE		{ $$ = new Common::String("sprite"); }
-	| tWHEN			{ $$ = new Common::String("when"); }
+	// | tWHEN			{ $$ = new Common::String("when"); }
 	| tWHILE		{ $$ = new Common::String("while"); }
 	| tWINDOW		{ $$ = new Common::String("window"); }
 	| tWITH			{ $$ = new Common::String("with"); }
@@ -362,6 +362,7 @@ stmt: stmtoneliner
 	| ifelsestmt
 	| loop
 	| tell
+	| when
 	;
 
 stmtoneliner: proc
@@ -503,6 +504,8 @@ tell: tTELL expr tTO stmtoneliner				{
 		$$ = new TellNode($expr, $stmtlist); }
 	;
 
+when: tWHEN ID tTHEN expr			{ $$ = new WhenNode($ID, $expr); } ;
+
 stmtlist: /* empty */				{ $$ = new NodeList; }
 	| nonemptystmtlist
 	;


Commit: 5915ded25be135c86d86cb9ff69dd3a45a8155a9
    https://github.com/scummvm/scummvm/commit/5915ded25be135c86d86cb9ff69dd3a45a8155a9
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Remove outdated comment

Changed paths:
    engines/director/lingo/lingo-preprocessor.cpp


diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index bec5b18121..a3e6a020b6 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -169,9 +169,6 @@ Common::String LingoCompiler::codePreprocessor(const char *s, LingoArchive *arch
 	s = tmp.c_str();
 	res.clear();
 
-	// Preprocess if statements
-	// Here we add ' end if' at end of each statement, which lets us
-	// make the grammar very straightforward
 	Common::String line, tok, res1;
 	int linenumber = 1;
 	bool defFound = false;


Commit: 744fbc8628b31f7446187d8d5bed67798dd8582f
    https://github.com/scummvm/scummvm/commit/744fbc8628b31f7446187d8d5bed67798dd8582f
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement intersects/within

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index d3e639c80c..b022f82f34 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -61,6 +61,8 @@ struct UnaryOpNode;
 struct BinaryOpNode;
 struct FrameNode;
 struct MovieNode;
+struct IntersectsNode;
+struct WithinNode;
 
 typedef Common::Array<Node *> NodeList;
 typedef Common::Array<Common::String *> IDList;
@@ -110,7 +112,9 @@ enum NodeType {
 	kUnaryOpNode,
 	kBinaryOpNode,
 	kFrameNode,
-	kMovieNode
+	kMovieNode,
+	kIntersectsNode,
+	kWithinNode
 };
 
 /* NodeVisitor */
@@ -155,6 +159,8 @@ public:
 	virtual void visitBinaryOpNode(BinaryOpNode *node) = 0;
 	virtual void visitFrameNode(FrameNode *node) = 0;
 	virtual void visitMovieNode(MovieNode *node) = 0;
+	virtual void visitIntersectsNode(IntersectsNode *node) = 0;
+	virtual void visitWithinNode(WithinNode *node) = 0;
 };
 
 /* Node */
@@ -732,6 +738,40 @@ struct MovieNode : ExprNode {
 	}
 };
 
+/* IntersectsNode */
+
+struct IntersectsNode : ExprNode {
+	Node *sprite1;
+	Node *sprite2;
+
+	IntersectsNode(Node *sprite1In, Node *sprite2In)
+		: ExprNode(kIntersectsNode), sprite1(sprite1In), sprite2(sprite2In) {}
+	virtual ~IntersectsNode() {
+		delete sprite1;
+		delete sprite2;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitIntersectsNode(this);
+	}
+};
+
+/* WithinNode */
+
+struct WithinNode : ExprNode {
+	Node *sprite1;
+	Node *sprite2;
+
+	WithinNode(Node *sprite1In, Node *sprite2In)
+		: ExprNode(kWithinNode), sprite1(sprite1In), sprite2(sprite2In) {}
+	virtual ~WithinNode() {
+		delete sprite1;
+		delete sprite2;
+	}
+	virtual void accept(NodeVisitor *visitor) {
+		visitor->visitWithinNode(this);
+	}
+};
+
 } // End of namespace Director
 
 #endif
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index e62d058ffe..c7c0824a87 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -862,4 +862,20 @@ void LingoCompiler::visitMovieNode(MovieNode *node) {
 	compile(node->arg);
 }
 
+/* IntersectsNode */
+
+void LingoCompiler::visitIntersectsNode(IntersectsNode *node) {
+	compile(node->sprite1);
+	compile(node->sprite2);
+	code1(LC::c_intersects);
+};
+
+/* WithinNode */
+
+void LingoCompiler::visitWithinNode(WithinNode *node) {
+	compile(node->sprite1);
+	compile(node->sprite2);
+	code1(LC::c_within);
+};
+
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index fe43dafab3..32f4cf01d7 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -112,6 +112,8 @@ public:
 	virtual void visitBinaryOpNode(BinaryOpNode *node);
 	virtual void visitFrameNode(FrameNode *node);
 	virtual void visitMovieNode(MovieNode *node);
+	virtual void visitIntersectsNode(IntersectsNode *node);
+	virtual void visitWithinNode(WithinNode *node);
 
 private:
 	int parse(const char *code);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index c28a7b5da5..ee0e2cd8a7 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -289,8 +289,9 @@ enum yysymbol_kind_t
   YYSYMBOL_simpleexpr_nounarymath = 134,   /* simpleexpr_nounarymath  */
   YYSYMBOL_expr = 135,                     /* expr  */
   YYSYMBOL_expr_nounarymath = 136,         /* expr_nounarymath  */
-  YYSYMBOL_exprlist = 137,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 138          /* nonemptyexprlist  */
+  YYSYMBOL_sprite = 137,                   /* sprite  */
+  YYSYMBOL_exprlist = 138,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 139          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -610,18 +611,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  117
+#define YYFINAL  119
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2625
+#define YYLAST   2789
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  93
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  46
+#define YYNNTS  47
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  187
+#define YYNRULES  191
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  353
+#define YYNSTATES  361
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -694,9 +695,10 @@ static const yytype_int16 yyrline[] =
      546,   550,   554,   555,   556,   559,   563,   568,   569,   570,
      573,   575,   576,   579,   580,   581,   588,   589,   593,   594,
      595,   596,   597,   598,   599,   600,   601,   602,   603,   604,
-     605,   606,   607,   608,   609,   610,   617,   618,   619,   620,
+     605,   606,   607,   608,   609,   610,   611,   618,   619,   620,
      621,   622,   623,   624,   625,   626,   627,   628,   629,   630,
-     631,   632,   633,   634,   637,   638,   641,   645
+     631,   632,   633,   634,   635,   636,   639,   640,   643,   644,
+     647,   651
 };
 #endif
 
@@ -735,7 +737,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "stmtlistline", "simpleexpr_noparens_nounarymath", "var", "varorchunk",
   "varorthe", "list", "proplist", "proppair", "parens", "unarymath",
   "simpleexpr", "simpleexpr_nounarymath", "expr", "expr_nounarymath",
-  "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -759,7 +761,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-237)
+#define YYPACT_NINF (-258)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -773,42 +775,43 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1398,  -237,  -237,  -237,  -237,  -237,  -237,   -34,  -237,  2319,
-     931,  1010,  -237,  -237,  2319,  -237,   -12,  -237,  -237,  1089,
-     -26,  2319,  -237,  2319,  -237,  -237,  2319,  -237,   931,  2319,
-    -237,  -237,  -237,  -237,  -237,  -237,  -237,  -237,  -237,  -237,
-    -237,  -237,  -237,  -237,  1010,  2319,  2319,  2201,  -237,    12,
-    1398,  -237,  -237,  -237,  -237,  1089,  -237,  -237,  -237,  -237,
-    -237,  -237,  -237,  -237,  -237,  -237,   -56,  -237,  -237,  -237,
-    -237,  -237,  -237,  -237,   -38,   -47,  -237,  -237,  -237,  -237,
-    1010,  1010,  1010,  1010,  1010,   850,   445,   -35,   -10,    -8,
-    -237,  -237,  -237,  -237,  -237,  -237,   526,  1010,    81,  2319,
-      -2,    -1,   607,  2319,  1010,  -237,  -237,   -27,    33,    11,
-      19,    20,    23,   339,    24,  2319,  -237,  -237,  -237,    26,
-     688,  -237,  -237,  2319,   769,  2506,  -237,  -237,  -237,  -237,
-    2340,     6,    21,    25,   -64,   -32,  -237,  2506,    27,     3,
-    1010,  -237,  -237,    80,  1010,  1010,  1010,  1010,  1168,  1168,
-    1326,  1010,  1010,  1247,  1010,  1010,  1010,  1010,  1010,  1010,
-    1010,  1010,  -237,  -237,  -237,  2393,  2353,  1957,  1010,  1010,
-    1010,  1010,    43,  -237,  -237,  2319,  2319,  2319,    67,  2406,
-    -237,  -237,  1010,  1010,   -66,  -237,  -237,  -237,  2201,  2018,
-    -237,    51,  -237,  -237,    96,  2541,  1010,  -237,  1010,  1010,
-    -237,  1010,  2260,  -237,  -237,  1010,    50,  1010,    44,    44,
-      44,    44,   -18,   -18,  -237,    64,    44,    44,    44,    44,
-      64,   -46,   -46,  -237,  -237,     3,  1010,  1010,  1010,  1010,
-    1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,
-    1010,  1010,  1010,  1010,  2018,   116,  2018,  -237,    63,    65,
-      66,  1010,  2018,  2443,  2506,  2319,  -237,  -237,    68,  -237,
-    -237,  -237,  -237,  -237,  1521,  -237,  -237,  2018,  1010,   -31,
-    2506,  2506,  2506,     6,    21,    58,  -237,  2506,  -237,  2506,
-      44,    44,    44,    44,   -18,   -18,  -237,    64,    44,    44,
-      44,    44,    64,   -46,   -46,  -237,  -237,     3,  1459,  2079,
-    2018,  -237,  -237,  -237,   130,  1582,  -237,  2319,   -66,    69,
-    -237,  1650,  2506,  -237,  2140,    82,  2018,  -237,   124,  1010,
-      83,    84,  -237,  -237,  2319,  2018,  -237,  -237,  1711,  1010,
-    2456,  -237,  2018,    -5,  -237,  1773,    87,  2493,  2018,  2018,
-    -237,  2319,    88,  -237,  2018,  1835,  -237,  -237,  1896,    92,
-      93,  -237,  -237
+    1490,  -258,  -258,  -258,  -258,  -258,  -258,   -23,  -258,  2411,
+     944,  1023,  -258,  -258,  2411,  -258,   -12,  -258,  -258,  1102,
+      -6,  2411,  -258,  2411,  -258,  -258,  2411,  -258,   944,  2411,
+    -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,
+    -258,  -258,  -258,  -258,  1023,  2411,  2411,  2293,  -258,    11,
+    1490,  -258,  -258,  -258,  -258,  1102,  -258,  -258,  -258,  -258,
+    -258,  -258,  -258,  -258,  -258,  -258,   -21,  -258,  -258,  -258,
+    -258,  -258,  -258,  -258,   -11,   -44,  -258,  -258,  -258,  -258,
+    1023,  1023,  1181,  1023,  1181,  1181,   863,   458,   -69,   -10,
+      -9,  -258,  -258,  -258,  -258,  -258,  -258,   539,  -258,  1023,
+     348,  2411,    -8,    -5,   620,  2411,  1023,  -258,  -258,   -20,
+      26,    -4,    -3,    -1,     2,   144,     8,  2411,  -258,  -258,
+    -258,    16,   701,  -258,  -258,  2411,   782,  2657,  -258,  2622,
+    -258,  -258,  -258,  2432,     5,    15,   -17,   -68,   -51,  -258,
+    2657,     1,    -7,  1023,  -258,  -258,    69,  1023,  1023,  1023,
+    1023,  1260,  1260,  1418,  1023,  1023,  1339,  1023,  1023,  1023,
+    1023,  1023,  1023,  1023,  1023,  -258,  -258,  -258,  2485,  -258,
+    2445,  2049,  1023,  1023,  1023,  1023,    23,  -258,  -258,  2411,
+    2411,  2411,    58,  2498,  -258,  -258,  1023,  1023,   -58,  -258,
+    -258,  -258,  2293,  2110,  -258,    25,  -258,  -258,    79,  2670,
+    1181,  1181,  1023,  -258,  1023,  1023,  -258,  1023,  2352,  -258,
+    -258,  1023,    27,  1023,    38,    38,    38,    38,  2705,  2705,
+    -258,    47,    38,    38,    38,    38,    47,   -26,   -26,  -258,
+    -258,    -7,  1023,  1023,  1023,  1023,  1023,  1023,  1023,  1023,
+    1023,  1023,  1023,  1023,  1023,  1023,  1023,  1023,  1023,  1023,
+    2110,    90,  2110,  -258,    29,    40,    46,  1023,  2110,  2535,
+    2657,  2411,  -258,  -258,    48,  -258,  -258,  -258,  -258,  -258,
+    1613,  -258,  -258,  2110,  1023,  -258,  -258,   -35,  2657,  2657,
+    2657,     5,    15,    41,  -258,  2657,  -258,  2657,    38,    38,
+      38,    38,  2705,  2705,  -258,    47,    38,    38,    38,    38,
+      47,   -26,   -26,  -258,  -258,    -7,  1551,  2171,  2110,  -258,
+    -258,  -258,    85,  1674,  -258,  2411,   -58,    55,  -258,  1742,
+    2657,  -258,  2232,    57,  2110,  -258,   102,  1023,    62,    64,
+    -258,  -258,  2411,  2110,  -258,  -258,  1803,  1023,  2548,  -258,
+    2110,   -18,  -258,  1865,    65,  2585,  2110,  2110,  -258,  2411,
+      66,  -258,  2110,  1927,  -258,  -258,  1988,    67,    68,  -258,
+    -258
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -824,54 +827,55 @@ static const yytype_uint8 yydefact[] =
        2,     3,     6,     7,     8,    82,     9,    63,    69,    70,
       71,    64,    65,    66,    67,    68,     0,    80,    40,    46,
       48,    50,    52,    61,     0,    60,   121,   122,   124,   123,
-      32,    39,    41,     0,     0,     0,   184,   129,     0,     0,
-     143,   127,   128,   144,   145,   148,    83,     0,     0,    59,
-       0,     0,    83,     0,     0,   129,   131,     0,     0,     0,
-       0,     0,     0,     0,     0,    59,    81,     1,     4,     0,
-      83,    79,   100,     0,    89,    90,   125,   141,   142,    87,
-       0,   124,   123,     0,   129,     0,   135,   186,     0,   185,
-     184,    74,    75,    42,     0,     0,     0,     0,    26,    44,
-      38,     0,     0,    49,     0,     0,     0,     0,     0,     0,
-       0,     0,   146,   147,   166,    85,     0,     0,     0,     0,
-       0,     0,     0,    78,    73,    35,    25,    27,     0,     0,
-      98,    99,     0,     0,    13,    76,    77,   102,     0,   115,
-     101,     0,    72,    62,    42,    93,     0,   140,     0,     0,
-     133,     0,     0,   134,   132,     0,     0,     0,   158,   159,
-     156,   157,   160,   161,   153,   163,   164,   165,   155,   154,
-     162,   149,   150,   151,   152,    84,     0,     0,     0,     0,
+      32,    39,    41,    53,     0,     0,     0,   188,   129,     0,
+       0,   143,   127,   128,   144,   145,   148,    83,   149,     0,
+       0,    59,     0,     0,    83,     0,     0,   129,   131,     0,
+       0,     0,     0,     0,     0,     0,     0,    59,    81,     1,
+       4,     0,    83,    79,   100,     0,    89,    90,   125,     0,
+     141,   142,    87,     0,   124,   123,     0,   129,     0,   135,
+     190,     0,   189,   188,    74,    75,    42,     0,     0,     0,
+       0,    26,    44,    38,     0,     0,    49,     0,     0,     0,
+       0,     0,     0,     0,     0,   146,   147,   167,    85,   168,
+       0,     0,     0,     0,     0,     0,     0,    78,    73,    35,
+      25,    27,     0,     0,    98,    99,     0,     0,    13,    76,
+      77,   102,     0,   115,   101,     0,    72,    62,    42,    93,
+       0,     0,     0,   140,     0,     0,   133,     0,     0,   134,
+     132,     0,     0,     0,   159,   160,   157,   158,   161,   162,
+     154,   164,   165,   166,   156,   155,   163,   150,   151,   152,
+     153,    84,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   115,   103,   115,   130,     0,     0,
-       0,     0,   115,     0,   114,     0,    17,    18,    11,    14,
-      15,   112,   119,   120,     0,   116,   117,   115,     0,     0,
-     139,   137,   138,     0,     0,     0,   136,   187,   126,    92,
-     176,   177,   174,   175,   178,   179,   171,   181,   182,   183,
-     173,   172,   180,   167,   168,   169,   170,    86,     0,     0,
-      10,    94,    95,    96,     0,     0,    97,    59,     0,     0,
-     118,    20,    91,    88,     0,     0,   115,   105,     0,     0,
-       0,     0,    16,   113,    21,   115,   107,   104,     0,     0,
-       0,   109,   115,     0,    22,     0,     0,     0,   115,    12,
-      19,     0,     0,   106,   115,     0,    23,   108,     0,     0,
-       0,   110,   111
+     115,   103,   115,   130,     0,     0,     0,     0,   115,     0,
+     114,     0,    17,    18,    11,    14,    15,   112,   119,   120,
+       0,   116,   117,   115,     0,   186,   187,     0,   139,   137,
+     138,     0,     0,     0,   136,   191,   126,    92,   178,   179,
+     176,   177,   180,   181,   173,   183,   184,   185,   175,   174,
+     182,   169,   170,   171,   172,    86,     0,     0,    10,    94,
+      95,    96,     0,     0,    97,    59,     0,     0,   118,    20,
+      91,    88,     0,     0,   115,   105,     0,     0,     0,     0,
+      16,   113,    21,   115,   107,   104,     0,     0,     0,   109,
+     115,     0,    22,     0,     0,     0,   115,    12,    19,     0,
+       0,   106,   115,     0,    23,   108,     0,     0,     0,   110,
+     111
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -237,  -237,  -237,   136,  -237,  -237,  -237,  -237,  -237,  -115,
-    -237,  -237,     0,   -28,  -237,     4,   -44,  -237,    -6,   166,
-    -237,  -237,  -237,  -237,  -237,  -237,  -237,  -237,  -236,  -237,
-    -228,   -45,   -19,  -108,  -237,  -237,  -237,    -7,   -29,  -237,
-      10,  -237,   205,    72,    57,  -155
+    -258,  -258,  -258,   105,  -258,  -258,  -258,  -258,  -258,  -160,
+    -258,  -258,     0,   -28,  -258,     3,   -43,  -258,     6,   129,
+    -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -240,  -258,
+    -257,   -67,   -19,  -109,  -258,  -258,  -258,   -50,   -62,  -258,
+     -77,  -258,   210,    33,   -56,    30,  -158
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    49,    50,    51,    52,    53,   257,   258,   259,   260,
-      54,   333,    87,    74,    75,   263,    57,    58,    88,    89,
-      59,   182,    60,    61,    62,    63,    64,    65,   264,   265,
-     266,    90,    91,   248,   107,    92,   135,   136,    93,    94,
-      95,   164,   137,   165,   138,   139
+       0,    49,    50,    51,    52,    53,   263,   264,   265,   266,
+      54,   341,    88,    74,    75,   269,    57,    58,    89,    90,
+      59,   186,    60,    61,    62,    63,    64,    65,   270,   271,
+     272,    91,    92,   254,   109,    93,   138,   139,    94,    95,
+      96,   167,   140,   168,    98,   141,   142
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -879,371 +883,412 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      55,   112,   106,   116,    56,    66,   225,   255,   298,    73,
-     300,   170,   117,   101,    99,   180,   305,   114,   103,   104,
-     256,   105,   110,   108,   140,   181,   109,   100,   201,    73,
-     121,   311,   144,   145,   146,   147,   310,   159,   160,   170,
-     123,   269,   151,   152,   171,    73,   115,    55,   122,   119,
-      55,   162,    67,   140,    56,   202,   205,   162,   313,   203,
-     154,   155,   156,   157,   158,   159,   160,   163,   249,   250,
-     310,   172,   310,   163,   183,   162,   141,   310,   142,   162,
-     328,   340,   341,   310,   173,   174,   134,   191,   297,   335,
-     205,   163,   126,   127,   128,   163,   339,   184,   198,    73,
-     310,   170,   345,   178,   151,   185,   186,   310,   348,   187,
-     190,   310,   192,   199,   207,    73,   200,   310,   204,   251,
-     310,   170,   167,   193,   156,   157,   158,   159,   160,   246,
-     268,   144,   145,   146,   147,   168,   169,   267,   170,   278,
-     299,   151,   152,   171,   261,   157,   158,   159,   160,   301,
-     201,   302,   303,   318,   308,   323,   247,   247,   247,   154,
-     155,   156,   157,   158,   159,   160,   329,    55,   327,   331,
-     332,   245,   319,   343,   347,   105,   105,   105,   351,   352,
-     144,   145,   146,   147,   168,   169,   118,   170,    55,    55,
-     151,   152,   171,   322,   111,   276,   195,   206,     0,     0,
-       0,     0,   275,     0,     0,     0,     0,     0,   154,   155,
-     156,   157,   158,   159,   160,    96,    98,     0,     0,     0,
-       0,     0,     0,     0,   102,     0,     0,     0,     0,     0,
-       0,     0,     0,    96,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    55,     0,    55,     0,     0,   113,
-       0,     0,    55,     0,     0,   307,     0,     0,     0,     0,
-     120,     0,     0,     0,    55,     0,     0,    55,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
-       0,     0,     0,     0,     0,   124,   125,     0,     0,     0,
-     130,     0,     0,     0,     0,     0,     0,     0,    55,    55,
-      55,     0,   166,   317,     0,    55,     0,    73,     0,   179,
-       0,    55,     0,     0,    55,     0,    55,     0,   326,     0,
-       0,     0,     0,     0,   334,    55,     0,     0,    55,     0,
-       0,     0,    55,     0,     0,    55,     0,     0,    55,    55,
-       0,   346,     0,     0,    55,    55,     0,     0,    55,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,     0,     0,     0,     0,
-       0,     0,     0,   212,   213,   214,   217,     0,     0,     0,
-       0,   188,     0,     0,     0,     0,     0,   253,   254,   144,
-     145,   146,   147,   168,   169,     0,   170,     0,     0,   151,
-     152,   171,     0,   270,   271,     0,   272,     0,     0,     0,
-     277,     0,   279,     0,     0,     0,     0,   154,   155,   156,
-     157,   158,   159,   160,     0,   189,     0,     0,     0,     0,
-       0,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,     0,     0,
-      76,     0,     0,     0,     0,    77,   304,     0,     1,   131,
-     132,     0,     0,     0,     2,     3,     4,     5,     6,     0,
-       0,     0,     8,   312,     0,     0,    12,    13,     0,    15,
-      68,    17,    18,     0,    69,    70,     0,    22,     0,    24,
-      25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
-      31,    82,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    71,     0,     0,     0,     0,
-       0,     0,    72,     0,   330,     0,    83,    84,     0,     0,
-       0,    76,     0,    97,   337,    86,    77,   133,     0,     1,
-      78,    79,     0,     0,     0,     2,     3,     4,     5,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    68,   143,    18,     0,    69,    70,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,   144,   145,   146,   147,
-     148,   149,    82,   150,    34,    35,   151,   152,   153,    37,
-      38,    39,    40,    41,    42,    43,    71,     0,     0,     0,
-       0,     0,     0,    72,   154,   155,   156,   157,   158,   159,
-     160,     0,    76,   161,    97,     0,    86,    77,     0,     0,
-       1,    78,    79,     0,     0,     0,     2,     3,     4,     5,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,   175,
-       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,   144,   145,   146,
-     147,   148,   149,    82,   150,   176,   177,   151,   152,   153,
-      37,    38,    39,    40,    41,    42,    43,    71,     0,     0,
-       0,     0,     0,     0,    72,   154,   155,   156,   157,   158,
-     159,   160,     0,    76,   161,    97,     0,    86,    77,     0,
-       0,     1,    78,    79,     0,     0,     0,     2,     3,     4,
-       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
+      55,   114,   108,    56,   118,   128,   231,   130,   131,    73,
+     306,   119,   308,   318,   101,   261,    66,   116,   313,   143,
+     143,   107,   184,   110,   207,   103,   111,   102,   262,    73,
+     165,   174,   185,   319,   112,   166,   208,   165,   105,   106,
+     209,   169,   166,   125,   277,    73,   117,    55,   169,   318,
+      55,   318,   211,    56,   321,   165,   318,   162,   163,   165,
+     166,   121,   318,    67,   166,   123,   169,   187,   348,   349,
+     169,   255,   256,   176,   206,   124,   144,   145,   177,   318,
+     211,   178,   188,   189,   336,   190,   318,   137,   191,   195,
+     318,   305,   210,   343,   194,   174,   318,   204,   154,   318,
+     347,    73,   196,   213,   174,   182,   353,   205,   326,   252,
+     257,   273,   356,   274,   307,   309,   286,    73,   159,   160,
+     161,   162,   163,   275,   276,   197,   310,   327,   160,   161,
+     162,   163,   311,   207,   316,   147,   148,   149,   150,   172,
+     173,   331,   174,   335,   337,   154,   155,   175,   339,   267,
+     340,   351,   355,   359,   360,   120,   330,   113,   284,   199,
+     253,   253,   253,   157,   158,   159,   160,   161,   162,   163,
+       0,    55,     0,   212,   251,     0,     0,     0,     0,   107,
+     107,   107,     0,     0,     0,     0,   192,     0,     0,     0,
+       0,     0,    55,    55,   147,   148,   149,   150,   172,   173,
+       0,   174,     0,     0,   154,   155,   175,     0,   283,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      97,   100,   157,   158,   159,   160,   161,   162,   163,   104,
+     193,     0,     0,     0,     0,     0,     0,     0,    97,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      55,     0,    55,     0,   115,     0,     0,     0,    55,     0,
+       0,   315,     0,     0,     0,   122,     0,     0,     0,     0,
+      55,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   329,     0,     0,
+     126,   127,     0,   129,     0,     0,   133,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    55,    55,    55,   170,
+     325,     0,     0,    55,     0,    73,   183,     0,     0,    55,
+       0,     0,    55,     0,    55,   334,     0,     0,     0,     0,
+       0,     0,   342,    55,     0,     0,    55,     0,     0,     0,
+      55,     0,     0,    55,     0,     0,    55,    55,     0,   354,
+       0,     0,    55,    55,     0,     0,    55,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,     0,     0,     0,     0,     0,     0,
+       0,     0,   218,   219,   220,   223,     0,     0,     0,   171,
+       0,     0,     0,     0,     0,     0,   259,   260,   147,   148,
+     149,   150,   172,   173,     0,   174,     0,     0,   154,   155,
+     175,     0,     0,     0,   278,   279,     0,   280,     0,     0,
+       0,   285,     0,   287,     0,     0,   157,   158,   159,   160,
+     161,   162,   163,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,     0,
+       0,     0,     0,    76,     0,     0,     0,   312,    77,     0,
+       0,     1,   134,   135,     0,     0,     0,     2,     3,     4,
+       5,     6,     0,     0,   320,     8,     0,     0,     0,    12,
       13,     0,    15,    68,    17,    18,     0,    69,    70,     0,
-      22,     0,    24,    25,     0,    27,     0,     0,   144,   145,
-     146,   147,   148,   149,    82,   150,    34,    35,   151,   152,
-     153,    37,    38,    39,    40,    41,    42,    43,    71,     0,
-       0,     0,     0,     0,     0,    72,   154,   155,   156,   157,
-     158,   159,   160,     0,    76,   161,    97,     0,    86,    77,
-       0,     0,     1,    78,    79,     0,     0,     0,     2,     3,
+      22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
+       0,     0,    30,    31,    82,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    83,    42,    43,    71,     0,
+       0,     0,     0,     0,     0,    72,     0,   338,     0,    84,
+      85,     0,     0,     0,    76,     0,    99,   345,    87,    77,
+     136,     0,     1,    78,    79,     0,     0,     0,     2,     3,
        4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    68,   194,    18,     0,    69,    70,
-       0,    22,     0,    24,    25,     0,    27,     0,     0,   144,
-     145,   146,   147,   148,   149,    82,   150,    34,    35,   151,
-     152,   153,    37,    38,    39,    40,    41,    42,    43,    71,
-       0,     0,     0,     0,     0,     0,    72,   154,   155,   156,
-     157,   158,   159,   160,     0,    76,     0,    97,     0,    86,
+      12,    13,     0,    15,    68,   146,    18,     0,    69,    70,
+       0,    22,     0,    24,    25,     0,    27,     0,     0,   147,
+     148,   149,   150,   151,   152,    82,   153,    34,    35,   154,
+     155,   156,    37,    38,    39,    40,    83,    42,    43,    71,
+       0,     0,     0,     0,     0,     0,    72,   157,   158,   159,
+     160,   161,   162,   163,     0,    76,   164,    99,     0,    87,
       77,     0,     0,     1,    78,    79,     0,     0,     0,     2,
        3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    68,    17,    18,     0,    69,
+       0,    12,   179,     0,    15,    68,    17,    18,     0,    69,
       70,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,    30,    31,    82,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      71,     0,     0,     0,     0,     0,     0,    72,     0,     0,
-       0,    83,    84,     0,     0,     0,    76,     0,    97,   129,
-      86,    77,     0,     0,     1,    78,    79,     0,     0,     0,
-       2,     3,     4,     5,     6,     0,     0,     0,    80,     0,
-       0,     0,    12,    13,     0,    81,    68,    17,    18,     0,
+     147,   148,   149,   150,   151,   152,    82,   153,   180,   181,
+     154,   155,   156,    37,    38,    39,    40,    83,    42,    43,
+      71,     0,     0,     0,     0,     0,     0,    72,   157,   158,
+     159,   160,   161,   162,   163,     0,    76,   164,    99,     0,
+      87,    77,     0,     0,     1,    78,    79,     0,     0,     0,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    68,    17,    18,     0,
+      69,    70,     0,    22,     0,    24,    25,     0,    27,     0,
+       0,   147,   148,   149,   150,   151,   152,    82,   153,    34,
+      35,   154,   155,   156,    37,    38,    39,    40,    83,    42,
+      43,    71,     0,     0,     0,     0,     0,     0,    72,   157,
+     158,   159,   160,   161,   162,   163,     0,    76,   164,    99,
+       0,    87,    77,     0,     0,     1,    78,    79,     0,     0,
+       0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    68,   198,    18,
+       0,    69,    70,     0,    22,     0,    24,    25,     0,    27,
+       0,     0,   147,   148,   149,   150,   151,   152,    82,   153,
+      34,    35,   154,   155,   156,    37,    38,    39,    40,    83,
+      42,    43,    71,     0,     0,     0,     0,     0,     0,    72,
+     157,   158,   159,   160,   161,   162,   163,     0,    76,     0,
+      99,     0,    87,    77,     0,     0,     1,    78,    79,     0,
+       0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,    13,     0,    15,    68,    17,
+      18,     0,    69,    70,     0,    22,     0,    24,    25,     0,
+      27,     0,     0,     0,     0,     0,     0,    30,    31,    82,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
+      83,    42,    43,    71,     0,     0,     0,     0,     0,     0,
+      72,     0,     0,     0,    84,    85,     0,     0,     0,    76,
+       0,    99,   132,    87,    77,     0,     0,     1,    78,    79,
+       0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
+       0,    80,     0,     0,     0,    12,    13,     0,    81,    68,
+      17,    18,     0,    69,    70,     0,    22,     0,    24,    25,
+       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
+      82,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    83,    42,    43,    71,     0,     0,     0,     0,     0,
+       0,    72,     0,     0,     0,    84,    85,     0,    76,     0,
+       0,     0,    86,    77,    87,     0,     1,    78,    79,     0,
+       0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,    13,     0,    15,    68,    17,
+      18,     0,    69,    70,     0,    22,     0,    24,    25,     0,
+      27,     0,     0,     0,     0,     0,     0,    30,    31,    82,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
+      83,    42,    43,    71,     0,     0,     0,     0,     0,     0,
+      72,     0,     0,     0,    84,    85,     0,    76,     0,     0,
+       0,    99,    77,    87,     0,     1,    78,    79,     0,     0,
+       0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    68,    17,    18,
+       0,    69,    70,     0,    22,     0,    24,    25,     0,    27,
+       0,     0,     0,     0,     0,     0,    30,    31,    82,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    83,
+      42,    43,    71,     0,     0,     0,     0,     0,     0,    72,
+       0,     0,     0,    84,    85,     0,    76,     0,     0,     0,
+      86,    77,    87,     0,     1,    78,    79,     0,     0,     0,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    68,    17,    18,     0,
       69,    70,     0,    22,     0,    24,    25,     0,    27,     0,
        0,     0,     0,     0,     0,    30,    31,    82,    33,    34,
       35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    71,     0,     0,     0,     0,     0,     0,    72,     0,
-       0,     0,    83,    84,     0,    76,     0,     0,     0,    85,
-      77,    86,     0,     1,    78,    79,     0,     0,     0,     2,
+       0,     0,    84,    85,     0,    76,     0,     0,     0,    99,
+      77,    87,     0,     1,    78,    79,     0,     0,     0,     2,
        3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
        0,    12,    13,     0,    15,    68,    17,    18,     0,    69,
       70,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,    30,    31,    82,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+       0,     0,     0,     0,     0,     0,    82,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    83,    42,    43,
       71,     0,     0,     0,     0,     0,     0,    72,     0,     0,
-       0,    83,    84,     0,    76,     0,     0,     0,    97,    77,
-      86,     0,     1,    78,    79,     0,     0,     0,     2,     3,
+       0,    84,    85,     0,    76,     0,     0,     0,    99,    77,
+      87,     0,     1,    78,    79,     0,     0,     0,     2,     3,
        4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
       12,    13,     0,    15,    68,    17,    18,     0,    69,    70,
        0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
-       0,     0,     0,    30,    31,    82,    33,    34,    35,     0,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    71,
+       0,     0,     0,     0,     0,    82,    33,    34,    35,     0,
+       0,     0,    37,    38,    39,    40,    83,    42,    43,    71,
        0,     0,     0,     0,     0,     0,    72,     0,     0,     0,
-      83,    84,     0,    76,     0,     0,     0,    85,    77,    86,
+      84,    85,     0,    76,     0,     0,     0,    99,    77,    87,
        0,     1,    78,    79,     0,     0,     0,     2,     3,     4,
        5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
       13,     0,    15,    68,    17,    18,     0,    69,    70,     0,
       22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,     0,     0,    82,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    71,     0,
-       0,     0,     0,     0,     0,    72,     0,     0,     0,    83,
-      84,     0,    76,     0,     0,     0,    97,    77,    86,     0,
-       1,    78,    79,     0,     0,     0,     2,     3,     4,     5,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,     0,     0,    82,    33,    34,    35,     0,     0,     0,
-      37,    38,    39,    40,    41,    42,    43,    71,     0,     0,
-       0,     0,     0,     0,    72,     0,     0,     0,    83,    84,
-       0,    76,     0,     0,     0,    97,    77,    86,     0,     1,
-      78,    79,     0,     0,     0,     2,     3,     4,     5,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    68,    17,    18,     0,    69,    70,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
-       0,     0,    82,     0,    34,    35,     0,     0,     0,    37,
-      38,    39,    40,    41,    42,    43,    71,     0,     0,     0,
-       0,     0,     0,    72,     0,     0,     0,     0,     0,     0,
-       0,     1,     0,     0,    97,     0,    86,     2,     3,     4,
-       5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,     0,     1,     0,     0,    47,     0,     0,     2,     3,
-       4,     5,     6,   314,    48,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,     0,     0,   315,     1,     0,    47,     0,     0,     0,
-       2,     3,     4,     5,     6,   262,     0,     7,     8,     9,
+       0,     0,     0,     0,    82,     0,    34,    35,     0,     0,
+       0,    37,    38,    39,    40,    83,    42,    43,    71,     0,
+       0,     0,     0,     0,     0,    72,     0,     0,     0,     0,
+       0,     0,     0,     1,     0,     0,    99,     0,    87,     2,
+       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,     0,    22,    23,    24,    25,    26,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,     0,     1,     0,     0,    47,     0,     0,
+       2,     3,     4,     5,     6,   322,    48,     7,     8,     9,
       10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
       20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
       29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
       35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,     0,     0,     1,     0,   309,    47,     0,
-       0,     2,     3,     4,     5,     6,     0,   262,     7,     8,
+      43,    44,    45,     0,     0,   323,     1,     0,    47,     0,
+       0,     0,     2,     3,     4,     5,     6,   268,     0,     7,
+       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
+      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
+      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,     0,     0,     1,     0,   317,
+      47,     0,     0,     2,     3,     4,     5,     6,     0,   268,
+       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
+      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
+       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     0,     0,   328,
+       0,    47,     0,     0,     0,     1,     0,     0,   332,     0,
+     268,     2,     3,     4,     5,     6,     0,     0,     7,     8,
        9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
       19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,     0,   320,     0,    47,
-       0,     0,     0,     1,     0,     0,   324,     0,   262,     2,
-       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
-      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
-      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,     0,     0,     1,     0,     0,    47,     0,     0,
-       2,     3,     4,     5,     6,     0,   262,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,     0,     0,   336,     1,     0,    47,     0,
-       0,     0,     2,     3,     4,     5,     6,   262,     0,     7,
+      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
+       0,     0,     2,     3,     4,     5,     6,     0,   268,     7,
        8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
       18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
       27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
       33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     0,     0,   342,     1,     0,
-      47,     0,     0,     0,     2,     3,     4,     5,     6,   262,
+      41,    42,    43,    44,    45,     0,     0,   344,     1,     0,
+      47,     0,     0,     0,     2,     3,     4,     5,     6,   268,
        0,     7,     8,     9,    10,    11,    12,    13,     0,    15,
       16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
       25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,     0,     0,     1,
-     349,     0,    47,     0,     0,     2,     3,     4,     5,     6,
-       0,   262,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
-       1,   350,     0,    47,     0,     0,     2,     3,     4,     5,
-       6,     0,   262,     7,     8,     9,    10,    11,    12,    13,
+      39,    40,    41,    42,    43,    44,    45,     0,     0,   350,
+       1,     0,    47,     0,     0,     0,     2,     3,     4,     5,
+       6,   268,     0,     7,     8,     9,    10,    11,    12,    13,
        0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
       23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
        0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
-       0,     1,     0,     0,    47,     0,     0,     2,     3,     4,
-       5,     6,     0,   244,     7,     8,     9,    10,    11,    12,
+       0,     1,   357,     0,    47,     0,     0,     2,     3,     4,
+       5,     6,     0,   268,     7,     8,     9,    10,    11,    12,
       13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
       22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
        0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-       0,     0,     1,     0,     0,    47,     0,     0,     2,     3,
-       4,     5,     6,     0,   262,     7,     8,     9,    10,    11,
+       0,     0,     1,   358,     0,    47,     0,     0,     2,     3,
+       4,     5,     6,     0,   268,     7,     8,     9,    10,    11,
       12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
        0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
        0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
        0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,     0,     0,     1,     0,     0,    47,     0,     0,     2,
-       3,     4,     5,     6,     0,   316,     7,     8,     9,    10,
+       3,     4,     5,     6,     0,   250,     7,     8,     9,    10,
       11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
       21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
        0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
        0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,     0,     0,     1,     0,     0,    47,     0,     0,
-       2,     3,     4,     5,     6,     0,   325,     7,     8,     9,
-      10,     0,    12,    13,     0,    15,    16,    17,    18,    19,
-      69,    21,     0,    22,     0,    24,    25,     0,    27,    28,
+       2,     3,     4,     5,     6,     0,   268,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
       29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
       35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    71,    45,     1,   273,   274,     0,     0,    47,     2,
-       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    68,    17,    18,     0,    69,
-      70,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      71,     0,     1,     0,     0,     0,     0,    72,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    68,    17,    18,     0,    69,    70,
-       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    71,
-     144,   145,   146,   147,   168,   169,    72,   170,     0,     0,
-     151,   152,   171,   144,   145,   146,   147,   168,   169,     0,
-     170,     0,     0,   151,   152,   171,     0,     0,   154,   155,
-     156,   157,   158,   159,   160,     0,     0,   196,     0,   197,
-       0,   154,   155,   156,   157,   158,   159,   160,     0,     0,
-       0,     0,   197,   226,   227,   228,   229,   230,   231,     0,
-     232,     0,     0,   233,   234,   235,   144,   145,   146,   147,
-     168,   169,     0,   170,     0,     0,   151,   152,   171,     0,
-       0,   236,   237,   238,   239,   240,   241,   242,     0,     0,
-     243,     0,     0,     0,   154,   155,   156,   157,   158,   159,
-     160,     0,   252,   144,   145,   146,   147,   168,   169,     0,
-     170,     0,     0,   151,   152,   171,   144,   145,   146,   147,
-     168,   169,     0,   170,     0,     0,   151,   152,   171,     0,
-       0,   154,   155,   156,   157,   158,   159,   160,     0,   306,
-       0,     0,     0,     0,   154,   155,   156,   157,   158,   159,
-     160,     0,   338,   144,   145,   146,   147,   168,   169,     0,
-     170,     0,     0,   151,   152,   171,   144,   145,   146,   147,
-     168,   169,     0,   170,     0,     0,   151,   152,   171,     0,
-       0,   154,   155,   156,   157,   158,   159,   160,     0,   344,
-       0,     0,     0,     0,   154,   155,   156,   157,   158,   159,
-     160,   226,   227,   228,   229,   230,   231,     0,   232,     0,
-       0,   233,   234,   235,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   236,
-     237,   238,   239,   240,   241,   242
+      43,    44,    45,     0,     0,     1,     0,     0,    47,     0,
+       0,     2,     3,     4,     5,     6,     0,   324,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
+       0,     0,     2,     3,     4,     5,     6,     0,   333,     7,
+       8,     9,    10,     0,    12,    13,     0,    15,    16,    17,
+      18,    19,    69,    21,     0,    22,     0,    24,    25,     0,
+      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    71,    45,     1,   281,   282,     0,     0,
+      47,     2,     3,     4,     5,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    68,    17,    18,
+       0,    69,    70,     0,    22,     0,    24,    25,     0,    27,
+       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    71,     0,     1,     0,     0,     0,     0,    72,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    68,    17,    18,     0,
+      69,    70,     0,    22,     0,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    71,   147,   148,   149,   150,   172,   173,    72,   174,
+       0,     0,   154,   155,   175,   147,   148,   149,   150,   172,
+     173,     0,   174,     0,     0,   154,   155,   175,     0,     0,
+     157,   158,   159,   160,   161,   162,   163,     0,     0,   202,
+       0,   203,     0,   157,   158,   159,   160,   161,   162,   163,
+       0,     0,     0,     0,   203,   232,   233,   234,   235,   236,
+     237,     0,   238,     0,     0,   239,   240,   241,   147,   148,
+     149,   150,   172,   173,     0,   174,     0,     0,   154,   155,
+     175,     0,     0,   242,   243,   244,   245,   246,   247,   248,
+       0,     0,   249,     0,     0,     0,   157,   158,   159,   160,
+     161,   162,   163,     0,   258,   147,   148,   149,   150,   172,
+     173,     0,   174,     0,     0,   154,   155,   175,   147,   148,
+     149,   150,   172,   173,     0,   174,     0,     0,   154,   155,
+     175,     0,     0,   157,   158,   159,   160,   161,   162,   163,
+       0,   314,     0,     0,     0,     0,   157,   158,   159,   160,
+     161,   162,   163,     0,   346,   147,   148,   149,   150,   172,
+     173,     0,   174,     0,     0,   154,   155,   175,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   157,   158,   159,   160,   161,   162,   163,
+       0,   352,   147,   148,   149,   150,   172,   173,     0,   174,
+       0,     0,   154,   155,   175,     0,     0,     0,     0,     0,
+     200,   201,     0,     0,     0,     0,     0,     0,     0,     0,
+     157,   158,   159,   160,   161,   162,   163,   147,   148,   149,
+     150,   172,   173,     0,   174,     0,     0,   154,   155,   175,
+     232,   233,   234,   235,   236,   237,     0,   238,     0,     0,
+     239,   240,   241,     0,     0,   157,   158,   159,   160,   161,
+     162,   163,     0,     0,     0,     0,     0,     0,   242,   243,
+     244,   245,   246,   247,   248,   147,   148,   149,   150,     0,
+       0,     0,   174,     0,     0,   154,   155,   175,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   157,   158,   159,   160,   161,   162,   163
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,    21,    47,     0,    39,   161,    73,   244,     9,
-     246,    57,     0,    19,    14,    42,   252,    45,    44,    45,
-      86,    21,    28,    23,    88,    52,    26,    39,    92,    29,
-      86,   267,    50,    51,    52,    53,   264,    83,    84,    57,
-      87,   196,    60,    61,    62,    45,    46,    47,    86,    55,
-      50,    96,    86,    88,    50,    87,    87,   102,    89,    91,
-      78,    79,    80,    81,    82,    83,    84,    96,   176,   177,
-     298,    99,   300,   102,    41,   120,    86,   305,    86,   124,
-     316,    86,    87,   311,    86,    86,    86,   115,   243,   325,
-      87,   120,    82,    83,    84,   124,   332,    86,    92,    99,
-     328,    57,   338,   103,    60,    86,    86,   335,   344,    86,
-      86,   339,    86,    92,    34,   115,    91,   345,    91,    52,
-     348,    57,    41,   123,    80,    81,    82,    83,    84,    86,
-      34,    50,    51,    52,    53,    54,    55,    86,    57,    89,
-      24,    60,    61,    62,   188,    81,    82,    83,    84,    86,
-      92,    86,    86,    23,    86,    86,   175,   176,   177,    78,
-      79,    80,    81,    82,    83,    84,    42,   167,    86,    86,
-      86,   167,    42,    86,    86,   175,   176,   177,    86,    86,
-      50,    51,    52,    53,    54,    55,    50,    57,   188,   189,
-      60,    61,    62,   308,    28,   202,   124,   140,    -1,    -1,
-      -1,    -1,   202,    -1,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    10,    11,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    19,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   244,    -1,   246,    -1,    -1,    44,
-      -1,    -1,   252,    -1,    -1,   255,    -1,    -1,    -1,    -1,
-      55,    -1,    -1,    -1,   264,    -1,    -1,   267,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,
-      -1,    -1,    -1,    -1,    -1,    80,    81,    -1,    -1,    -1,
-      85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   298,   299,
-     300,    -1,    97,   299,    -1,   305,    -1,   307,    -1,   104,
-      -1,   311,    -1,    -1,   314,    -1,   316,    -1,   314,    -1,
-      -1,    -1,    -1,    -1,   324,   325,    -1,    -1,   328,    -1,
-      -1,    -1,   332,    -1,    -1,   335,    -1,    -1,   338,   339,
-      -1,   341,    -1,    -1,   344,   345,    -1,    -1,   348,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   168,   169,   170,   171,    -1,    -1,    -1,
-      -1,    42,    -1,    -1,    -1,    -1,    -1,   182,   183,    50,
-      51,    52,    53,    54,    55,    -1,    57,    -1,    -1,    60,
-      61,    62,    -1,   198,   199,    -1,   201,    -1,    -1,    -1,
-     205,    -1,   207,    -1,    -1,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    84,    -1,    86,    -1,    -1,    -1,    -1,
-      -1,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,    -1,    -1,
-       5,    -1,    -1,    -1,    -1,    10,   251,    -1,    13,    14,
-      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,   268,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    -1,    44,
-      45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    -1,   319,    -1,    81,    82,    -1,    -1,
-      -1,     5,    -1,    88,   329,    90,    10,    92,    -1,    13,
-      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
-      44,    45,    -1,    47,    -1,    -1,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,     5,    87,    88,    -1,    90,    10,    -1,    -1,
-      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      -1,    44,    45,    -1,    47,    -1,    -1,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    78,    79,    80,    81,    82,
-      83,    84,    -1,     5,    87,    88,    -1,    90,    10,    -1,
+       0,    29,    21,     0,    47,    82,   164,    84,    85,     9,
+     250,     0,   252,   270,    14,    73,    39,    45,   258,    88,
+      88,    21,    42,    23,    92,    19,    26,    39,    86,    29,
+      97,    57,    52,   273,    28,    97,    87,   104,    44,    45,
+      91,    97,   104,    87,   202,    45,    46,    47,   104,   306,
+      50,   308,    87,    50,    89,   122,   313,    83,    84,   126,
+     122,    55,   319,    86,   126,    86,   122,    41,    86,    87,
+     126,   180,   181,   101,    91,    86,    86,    86,    86,   336,
+      87,    86,    86,    86,   324,    86,   343,    87,    86,   117,
+     347,   249,    91,   333,    86,    57,   353,    92,    60,   356,
+     340,   101,    86,    34,    57,   105,   346,    92,    23,    86,
+      52,    86,   352,    34,    24,    86,    89,   117,    80,    81,
+      82,    83,    84,   200,   201,   125,    86,    42,    81,    82,
+      83,    84,    86,    92,    86,    50,    51,    52,    53,    54,
+      55,    86,    57,    86,    42,    60,    61,    62,    86,   192,
+      86,    86,    86,    86,    86,    50,   316,    28,   208,   126,
+     179,   180,   181,    78,    79,    80,    81,    82,    83,    84,
+      -1,   171,    -1,   143,   171,    -1,    -1,    -1,    -1,   179,
+     180,   181,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
+      -1,    -1,   192,   193,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    -1,   208,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      10,    11,    78,    79,    80,    81,    82,    83,    84,    19,
+      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     250,    -1,   252,    -1,    44,    -1,    -1,    -1,   258,    -1,
+      -1,   261,    -1,    -1,    -1,    55,    -1,    -1,    -1,    -1,
+     270,    -1,    -1,   273,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   315,    -1,    -1,
+      80,    81,    -1,    83,    -1,    -1,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   306,   307,   308,    99,
+     307,    -1,    -1,   313,    -1,   315,   106,    -1,    -1,   319,
+      -1,    -1,   322,    -1,   324,   322,    -1,    -1,    -1,    -1,
+      -1,    -1,   332,   333,    -1,    -1,   336,    -1,    -1,    -1,
+     340,    -1,    -1,   343,    -1,    -1,   346,   347,    -1,   349,
+      -1,    -1,   352,   353,    -1,    -1,   356,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   172,   173,   174,   175,    -1,    -1,    -1,    41,
+      -1,    -1,    -1,    -1,    -1,    -1,   186,   187,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    -1,   204,   205,    -1,   207,    -1,    -1,
+      -1,   211,    -1,   213,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,    -1,
+      -1,    -1,    -1,     5,    -1,    -1,    -1,   257,    10,    -1,
       -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
+      22,    23,    -1,    -1,   274,    27,    -1,    -1,    -1,    31,
       32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
-      42,    -1,    44,    45,    -1,    47,    -1,    -1,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    78,    79,    80,    81,
-      82,    83,    84,    -1,     5,    87,    88,    -1,    90,    10,
-      -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
+      -1,    -1,    -1,    -1,    -1,    77,    -1,   327,    -1,    81,
+      82,    -1,    -1,    -1,     5,    -1,    88,   337,    90,    10,
+      92,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
       21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
       31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
       -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,     5,    -1,    88,    -1,    90,
+      81,    82,    83,    84,    -1,     5,    87,    88,    -1,    90,
       10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
       20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
       -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
       40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
-      -1,    81,    82,    -1,    -1,    -1,     5,    -1,    88,    89,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,
+      80,    81,    82,    83,    84,    -1,     5,    87,    88,    -1,
       90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,
       19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
       -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
       39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,
+      -1,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,     5,    87,    88,
+      -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
+      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
+      -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,    47,
+      -1,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+      78,    79,    80,    81,    82,    83,    84,    -1,     5,    -1,
+      88,    -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,
+      -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,
+      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,     5,
+      -1,    88,    89,    90,    10,    -1,    -1,    13,    14,    15,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    -1,    42,    -1,    44,    45,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,
+      -1,    -1,    88,    10,    90,    -1,    13,    14,    15,    -1,
+      -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,
+      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,
+      -1,    88,    10,    90,    -1,    13,    14,    15,    -1,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
+      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
+      -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,    47,
+      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+      -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,
+      88,    10,    90,    -1,    13,    14,    15,    -1,    -1,    -1,
+      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
+      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
+      39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,
       -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
       59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
       69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
@@ -1252,7 +1297,7 @@ static const yytype_int16 yycheck[] =
       20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
       -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
       40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    58,    59,
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
       -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,    10,
@@ -1260,66 +1305,25 @@ static const yytype_int16 yycheck[] =
       21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
       31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
       -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    -1,    -1,    -1,    -1,    56,    57,    58,    59,    -1,
+      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
       -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,
       81,    82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,
       -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
       22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
       32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
       42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
-      82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
-      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    56,    57,    58,    59,    -1,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
-      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
-      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
-      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    56,    -1,    58,    59,    -1,    -1,    -1,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    13,    -1,    -1,    88,    -1,    90,    19,    20,    21,
-      22,    23,    -1,    -1,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    -1,
-      42,    43,    44,    45,    46,    47,    48,    49,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,
-      21,    22,    23,    24,    86,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    74,    13,    -1,    77,    -1,    -1,    -1,
-      19,    20,    21,    22,    23,    86,    -1,    26,    27,    28,
-      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    13,    -1,    76,    77,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
-      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    -1,    75,    -1,    77,
-      -1,    -1,    -1,    13,    -1,    -1,    16,    -1,    86,    19,
+      -1,    -1,    -1,    -1,    56,    -1,    58,    59,    -1,    -1,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    13,    -1,    -1,    88,    -1,    90,    19,
       20,    21,    22,    23,    -1,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    46,    47,    48,    49,
       -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,
-      19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
+      70,    71,    72,    -1,    13,    -1,    -1,    77,    -1,    -1,
+      19,    20,    21,    22,    23,    24,    86,    26,    27,    28,
       29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
       39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
       49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
@@ -1330,32 +1334,45 @@ static const yytype_int16 yycheck[] =
       37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
       47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
       57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    76,
+      77,    -1,    -1,    19,    20,    21,    22,    23,    -1,    86,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    75,
+      -1,    77,    -1,    -1,    -1,    13,    -1,    -1,    16,    -1,
+      86,    19,    20,    21,    22,    23,    -1,    -1,    26,    27,
+      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
+      -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    -1,    -1,    74,    13,    -1,
       77,    -1,    -1,    -1,    19,    20,    21,    22,    23,    86,
       -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
       35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
       45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
-      75,    -1,    77,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      13,    75,    -1,    77,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    86,    26,    27,    28,    29,    30,    31,    32,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
+      13,    -1,    77,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    86,    -1,    26,    27,    28,    29,    30,    31,    32,
       -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,
+      -1,    13,    75,    -1,    77,    -1,    -1,    19,    20,    21,
       22,    23,    -1,    86,    26,    27,    28,    29,    30,    31,
       32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
       42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
       -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,
+      -1,    -1,    13,    75,    -1,    77,    -1,    -1,    19,    20,
       21,    22,    23,    -1,    86,    26,    27,    28,    29,    30,
       31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
       -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
@@ -1369,46 +1386,65 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,
       19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
-      29,    -1,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    48,
+      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
+      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
       49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
       59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    13,    14,    15,    -1,    -1,    77,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    13,    -1,    -1,    -1,    -1,    77,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      50,    51,    52,    53,    54,    55,    77,    57,    -1,    -1,
-      60,    61,    62,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    -1,    -1,    87,    -1,    89,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    89,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      87,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84,    -1,    86,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84
+      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
+      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
+      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
+      -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
+      27,    28,    29,    -1,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    -1,    42,    -1,    44,    45,    -1,
+      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    13,    14,    15,    -1,    -1,
+      77,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
+      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
+      -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,    47,
+      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    13,    -1,    -1,    -1,    -1,    77,
+      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
+      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
+      39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,
+      -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    50,    51,    52,    53,    54,    55,    77,    57,
+      -1,    -1,    60,    61,    62,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
+      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    87,
+      -1,    89,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    -1,    89,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    87,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
+      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+      -1,    86,    50,    51,    52,    53,    54,    55,    -1,    57,
+      -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,
+      68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      78,    79,    80,    81,    82,    83,    84,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
+      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    50,    51,    52,    53,    -1,
+      -1,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1423,34 +1459,35 @@ static const yytype_uint8 yystos[] =
       95,    96,    97,    98,   103,   105,   108,   109,   110,   113,
      115,   116,   117,   118,   119,   120,    39,    86,    35,    39,
       40,    70,    77,   105,   106,   107,     5,    10,    14,    15,
-      27,    34,    56,    81,    82,    88,    90,   105,   111,   112,
-     124,   125,   128,   131,   132,   133,   135,    88,   135,   105,
-      39,   111,   135,    44,    45,   105,   125,   127,   105,   105,
-     111,   112,   106,   135,   106,   105,   109,     0,    96,   111,
-     135,    86,    86,    87,   135,   135,   133,   133,   133,    89,
-     135,    14,    15,    92,   105,   129,   130,   135,   137,   138,
-      88,    86,    86,    36,    50,    51,    52,    53,    54,    55,
-      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
-      84,    87,   124,   131,   134,   136,   135,    41,    54,    55,
-      57,    62,   106,    86,    86,    32,    58,    59,   105,   135,
-      42,    52,   114,    41,    86,    86,    86,    86,    42,    86,
-      86,   106,    86,   105,    36,   136,    87,    89,    92,    92,
-      91,    92,    87,    91,    91,    87,   137,    34,   135,   135,
+      27,    34,    56,    67,    81,    82,    88,    90,   105,   111,
+     112,   124,   125,   128,   131,   132,   133,   135,   137,    88,
+     135,   105,    39,   111,   135,    44,    45,   105,   125,   127,
+     105,   105,   111,   112,   106,   135,   106,   105,   109,     0,
+      96,   111,   135,    86,    86,    87,   135,   135,   133,   135,
+     133,   133,    89,   135,    14,    15,    92,   105,   129,   130,
+     135,   138,   139,    88,    86,    86,    36,    50,    51,    52,
+      53,    54,    55,    57,    60,    61,    62,    78,    79,    80,
+      81,    82,    83,    84,    87,   124,   131,   134,   136,   137,
+     135,    41,    54,    55,    57,    62,   106,    86,    86,    32,
+      58,    59,   105,   135,    42,    52,   114,    41,    86,    86,
+      86,    86,    42,    86,    86,   106,    86,   105,    36,   136,
+      68,    69,    87,    89,    92,    92,    91,    92,    87,    91,
+      91,    87,   138,    34,   135,   135,   135,   135,   135,   135,
      135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   138,    50,    51,    52,    53,
-      54,    55,    57,    60,    61,    62,    78,    79,    80,    81,
-      82,    83,    84,    87,    86,   108,    86,   125,   126,   126,
-     126,    52,    86,   135,   135,    73,    86,    99,   100,   101,
-     102,   109,    86,   108,   121,   122,   123,    86,    34,   138,
-     135,   135,   135,    14,    15,   105,   130,   135,    89,   135,
+     135,   139,    50,    51,    52,    53,    54,    55,    57,    60,
+      61,    62,    78,    79,    80,    81,    82,    83,    84,    87,
+      86,   108,    86,   125,   126,   126,   126,    52,    86,   135,
+     135,    73,    86,    99,   100,   101,   102,   109,    86,   108,
+     121,   122,   123,    86,    34,   133,   133,   139,   135,   135,
+     135,    14,    15,   105,   130,   135,    89,   135,   135,   135,
      135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   138,   121,    24,
-     121,    86,    86,    86,   135,   121,    86,   105,    86,    76,
-     123,   121,   135,    89,    24,    74,    86,   108,    23,    42,
-      75,   106,   102,    86,    16,    86,   108,    86,   121,    42,
-     135,    86,    86,   104,   105,   121,    74,   135,    86,   121,
-      86,    87,    74,    86,    86,   121,   105,    86,   121,    75,
-      75,    86,    86
+     135,   135,   135,   135,   135,   139,   121,    24,   121,    86,
+      86,    86,   135,   121,    86,   105,    86,    76,   123,   121,
+     135,    89,    24,    74,    86,   108,    23,    42,    75,   106,
+     102,    86,    16,    86,   108,    86,   121,    42,   135,    86,
+      86,   104,   105,   121,    74,   135,    86,   121,    86,    87,
+      74,    86,    86,   121,   105,    86,   121,    75,    75,    86,
+      86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1472,9 +1509,10 @@ static const yytype_uint8 yyr1[] =
      126,   127,   128,   128,   128,   129,   129,   130,   130,   130,
      131,   132,   132,   133,   133,   133,   134,   134,   135,   135,
      135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   135,   136,   136,   136,   136,
+     135,   135,   135,   135,   135,   135,   135,   136,   136,   136,
      136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   137,   137,   138,   138
+     136,   136,   136,   136,   136,   136,   137,   137,   138,   138,
+     139,   139
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1494,11 +1532,12 @@ static const yytype_int8 yyr2[] =
       11,    12,     4,     6,     4,     0,     1,     1,     2,     1,
        1,     1,     1,     1,     1,     2,     4,     1,     1,     1,
        1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
-       3,     2,     2,     1,     1,     1,     1,     1,     1,     3,
+       3,     2,     2,     1,     1,     1,     1,     1,     1,     1,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     1,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     1,     1,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     0,     1,     1,     3
+       3,     3,     3,     3,     3,     3,     4,     4,     0,     1,
+       1,     3
 };
 
 
@@ -1772,49 +1811,49 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1776 "engines/director/lingo/lingo-gr.cpp"
+#line 1815 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1782 "engines/director/lingo/lingo-gr.cpp"
+#line 1821 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1788 "engines/director/lingo/lingo-gr.cpp"
+#line 1827 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1794 "engines/director/lingo/lingo-gr.cpp"
+#line 1833 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1800 "engines/director/lingo/lingo-gr.cpp"
+#line 1839 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1806 "engines/director/lingo/lingo-gr.cpp"
+#line 1845 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1812 "engines/director/lingo/lingo-gr.cpp"
+#line 1851 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1818 "engines/director/lingo/lingo-gr.cpp"
+#line 1857 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2082,7 +2121,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 196 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2086 "engines/director/lingo/lingo-gr.cpp"
+#line 2125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2093,7 +2132,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2097 "engines/director/lingo/lingo-gr.cpp"
+#line 2136 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2103,37 +2142,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2107 "engines/director/lingo/lingo-gr.cpp"
+#line 2146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 211 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2113 "engines/director/lingo/lingo-gr.cpp"
+#line 2152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2119 "engines/director/lingo/lingo-gr.cpp"
+#line 2158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2125 "engines/director/lingo/lingo-gr.cpp"
+#line 2164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 250 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2131 "engines/director/lingo/lingo-gr.cpp"
+#line 2170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 252 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2137 "engines/director/lingo/lingo-gr.cpp"
+#line 2176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2144,7 +2183,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2148 "engines/director/lingo/lingo-gr.cpp"
+#line 2187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2154,13 +2193,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2158 "engines/director/lingo/lingo-gr.cpp"
+#line 2197 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 269 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2164 "engines/director/lingo/lingo-gr.cpp"
+#line 2203 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2169,236 +2208,236 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2173 "engines/director/lingo/lingo-gr.cpp"
+#line 2212 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 279 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2180 "engines/director/lingo/lingo-gr.cpp"
+#line 2219 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2186 "engines/director/lingo/lingo-gr.cpp"
+#line 2225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2192 "engines/director/lingo/lingo-gr.cpp"
+#line 2231 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
 #line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2198 "engines/director/lingo/lingo-gr.cpp"
+#line 2237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2204 "engines/director/lingo/lingo-gr.cpp"
+#line 2243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2210 "engines/director/lingo/lingo-gr.cpp"
+#line 2249 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2216 "engines/director/lingo/lingo-gr.cpp"
+#line 2255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2222 "engines/director/lingo/lingo-gr.cpp"
+#line 2261 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2228 "engines/director/lingo/lingo-gr.cpp"
+#line 2267 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tFIELD  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2234 "engines/director/lingo/lingo-gr.cpp"
+#line 2273 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFRAME  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2240 "engines/director/lingo/lingo-gr.cpp"
+#line 2279 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2246 "engines/director/lingo/lingo-gr.cpp"
+#line 2285 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2252 "engines/director/lingo/lingo-gr.cpp"
+#line 2291 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2258 "engines/director/lingo/lingo-gr.cpp"
+#line 2297 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2264 "engines/director/lingo/lingo-gr.cpp"
+#line 2303 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2270 "engines/director/lingo/lingo-gr.cpp"
+#line 2309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2276 "engines/director/lingo/lingo-gr.cpp"
+#line 2315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2282 "engines/director/lingo/lingo-gr.cpp"
+#line 2321 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2288 "engines/director/lingo/lingo-gr.cpp"
+#line 2327 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2294 "engines/director/lingo/lingo-gr.cpp"
+#line 2333 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2300 "engines/director/lingo/lingo-gr.cpp"
+#line 2339 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2306 "engines/director/lingo/lingo-gr.cpp"
+#line 2345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2312 "engines/director/lingo/lingo-gr.cpp"
+#line 2351 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPREVIOUS  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2318 "engines/director/lingo/lingo-gr.cpp"
+#line 2357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tREPEAT  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2324 "engines/director/lingo/lingo-gr.cpp"
+#line 2363 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tSCRIPT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2330 "engines/director/lingo/lingo-gr.cpp"
+#line 2369 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tSET  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2336 "engines/director/lingo/lingo-gr.cpp"
+#line 2375 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSTARTS  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2342 "engines/director/lingo/lingo-gr.cpp"
+#line 2381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tTELL  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2348 "engines/director/lingo/lingo-gr.cpp"
+#line 2387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tTO  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2354 "engines/director/lingo/lingo-gr.cpp"
+#line 2393 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tASSERTERROR  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2360 "engines/director/lingo/lingo-gr.cpp"
+#line 2399 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tSPRITE  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2366 "engines/director/lingo/lingo-gr.cpp"
+#line 2405 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tWHILE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2372 "engines/director/lingo/lingo-gr.cpp"
+#line 2411 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tWINDOW  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2378 "engines/director/lingo/lingo-gr.cpp"
+#line 2417 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tWITH  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2384 "engines/director/lingo/lingo-gr.cpp"
+#line 2423 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWITHIN  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2390 "engines/director/lingo/lingo-gr.cpp"
+#line 2429 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWORD  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2396 "engines/director/lingo/lingo-gr.cpp"
+#line 2435 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* idlist: %empty  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2402 "engines/director/lingo/lingo-gr.cpp"
+#line 2441 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* nonemptyidlist: ID  */
@@ -2407,7 +2446,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2411 "engines/director/lingo/lingo-gr.cpp"
+#line 2450 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2415,67 +2454,67 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2419 "engines/director/lingo/lingo-gr.cpp"
+#line 2458 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* proc: ID cmdargs '\n'  */
 #line 373 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2425 "engines/director/lingo/lingo-gr.cpp"
+#line 2464 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* proc: tPUT cmdargs '\n'  */
 #line 374 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2431 "engines/director/lingo/lingo-gr.cpp"
+#line 2470 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* proc: tGO cmdargs '\n'  */
 #line 375 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2437 "engines/director/lingo/lingo-gr.cpp"
+#line 2476 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* proc: tGO frameargs '\n'  */
 #line 376 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2443 "engines/director/lingo/lingo-gr.cpp"
+#line 2482 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* proc: tPLAY cmdargs '\n'  */
 #line 377 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2449 "engines/director/lingo/lingo-gr.cpp"
+#line 2488 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* proc: tPLAY frameargs '\n'  */
 #line 378 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2455 "engines/director/lingo/lingo-gr.cpp"
+#line 2494 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* proc: tNEXT tREPEAT '\n'  */
 #line 379 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2461 "engines/director/lingo/lingo-gr.cpp"
+#line 2500 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* proc: tEXIT tREPEAT '\n'  */
 #line 380 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2467 "engines/director/lingo/lingo-gr.cpp"
+#line 2506 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* proc: tEXIT '\n'  */
 #line 381 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2473 "engines/director/lingo/lingo-gr.cpp"
+#line 2512 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* proc: tASSERTERROR stmtoneliner  */
 #line 382 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2479 "engines/director/lingo/lingo-gr.cpp"
+#line 2518 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* cmdargs: %empty  */
@@ -2483,7 +2522,7 @@ yyreduce:
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2487 "engines/director/lingo/lingo-gr.cpp"
+#line 2526 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* cmdargs: expr  */
@@ -2493,7 +2532,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2497 "engines/director/lingo/lingo-gr.cpp"
+#line 2536 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* cmdargs: expr ',' nonemptyexprlist  */
@@ -2502,7 +2541,7 @@ yyreduce:
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2506 "engines/director/lingo/lingo-gr.cpp"
+#line 2545 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* cmdargs: expr expr_nounarymath  */
@@ -2513,7 +2552,7 @@ yyreduce:
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2517 "engines/director/lingo/lingo-gr.cpp"
+#line 2556 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
@@ -2523,7 +2562,7 @@ yyreduce:
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2527 "engines/director/lingo/lingo-gr.cpp"
+#line 2566 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* cmdargs: '(' ')'  */
@@ -2531,7 +2570,7 @@ yyreduce:
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2535 "engines/director/lingo/lingo-gr.cpp"
+#line 2574 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
@@ -2540,7 +2579,7 @@ yyreduce:
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2544 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* frameargs: tFRAME expr  */
@@ -2550,7 +2589,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2554 "engines/director/lingo/lingo-gr.cpp"
+#line 2593 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* frameargs: tMOVIE expr  */
@@ -2561,7 +2600,7 @@ yyreduce:
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2565 "engines/director/lingo/lingo-gr.cpp"
+#line 2604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* frameargs: tFRAME expr tOF tMOVIE expr  */
@@ -2572,7 +2611,7 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2576 "engines/director/lingo/lingo-gr.cpp"
+#line 2615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* frameargs: expr tOF tMOVIE expr  */
@@ -2583,7 +2622,7 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2587 "engines/director/lingo/lingo-gr.cpp"
+#line 2626 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* frameargs: tFRAME expr expr_nounarymath  */
@@ -2594,49 +2633,49 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2598 "engines/director/lingo/lingo-gr.cpp"
+#line 2637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* asgn: tPUT expr tINTO varorchunk '\n'  */
 #line 452 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
 #line 453 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2610 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
 #line 454 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2616 "engines/director/lingo/lingo-gr.cpp"
+#line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* asgn: tSET varorthe to expr '\n'  */
 #line 455 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2661 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100: /* definevars: tGLOBAL idlist '\n'  */
 #line 460 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2628 "engines/director/lingo/lingo-gr.cpp"
+#line 2667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* definevars: tPROPERTY idlist '\n'  */
 #line 461 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2634 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102: /* definevars: tINSTANCE idlist '\n'  */
 #line 462 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2640 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* ifstmt: tIF expr tTHEN stmt  */
@@ -2645,14 +2684,14 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2688 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
 #line 469 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2656 "engines/director/lingo/lingo-gr.cpp"
+#line 2695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
@@ -2663,7 +2702,7 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2667 "engines/director/lingo/lingo-gr.cpp"
+#line 2706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
@@ -2672,7 +2711,7 @@ yyreduce:
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2676 "engines/director/lingo/lingo-gr.cpp"
+#line 2715 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
@@ -2681,35 +2720,35 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2685 "engines/director/lingo/lingo-gr.cpp"
+#line 2724 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
 #line 487 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2692 "engines/director/lingo/lingo-gr.cpp"
+#line 2731 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 491 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 493 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 495 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2713 "engines/director/lingo/lingo-gr.cpp"
+#line 2752 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* tell: tTELL expr tTO stmtoneliner  */
@@ -2718,26 +2757,26 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 2722 "engines/director/lingo/lingo-gr.cpp"
+#line 2761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
 #line 503 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* when: tWHEN ID tTHEN expr  */
 #line 507 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* stmtlist: %empty  */
 #line 509 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* nonemptystmtlist: stmtlistline  */
@@ -2748,7 +2787,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2752 "engines/director/lingo/lingo-gr.cpp"
+#line 2791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* nonemptystmtlist: stmtlist stmtlistline  */
@@ -2758,73 +2797,73 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2762 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* stmtlistline: '\n'  */
 #line 527 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2768 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* simpleexpr_noparens_nounarymath: tINT  */
 #line 534 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2774 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* simpleexpr_noparens_nounarymath: tFLOAT  */
 #line 535 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2780 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
 #line 536 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2786 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* simpleexpr_noparens_nounarymath: tSTRING  */
 #line 537 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2792 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
 #line 538 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2798 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
 #line 539 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2804 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* var: ID  */
 #line 544 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2810 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* list: '[' exprlist ']'  */
 #line 554 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2816 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* list: '[' ':' ']'  */
 #line 555 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2822 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* list: '[' proplist ']'  */
 #line 556 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2828 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* proplist: proppair  */
@@ -2833,7 +2872,7 @@ yyreduce:
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2876 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* proplist: proplist ',' proppair  */
@@ -2841,274 +2880,286 @@ yyreduce:
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2845 "engines/director/lingo/lingo-gr.cpp"
+#line 2884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* proppair: tSYMBOL ':' expr  */
 #line 568 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2851 "engines/director/lingo/lingo-gr.cpp"
+#line 2890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* proppair: ID ':' expr  */
 #line 569 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2857 "engines/director/lingo/lingo-gr.cpp"
+#line 2896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* proppair: tSTRING ':' expr  */
 #line 570 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2863 "engines/director/lingo/lingo-gr.cpp"
+#line 2902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* parens: '(' expr ')'  */
 #line 573 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2869 "engines/director/lingo/lingo-gr.cpp"
+#line 2908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141: /* unarymath: '+' simpleexpr  */
 #line 575 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2875 "engines/director/lingo/lingo-gr.cpp"
+#line 2914 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142: /* unarymath: '-' simpleexpr  */
 #line 576 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2881 "engines/director/lingo/lingo-gr.cpp"
+#line 2920 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* expr: expr '+' expr  */
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 150: /* expr: expr '+' expr  */
+#line 595 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2887 "engines/director/lingo/lingo-gr.cpp"
+#line 2926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* expr: expr '-' expr  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 151: /* expr: expr '-' expr  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2893 "engines/director/lingo/lingo-gr.cpp"
+#line 2932 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* expr: expr '*' expr  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 152: /* expr: expr '*' expr  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2899 "engines/director/lingo/lingo-gr.cpp"
+#line 2938 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* expr: expr '/' expr  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 153: /* expr: expr '/' expr  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2905 "engines/director/lingo/lingo-gr.cpp"
+#line 2944 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* expr: expr tMOD expr  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 154: /* expr: expr tMOD expr  */
+#line 599 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2911 "engines/director/lingo/lingo-gr.cpp"
+#line 2950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* expr: expr '>' expr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 155: /* expr: expr '>' expr  */
+#line 600 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2917 "engines/director/lingo/lingo-gr.cpp"
+#line 2956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* expr: expr '<' expr  */
-#line 600 "engines/director/lingo/lingo-gr.y"
+  case 156: /* expr: expr '<' expr  */
+#line 601 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2923 "engines/director/lingo/lingo-gr.cpp"
+#line 2962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* expr: expr tEQ expr  */
-#line 601 "engines/director/lingo/lingo-gr.y"
+  case 157: /* expr: expr tEQ expr  */
+#line 602 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2929 "engines/director/lingo/lingo-gr.cpp"
+#line 2968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* expr: expr tNEQ expr  */
-#line 602 "engines/director/lingo/lingo-gr.y"
+  case 158: /* expr: expr tNEQ expr  */
+#line 603 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2935 "engines/director/lingo/lingo-gr.cpp"
+#line 2974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* expr: expr tGE expr  */
-#line 603 "engines/director/lingo/lingo-gr.y"
+  case 159: /* expr: expr tGE expr  */
+#line 604 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2941 "engines/director/lingo/lingo-gr.cpp"
+#line 2980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* expr: expr tLE expr  */
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 160: /* expr: expr tLE expr  */
+#line 605 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2947 "engines/director/lingo/lingo-gr.cpp"
+#line 2986 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* expr: expr tAND expr  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 161: /* expr: expr tAND expr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2953 "engines/director/lingo/lingo-gr.cpp"
+#line 2992 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* expr: expr tOR expr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 162: /* expr: expr tOR expr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2959 "engines/director/lingo/lingo-gr.cpp"
+#line 2998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* expr: expr '&' expr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 163: /* expr: expr '&' expr  */
+#line 608 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2965 "engines/director/lingo/lingo-gr.cpp"
+#line 3004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr: expr tCONCAT expr  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+  case 164: /* expr: expr tCONCAT expr  */
+#line 609 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2971 "engines/director/lingo/lingo-gr.cpp"
+#line 3010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr: expr tCONTAINS expr  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+  case 165: /* expr: expr tCONTAINS expr  */
+#line 610 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2977 "engines/director/lingo/lingo-gr.cpp"
+#line 3016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* expr: expr tSTARTS expr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 166: /* expr: expr tSTARTS expr  */
+#line 611 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2983 "engines/director/lingo/lingo-gr.cpp"
+#line 3022 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 169: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 620 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2989 "engines/director/lingo/lingo-gr.cpp"
+#line 3028 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 170: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 621 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2995 "engines/director/lingo/lingo-gr.cpp"
+#line 3034 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 171: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 622 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3001 "engines/director/lingo/lingo-gr.cpp"
+#line 3040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 172: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 623 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3007 "engines/director/lingo/lingo-gr.cpp"
+#line 3046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 173: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 624 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3013 "engines/director/lingo/lingo-gr.cpp"
+#line 3052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 174: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 625 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3019 "engines/director/lingo/lingo-gr.cpp"
+#line 3058 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 175: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 626 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3025 "engines/director/lingo/lingo-gr.cpp"
+#line 3064 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 176: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 627 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3031 "engines/director/lingo/lingo-gr.cpp"
+#line 3070 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+  case 177: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3037 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 178: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3043 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 179: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 630 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3049 "engines/director/lingo/lingo-gr.cpp"
+#line 3088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+  case 180: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 631 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3055 "engines/director/lingo/lingo-gr.cpp"
+#line 3094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 181: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3061 "engines/director/lingo/lingo-gr.cpp"
+#line 3100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 631 "engines/director/lingo/lingo-gr.y"
+  case 182: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3067 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 183: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3073 "engines/director/lingo/lingo-gr.cpp"
+#line 3112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 184: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3079 "engines/director/lingo/lingo-gr.cpp"
+#line 3118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 185: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 636 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3085 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 186: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 639 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
+#line 3130 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* exprlist: %empty  */
-#line 637 "engines/director/lingo/lingo-gr.y"
+  case 187: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 640 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
+#line 3136 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 188: /* exprlist: %empty  */
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3091 "engines/director/lingo/lingo-gr.cpp"
+#line 3142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* nonemptyexprlist: expr  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 190: /* nonemptyexprlist: expr  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3100 "engines/director/lingo/lingo-gr.cpp"
+#line 3151 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 191: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 651 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3108 "engines/director/lingo/lingo-gr.cpp"
+#line 3159 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3112 "engines/director/lingo/lingo-gr.cpp"
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3307,7 +3358,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 650 "engines/director/lingo/lingo-gr.y"
+#line 656 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index d7f080a388..f57b4b4f4b 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -173,7 +173,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 // EXPRESSION
 %type<node> simpleexpr_noparens_nounarymath simpleexpr simpleexpr_noparens simpleexpr_nounarymath
 %type<node> parens unarymath
-%type<node> expr expr_nounarymath
+%type<node> expr expr_nounarymath sprite
 %type<node> var varorchunk varorthe
 %type<node> list proppair
 %type<nodelist> proplist exprlist nonemptyexprlist
@@ -591,6 +591,7 @@ simpleexpr_nounarymath: simpleexpr_noparens_nounarymath
 
 // REMEMBER TO SYNC THIS WITH expr_nounarymath!
 expr: simpleexpr
+	| sprite
 	| expr[a] '+' expr[b]		{ $$ = new BinaryOpNode(LC::c_add, $a, $b); }
 	| expr[a] '-' expr[b]		{ $$ = new BinaryOpNode(LC::c_sub, $a, $b); }
 	| expr[a] '*' expr[b]		{ $$ = new BinaryOpNode(LC::c_mul, $a, $b); }
@@ -615,6 +616,7 @@ expr: simpleexpr
 // Without this, `cmd 1 + 1` could be interpreted as either `cmd(1 + 1)` or `cmd(1, +1)`.
 // We only want to allow the first interpretation, so we must exclude unary math from the second expression.
 expr_nounarymath: simpleexpr_nounarymath
+	| sprite
 	| expr_nounarymath[a] '+' expr[b]		{ $$ = new BinaryOpNode(LC::c_add, $a, $b); }
 	| expr_nounarymath[a] '-' expr[b]		{ $$ = new BinaryOpNode(LC::c_sub, $a, $b); }
 	| expr_nounarymath[a] '*' expr[b]		{ $$ = new BinaryOpNode(LC::c_mul, $a, $b); }
@@ -634,6 +636,10 @@ expr_nounarymath: simpleexpr_nounarymath
 	| expr_nounarymath[a] tSTARTS expr[b]	{ $$ = new BinaryOpNode(LC::c_starts, $a, $b); }
 	;
 
+sprite: tSPRITE expr tINTERSECTS simpleexpr	{ $$ = new IntersectsNode($expr, $simpleexpr); }
+	| tSPRITE expr tWITHIN simpleexpr		{ $$ = new WithinNode($expr, $simpleexpr); }
+	;
+
 exprlist: /* empty */						{ $$ = new NodeList; }
 	| nonemptyexprlist
 	;


Commit: 089cd9bb36e69fd60c3f3d1b9fd8065e2438fca4
    https://github.com/scummvm/scummvm/commit/089cd9bb36e69fd60c3f3d1b9fd8065e2438fca4
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add error handling to LingoCompiler

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index b022f82f34..f9c698a826 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -124,43 +124,43 @@ public:
 	NodeVisitor() {}
 	virtual ~NodeVisitor() {}
 
-	virtual void visitScriptNode(ScriptNode *node) = 0;
-	virtual void visitFactoryNode(FactoryNode *node) = 0;
-	virtual void visitHandlerNode(HandlerNode *node) = 0;
-	virtual void visitCmdNode(CmdNode *node) = 0;
-	virtual void visitPutIntoNode(PutIntoNode *node) = 0;
-	virtual void visitPutAfterNode(PutAfterNode *node) = 0;
-	virtual void visitPutBeforeNode(PutBeforeNode *node) = 0;
-	virtual void visitSetNode(SetNode *node) = 0;
-	virtual void visitGlobalNode(GlobalNode *node) = 0;
-	virtual void visitPropertyNode(PropertyNode *node) = 0;
-	virtual void visitInstanceNode(InstanceNode *node) = 0;
-	virtual void visitIfStmtNode(IfStmtNode *node) = 0;
-	virtual void visitIfElseStmtNode(IfElseStmtNode *node) = 0;
-	virtual void visitRepeatWhileNode(RepeatWhileNode *node) = 0;
-	virtual void visitRepeatWithToNode(RepeatWithToNode *node) = 0;
-	virtual void visitNextRepeatNode(NextRepeatNode *node) = 0;
-	virtual void visitExitRepeatNode(ExitRepeatNode *node) = 0;
-	virtual void visitExitNode(ExitNode *node) = 0;
-	virtual void visitTellNode(TellNode *node) = 0;
-	virtual void visitWhenNode(WhenNode *node) = 0;
-	virtual void visitAssertErrorNode(AssertErrorNode *node) = 0;
-	virtual void visitIntNode(IntNode *node) = 0;
-	virtual void visitFloatNode(FloatNode *node) = 0;
-	virtual void visitSymbolNode(SymbolNode *node) = 0;
-	virtual void visitStringNode(StringNode *node) = 0;
-	virtual void visitListNode(ListNode *node) = 0;
-	virtual void visitPropListNode(PropListNode *node) = 0;
-	virtual void visitPropPairNode(PropPairNode *node) = 0;
-	virtual void visitFuncNode(FuncNode *node) = 0;
-	virtual void visitVarNode(VarNode *node) = 0;
-	virtual void visitParensNode(ParensNode *node) = 0;
-	virtual void visitUnaryOpNode(UnaryOpNode *node) = 0;
-	virtual void visitBinaryOpNode(BinaryOpNode *node) = 0;
-	virtual void visitFrameNode(FrameNode *node) = 0;
-	virtual void visitMovieNode(MovieNode *node) = 0;
-	virtual void visitIntersectsNode(IntersectsNode *node) = 0;
-	virtual void visitWithinNode(WithinNode *node) = 0;
+	virtual bool visitScriptNode(ScriptNode *node) = 0;
+	virtual bool visitFactoryNode(FactoryNode *node) = 0;
+	virtual bool visitHandlerNode(HandlerNode *node) = 0;
+	virtual bool visitCmdNode(CmdNode *node) = 0;
+	virtual bool visitPutIntoNode(PutIntoNode *node) = 0;
+	virtual bool visitPutAfterNode(PutAfterNode *node) = 0;
+	virtual bool visitPutBeforeNode(PutBeforeNode *node) = 0;
+	virtual bool visitSetNode(SetNode *node) = 0;
+	virtual bool visitGlobalNode(GlobalNode *node) = 0;
+	virtual bool visitPropertyNode(PropertyNode *node) = 0;
+	virtual bool visitInstanceNode(InstanceNode *node) = 0;
+	virtual bool visitIfStmtNode(IfStmtNode *node) = 0;
+	virtual bool visitIfElseStmtNode(IfElseStmtNode *node) = 0;
+	virtual bool visitRepeatWhileNode(RepeatWhileNode *node) = 0;
+	virtual bool visitRepeatWithToNode(RepeatWithToNode *node) = 0;
+	virtual bool visitNextRepeatNode(NextRepeatNode *node) = 0;
+	virtual bool visitExitRepeatNode(ExitRepeatNode *node) = 0;
+	virtual bool visitExitNode(ExitNode *node) = 0;
+	virtual bool visitTellNode(TellNode *node) = 0;
+	virtual bool visitWhenNode(WhenNode *node) = 0;
+	virtual bool visitAssertErrorNode(AssertErrorNode *node) = 0;
+	virtual bool visitIntNode(IntNode *node) = 0;
+	virtual bool visitFloatNode(FloatNode *node) = 0;
+	virtual bool visitSymbolNode(SymbolNode *node) = 0;
+	virtual bool visitStringNode(StringNode *node) = 0;
+	virtual bool visitListNode(ListNode *node) = 0;
+	virtual bool visitPropListNode(PropListNode *node) = 0;
+	virtual bool visitPropPairNode(PropPairNode *node) = 0;
+	virtual bool visitFuncNode(FuncNode *node) = 0;
+	virtual bool visitVarNode(VarNode *node) = 0;
+	virtual bool visitParensNode(ParensNode *node) = 0;
+	virtual bool visitUnaryOpNode(UnaryOpNode *node) = 0;
+	virtual bool visitBinaryOpNode(BinaryOpNode *node) = 0;
+	virtual bool visitFrameNode(FrameNode *node) = 0;
+	virtual bool visitMovieNode(MovieNode *node) = 0;
+	virtual bool visitIntersectsNode(IntersectsNode *node) = 0;
+	virtual bool visitWithinNode(WithinNode *node) = 0;
 };
 
 /* Node */
@@ -173,7 +173,7 @@ struct Node {
 
 	Node(NodeType t) : type(t), isExpression(false), isStatement(false), isLoop(false) {}
 	virtual ~Node() {}
-	virtual void accept(NodeVisitor *visitor) = 0;
+	virtual bool accept(NodeVisitor *visitor) = 0;
 };
 
 /* ExprNode */
@@ -215,8 +215,8 @@ struct ScriptNode : Node {
 	virtual ~ScriptNode() {
 		deleteList(children);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitScriptNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitScriptNode(this);
 	}
 };
 
@@ -232,8 +232,8 @@ struct FactoryNode : Node {
 		delete name;
 		deleteList(methods);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitFactoryNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitFactoryNode(this);
 	}
 };
 
@@ -251,8 +251,8 @@ struct HandlerNode : Node {
 		deleteList(args);
 		deleteList(stmts);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitHandlerNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitHandlerNode(this);
 	}
 };
 
@@ -268,8 +268,8 @@ struct CmdNode : StmtNode {
 		delete name;
 		deleteList(args);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitCmdNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitCmdNode(this);
 	}
 };
 
@@ -285,8 +285,8 @@ struct PutIntoNode : StmtNode {
 		delete val;
 		delete var;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitPutIntoNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitPutIntoNode(this);
 	}
 };
 
@@ -302,8 +302,8 @@ struct PutAfterNode : StmtNode {
 		delete val;
 		delete var;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitPutAfterNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitPutAfterNode(this);
 	}
 };
 
@@ -319,8 +319,8 @@ struct PutBeforeNode : StmtNode {
 		delete val;
 		delete var;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitPutBeforeNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitPutBeforeNode(this);
 	}
 };
 
@@ -336,8 +336,8 @@ struct SetNode : StmtNode {
 		delete var;
 		delete val;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitSetNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitSetNode(this);
 	}
 };
 
@@ -350,8 +350,8 @@ struct GlobalNode : StmtNode {
 	virtual ~GlobalNode() {
 		delete names;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitGlobalNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitGlobalNode(this);
 	}
 };
 
@@ -364,8 +364,8 @@ struct PropertyNode : StmtNode {
 	virtual ~PropertyNode() {
 		delete names;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitPropertyNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitPropertyNode(this);
 	}
 };
 
@@ -378,8 +378,8 @@ struct InstanceNode : StmtNode {
 	virtual ~InstanceNode() {
 		delete names;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitInstanceNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitInstanceNode(this);
 	}
 };
 
@@ -395,8 +395,8 @@ struct IfStmtNode : StmtNode {
 		delete cond;
 		deleteList(stmts);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitIfStmtNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitIfStmtNode(this);
 	}
 };
 
@@ -414,8 +414,8 @@ struct IfElseStmtNode : StmtNode {
 		deleteList(stmts1);
 		deleteList(stmts2);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitIfElseStmtNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitIfElseStmtNode(this);
 	}
 };
 
@@ -431,8 +431,8 @@ struct RepeatWhileNode : LoopNode {
 		delete cond;
 		deleteList(stmts);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitRepeatWhileNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitRepeatWhileNode(this);
 	}
 };
 
@@ -453,8 +453,8 @@ struct RepeatWithToNode : LoopNode {
 		delete end;
 		deleteList(stmts);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitRepeatWithToNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitRepeatWithToNode(this);
 	}
 };
 
@@ -463,8 +463,8 @@ struct RepeatWithToNode : LoopNode {
 struct NextRepeatNode : StmtNode {
 	NextRepeatNode() : StmtNode(kNextRepeatNode) {}
 	virtual ~NextRepeatNode() {}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitNextRepeatNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitNextRepeatNode(this);
 	}
 };
 
@@ -473,8 +473,8 @@ struct NextRepeatNode : StmtNode {
 struct ExitRepeatNode : StmtNode {
 	ExitRepeatNode() : StmtNode(kExitRepeatNode) {}
 	virtual ~ExitRepeatNode() {}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitExitRepeatNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitExitRepeatNode(this);
 	}
 };
 
@@ -483,8 +483,8 @@ struct ExitRepeatNode : StmtNode {
 struct ExitNode : StmtNode {
 	ExitNode() : StmtNode(kExitNode) {}
 	virtual ~ExitNode() {}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitExitNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitExitNode(this);
 	}
 };
 
@@ -500,8 +500,8 @@ struct TellNode : StmtNode {
 		delete target;
 		deleteList(stmts);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitTellNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitTellNode(this);
 	}
 };
 
@@ -517,8 +517,8 @@ struct WhenNode : StmtNode {
 		delete event;
 		delete code;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitWhenNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitWhenNode(this);
 	}
 };
 
@@ -531,8 +531,8 @@ struct AssertErrorNode : StmtNode {
 	virtual ~AssertErrorNode() {
 		delete stmt;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitAssertErrorNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitAssertErrorNode(this);
 	}
 };
 
@@ -543,8 +543,8 @@ struct IntNode : ExprNode {
 
 	IntNode(int valIn) : ExprNode(kIntNode), val(valIn) {}
 	virtual ~IntNode() = default;
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitIntNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitIntNode(this);
 	}
 };
 
@@ -555,8 +555,8 @@ struct FloatNode : ExprNode {
 
 	FloatNode(double valIn) : ExprNode(kFloatNode), val(valIn) {}
 	virtual ~FloatNode() = default;
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitFloatNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitFloatNode(this);
 	}
 };
 
@@ -569,8 +569,8 @@ struct SymbolNode : ExprNode {
 	virtual ~SymbolNode() {
 		delete val;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitSymbolNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitSymbolNode(this);
 	}
 };
 
@@ -583,8 +583,8 @@ struct StringNode : ExprNode {
 	virtual ~StringNode() {
 		delete val;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitStringNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitStringNode(this);
 	}
 };
 
@@ -597,8 +597,8 @@ struct ListNode : ExprNode {
 	virtual ~ListNode() {
 		deleteList(items);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitListNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitListNode(this);
 	}
 };
 
@@ -611,8 +611,8 @@ struct PropListNode : ExprNode {
 	virtual ~PropListNode() {
 		deleteList(items);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitPropListNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitPropListNode(this);
 	}
 };
 
@@ -628,8 +628,8 @@ struct PropPairNode : ExprNode {
 		delete key;
 		delete val;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitPropPairNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitPropPairNode(this);
 	}
 };
 
@@ -645,8 +645,8 @@ struct FuncNode : ExprNode {
 		delete name;
 		deleteList(args);
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitFuncNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitFuncNode(this);
 	}
 };
 
@@ -659,8 +659,8 @@ struct VarNode : ExprNode {
 	virtual ~VarNode() {
 		delete name;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitVarNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitVarNode(this);
 	}
 };
 
@@ -673,8 +673,8 @@ struct ParensNode : ExprNode {
 	virtual ~ParensNode() {
 		delete expr;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitParensNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitParensNode(this);
 	}
 };
 
@@ -688,8 +688,8 @@ struct UnaryOpNode : ExprNode {
 	virtual ~UnaryOpNode() {
 		delete arg;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitUnaryOpNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitUnaryOpNode(this);
 	}
 };
 
@@ -705,8 +705,8 @@ struct BinaryOpNode : ExprNode {
 		delete a;
 		delete b;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitBinaryOpNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitBinaryOpNode(this);
 	}
 };
 
@@ -719,8 +719,8 @@ struct FrameNode : ExprNode {
 	virtual ~FrameNode() {
 		delete arg;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitFrameNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitFrameNode(this);
 	}
 };
 
@@ -733,8 +733,8 @@ struct MovieNode : ExprNode {
 	virtual ~MovieNode() {
 		delete arg;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitMovieNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitMovieNode(this);
 	}
 };
 
@@ -750,8 +750,8 @@ struct IntersectsNode : ExprNode {
 		delete sprite1;
 		delete sprite2;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitIntersectsNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitIntersectsNode(this);
 	}
 };
 
@@ -767,8 +767,8 @@ struct WithinNode : ExprNode {
 		delete sprite1;
 		delete sprite2;
 	}
-	virtual void accept(NodeVisitor *visitor) {
-		visitor->visitWithinNode(this);
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitWithinNode(this);
 	}
 };
 
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index c7c0824a87..a84ee236a9 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -55,6 +55,24 @@
 
 namespace Director {
 
+#define COMPILE(node) \
+	if (!(node)->accept(this)) \
+		return false; \
+
+#define COMPILE_REF(node) \
+	_refMode = true; \
+	if (!(node)->accept(this)) { \
+		_refMode = false; \
+		return false; \
+	} \
+	_refMode = false;
+
+#define COMPILE_LIST(list) \
+	for (uint i = 0; i < (list)->size(); i++) { \
+		if (!(*(list))[i]->accept(this)) \
+			return false; \
+	}
+
 LingoCompiler::LingoCompiler() {
 	_assemblyAST = nullptr;
 	_assemblyArchive = nullptr;
@@ -103,10 +121,21 @@ ScriptContext *LingoCompiler::compileLingo(const char *code, LingoArchive *archi
 
 	// Parse the Lingo and build an AST
 	parse(code);
+	if (!_assemblyAST) {
+		delete _assemblyContext;
+		delete _currentAssembly;
+		delete _methodVars;
+		return nullptr;
+	}
 
 	// Generate bytecode
-	if (_assemblyAST) {
-		compile(_assemblyAST);
+	if (!_assemblyAST->accept(this)) {
+		_hadError = true;
+		delete _assemblyContext;
+		delete _currentAssembly;
+		delete _methodVars;
+		delete _assemblyAST;
+		return nullptr;
 	}
 
 	// for D4 and above, there usually won't be any code left.
@@ -362,45 +391,31 @@ void LingoCompiler::parseMenu(const char *code) {
 	warning("STUB: parseMenu");
 }
 
-void LingoCompiler::compile(Node *node) {
-	node->accept(this);
-}
-
-void LingoCompiler::compileRef(Node *node) {
-	_refMode = true;
-	node->accept(this);
-	_refMode = false;
-}
-
-void LingoCompiler::compileList(NodeList *nodes) {
-	for (uint i = 0; i < nodes->size(); i++) {
-		compile((*nodes)[i]);
-	}
-}
-
 /* ScriptNode */
 
-void LingoCompiler::visitScriptNode(ScriptNode *node) {
-	compileList(node->children);
+bool LingoCompiler::visitScriptNode(ScriptNode *node) {
+	COMPILE_LIST(node->children);
+	return true;
 }
 
 /* FactoryNode */
 
-void LingoCompiler::visitFactoryNode(FactoryNode *node) {
+bool LingoCompiler::visitFactoryNode(FactoryNode *node) {
 	_inFactory = true;
 	ScriptContext *mainContext = _assemblyContext;
 	_assemblyContext = new ScriptContext(mainContext->getName(), mainContext->_archive, mainContext->_scriptType, mainContext->_id);
 
-	compileList(node->methods);
+	COMPILE_LIST(node->methods);
 	registerFactory(*node->name);
 
 	_inFactory = false;
 	_assemblyContext = mainContext;
+	return true;
 }
 
 /* HandlerNode */
 
-void LingoCompiler::visitHandlerNode(HandlerNode *node) {
+bool LingoCompiler::visitHandlerNode(HandlerNode *node) {
 	_indef = true;
 	ScriptData *mainAssembly = _currentAssembly;
 	_currentAssembly = new ScriptData;
@@ -417,7 +432,7 @@ void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 		}
 	}
 
-	compileList(node->stmts);
+	COMPILE_LIST(node->stmts);
 	code1(LC::c_procret);
 
 	if (debugChannelSet(-1, kDebugFewFramesOnly) || debugChannelSet(1, kDebugCompile))
@@ -453,11 +468,12 @@ void LingoCompiler::visitHandlerNode(HandlerNode *node) {
 	_currentAssembly = mainAssembly;
 	delete _methodVars;
 	_methodVars = mainMethodVars;
+	return true;
 }
 
 /* CmdNode */
 
-void LingoCompiler::visitCmdNode(CmdNode *node) {
+bool LingoCompiler::visitCmdNode(CmdNode *node) {
 	if (node->name->equalsIgnoreCase("go") && node->args->size() == 1 && (*node->args)[0]->type == kVarNode){
 		VarNode *var = static_cast<VarNode *>((*node->args)[0]);
 		if (var->name->equalsIgnoreCase("loop") ||
@@ -466,7 +482,7 @@ void LingoCompiler::visitCmdNode(CmdNode *node) {
 			code1(LC::c_symbolpush);
 			codeString(var->name->c_str());
 			codeCmd(node->name, 1);
-			return;
+			return true;
 		}
 	}
 
@@ -475,7 +491,7 @@ void LingoCompiler::visitCmdNode(CmdNode *node) {
 		VarNode *var = static_cast<VarNode *>((*node->args)[0]);
 		if (var->name->equalsIgnoreCase("done")) {
 			codeCmd(node->name, 0);
-			return;
+			return true;
 		}
 	}
 
@@ -486,11 +502,11 @@ void LingoCompiler::visitCmdNode(CmdNode *node) {
 				code1(LC::c_symbolpush);
 				codeString(static_cast<VarNode *>(arg)->name->c_str());
 			} else {
-				compile(arg);
+				COMPILE(arg);
 			}
 		}
 		codeCmd(node->name, node->args->size());
-		return;
+		return true;
 	}
 
 	if (node->name->equalsIgnoreCase("sound") && node->args->size() >= 1 && (*node->args)[0]->type == kVarNode) {
@@ -503,111 +519,121 @@ void LingoCompiler::visitCmdNode(CmdNode *node) {
 			code1(LC::c_symbolpush);
 			codeString(var->name->c_str());
 			for (uint i = 1; i < node->args->size(); i++) {
-				compile((*node->args)[i]);
+				COMPILE((*node->args)[i]);
 			}
 			codeCmd(node->name, node->args->size());
-			return;
+			return true;
 		}
 	}
 
-	compileList(node->args);
+	COMPILE_LIST(node->args);
 	codeCmd(node->name, node->args->size());
+	return true;
 }
 
 /* PutIntoNode */
 
-void LingoCompiler::visitPutIntoNode(PutIntoNode *node) {
+bool LingoCompiler::visitPutIntoNode(PutIntoNode *node) {
 	if (node->var->type == kVarNode) {
 		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
 	}
-	compile(node->val);
-	compileRef(node->var);
+	COMPILE(node->val);
+	COMPILE_REF(node->var);
 	code1(LC::c_assign);
+	return true;
 }
 
 /* PutAfterNode */
 
-void LingoCompiler::visitPutAfterNode(PutAfterNode *node) {
+bool LingoCompiler::visitPutAfterNode(PutAfterNode *node) {
 	if (node->var->type == kVarNode) {
 		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
 	}
-	compile(node->val);
-	compileRef(node->var);
+	COMPILE(node->val);
+	COMPILE_REF(node->var);
 	code1(LC::c_putafter);
+	return true;
 }
 
 /* PutBeforeNode */
 
-void LingoCompiler::visitPutBeforeNode(PutBeforeNode *node) {
+bool LingoCompiler::visitPutBeforeNode(PutBeforeNode *node) {
 	if (node->var->type == kVarNode) {
 		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
 	}
-	compile(node->val);
-	compileRef(node->var);
+	COMPILE(node->val);
+	COMPILE_REF(node->var);
 	code1(LC::c_putbefore);
+	return true;
 }
 
 /* SetNode */
 
-void LingoCompiler::visitSetNode(SetNode *node) {
+bool LingoCompiler::visitSetNode(SetNode *node) {
 	if (node->var->type == kVarNode) {
 		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
 	}
-	compile(node->val);
-	compileRef(node->var);
+	COMPILE(node->val);
+	COMPILE_REF(node->var);
 	code1(LC::c_assign);
+	return true;
 }
 
 /* GlobalNode */
 
-void LingoCompiler::visitGlobalNode(GlobalNode *node) {
+bool LingoCompiler::visitGlobalNode(GlobalNode *node) {
 	for (uint i = 0; i < node->names->size(); i++) {
 		registerMethodVar(*(*node->names)[i], kVarGlobal);
 	}
+	return true;
 }
 
 /* PropertyNode */
 
-void LingoCompiler::visitPropertyNode(PropertyNode *node) {
+bool LingoCompiler::visitPropertyNode(PropertyNode *node) {
 	for (uint i = 0; i < node->names->size(); i++) {
 		registerMethodVar(*(*node->names)[i], kVarProperty);
 	}
+	return true;
 }
 
 /* InstanceNode */
 
-void LingoCompiler::visitInstanceNode(InstanceNode *node) {
+bool LingoCompiler::visitInstanceNode(InstanceNode *node) {
 	for (uint i = 0; i < node->names->size(); i++) {
 		registerMethodVar(*(*node->names)[i], kVarInstance);
 	}
+	return true;
 }
 
 /* IfStmtNode */
 
-void LingoCompiler::visitIfStmtNode(IfStmtNode *node) {
-	compile(node->cond);
+bool LingoCompiler::visitIfStmtNode(IfStmtNode *node) {
+	COMPILE(node->cond);
 	uint jzPos = _currentAssembly->size();
 	code2(LC::c_jumpifz, 0);
-	compileList(node->stmts);
+	COMPILE_LIST(node->stmts);
 	uint endPos = _currentAssembly->size();
 
 	inst jzOffset = 0;
 	WRITE_UINT32(&jzOffset, endPos - jzPos);
 	(*_currentAssembly)[jzPos + 1] = jzOffset;
+
+	return true;
 }
 
 /* IfElseStmtNode */
 
-void LingoCompiler::visitIfElseStmtNode(IfElseStmtNode *node) {
-	compile(node->cond);
+bool LingoCompiler::visitIfElseStmtNode(IfElseStmtNode *node) {
+	COMPILE(node->cond);
 	uint jzPos = _currentAssembly->size();
 	code2(LC::c_jumpifz, 0);
-	compileList(node->stmts1);
+	COMPILE_LIST(node->stmts1);
 
 	uint jmpPos = _currentAssembly->size();
 	code2(LC::c_jump, 0);
 	uint block2StartPos = _currentAssembly->size();
-	compileList(node->stmts2);
+	COMPILE_LIST(node->stmts2);
 	uint endPos = _currentAssembly->size();
 
 	inst jzOffset = 0;
@@ -617,19 +643,21 @@ void LingoCompiler::visitIfElseStmtNode(IfElseStmtNode *node) {
 	inst jmpOffset = 0;
 	WRITE_UINT32(&jmpOffset, endPos - jmpPos);
 	(*_currentAssembly)[jmpPos + 1] = jmpOffset;
+
+	return true;
 }
 
 /* RepeatWhileNode */
 
-void LingoCompiler::visitRepeatWhileNode(RepeatWhileNode *node) {
+bool LingoCompiler::visitRepeatWhileNode(RepeatWhileNode *node) {
 	LoopNode *prevLoop = _currentLoop;
 	_currentLoop = node;
 
 	uint startPos = _currentAssembly->size();
-	compile(node->cond);
+	COMPILE(node->cond);
 	uint jzPos = _currentAssembly->size();
 	code2(LC::c_jumpifz, 0);
-	compileList(node->stmts);
+	COMPILE_LIST(node->stmts);
 	uint jmpPos = _currentAssembly->size();
 	code2(LC::c_jump, 0);
 	uint endPos = _currentAssembly->size();
@@ -644,20 +672,22 @@ void LingoCompiler::visitRepeatWhileNode(RepeatWhileNode *node) {
 
 	updateLoopJumps(jmpPos, endPos);
 	_currentLoop = prevLoop;
+
+	return true;
 }
 
 /* RepeatWithToNode */
 
-void LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
+bool LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
 	LoopNode *prevLoop = _currentLoop;
 	_currentLoop = node;
 
-	compile(node->start);
+	COMPILE(node->start);
 	codeVarSet(*node->var);
 
 	uint startPos = _currentAssembly->size();
 	codeVarGet(*node->var);
-	compile(node->end);
+	COMPILE(node->end);
 	if (node->down) {
 		code1(LC::c_ge);
 	} else {
@@ -666,7 +696,7 @@ void LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
 	uint jzPos = _currentAssembly->size();
 	code2(LC::c_jumpifz, 0);
 
-	compileList(node->stmts);
+	COMPILE_LIST(node->stmts);
 
 	uint incrementPos = _currentAssembly->size();
 	codeVarGet(*node->var);
@@ -693,189 +723,213 @@ void LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
 
 	updateLoopJumps(incrementPos, endPos);
 	_currentLoop = prevLoop;
+
+	return true;
 }
 
 /* NextRepeatNode */
 
-void LingoCompiler::visitNextRepeatNode(NextRepeatNode *node) {
-	if (_currentLoop) {
-		_currentLoop->nextRepeats.push_back(_currentAssembly->size());
-		code2(LC::c_jump, 0);
-	} else {
-		warning("# LINGO: next repeat not inside repeat loop");
+bool LingoCompiler::visitNextRepeatNode(NextRepeatNode *node) {
+	if (!_currentLoop) {
+		warning("LingoCompiler::visitNextRepeatNode: next repeat not inside repeat loop");
+		return false;
 	}
+	_currentLoop->nextRepeats.push_back(_currentAssembly->size());
+	code2(LC::c_jump, 0);
+	return true;
 }
 
 /* ExitRepeatNode */
 
-void LingoCompiler::visitExitRepeatNode(ExitRepeatNode *node) {
-	if (_currentLoop) {
-		_currentLoop->exitRepeats.push_back(_currentAssembly->size());
-		code2(LC::c_jump, 0);
-	} else {
-		warning("# LINGO: exit repeat not inside repeat loop");
+bool LingoCompiler::visitExitRepeatNode(ExitRepeatNode *node) {
+	if (!_currentLoop) {
+		warning("LingoCompiler::visitExitRepeatLoop: exit repeat not inside repeat loop");
+		return false;
 	}
+	_currentLoop->exitRepeats.push_back(_currentAssembly->size());
+	code2(LC::c_jump, 0);
+	return true;
 }
 
 /* ExitNode */
 
-void LingoCompiler::visitExitNode(ExitNode *node) {
+bool LingoCompiler::visitExitNode(ExitNode *node) {
 	code1(LC::c_procret);
+	return true;
 }
 
 /* TellNode */
 
-void LingoCompiler::visitTellNode(TellNode *node) {
-	compile(node->target);
+bool LingoCompiler::visitTellNode(TellNode *node) {
+	COMPILE(node->target);
 	code1(LC::c_tell);
-	compileList(node->stmts);
+	COMPILE_LIST(node->stmts);
 	code1(LC::c_telldone);
+	return true;
 }
 
 /* WhenNode */
 
-void LingoCompiler::visitWhenNode(WhenNode *node) {
-	compile(node->code);
+bool LingoCompiler::visitWhenNode(WhenNode *node) {
+	COMPILE(node->code);
 	code1(LC::c_whencode);
 	codeString(node->event->c_str());
+	return true;
 }
 
 /* AssertErrorNode */
 
-void LingoCompiler::visitAssertErrorNode(AssertErrorNode *node) {
+bool LingoCompiler::visitAssertErrorNode(AssertErrorNode *node) {
 	code1(LC::c_asserterror);
-	compile(node->stmt);
+	COMPILE(node->stmt);
 	code1(LC::c_asserterrordone);
+	return true;
 }
 
 /* IntNode */
 
-void LingoCompiler::visitIntNode(IntNode *node) {
+bool LingoCompiler::visitIntNode(IntNode *node) {
 	code1(LC::c_intpush);
 	codeInt(node->val);
+	return true;
 }
 
 /* FloatNode */
 
-void LingoCompiler::visitFloatNode(FloatNode *node) {
+bool LingoCompiler::visitFloatNode(FloatNode *node) {
 	code1(LC::c_floatpush);
 	codeFloat(node->val);
+	return true;
 }
 
 /* SymbolNode */
 
-void LingoCompiler::visitSymbolNode(SymbolNode *node) {
+bool LingoCompiler::visitSymbolNode(SymbolNode *node) {
 	code1(LC::c_symbolpush);
 	codeString(node->val->c_str());
+	return true;
 }
 
 /* StringNode */
 
-void LingoCompiler::visitStringNode(StringNode *node) {
+bool LingoCompiler::visitStringNode(StringNode *node) {
 	code1(LC::c_stringpush);
 	codeString(node->val->c_str());
+	return true;
 }
 
 /* ListNode */
 
-void LingoCompiler::visitListNode(ListNode *node) {
-	compileList(node->items);
+bool LingoCompiler::visitListNode(ListNode *node) {
+	COMPILE_LIST(node->items);
 	code1(LC::c_arraypush);
 	codeInt(node->items->size());
+	return true;
 }
 
 /* PropListNode */
 
-void LingoCompiler::visitPropListNode(PropListNode *node) {
-	compileList(node->items);
+bool LingoCompiler::visitPropListNode(PropListNode *node) {
+	COMPILE_LIST(node->items);
 	code1(LC::c_proparraypush);
 	codeInt(node->items->size());
+	return true;
 }
 
 /* PropPairNode */
 
-void LingoCompiler::visitPropPairNode(PropPairNode *node) {
-	compile(node->key);
-	compile(node->val);
+bool LingoCompiler::visitPropPairNode(PropPairNode *node) {
+	COMPILE(node->key);
+	COMPILE(node->val);
+	return true;
 }
 
 /* FuncNode */
 
-void LingoCompiler::visitFuncNode(FuncNode *node) {
-	compileList(node->args);
+bool LingoCompiler::visitFuncNode(FuncNode *node) {
+	COMPILE_LIST(node->args);
 	codeFunc(node->name, node->args->size());
+	return true;
 }
 
 /* VarNode */
 
-void LingoCompiler::visitVarNode(VarNode *node) {
+bool LingoCompiler::visitVarNode(VarNode *node) {
 	if (_refMode) {
 		codeVarRef(*node->name);
-		return;
+		return true;
 	}
 	if (g_lingo->_builtinConsts.contains(*node->name)) {
 		code1(LC::c_constpush);
 		codeString(node->name->c_str());
-		return;
+		return true;
 	}
 	if (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
 		int val = castNumToNum(node->name->c_str());
 		if (val != -1) {
 			code1(LC::c_intpush);
 			codeInt(val);
-			return;
+			return true;
 		}
 	}
 	codeVarGet(*node->name);
+	return true;
 }
 
 /* ParensNode */
 
-void LingoCompiler::visitParensNode(ParensNode *node) {
-	compile(node->expr);
+bool LingoCompiler::visitParensNode(ParensNode *node) {
+	COMPILE(node->expr);
+	return true;
 }
 
 /* UnaryOpNode */
 
-void LingoCompiler::visitUnaryOpNode(UnaryOpNode *node) {
-	compile(node->arg);
+bool LingoCompiler::visitUnaryOpNode(UnaryOpNode *node) {
+	COMPILE(node->arg);
 	code1(node->op);
+	return true;
 }
 
 /* BinaryOpNode */
 
-void LingoCompiler::visitBinaryOpNode(BinaryOpNode *node) {
-	compile(node->a);
-	compile(node->b);
+bool LingoCompiler::visitBinaryOpNode(BinaryOpNode *node) {
+	COMPILE(node->a);
+	COMPILE(node->b);
 	code1(node->op);
+	return true;
 }
 
 /* FrameNode */
 
-void LingoCompiler::visitFrameNode(FrameNode *node) {
-	compile(node->arg);
+bool LingoCompiler::visitFrameNode(FrameNode *node) {
+	COMPILE(node->arg);
+	return true;
 }
 
 /* MovieNode */
 
-void LingoCompiler::visitMovieNode(MovieNode *node) {
-	compile(node->arg);
+bool LingoCompiler::visitMovieNode(MovieNode *node) {
+	COMPILE(node->arg);
+	return true;
 }
 
 /* IntersectsNode */
 
-void LingoCompiler::visitIntersectsNode(IntersectsNode *node) {
-	compile(node->sprite1);
-	compile(node->sprite2);
+bool LingoCompiler::visitIntersectsNode(IntersectsNode *node) {
+	COMPILE(node->sprite1);
+	COMPILE(node->sprite2);
 	code1(LC::c_intersects);
+	return true;
 };
 
 /* WithinNode */
 
-void LingoCompiler::visitWithinNode(WithinNode *node) {
-	compile(node->sprite1);
-	compile(node->sprite2);
+bool LingoCompiler::visitWithinNode(WithinNode *node) {
+	COMPILE(node->sprite1);
+	COMPILE(node->sprite2);
 	code1(LC::c_within);
+	return true;
 };
 
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 32f4cf01d7..a37424354f 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -73,47 +73,43 @@ public:
 	bool _hadError;
 
 public:
-	void compile(Node *node);
-	void compileRef(Node *node);
-	void compileList(NodeList *nodes);
-
-	virtual void visitScriptNode(ScriptNode *node);
-	virtual void visitFactoryNode(FactoryNode *node);
-	virtual void visitHandlerNode(HandlerNode *node);
-	virtual void visitCmdNode(CmdNode *node);
-	virtual void visitPutIntoNode(PutIntoNode *node);
-	virtual void visitPutAfterNode(PutAfterNode *node);
-	virtual void visitPutBeforeNode(PutBeforeNode *node);
-	virtual void visitSetNode(SetNode *node);
-	virtual void visitGlobalNode(GlobalNode *node);
-	virtual void visitPropertyNode(PropertyNode *node);
-	virtual void visitInstanceNode(InstanceNode *node);
-	virtual void visitIfStmtNode(IfStmtNode *node);
-	virtual void visitIfElseStmtNode(IfElseStmtNode *node);
-	virtual void visitRepeatWhileNode(RepeatWhileNode *node);
-	virtual void visitRepeatWithToNode(RepeatWithToNode *node);
-	virtual void visitNextRepeatNode(NextRepeatNode *node);
-	virtual void visitExitRepeatNode(ExitRepeatNode *node);
-	virtual void visitExitNode(ExitNode *node);
-	virtual void visitTellNode(TellNode *node);
-	virtual void visitWhenNode(WhenNode *node);
-	virtual void visitAssertErrorNode(AssertErrorNode *node);
-	virtual void visitIntNode(IntNode *node);
-	virtual void visitFloatNode(FloatNode *node);
-	virtual void visitSymbolNode(SymbolNode *node);
-	virtual void visitStringNode(StringNode *node);
-	virtual void visitListNode(ListNode *node);
-	virtual void visitPropListNode(PropListNode *node);
-	virtual void visitPropPairNode(PropPairNode *node);
-	virtual void visitFuncNode(FuncNode *node);
-	virtual void visitVarNode(VarNode *node);
-	virtual void visitParensNode(ParensNode *node);
-	virtual void visitUnaryOpNode(UnaryOpNode *node);
-	virtual void visitBinaryOpNode(BinaryOpNode *node);
-	virtual void visitFrameNode(FrameNode *node);
-	virtual void visitMovieNode(MovieNode *node);
-	virtual void visitIntersectsNode(IntersectsNode *node);
-	virtual void visitWithinNode(WithinNode *node);
+	virtual bool visitScriptNode(ScriptNode *node);
+	virtual bool visitFactoryNode(FactoryNode *node);
+	virtual bool visitHandlerNode(HandlerNode *node);
+	virtual bool visitCmdNode(CmdNode *node);
+	virtual bool visitPutIntoNode(PutIntoNode *node);
+	virtual bool visitPutAfterNode(PutAfterNode *node);
+	virtual bool visitPutBeforeNode(PutBeforeNode *node);
+	virtual bool visitSetNode(SetNode *node);
+	virtual bool visitGlobalNode(GlobalNode *node);
+	virtual bool visitPropertyNode(PropertyNode *node);
+	virtual bool visitInstanceNode(InstanceNode *node);
+	virtual bool visitIfStmtNode(IfStmtNode *node);
+	virtual bool visitIfElseStmtNode(IfElseStmtNode *node);
+	virtual bool visitRepeatWhileNode(RepeatWhileNode *node);
+	virtual bool visitRepeatWithToNode(RepeatWithToNode *node);
+	virtual bool visitNextRepeatNode(NextRepeatNode *node);
+	virtual bool visitExitRepeatNode(ExitRepeatNode *node);
+	virtual bool visitExitNode(ExitNode *node);
+	virtual bool visitTellNode(TellNode *node);
+	virtual bool visitWhenNode(WhenNode *node);
+	virtual bool visitAssertErrorNode(AssertErrorNode *node);
+	virtual bool visitIntNode(IntNode *node);
+	virtual bool visitFloatNode(FloatNode *node);
+	virtual bool visitSymbolNode(SymbolNode *node);
+	virtual bool visitStringNode(StringNode *node);
+	virtual bool visitListNode(ListNode *node);
+	virtual bool visitPropListNode(PropListNode *node);
+	virtual bool visitPropPairNode(PropPairNode *node);
+	virtual bool visitFuncNode(FuncNode *node);
+	virtual bool visitVarNode(VarNode *node);
+	virtual bool visitParensNode(ParensNode *node);
+	virtual bool visitUnaryOpNode(UnaryOpNode *node);
+	virtual bool visitBinaryOpNode(BinaryOpNode *node);
+	virtual bool visitFrameNode(FrameNode *node);
+	virtual bool visitMovieNode(MovieNode *node);
+	virtual bool visitIntersectsNode(IntersectsNode *node);
+	virtual bool visitWithinNode(WithinNode *node);
 
 private:
 	int parse(const char *code);


Commit: 0980939740d0a8cb98b87dda5131b6fce7eacd42
    https://github.com/scummvm/scummvm/commit/0980939740d0a8cb98b87dda5131b6fce7eacd42
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement cast/object refs

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index ee0e2cd8a7..3fca98cda1 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -280,18 +280,21 @@ enum yysymbol_kind_t
   YYSYMBOL_var = 125,                      /* var  */
   YYSYMBOL_varorchunk = 126,               /* varorchunk  */
   YYSYMBOL_varorthe = 127,                 /* varorthe  */
-  YYSYMBOL_list = 128,                     /* list  */
-  YYSYMBOL_proplist = 129,                 /* proplist  */
-  YYSYMBOL_proppair = 130,                 /* proppair  */
-  YYSYMBOL_parens = 131,                   /* parens  */
-  YYSYMBOL_unarymath = 132,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 133,               /* simpleexpr  */
-  YYSYMBOL_simpleexpr_nounarymath = 134,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_expr = 135,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 136,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 137,                   /* sprite  */
-  YYSYMBOL_exprlist = 138,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 139          /* nonemptyexprlist  */
+  YYSYMBOL_chunk = 128,                    /* chunk  */
+  YYSYMBOL_object = 129,                   /* object  */
+  YYSYMBOL_list = 130,                     /* list  */
+  YYSYMBOL_proplist = 131,                 /* proplist  */
+  YYSYMBOL_proppair = 132,                 /* proppair  */
+  YYSYMBOL_parens = 133,                   /* parens  */
+  YYSYMBOL_unarymath = 134,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 135,               /* simpleexpr  */
+  YYSYMBOL_simpleexpr_noparens = 136,      /* simpleexpr_noparens  */
+  YYSYMBOL_simpleexpr_nounarymath = 137,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_expr = 138,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 139,         /* expr_nounarymath  */
+  YYSYMBOL_sprite = 140,                   /* sprite  */
+  YYSYMBOL_exprlist = 141,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 142          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -611,18 +614,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  119
+#define YYFINAL  125
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2789
+#define YYLAST   2900
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  93
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  47
+#define YYNNTS  50
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  191
+#define YYNRULES  200
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  361
+#define YYNSTATES  374
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   332
@@ -679,26 +682,27 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   196,   196,   198,   204,   211,   212,   213,   214,   215,
-     244,   248,   250,   252,   253,   256,   262,   269,   270,   275,
-     279,   283,   284,   285,   290,   291,   292,   293,   294,   295,
-     296,   301,   302,   305,   307,   308,   309,   310,   313,   314,
-     315,   316,   317,   319,   320,   322,   325,   326,   327,   328,
-     329,   331,   332,   333,   335,   336,   337,   338,   339,   342,
-     343,   346,   350,   360,   361,   362,   363,   364,   365,   368,
-     369,   370,   373,   374,   375,   376,   377,   378,   379,   380,
-     381,   382,   385,   388,   393,   397,   403,   408,   411,   421,
-     426,   432,   438,   444,   452,   453,   454,   455,   458,   458,
-     460,   461,   462,   465,   469,   473,   479,   483,   487,   491,
-     493,   495,   499,   503,   507,   509,   510,   514,   520,   527,
-     528,   534,   535,   536,   537,   538,   539,   540,   541,   544,
-     546,   550,   554,   555,   556,   559,   563,   568,   569,   570,
-     573,   575,   576,   579,   580,   581,   588,   589,   593,   594,
-     595,   596,   597,   598,   599,   600,   601,   602,   603,   604,
-     605,   606,   607,   608,   609,   610,   611,   618,   619,   620,
-     621,   622,   623,   624,   625,   626,   627,   628,   629,   630,
-     631,   632,   633,   634,   635,   636,   639,   640,   643,   644,
-     647,   651
+       0,   197,   197,   199,   205,   212,   213,   214,   215,   216,
+     245,   249,   251,   253,   254,   257,   263,   270,   271,   276,
+     280,   284,   285,   286,   291,   292,   293,   294,   295,   296,
+     297,   302,   303,   306,   308,   309,   310,   311,   314,   315,
+     316,   317,   318,   320,   321,   323,   326,   327,   328,   329,
+     330,   332,   333,   334,   336,   337,   338,   339,   340,   343,
+     344,   347,   351,   361,   362,   363,   364,   365,   366,   369,
+     370,   371,   374,   375,   376,   377,   378,   379,   380,   381,
+     382,   383,   386,   389,   394,   398,   404,   409,   412,   422,
+     427,   433,   439,   445,   453,   454,   455,   456,   459,   459,
+     461,   462,   463,   466,   470,   474,   480,   484,   488,   492,
+     494,   496,   500,   504,   508,   510,   511,   515,   521,   528,
+     529,   535,   536,   537,   538,   539,   540,   541,   542,   543,
+     544,   547,   549,   550,   553,   557,   561,   567,   571,   577,
+     578,   579,   582,   586,   591,   592,   593,   596,   598,   599,
+     602,   603,   604,   607,   608,   611,   612,   616,   617,   618,
+     619,   620,   621,   622,   623,   624,   625,   626,   627,   628,
+     629,   630,   631,   632,   633,   634,   641,   642,   643,   644,
+     645,   646,   647,   648,   649,   650,   651,   652,   653,   654,
+     655,   656,   657,   658,   659,   662,   663,   666,   667,   670,
+     674
 };
 #endif
 
@@ -735,9 +739,10 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "proc", "cmdargs", "frameargs", "asgn", "to", "definevars", "ifstmt",
   "ifelsestmt", "loop", "tell", "when", "stmtlist", "nonemptystmtlist",
   "stmtlistline", "simpleexpr_noparens_nounarymath", "var", "varorchunk",
-  "varorthe", "list", "proplist", "proppair", "parens", "unarymath",
-  "simpleexpr", "simpleexpr_nounarymath", "expr", "expr_nounarymath",
-  "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "varorthe", "chunk", "object", "list", "proplist", "proppair", "parens",
+  "unarymath", "simpleexpr", "simpleexpr_noparens",
+  "simpleexpr_nounarymath", "expr", "expr_nounarymath", "sprite",
+  "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -761,7 +766,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-258)
+#define YYPACT_NINF (-265)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -775,43 +780,44 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1490,  -258,  -258,  -258,  -258,  -258,  -258,   -23,  -258,  2411,
-     944,  1023,  -258,  -258,  2411,  -258,   -12,  -258,  -258,  1102,
-      -6,  2411,  -258,  2411,  -258,  -258,  2411,  -258,   944,  2411,
-    -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,
-    -258,  -258,  -258,  -258,  1023,  2411,  2411,  2293,  -258,    11,
-    1490,  -258,  -258,  -258,  -258,  1102,  -258,  -258,  -258,  -258,
-    -258,  -258,  -258,  -258,  -258,  -258,   -21,  -258,  -258,  -258,
-    -258,  -258,  -258,  -258,   -11,   -44,  -258,  -258,  -258,  -258,
-    1023,  1023,  1181,  1023,  1181,  1181,   863,   458,   -69,   -10,
-      -9,  -258,  -258,  -258,  -258,  -258,  -258,   539,  -258,  1023,
-     348,  2411,    -8,    -5,   620,  2411,  1023,  -258,  -258,   -20,
-      26,    -4,    -3,    -1,     2,   144,     8,  2411,  -258,  -258,
-    -258,    16,   701,  -258,  -258,  2411,   782,  2657,  -258,  2622,
-    -258,  -258,  -258,  2432,     5,    15,   -17,   -68,   -51,  -258,
-    2657,     1,    -7,  1023,  -258,  -258,    69,  1023,  1023,  1023,
-    1023,  1260,  1260,  1418,  1023,  1023,  1339,  1023,  1023,  1023,
-    1023,  1023,  1023,  1023,  1023,  -258,  -258,  -258,  2485,  -258,
-    2445,  2049,  1023,  1023,  1023,  1023,    23,  -258,  -258,  2411,
-    2411,  2411,    58,  2498,  -258,  -258,  1023,  1023,   -58,  -258,
-    -258,  -258,  2293,  2110,  -258,    25,  -258,  -258,    79,  2670,
-    1181,  1181,  1023,  -258,  1023,  1023,  -258,  1023,  2352,  -258,
-    -258,  1023,    27,  1023,    38,    38,    38,    38,  2705,  2705,
-    -258,    47,    38,    38,    38,    38,    47,   -26,   -26,  -258,
-    -258,    -7,  1023,  1023,  1023,  1023,  1023,  1023,  1023,  1023,
-    1023,  1023,  1023,  1023,  1023,  1023,  1023,  1023,  1023,  1023,
-    2110,    90,  2110,  -258,    29,    40,    46,  1023,  2110,  2535,
-    2657,  2411,  -258,  -258,    48,  -258,  -258,  -258,  -258,  -258,
-    1613,  -258,  -258,  2110,  1023,  -258,  -258,   -35,  2657,  2657,
-    2657,     5,    15,    41,  -258,  2657,  -258,  2657,    38,    38,
-      38,    38,  2705,  2705,  -258,    47,    38,    38,    38,    38,
-      47,   -26,   -26,  -258,  -258,    -7,  1551,  2171,  2110,  -258,
-    -258,  -258,    85,  1674,  -258,  2411,   -58,    55,  -258,  1742,
-    2657,  -258,  2232,    57,  2110,  -258,   102,  1023,    62,    64,
-    -258,  -258,  2411,  2110,  -258,  -258,  1803,  1023,  2548,  -258,
-    2110,   -18,  -258,  1865,    65,  2585,  2110,  2110,  -258,  2411,
-      66,  -258,  2110,  1927,  -258,  -258,  1988,    67,    68,  -258,
-    -258
+    1577,  -265,  -265,  -265,  -265,  -265,  -265,   -33,  -265,  2498,
+     958,  1037,  -265,  -265,  2498,  -265,   -27,  -265,  -265,  1116,
+      73,  2498,  -265,  2498,  -265,  -265,  2498,  -265,   958,  2498,
+    -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,
+    -265,  -265,  -265,  -265,  1037,  2498,  2498,  2380,  -265,    20,
+    1577,  -265,  -265,  -265,  -265,  1116,  -265,  -265,  -265,  -265,
+    -265,  -265,  -265,  -265,  -265,  -265,   -42,  -265,  -265,  -265,
+    -265,  -265,  -265,  -265,   -25,   -57,  -265,  -265,  -265,  -265,
+    1274,  1274,  1274,  1274,  1037,  1037,  1195,  1037,  1195,  1195,
+     877,   472,   -30,   -23,   -17,  -265,  -265,  -265,  -265,  -265,
+    -265,  -265,  -265,   553,  -265,  1037,   361,  2498,    -2,    17,
+     634,  2498,  1037,  -265,  -265,   -24,    45,    22,    35,    38,
+      41,   227,    43,  2498,  -265,  -265,  -265,    44,   715,  -265,
+    -265,  2498,  -265,  -265,  -265,  -265,  -265,  -265,   796,  2803,
+    -265,  2768,  -265,  -265,  -265,  2578,   -54,    14,    42,   -56,
+       2,  -265,  2803,    51,    57,  1037,  -265,  -265,    98,  1037,
+    1037,  1037,  1037,  1347,  1347,  1505,  1037,  1037,  1426,  1037,
+    1037,  1037,  1037,  1037,  1037,  1037,  1037,  -265,  -265,  -265,
+    2631,  -265,  2591,  2136,  1037,  1037,  1037,  1037,    59,  -265,
+    -265,  2557,  2557,  2557,    97,  2644,  -265,  -265,  1037,  1037,
+     -46,  -265,  -265,  -265,  2380,  2197,  -265,    64,  -265,  -265,
+     117,  2816,  1195,  1195,  1037,  -265,  1037,  1037,  -265,  1037,
+    2439,  -265,  -265,  1037,    63,  1037,    -9,    -9,    -9,    -9,
+     128,   128,  -265,    -1,    -9,    -9,    -9,    -9,    -1,   -50,
+     -50,  -265,  -265,    57,  1037,  1037,  1037,  1037,  1037,  1037,
+    1037,  1037,  1037,  1037,  1037,  1037,  1037,  1037,  1037,  1037,
+    1037,  1037,  2197,   129,  2197,  -265,    68,  -265,    69,    70,
+    1037,  2197,  2681,  2803,  2498,  -265,  -265,    71,  -265,  -265,
+    -265,  -265,  -265,  1700,  -265,  -265,  2197,  1037,  -265,  -265,
+     -48,  2803,  2803,  2803,   -54,    14,    66,  -265,  2803,  -265,
+    2803,    -9,    -9,    -9,    -9,   128,   128,  -265,    -1,    -9,
+      -9,    -9,    -9,    -1,   -50,   -50,  -265,  -265,    57,  1638,
+    2258,  2197,  -265,  -265,  -265,    86,  1761,  -265,  2498,   -46,
+      75,  -265,  1829,  2803,  -265,  2319,    76,  2197,  -265,   121,
+    1037,    85,    89,  -265,  -265,  2498,  2197,  -265,  -265,  1890,
+    1037,  2694,  -265,  2197,    33,  -265,  1952,    90,  2731,  2197,
+    2197,  -265,  2498,    91,  -265,  2197,  2014,  -265,  -265,  2075,
+      96,   100,  -265,  -265
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -827,55 +833,56 @@ static const yytype_uint8 yydefact[] =
        2,     3,     6,     7,     8,    82,     9,    63,    69,    70,
       71,    64,    65,    66,    67,    68,     0,    80,    40,    46,
       48,    50,    52,    61,     0,    60,   121,   122,   124,   123,
-      32,    39,    41,    53,     0,     0,     0,   188,   129,     0,
-       0,   143,   127,   128,   144,   145,   148,    83,   149,     0,
-       0,    59,     0,     0,    83,     0,     0,   129,   131,     0,
-       0,     0,     0,     0,     0,     0,     0,    59,    81,     1,
-       4,     0,    83,    79,   100,     0,    89,    90,   125,     0,
-     141,   142,    87,     0,   124,   123,     0,   129,     0,   135,
-     190,     0,   189,   188,    74,    75,    42,     0,     0,     0,
-       0,    26,    44,    38,     0,     0,    49,     0,     0,     0,
-       0,     0,     0,     0,     0,   146,   147,   167,    85,   168,
-       0,     0,     0,     0,     0,     0,     0,    78,    73,    35,
-      25,    27,     0,     0,    98,    99,     0,     0,    13,    76,
-      77,   102,     0,   115,   101,     0,    72,    62,    42,    93,
-       0,     0,     0,   140,     0,     0,   133,     0,     0,   134,
-     132,     0,     0,     0,   159,   160,   157,   158,   161,   162,
-     154,   164,   165,   166,   156,   155,   163,   150,   151,   152,
-     153,    84,     0,     0,     0,     0,     0,     0,     0,     0,
+      28,    31,    47,    55,    32,    39,    41,    53,     0,     0,
+       0,   197,   131,     0,     0,   150,   127,   128,   129,   130,
+     151,   152,   157,    83,   158,     0,     0,    59,     0,     0,
+      83,     0,     0,   131,   134,     0,     0,     0,     0,     0,
+       0,     0,     0,    59,    81,     1,     4,     0,    83,    79,
+     100,     0,   153,   154,   136,   135,   137,   138,    89,    90,
+     125,     0,   148,   149,    87,     0,   124,   123,     0,   131,
+       0,   142,   199,     0,   198,   197,    74,    75,    42,     0,
+       0,     0,     0,    26,    44,    38,     0,     0,    49,     0,
+       0,     0,     0,     0,     0,     0,     0,   155,   156,   176,
+      85,   177,     0,     0,     0,     0,     0,     0,     0,    78,
+      73,    35,    25,    27,     0,     0,    98,    99,     0,     0,
+      13,    76,    77,   102,     0,   115,   101,     0,    72,    62,
+      42,    93,     0,     0,     0,   147,     0,     0,   140,     0,
+       0,   141,   139,     0,     0,     0,   168,   169,   166,   167,
+     170,   171,   163,   173,   174,   175,   165,   164,   172,   159,
+     160,   161,   162,    84,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     115,   103,   115,   130,     0,     0,     0,     0,   115,     0,
-     114,     0,    17,    18,    11,    14,    15,   112,   119,   120,
-       0,   116,   117,   115,     0,   186,   187,     0,   139,   137,
-     138,     0,     0,     0,   136,   191,   126,    92,   178,   179,
-     176,   177,   180,   181,   173,   183,   184,   185,   175,   174,
-     182,   169,   170,   171,   172,    86,     0,     0,    10,    94,
-      95,    96,     0,     0,    97,    59,     0,     0,   118,    20,
-      91,    88,     0,     0,   115,   105,     0,     0,     0,     0,
-      16,   113,    21,   115,   107,   104,     0,     0,     0,   109,
-     115,     0,    22,     0,     0,     0,   115,    12,    19,     0,
-       0,   106,   115,     0,    23,   108,     0,     0,     0,   110,
-     111
+       0,     0,   115,   103,   115,   132,     0,   133,     0,     0,
+       0,   115,     0,   114,     0,    17,    18,    11,    14,    15,
+     112,   119,   120,     0,   116,   117,   115,     0,   195,   196,
+       0,   146,   144,   145,     0,     0,     0,   143,   200,   126,
+      92,   187,   188,   185,   186,   189,   190,   182,   192,   193,
+     194,   184,   183,   191,   178,   179,   180,   181,    86,     0,
+       0,    10,    94,    95,    96,     0,     0,    97,    59,     0,
+       0,   118,    20,    91,    88,     0,     0,   115,   105,     0,
+       0,     0,     0,    16,   113,    21,   115,   107,   104,     0,
+       0,     0,   109,   115,     0,    22,     0,     0,     0,   115,
+      12,    19,     0,     0,   106,   115,     0,    23,   108,     0,
+       0,     0,   110,   111
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -258,  -258,  -258,   105,  -258,  -258,  -258,  -258,  -258,  -160,
-    -258,  -258,     0,   -28,  -258,     3,   -43,  -258,     6,   129,
-    -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -240,  -258,
-    -257,   -67,   -19,  -109,  -258,  -258,  -258,   -50,   -62,  -258,
-     -77,  -258,   210,    33,   -56,    30,  -158
+    -265,  -265,  -265,   109,  -265,  -265,  -265,  -265,  -265,  -145,
+    -265,  -265,     0,   -28,  -265,     4,   -44,  -265,    -3,   166,
+    -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,  -249,  -265,
+    -264,   -16,   -19,   -67,  -265,  -115,  -265,  -265,  -265,   -22,
+     -79,    18,   -78,    32,  -265,   211,    58,   -68,    40,  -171
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    49,    50,    51,    52,    53,   263,   264,   265,   266,
-      54,   341,    88,    74,    75,   269,    57,    58,    89,    90,
-      59,   186,    60,    61,    62,    63,    64,    65,   270,   271,
-     272,    91,    92,   254,   109,    93,   138,   139,    94,    95,
-      96,   167,   140,   168,    98,   141,   142
+       0,    49,    50,    51,    52,    53,   276,   277,   278,   279,
+      54,   354,    92,    74,    75,   282,    57,    58,    93,    94,
+      59,   198,    60,    61,    62,    63,    64,    65,   283,   284,
+     285,    95,    96,   266,   115,    97,    98,    99,   150,   151,
+     100,   101,   102,   134,   179,   152,   180,   104,   153,   154
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -883,496 +890,535 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      55,   114,   108,    56,   118,   128,   231,   130,   131,    73,
-     306,   119,   308,   318,   101,   261,    66,   116,   313,   143,
-     143,   107,   184,   110,   207,   103,   111,   102,   262,    73,
-     165,   174,   185,   319,   112,   166,   208,   165,   105,   106,
-     209,   169,   166,   125,   277,    73,   117,    55,   169,   318,
-      55,   318,   211,    56,   321,   165,   318,   162,   163,   165,
-     166,   121,   318,    67,   166,   123,   169,   187,   348,   349,
-     169,   255,   256,   176,   206,   124,   144,   145,   177,   318,
-     211,   178,   188,   189,   336,   190,   318,   137,   191,   195,
-     318,   305,   210,   343,   194,   174,   318,   204,   154,   318,
-     347,    73,   196,   213,   174,   182,   353,   205,   326,   252,
-     257,   273,   356,   274,   307,   309,   286,    73,   159,   160,
-     161,   162,   163,   275,   276,   197,   310,   327,   160,   161,
-     162,   163,   311,   207,   316,   147,   148,   149,   150,   172,
-     173,   331,   174,   335,   337,   154,   155,   175,   339,   267,
-     340,   351,   355,   359,   360,   120,   330,   113,   284,   199,
-     253,   253,   253,   157,   158,   159,   160,   161,   162,   163,
-       0,    55,     0,   212,   251,     0,     0,     0,     0,   107,
-     107,   107,     0,     0,     0,     0,   192,     0,     0,     0,
-       0,     0,    55,    55,   147,   148,   149,   150,   172,   173,
-       0,   174,     0,     0,   154,   155,   175,     0,   283,     0,
+      55,   120,   114,   124,    56,   243,    66,   186,   140,    73,
+     142,   143,   108,   319,   107,   321,   109,   122,   196,   331,
+     125,   113,   326,   116,   178,   118,   117,   274,   197,    73,
+     131,   178,   155,   174,   175,   181,   219,   332,   216,   223,
+     275,   334,   181,   290,   129,    73,   123,    55,   186,   178,
+      55,   166,   127,    67,    56,   331,   186,   331,   155,   178,
+     181,   130,   331,   156,   132,   132,   132,   132,   331,   157,
+     181,   171,   172,   173,   174,   175,   267,   267,   267,   188,
+     172,   173,   174,   175,   189,   331,   199,   177,   349,   220,
+     318,   149,   331,   221,   177,   207,   331,   356,   133,   133,
+     133,   133,   331,   190,   360,   331,   217,    73,   200,   339,
+     366,   194,   177,   135,   136,   137,   369,   111,   112,   361,
+     362,   201,   177,    73,   202,   268,   269,   203,   340,   206,
+     208,   209,   225,   218,   288,   289,   159,   160,   161,   162,
+     184,   185,   222,   186,   223,   264,   166,   167,   187,   270,
+     286,   287,   299,   320,   322,   323,   324,   329,   219,   126,
+     280,   344,   348,   350,   169,   170,   171,   172,   173,   174,
+     175,   352,   265,   265,   265,   353,   364,   368,   159,   160,
+     161,   162,   372,    55,   343,   186,   373,   263,   166,   167,
+     187,   113,   113,   113,   119,   224,   211,     0,   297,     0,
+       0,     0,     0,     0,    55,    55,   169,   170,   171,   172,
+     173,   174,   175,     0,     0,     0,     0,     0,     0,     0,
+     296,   103,   106,     0,     0,     0,     0,     0,     0,     0,
+     110,     0,     0,     0,     0,     0,     0,     0,     0,   103,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      97,   100,   157,   158,   159,   160,   161,   162,   163,   104,
-     193,     0,     0,     0,     0,     0,     0,     0,    97,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      55,     0,    55,     0,   115,     0,     0,     0,    55,     0,
-       0,   315,     0,     0,     0,   122,     0,     0,     0,     0,
-      55,     0,     0,    55,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   329,     0,     0,
-     126,   127,     0,   129,     0,     0,   133,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    55,    55,    55,   170,
-     325,     0,     0,    55,     0,    73,   183,     0,     0,    55,
-       0,     0,    55,     0,    55,   334,     0,     0,     0,     0,
-       0,     0,   342,    55,     0,     0,    55,     0,     0,     0,
-      55,     0,     0,    55,     0,     0,    55,    55,     0,   354,
-       0,     0,    55,    55,     0,     0,    55,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,     0,     0,     0,     0,     0,     0,
-       0,     0,   218,   219,   220,   223,     0,     0,     0,   171,
-       0,     0,     0,     0,     0,     0,   259,   260,   147,   148,
-     149,   150,   172,   173,     0,   174,     0,     0,   154,   155,
-     175,     0,     0,     0,   278,   279,     0,   280,     0,     0,
-       0,   285,     0,   287,     0,     0,   157,   158,   159,   160,
-     161,   162,   163,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,     0,
-       0,     0,     0,    76,     0,     0,     0,   312,    77,     0,
-       0,     1,   134,   135,     0,     0,     0,     2,     3,     4,
-       5,     6,     0,     0,   320,     8,     0,     0,     0,    12,
-      13,     0,    15,    68,    17,    18,     0,    69,    70,     0,
-      22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,    30,    31,    82,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    83,    42,    43,    71,     0,
-       0,     0,     0,     0,     0,    72,     0,   338,     0,    84,
-      85,     0,     0,     0,    76,     0,    99,   345,    87,    77,
-     136,     0,     1,    78,    79,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    68,   146,    18,     0,    69,    70,
-       0,    22,     0,    24,    25,     0,    27,     0,     0,   147,
-     148,   149,   150,   151,   152,    82,   153,    34,    35,   154,
-     155,   156,    37,    38,    39,    40,    83,    42,    43,    71,
-       0,     0,     0,     0,     0,     0,    72,   157,   158,   159,
-     160,   161,   162,   163,     0,    76,   164,    99,     0,    87,
-      77,     0,     0,     1,    78,    79,     0,     0,     0,     2,
-       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,   179,     0,    15,    68,    17,    18,     0,    69,
-      70,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-     147,   148,   149,   150,   151,   152,    82,   153,   180,   181,
-     154,   155,   156,    37,    38,    39,    40,    83,    42,    43,
-      71,     0,     0,     0,     0,     0,     0,    72,   157,   158,
-     159,   160,   161,   162,   163,     0,    76,   164,    99,     0,
-      87,    77,     0,     0,     1,    78,    79,     0,     0,     0,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    68,    17,    18,     0,
-      69,    70,     0,    22,     0,    24,    25,     0,    27,     0,
-       0,   147,   148,   149,   150,   151,   152,    82,   153,    34,
-      35,   154,   155,   156,    37,    38,    39,    40,    83,    42,
-      43,    71,     0,     0,     0,     0,     0,     0,    72,   157,
-     158,   159,   160,   161,   162,   163,     0,    76,   164,    99,
-       0,    87,    77,     0,     0,     1,    78,    79,     0,     0,
-       0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    68,   198,    18,
+       0,     0,     0,     0,     0,   121,     0,     0,     0,     0,
+       0,     0,    55,     0,    55,     0,   128,     0,     0,   204,
+       0,    55,     0,     0,   328,     0,     0,   159,   160,   161,
+     162,   184,   185,    55,   186,     0,    55,   166,   167,   187,
+       0,     0,     0,     0,     0,   138,   139,     0,   141,     0,
+     342,   145,     0,     0,     0,   169,   170,   171,   172,   173,
+     174,   175,     0,   205,     0,     0,   182,     0,     0,    55,
+      55,    55,     0,   195,   338,     0,    55,     0,    73,     0,
+       0,     0,    55,     0,     0,    55,     0,    55,     0,   347,
+       0,     0,     0,     0,     0,   355,    55,     0,     0,    55,
+       0,     0,     0,    55,     0,     0,    55,     0,     0,    55,
+      55,     0,   367,     0,     0,    55,    55,     0,     0,    55,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,     0,     0,     0,
+       0,     0,     0,     0,     0,   230,   231,   232,   235,     0,
+       0,     0,   183,     0,     0,     0,     0,     0,     0,   272,
+     273,   159,   160,   161,   162,   184,   185,     0,   186,     0,
+       0,   166,   167,   187,     0,     0,     0,   291,   292,     0,
+     293,     0,     0,     0,   298,     0,   300,     0,     0,   169,
+     170,   171,   172,   173,   174,   175,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,     0,     0,     0,     0,     0,    76,     0,     0,
+       0,   325,    77,     0,     0,     1,   146,   147,     0,     0,
+       0,    80,    81,    82,    83,     6,     0,     0,   333,     8,
+       0,     0,     0,    12,    13,     0,    15,    68,    17,    18,
        0,    69,    70,     0,    22,     0,    24,    25,     0,    27,
-       0,     0,   147,   148,   149,   150,   151,   152,    82,   153,
-      34,    35,   154,   155,   156,    37,    38,    39,    40,    83,
+       0,     0,     0,     0,     0,     0,    30,    31,    86,    33,
+      34,    35,     0,     0,    36,    37,    38,    39,    40,    87,
       42,    43,    71,     0,     0,     0,     0,     0,     0,    72,
-     157,   158,   159,   160,   161,   162,   163,     0,    76,     0,
-      99,     0,    87,    77,     0,     0,     1,    78,    79,     0,
-       0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    68,    17,
+       0,   351,     0,    88,    89,     0,     0,     0,    76,     0,
+     105,   358,    91,    77,   148,     0,     1,    78,    79,     0,
+       0,     0,    80,    81,    82,    83,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,    13,     0,    15,    68,   158,
       18,     0,    69,    70,     0,    22,     0,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,    30,    31,    82,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      83,    42,    43,    71,     0,     0,     0,     0,     0,     0,
-      72,     0,     0,     0,    84,    85,     0,     0,     0,    76,
-       0,    99,   132,    87,    77,     0,     0,     1,    78,    79,
-       0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
-       0,    80,     0,     0,     0,    12,    13,     0,    81,    68,
+      27,     0,     0,   159,   160,   161,   162,   163,   164,    86,
+     165,    34,    35,   166,   167,   168,    37,    38,    39,    40,
+      87,    42,    43,    71,     0,     0,     0,     0,     0,     0,
+      72,   169,   170,   171,   172,   173,   174,   175,     0,    76,
+     176,   105,     0,    91,    77,     0,     0,     1,    78,    79,
+       0,     0,     0,    80,    81,    82,    83,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,   191,     0,    15,    68,
       17,    18,     0,    69,    70,     0,    22,     0,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
-      82,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    83,    42,    43,    71,     0,     0,     0,     0,     0,
-       0,    72,     0,     0,     0,    84,    85,     0,    76,     0,
-       0,     0,    86,    77,    87,     0,     1,    78,    79,     0,
-       0,     0,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    68,    17,
-      18,     0,    69,    70,     0,    22,     0,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,    30,    31,    82,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      83,    42,    43,    71,     0,     0,     0,     0,     0,     0,
-      72,     0,     0,     0,    84,    85,     0,    76,     0,     0,
-       0,    99,    77,    87,     0,     1,    78,    79,     0,     0,
-       0,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    68,    17,    18,
-       0,    69,    70,     0,    22,     0,    24,    25,     0,    27,
-       0,     0,     0,     0,     0,     0,    30,    31,    82,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    83,
-      42,    43,    71,     0,     0,     0,     0,     0,     0,    72,
-       0,     0,     0,    84,    85,     0,    76,     0,     0,     0,
-      86,    77,    87,     0,     1,    78,    79,     0,     0,     0,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    68,    17,    18,     0,
-      69,    70,     0,    22,     0,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,    30,    31,    82,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    71,     0,     0,     0,     0,     0,     0,    72,     0,
-       0,     0,    84,    85,     0,    76,     0,     0,     0,    99,
-      77,    87,     0,     1,    78,    79,     0,     0,     0,     2,
-       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    68,    17,    18,     0,    69,
-      70,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,     0,     0,    82,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    83,    42,    43,
-      71,     0,     0,     0,     0,     0,     0,    72,     0,     0,
-       0,    84,    85,     0,    76,     0,     0,     0,    99,    77,
-      87,     0,     1,    78,    79,     0,     0,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    68,    17,    18,     0,    69,    70,
-       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
-       0,     0,     0,     0,     0,    82,    33,    34,    35,     0,
-       0,     0,    37,    38,    39,    40,    83,    42,    43,    71,
-       0,     0,     0,     0,     0,     0,    72,     0,     0,     0,
-      84,    85,     0,    76,     0,     0,     0,    99,    77,    87,
-       0,     1,    78,    79,     0,     0,     0,     2,     3,     4,
-       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
-      13,     0,    15,    68,    17,    18,     0,    69,    70,     0,
+       0,    27,     0,     0,   159,   160,   161,   162,   163,   164,
+      86,   165,   192,   193,   166,   167,   168,    37,    38,    39,
+      40,    87,    42,    43,    71,     0,     0,     0,     0,     0,
+       0,    72,   169,   170,   171,   172,   173,   174,   175,     0,
+      76,   176,   105,     0,    91,    77,     0,     0,     1,    78,
+      79,     0,     0,     0,    80,    81,    82,    83,     6,     0,
+       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
+      68,    17,    18,     0,    69,    70,     0,    22,     0,    24,
+      25,     0,    27,     0,     0,   159,   160,   161,   162,   163,
+     164,    86,   165,    34,    35,   166,   167,   168,    37,    38,
+      39,    40,    87,    42,    43,    71,     0,     0,     0,     0,
+       0,     0,    72,   169,   170,   171,   172,   173,   174,   175,
+       0,    76,   176,   105,     0,    91,    77,     0,     0,     1,
+      78,    79,     0,     0,     0,    80,    81,    82,    83,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    68,   210,    18,     0,    69,    70,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,   159,   160,   161,   162,
+     163,   164,    86,   165,    34,    35,   166,   167,   168,    37,
+      38,    39,    40,    87,    42,    43,    71,     0,     0,     0,
+       0,     0,     0,    72,   169,   170,   171,   172,   173,   174,
+     175,     0,    76,     0,   105,     0,    91,    77,     0,     0,
+       1,    78,    79,     0,     0,     0,    80,    81,    82,    83,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,    30,    31,    86,    33,    34,    35,     0,     0,    36,
+      37,    38,    39,    40,    87,    42,    43,    71,     0,     0,
+       0,     0,     0,     0,    72,     0,     0,     0,    88,    89,
+       0,     0,     0,    76,     0,   105,   144,    91,    77,     0,
+       0,     1,    78,    79,     0,     0,     0,    80,    81,    82,
+      83,     6,     0,     0,     0,    84,     0,     0,     0,    12,
+      13,     0,    85,    68,    17,    18,     0,    69,    70,     0,
       22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,     0,     0,    82,     0,    34,    35,     0,     0,
-       0,    37,    38,    39,    40,    83,    42,    43,    71,     0,
-       0,     0,     0,     0,     0,    72,     0,     0,     0,     0,
-       0,     0,     0,     1,     0,     0,    99,     0,    87,     2,
-       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,     0,    22,    23,    24,    25,    26,    27,    28,    29,
+       0,     0,    30,    31,    86,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    87,    42,    43,    71,     0,
+       0,     0,     0,     0,     0,    72,     0,     0,     0,    88,
+      89,     0,    76,     0,     0,     0,    90,    77,    91,     0,
+       1,    78,    79,     0,     0,     0,    80,    81,    82,    83,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,    30,    31,    86,    33,    34,    35,     0,     0,    36,
+      37,    38,    39,    40,    87,    42,    43,    71,     0,     0,
+       0,     0,     0,     0,    72,     0,     0,     0,    88,    89,
+       0,    76,     0,     0,     0,   105,    77,    91,     0,     1,
+      78,    79,     0,     0,     0,    80,    81,    82,    83,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    68,    17,    18,     0,    69,    70,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+      30,    31,    86,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    87,    42,    43,    71,     0,     0,     0,
+       0,     0,     0,    72,     0,     0,     0,    88,    89,     0,
+      76,     0,     0,     0,    90,    77,    91,     0,     1,    78,
+      79,     0,     0,     0,    80,    81,    82,    83,     6,     0,
+       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
+      68,    17,    18,     0,    69,    70,     0,    22,     0,    24,
+      25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
+      31,    86,    33,    34,    35,     0,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    71,     0,     0,     0,     0,
+       0,     0,    72,     0,     0,     0,    88,    89,     0,    76,
+       0,     0,     0,   105,    77,    91,     0,     1,    78,    79,
+       0,     0,     0,    80,    81,    82,    83,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    68,
+      17,    18,     0,    69,    70,     0,    22,     0,    24,    25,
+       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
+      86,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    71,     0,     0,     0,     0,     0,
+       0,    72,    76,     0,     0,    88,    89,    77,     0,     0,
+       1,    78,    79,     0,    91,     0,    80,    81,    82,    83,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,     0,     0,    86,    33,    34,    35,     0,     0,    36,
+      37,    38,    39,    40,    87,    42,    43,    71,     0,     0,
+       0,     0,     0,     0,    72,     0,     0,     0,    88,    89,
+       0,    76,     0,     0,     0,   105,    77,    91,     0,     1,
+      78,    79,     0,     0,     0,    80,    81,    82,    83,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    68,    17,    18,     0,    69,    70,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+       0,     0,    86,    33,    34,    35,     0,     0,     0,    37,
+      38,    39,    40,    87,    42,    43,    71,     0,     0,     0,
+       0,     0,     0,    72,     0,     0,     0,    88,    89,     0,
+      76,     0,     0,     0,   105,    77,    91,     0,     1,    78,
+      79,     0,     0,     0,    80,    81,    82,    83,     6,     0,
+       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
+      68,    17,    18,     0,    69,    70,     0,    22,     0,    24,
+      25,     0,    27,     0,     0,     0,     0,     0,     0,     0,
+       0,    86,     0,    34,    35,     0,     0,     0,    37,    38,
+      39,    40,    87,    42,    43,    71,     0,     0,     0,     0,
+       0,     0,    72,     0,     0,     0,     0,     0,     0,     0,
+       1,     0,     0,   105,     0,    91,     2,     3,     4,     5,
+       6,     0,     0,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,     0,    22,
+      23,    24,    25,    26,    27,    28,    29,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+       0,     1,     0,     0,    47,     0,     0,     2,     3,     4,
+       5,     6,   335,    48,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+       0,     0,   336,     1,     0,    47,     0,     0,     0,     2,
+       3,     4,     5,     6,   281,     0,     7,     8,     9,    10,
+      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
+      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
        0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
        0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,     0,     1,     0,     0,    47,     0,     0,
-       2,     3,     4,     5,     6,   322,    48,     7,     8,     9,
+      44,    45,     0,     0,     1,     0,   330,    47,     0,     0,
+       2,     3,     4,     5,     6,     0,   281,     7,     8,     9,
       10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
       20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
       29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
       35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,     0,     0,   323,     1,     0,    47,     0,
-       0,     0,     2,     3,     4,     5,     6,   268,     0,     7,
-       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
-      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
-      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     0,     0,     1,     0,   317,
-      47,     0,     0,     2,     3,     4,     5,     6,     0,   268,
-       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     0,     0,   328,
-       0,    47,     0,     0,     0,     1,     0,     0,   332,     0,
-     268,     2,     3,     4,     5,     6,     0,     0,     7,     8,
+      43,    44,    45,     0,     0,     0,   341,     0,    47,     0,
+       0,     0,     1,     0,     0,   345,     0,   281,     2,     3,
+       4,     5,     6,     0,     0,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,     0,     0,     1,     0,     0,    47,     0,     0,     2,
+       3,     4,     5,     6,     0,   281,     7,     8,     9,    10,
+      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
+      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,     0,     0,   357,     1,     0,    47,     0,     0,
+       0,     2,     3,     4,     5,     6,   281,     0,     7,     8,
        9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
       19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
-       0,     0,     2,     3,     4,     5,     6,     0,   268,     7,
-       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
-      18,    19,    20,    21,     0,    22,    23,    24,    25,     0,
-      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,     0,     0,   344,     1,     0,
-      47,     0,     0,     0,     2,     3,     4,     5,     6,   268,
-       0,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      42,    43,    44,    45,     0,     0,   363,     1,     0,    47,
+       0,     0,     0,     2,     3,     4,     5,     6,   281,     0,
+       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
+      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
+       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,     0,     0,     1,   370,
+       0,    47,     0,     0,     2,     3,     4,     5,     6,     0,
+     281,     7,     8,     9,    10,    11,    12,    13,     0,    15,
       16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
       25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,     0,     0,   350,
-       1,     0,    47,     0,     0,     0,     2,     3,     4,     5,
-       6,   268,     0,     7,     8,     9,    10,    11,    12,    13,
+      39,    40,    41,    42,    43,    44,    45,     0,     0,     1,
+     371,     0,    47,     0,     0,     2,     3,     4,     5,     6,
+       0,   281,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
+       1,     0,     0,    47,     0,     0,     2,     3,     4,     5,
+       6,     0,   262,     7,     8,     9,    10,    11,    12,    13,
        0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
       23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
        0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
-       0,     1,   357,     0,    47,     0,     0,     2,     3,     4,
-       5,     6,     0,   268,     7,     8,     9,    10,    11,    12,
+       0,     1,     0,     0,    47,     0,     0,     2,     3,     4,
+       5,     6,     0,   281,     7,     8,     9,    10,    11,    12,
       13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
       22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
        0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-       0,     0,     1,   358,     0,    47,     0,     0,     2,     3,
-       4,     5,     6,     0,   268,     7,     8,     9,    10,    11,
+       0,     0,     1,     0,     0,    47,     0,     0,     2,     3,
+       4,     5,     6,     0,   337,     7,     8,     9,    10,    11,
       12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
        0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
        0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
        0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,     0,     0,     1,     0,     0,    47,     0,     0,     2,
-       3,     4,     5,     6,     0,   250,     7,     8,     9,    10,
-      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
-      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
+       3,     4,     5,     6,     0,   346,     7,     8,     9,    10,
+       0,    12,    13,     0,    15,    16,    17,    18,    19,    69,
+      21,     0,    22,     0,    24,    25,     0,    27,    28,    29,
        0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
        0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,     0,     0,     1,     0,     0,    47,     0,     0,
-       2,     3,     4,     5,     6,     0,   268,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,     0,     0,     1,     0,     0,    47,     0,
-       0,     2,     3,     4,     5,     6,     0,   324,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,     1,     0,     0,    47,
-       0,     0,     2,     3,     4,     5,     6,     0,   333,     7,
-       8,     9,    10,     0,    12,    13,     0,    15,    16,    17,
-      18,    19,    69,    21,     0,    22,     0,    24,    25,     0,
-      27,    28,    29,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    71,    45,     1,   281,   282,     0,     0,
-      47,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    68,    17,    18,
-       0,    69,    70,     0,    22,     0,    24,    25,     0,    27,
-       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    71,     0,     1,     0,     0,     0,     0,    72,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    68,    17,    18,     0,
-      69,    70,     0,    22,     0,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    71,   147,   148,   149,   150,   172,   173,    72,   174,
-       0,     0,   154,   155,   175,   147,   148,   149,   150,   172,
-     173,     0,   174,     0,     0,   154,   155,   175,     0,     0,
-     157,   158,   159,   160,   161,   162,   163,     0,     0,   202,
-       0,   203,     0,   157,   158,   159,   160,   161,   162,   163,
-       0,     0,     0,     0,   203,   232,   233,   234,   235,   236,
-     237,     0,   238,     0,     0,   239,   240,   241,   147,   148,
-     149,   150,   172,   173,     0,   174,     0,     0,   154,   155,
-     175,     0,     0,   242,   243,   244,   245,   246,   247,   248,
-       0,     0,   249,     0,     0,     0,   157,   158,   159,   160,
-     161,   162,   163,     0,   258,   147,   148,   149,   150,   172,
-     173,     0,   174,     0,     0,   154,   155,   175,   147,   148,
-     149,   150,   172,   173,     0,   174,     0,     0,   154,   155,
-     175,     0,     0,   157,   158,   159,   160,   161,   162,   163,
-       0,   314,     0,     0,     0,     0,   157,   158,   159,   160,
-     161,   162,   163,     0,   346,   147,   148,   149,   150,   172,
-     173,     0,   174,     0,     0,   154,   155,   175,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   157,   158,   159,   160,   161,   162,   163,
-       0,   352,   147,   148,   149,   150,   172,   173,     0,   174,
-       0,     0,   154,   155,   175,     0,     0,     0,     0,     0,
-     200,   201,     0,     0,     0,     0,     0,     0,     0,     0,
-     157,   158,   159,   160,   161,   162,   163,   147,   148,   149,
-     150,   172,   173,     0,   174,     0,     0,   154,   155,   175,
-     232,   233,   234,   235,   236,   237,     0,   238,     0,     0,
-     239,   240,   241,     0,     0,   157,   158,   159,   160,   161,
-     162,   163,     0,     0,     0,     0,     0,     0,   242,   243,
-     244,   245,   246,   247,   248,   147,   148,   149,   150,     0,
-       0,     0,   174,     0,     0,   154,   155,   175,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   157,   158,   159,   160,   161,   162,   163
+      71,    45,     1,   294,   295,     0,     0,    47,     2,     3,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+      12,    13,     0,    15,    68,    17,    18,     0,    69,    70,
+       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    71,
+       0,     1,     0,     0,     0,     0,    72,     2,     3,     4,
+       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
+      13,     0,    15,    68,    17,    18,     0,    69,    70,     0,
+      22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    71,     0,
+       1,     0,     0,     0,     0,    72,    80,    81,     4,     5,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    71,   159,   160,
+     161,   162,   184,   185,    72,   186,     0,     0,   166,   167,
+     187,   159,   160,   161,   162,   184,   185,     0,   186,     0,
+       0,   166,   167,   187,     0,     0,   169,   170,   171,   172,
+     173,   174,   175,     0,     0,   214,     0,   215,     0,   169,
+     170,   171,   172,   173,   174,   175,     0,     0,     0,     0,
+     215,   244,   245,   246,   247,   248,   249,     0,   250,     0,
+       0,   251,   252,   253,   159,   160,   161,   162,   184,   185,
+       0,   186,     0,     0,   166,   167,   187,     0,     0,   254,
+     255,   256,   257,   258,   259,   260,     0,     0,   261,     0,
+       0,     0,   169,   170,   171,   172,   173,   174,   175,     0,
+     271,   159,   160,   161,   162,   184,   185,     0,   186,     0,
+       0,   166,   167,   187,   159,   160,   161,   162,   184,   185,
+       0,   186,     0,     0,   166,   167,   187,     0,     0,   169,
+     170,   171,   172,   173,   174,   175,     0,   327,     0,     0,
+       0,     0,   169,   170,   171,   172,   173,   174,   175,     0,
+     359,   159,   160,   161,   162,   184,   185,     0,   186,     0,
+       0,   166,   167,   187,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   169,
+     170,   171,   172,   173,   174,   175,     0,   365,   159,   160,
+     161,   162,   184,   185,     0,   186,     0,     0,   166,   167,
+     187,     0,     0,     0,     0,     0,   212,   213,     0,     0,
+       0,     0,     0,     0,     0,     0,   169,   170,   171,   172,
+     173,   174,   175,   159,   160,   161,   162,   184,   185,     0,
+     186,     0,     0,   166,   167,   187,   244,   245,   246,   247,
+     248,   249,     0,   250,     0,     0,   251,   252,   253,     0,
+       0,   169,   170,   171,   172,   173,   174,   175,     0,     0,
+       0,     0,     0,     0,   254,   255,   256,   257,   258,   259,
+     260
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,    21,     0,    47,    82,   164,    84,    85,     9,
-     250,     0,   252,   270,    14,    73,    39,    45,   258,    88,
-      88,    21,    42,    23,    92,    19,    26,    39,    86,    29,
-      97,    57,    52,   273,    28,    97,    87,   104,    44,    45,
-      91,    97,   104,    87,   202,    45,    46,    47,   104,   306,
-      50,   308,    87,    50,    89,   122,   313,    83,    84,   126,
-     122,    55,   319,    86,   126,    86,   122,    41,    86,    87,
-     126,   180,   181,   101,    91,    86,    86,    86,    86,   336,
-      87,    86,    86,    86,   324,    86,   343,    87,    86,   117,
-     347,   249,    91,   333,    86,    57,   353,    92,    60,   356,
-     340,   101,    86,    34,    57,   105,   346,    92,    23,    86,
-      52,    86,   352,    34,    24,    86,    89,   117,    80,    81,
-      82,    83,    84,   200,   201,   125,    86,    42,    81,    82,
-      83,    84,    86,    92,    86,    50,    51,    52,    53,    54,
-      55,    86,    57,    86,    42,    60,    61,    62,    86,   192,
-      86,    86,    86,    86,    86,    50,   316,    28,   208,   126,
-     179,   180,   181,    78,    79,    80,    81,    82,    83,    84,
-      -1,   171,    -1,   143,   171,    -1,    -1,    -1,    -1,   179,
-     180,   181,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-      -1,    -1,   192,   193,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    -1,   208,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      10,    11,    78,    79,    80,    81,    82,    83,    84,    19,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     250,    -1,   252,    -1,    44,    -1,    -1,    -1,   258,    -1,
-      -1,   261,    -1,    -1,    -1,    55,    -1,    -1,    -1,    -1,
-     270,    -1,    -1,   273,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   315,    -1,    -1,
-      80,    81,    -1,    83,    -1,    -1,    86,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   306,   307,   308,    99,
-     307,    -1,    -1,   313,    -1,   315,   106,    -1,    -1,   319,
-      -1,    -1,   322,    -1,   324,   322,    -1,    -1,    -1,    -1,
-      -1,    -1,   332,   333,    -1,    -1,   336,    -1,    -1,    -1,
-     340,    -1,    -1,   343,    -1,    -1,   346,   347,    -1,   349,
-      -1,    -1,   352,   353,    -1,    -1,   356,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   172,   173,   174,   175,    -1,    -1,    -1,    41,
-      -1,    -1,    -1,    -1,    -1,    -1,   186,   187,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    -1,   204,   205,    -1,   207,    -1,    -1,
-      -1,   211,    -1,   213,    -1,    -1,    78,    79,    80,    81,
+       0,    29,    21,    47,     0,   176,    39,    57,    86,     9,
+      88,    89,    39,   262,    14,   264,    19,    45,    42,   283,
+       0,    21,   271,    23,   103,    28,    26,    73,    52,    29,
+      87,   110,    88,    83,    84,   103,    92,   286,    92,    87,
+      86,    89,   110,   214,    86,    45,    46,    47,    57,   128,
+      50,    60,    55,    86,    50,   319,    57,   321,    88,   138,
+     128,    86,   326,    86,    80,    81,    82,    83,   332,    86,
+     138,    80,    81,    82,    83,    84,   191,   192,   193,   107,
+      81,    82,    83,    84,    86,   349,    41,   103,   337,    87,
+     261,    91,   356,    91,   110,   123,   360,   346,    80,    81,
+      82,    83,   366,    86,   353,   369,    92,   107,    86,    23,
+     359,   111,   128,    81,    82,    83,   365,    44,    45,    86,
+      87,    86,   138,   123,    86,   192,   193,    86,    42,    86,
+      86,   131,    34,    91,   212,   213,    50,    51,    52,    53,
+      54,    55,    91,    57,    87,    86,    60,    61,    62,    52,
+      86,    34,    89,    24,    86,    86,    86,    86,    92,    50,
+     204,    86,    86,    42,    78,    79,    80,    81,    82,    83,
+      84,    86,   191,   192,   193,    86,    86,    86,    50,    51,
+      52,    53,    86,   183,   329,    57,    86,   183,    60,    61,
+      62,   191,   192,   193,    28,   155,   138,    -1,   220,    -1,
+      -1,    -1,    -1,    -1,   204,   205,    78,    79,    80,    81,
       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,    -1,
-      -1,    -1,    -1,     5,    -1,    -1,    -1,   257,    10,    -1,
-      -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,   274,    27,    -1,    -1,    -1,    31,
-      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
-      42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    -1,   327,    -1,    81,
-      82,    -1,    -1,    -1,     5,    -1,    88,   337,    90,    10,
-      92,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,     5,    87,    88,    -1,    90,
-      10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,
-      80,    81,    82,    83,    84,    -1,     5,    87,    88,    -1,
-      90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,    -1,
-      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
-      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
-      39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,
-      -1,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,     5,    87,    88,
-      -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
+     220,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,
+      -1,    -1,   262,    -1,   264,    -1,    55,    -1,    -1,    42,
+      -1,   271,    -1,    -1,   274,    -1,    -1,    50,    51,    52,
+      53,    54,    55,   283,    57,    -1,   286,    60,    61,    62,
+      -1,    -1,    -1,    -1,    -1,    84,    85,    -1,    87,    -1,
+     328,    90,    -1,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    -1,    86,    -1,    -1,   105,    -1,    -1,   319,
+     320,   321,    -1,   112,   320,    -1,   326,    -1,   328,    -1,
+      -1,    -1,   332,    -1,    -1,   335,    -1,   337,    -1,   335,
+      -1,    -1,    -1,    -1,    -1,   345,   346,    -1,    -1,   349,
+      -1,    -1,    -1,   353,    -1,    -1,   356,    -1,    -1,   359,
+     360,    -1,   362,    -1,    -1,   365,   366,    -1,    -1,   369,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   184,   185,   186,   187,    -1,
+      -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,   198,
+     199,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    -1,    -1,    -1,   216,   217,    -1,
+     219,    -1,    -1,    -1,   223,    -1,   225,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,    -1,    -1,    -1,    -1,    -1,     5,    -1,    -1,
+      -1,   270,    10,    -1,    -1,    13,    14,    15,    -1,    -1,
+      -1,    19,    20,    21,    22,    23,    -1,    -1,   287,    27,
       -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
       -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,    47,
-      -1,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    79,    80,    81,    82,    83,    84,    -1,     5,    -1,
-      88,    -1,    90,    10,    -1,    -1,    13,    14,    15,    -1,
+      -1,   340,    -1,    81,    82,    -1,    -1,    -1,     5,    -1,
+      88,   350,    90,    10,    92,    -1,    13,    14,    15,    -1,
       -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
       27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
       37,    -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,
-      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
+      47,    -1,    -1,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,     5,
-      -1,    88,    89,    90,    10,    -1,    -1,    13,    14,    15,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,     5,
+      87,    88,    -1,    90,    10,    -1,    -1,    13,    14,    15,
       -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
       -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
       36,    37,    -1,    39,    40,    -1,    42,    -1,    44,    45,
-      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      -1,    47,    -1,    -1,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,
-      -1,    -1,    88,    10,    90,    -1,    13,    14,    15,    -1,
-      -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,
-      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,
-      -1,    88,    10,    90,    -1,    13,    14,    15,    -1,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
-      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      -1,    -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,
-      88,    10,    90,    -1,    13,    14,    15,    -1,    -1,    -1,
-      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
-      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
-      39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,
-      -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
-      -1,    -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,
-      10,    90,    -1,    13,    14,    15,    -1,    -1,    -1,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,
-      -1,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
-      -1,    81,    82,    -1,     5,    -1,    -1,    -1,    88,    10,
-      90,    -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    56,    57,    58,    59,    -1,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,
-      81,    82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,
+      -1,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
+       5,    87,    88,    -1,    90,    10,    -1,    -1,    13,    14,
+      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    -1,    44,
+      45,    -1,    47,    -1,    -1,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    83,    84,
+      -1,     5,    87,    88,    -1,    90,    10,    -1,    -1,    13,
+      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
+      44,    45,    -1,    47,    -1,    -1,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    78,    79,    80,    81,    82,    83,
+      84,    -1,     5,    -1,    88,    -1,    90,    10,    -1,    -1,
+      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
+      -1,    -1,    -1,     5,    -1,    88,    89,    90,    10,    -1,
       -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
       22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
       32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
       42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    56,    -1,    58,    59,    -1,    -1,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    13,    -1,    -1,    88,    -1,    90,    19,
-      20,    21,    22,    23,    -1,    -1,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    46,    47,    48,    49,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
+      82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
+      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
+      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
+      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
+      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,
+       5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,
+      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    -1,    44,
+      45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,
+      -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,    15,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    -1,    42,    -1,    44,    45,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,     5,    -1,    -1,    81,    82,    10,    -1,    -1,
+      13,    14,    15,    -1,    90,    -1,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
+      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
+      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
+      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    56,    57,    58,    59,    -1,    -1,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,
+       5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,
+      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    -1,    42,    -1,    44,
+      45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    56,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      13,    -1,    -1,    88,    -1,    90,    19,    20,    21,    22,
+      23,    -1,    -1,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,
+      22,    23,    24,    86,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
+      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    74,    13,    -1,    77,    -1,    -1,    -1,    19,
+      20,    21,    22,    23,    86,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
       -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    -1,    13,    -1,    -1,    77,    -1,    -1,
-      19,    20,    21,    22,    23,    24,    86,    26,    27,    28,
+      70,    71,    -1,    -1,    13,    -1,    76,    77,    -1,    -1,
+      19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
       29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
       39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
       49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
       59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,
-      -1,    -1,    19,    20,    21,    22,    23,    86,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    13,    -1,    76,
-      77,    -1,    -1,    19,    20,    21,    22,    23,    -1,    86,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    75,
-      -1,    77,    -1,    -1,    -1,    13,    -1,    -1,    16,    -1,
-      86,    19,    20,    21,    22,    23,    -1,    -1,    26,    27,
+      69,    70,    71,    -1,    -1,    -1,    75,    -1,    77,    -1,
+      -1,    -1,    13,    -1,    -1,    16,    -1,    86,    19,    20,
+      21,    22,    23,    -1,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,
+      20,    21,    22,    23,    -1,    86,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,    -1,
+      -1,    19,    20,    21,    22,    23,    86,    -1,    26,    27,
       28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
       38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
       48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
       58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
-      -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    43,    44,    45,    -1,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    74,    13,    -1,
-      77,    -1,    -1,    -1,    19,    20,    21,    22,    23,    86,
-      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      68,    69,    70,    71,    -1,    -1,    74,    13,    -1,    77,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    86,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
+      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    75,
+      -1,    77,    -1,    -1,    19,    20,    21,    22,    23,    -1,
+      86,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
       35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
       45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
-      13,    -1,    77,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    86,    -1,    26,    27,    28,    29,    30,    31,    32,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
+      75,    -1,    77,    -1,    -1,    19,    20,    21,    22,    23,
+      -1,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
+      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,    22,
+      23,    -1,    86,    26,    27,    28,    29,    30,    31,    32,
       -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
       43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    13,    75,    -1,    77,    -1,    -1,    19,    20,    21,
+      -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,
       22,    23,    -1,    86,    26,    27,    28,    29,    30,    31,
       32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
       42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
       -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    13,    75,    -1,    77,    -1,    -1,    19,    20,
+      -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,
       21,    22,    23,    -1,    86,    26,    27,    28,    29,    30,
       31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
       -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
@@ -1380,71 +1426,56 @@ static const yytype_int16 yycheck[] =
       -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,
       20,    21,    22,    23,    -1,    86,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
+      -1,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    -1,    42,    -1,    44,    45,    -1,    47,    48,    49,
       -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,
-      19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
-      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    86,    26,    27,
-      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    13,    -1,    -1,    77,
-      -1,    -1,    19,    20,    21,    22,    23,    -1,    86,    26,
-      27,    28,    29,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    -1,    42,    -1,    44,    45,    -1,
-      47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    13,    14,    15,    -1,    -1,
-      77,    19,    20,    21,    22,    23,    -1,    -1,    -1,    27,
-      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    13,    -1,    -1,    -1,    -1,    77,
-      19,    20,    21,    22,    23,    -1,    -1,    -1,    27,    -1,
-      -1,    -1,    31,    32,    -1,    34,    35,    36,    37,    -1,
-      39,    40,    -1,    42,    -1,    44,    45,    -1,    47,    -1,
-      -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    50,    51,    52,    53,    54,    55,    77,    57,
-      -1,    -1,    60,    61,    62,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    87,
-      -1,    89,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    89,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    87,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    50,    51,
+      70,    71,    13,    14,    15,    -1,    -1,    77,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    13,    -1,    -1,    -1,    -1,    77,    19,    20,    21,
+      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
+      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
+      42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      13,    -1,    -1,    -1,    -1,    77,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
+      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    50,    51,
+      52,    53,    54,    55,    77,    57,    -1,    -1,    60,    61,
+      62,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    -1,    -1,    87,    -1,    89,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
+      89,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    87,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      86,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    86,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
+      86,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+      79,    80,    81,    82,    83,    84,    -1,    86,    50,    51,
       52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    86,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    86,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
-      -1,    86,    50,    51,    52,    53,    54,    55,    -1,    57,
-      -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,
-      68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    84,    50,    51,    52,
-      53,    54,    55,    -1,    57,    -1,    -1,    60,    61,    62,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    -1,
-      60,    61,    62,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    84,    50,    51,    52,    53,    -1,
-      -1,    -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84
+      62,    -1,    -1,    -1,    -1,    -1,    68,    69,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
+      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1459,35 +1490,36 @@ static const yytype_uint8 yystos[] =
       95,    96,    97,    98,   103,   105,   108,   109,   110,   113,
      115,   116,   117,   118,   119,   120,    39,    86,    35,    39,
       40,    70,    77,   105,   106,   107,     5,    10,    14,    15,
-      27,    34,    56,    67,    81,    82,    88,    90,   105,   111,
-     112,   124,   125,   128,   131,   132,   133,   135,   137,    88,
-     135,   105,    39,   111,   135,    44,    45,   105,   125,   127,
-     105,   105,   111,   112,   106,   135,   106,   105,   109,     0,
-      96,   111,   135,    86,    86,    87,   135,   135,   133,   135,
-     133,   133,    89,   135,    14,    15,    92,   105,   129,   130,
-     135,   138,   139,    88,    86,    86,    36,    50,    51,    52,
-      53,    54,    55,    57,    60,    61,    62,    78,    79,    80,
-      81,    82,    83,    84,    87,   124,   131,   134,   136,   137,
-     135,    41,    54,    55,    57,    62,   106,    86,    86,    32,
-      58,    59,   105,   135,    42,    52,   114,    41,    86,    86,
-      86,    86,    42,    86,    86,   106,    86,   105,    36,   136,
-      68,    69,    87,    89,    92,    92,    91,    92,    87,    91,
-      91,    87,   138,    34,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   139,    50,    51,    52,    53,    54,    55,    57,    60,
-      61,    62,    78,    79,    80,    81,    82,    83,    84,    87,
-      86,   108,    86,   125,   126,   126,   126,    52,    86,   135,
-     135,    73,    86,    99,   100,   101,   102,   109,    86,   108,
-     121,   122,   123,    86,    34,   133,   133,   139,   135,   135,
-     135,    14,    15,   105,   130,   135,    89,   135,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   139,   121,    24,   121,    86,
-      86,    86,   135,   121,    86,   105,    86,    76,   123,   121,
-     135,    89,    24,    74,    86,   108,    23,    42,    75,   106,
-     102,    86,    16,    86,   108,    86,   121,    42,   135,    86,
-      86,   104,   105,   121,    74,   135,    86,   121,    86,    87,
-      74,    86,    86,   121,   105,    86,   121,    75,    75,    86,
-      86
+      19,    20,    21,    22,    27,    34,    56,    67,    81,    82,
+      88,    90,   105,   111,   112,   124,   125,   128,   129,   130,
+     133,   134,   135,   138,   140,    88,   138,   105,    39,   111,
+     138,    44,    45,   105,   125,   127,   105,   105,   111,   112,
+     106,   138,   106,   105,   109,     0,    96,   111,   138,    86,
+      86,    87,   124,   134,   136,   136,   136,   136,   138,   138,
+     135,   138,   135,   135,    89,   138,    14,    15,    92,   105,
+     131,   132,   138,   141,   142,    88,    86,    86,    36,    50,
+      51,    52,    53,    54,    55,    57,    60,    61,    62,    78,
+      79,    80,    81,    82,    83,    84,    87,   124,   133,   137,
+     139,   140,   138,    41,    54,    55,    57,    62,   106,    86,
+      86,    32,    58,    59,   105,   138,    42,    52,   114,    41,
+      86,    86,    86,    86,    42,    86,    86,   106,    86,   105,
+      36,   139,    68,    69,    87,    89,    92,    92,    91,    92,
+      87,    91,    91,    87,   141,    34,   138,   138,   138,   138,
+     138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
+     138,   138,   138,   142,    50,    51,    52,    53,    54,    55,
+      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
+      84,    87,    86,   108,    86,   125,   126,   128,   126,   126,
+      52,    86,   138,   138,    73,    86,    99,   100,   101,   102,
+     109,    86,   108,   121,   122,   123,    86,    34,   135,   135,
+     142,   138,   138,   138,    14,    15,   105,   132,   138,    89,
+     138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
+     138,   138,   138,   138,   138,   138,   138,   138,   142,   121,
+      24,   121,    86,    86,    86,   138,   121,    86,   105,    86,
+      76,   123,   121,   138,    89,    24,    74,    86,   108,    23,
+      42,    75,   106,   102,    86,    16,    86,   108,    86,   121,
+      42,   138,    86,    86,   104,   105,   121,    74,   138,    86,
+     121,    86,    87,    74,    86,    86,   121,   105,    86,   121,
+      75,    75,    86,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1505,14 +1537,15 @@ static const yytype_uint8 yyr1[] =
      112,   112,   112,   112,   113,   113,   113,   113,   114,   114,
      115,   115,   115,   116,   116,   117,   117,   117,   117,   118,
      118,   118,   119,   119,   120,   121,   121,   122,   122,   123,
-     123,   124,   124,   124,   124,   124,   124,   124,   124,   125,
-     126,   127,   128,   128,   128,   129,   129,   130,   130,   130,
-     131,   132,   132,   133,   133,   133,   134,   134,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   137,   137,   138,   138,
-     139,   139
+     123,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+     124,   125,   126,   126,   127,   128,   128,   129,   129,   130,
+     130,   130,   131,   131,   132,   132,   132,   133,   134,   134,
+     135,   135,   135,   136,   136,   137,   137,   138,   138,   138,
+     138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
+     138,   138,   138,   138,   138,   138,   139,   139,   139,   139,
+     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
+     139,   139,   139,   139,   139,   140,   140,   141,   141,   142,
+     142
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1531,13 +1564,14 @@ static const yytype_int8 yyr2[] =
        3,     3,     3,     4,     7,     6,     9,     7,    10,     7,
       11,    12,     4,     6,     4,     0,     1,     1,     2,     1,
        1,     1,     1,     1,     1,     2,     4,     1,     1,     1,
-       1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
-       3,     2,     2,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     2,     2,     2,     3,
+       3,     3,     1,     3,     3,     3,     3,     3,     2,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     1,     1,     3,
+       3,     3,     3,     3,     3,     3,     1,     1,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     4,     4,     0,     1,
-       1,     3
+       3,     3,     3,     3,     3,     4,     4,     0,     1,     1,
+       3
 };
 
 
@@ -1809,51 +1843,51 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1815 "engines/director/lingo/lingo-gr.cpp"
+#line 1849 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1821 "engines/director/lingo/lingo-gr.cpp"
+#line 1855 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tVARID: /* tVARID  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1827 "engines/director/lingo/lingo-gr.cpp"
+#line 1861 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1833 "engines/director/lingo/lingo-gr.cpp"
+#line 1867 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1839 "engines/director/lingo/lingo-gr.cpp"
+#line 1873 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1845 "engines/director/lingo/lingo-gr.cpp"
+#line 1879 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1851 "engines/director/lingo/lingo-gr.cpp"
+#line 1885 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 190 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1857 "engines/director/lingo/lingo-gr.cpp"
+#line 1891 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2119,1047 +2153,1083 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* script: scriptpartlist  */
-#line 196 "engines/director/lingo/lingo-gr.y"
+#line 197 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2125 "engines/director/lingo/lingo-gr.cpp"
+#line 2159 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
-#line 198 "engines/director/lingo/lingo-gr.y"
+#line 199 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2136 "engines/director/lingo/lingo-gr.cpp"
+#line 2170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
-#line 204 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2146 "engines/director/lingo/lingo-gr.cpp"
+#line 2180 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
-#line 211 "engines/director/lingo/lingo-gr.y"
+#line 212 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2152 "engines/director/lingo/lingo-gr.cpp"
+#line 2186 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
-#line 244 "engines/director/lingo/lingo-gr.y"
+#line 245 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2158 "engines/director/lingo/lingo-gr.cpp"
+#line 2192 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
-#line 248 "engines/director/lingo/lingo-gr.y"
+#line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2164 "engines/director/lingo/lingo-gr.cpp"
+#line 2198 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
-#line 250 "engines/director/lingo/lingo-gr.y"
+#line 251 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2170 "engines/director/lingo/lingo-gr.cpp"
+#line 2204 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
-#line 252 "engines/director/lingo/lingo-gr.y"
+#line 253 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2176 "engines/director/lingo/lingo-gr.cpp"
+#line 2210 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
-#line 256 "engines/director/lingo/lingo-gr.y"
+#line 257 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2187 "engines/director/lingo/lingo-gr.cpp"
+#line 2221 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
-#line 262 "engines/director/lingo/lingo-gr.y"
+#line 263 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2197 "engines/director/lingo/lingo-gr.cpp"
+#line 2231 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
-#line 269 "engines/director/lingo/lingo-gr.y"
+#line 270 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2203 "engines/director/lingo/lingo-gr.cpp"
+#line 2237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
-#line 275 "engines/director/lingo/lingo-gr.y"
+#line 276 "engines/director/lingo/lingo-gr.y"
                                                                {	// D3
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2212 "engines/director/lingo/lingo-gr.cpp"
+#line 2246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
-#line 279 "engines/director/lingo/lingo-gr.y"
+#line 280 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2219 "engines/director/lingo/lingo-gr.cpp"
+#line 2253 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
-#line 284 "engines/director/lingo/lingo-gr.y"
+#line 285 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2225 "engines/director/lingo/lingo-gr.cpp"
+#line 2259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
-#line 285 "engines/director/lingo/lingo-gr.y"
+#line 286 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2231 "engines/director/lingo/lingo-gr.cpp"
+#line 2265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tAFTER  */
-#line 291 "engines/director/lingo/lingo-gr.y"
+#line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2237 "engines/director/lingo/lingo-gr.cpp"
+#line 2271 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tAND  */
-#line 292 "engines/director/lingo/lingo-gr.y"
+#line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2243 "engines/director/lingo/lingo-gr.cpp"
+#line 2277 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tBEFORE  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2249 "engines/director/lingo/lingo-gr.cpp"
+#line 2283 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tCAST  */
-#line 294 "engines/director/lingo/lingo-gr.y"
+#line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2255 "engines/director/lingo/lingo-gr.cpp"
+#line 2289 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tCHAR  */
-#line 295 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2261 "engines/director/lingo/lingo-gr.cpp"
+#line 2295 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tDOWN  */
-#line 296 "engines/director/lingo/lingo-gr.y"
+#line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2267 "engines/director/lingo/lingo-gr.cpp"
+#line 2301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tFIELD  */
-#line 301 "engines/director/lingo/lingo-gr.y"
+#line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2273 "engines/director/lingo/lingo-gr.cpp"
+#line 2307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tFRAME  */
-#line 302 "engines/director/lingo/lingo-gr.y"
+#line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2279 "engines/director/lingo/lingo-gr.cpp"
+#line 2313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tIN  */
-#line 305 "engines/director/lingo/lingo-gr.y"
+#line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2285 "engines/director/lingo/lingo-gr.cpp"
+#line 2319 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tINTERSECTS  */
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 308 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2291 "engines/director/lingo/lingo-gr.cpp"
+#line 2325 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tINTO  */
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2297 "engines/director/lingo/lingo-gr.cpp"
+#line 2331 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tITEM  */
-#line 309 "engines/director/lingo/lingo-gr.y"
+#line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2303 "engines/director/lingo/lingo-gr.cpp"
+#line 2337 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tLINE  */
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2309 "engines/director/lingo/lingo-gr.cpp"
+#line 2343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tMOD  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2315 "engines/director/lingo/lingo-gr.cpp"
+#line 2349 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tMOVIE  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2321 "engines/director/lingo/lingo-gr.cpp"
+#line 2355 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tNEXT  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2327 "engines/director/lingo/lingo-gr.cpp"
+#line 2361 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tNOT  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2333 "engines/director/lingo/lingo-gr.cpp"
+#line 2367 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tOF  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2339 "engines/director/lingo/lingo-gr.cpp"
+#line 2373 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tOPEN  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2345 "engines/director/lingo/lingo-gr.cpp"
+#line 2379 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tOR  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+#line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2351 "engines/director/lingo/lingo-gr.cpp"
+#line 2385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tPREVIOUS  */
-#line 322 "engines/director/lingo/lingo-gr.y"
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2357 "engines/director/lingo/lingo-gr.cpp"
+#line 2391 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tREPEAT  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2363 "engines/director/lingo/lingo-gr.cpp"
+#line 2397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tSCRIPT  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2369 "engines/director/lingo/lingo-gr.cpp"
+#line 2403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tSET  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2375 "engines/director/lingo/lingo-gr.cpp"
+#line 2409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tSTARTS  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2381 "engines/director/lingo/lingo-gr.cpp"
+#line 2415 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tTELL  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2387 "engines/director/lingo/lingo-gr.cpp"
+#line 2421 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tTO  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2393 "engines/director/lingo/lingo-gr.cpp"
+#line 2427 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tASSERTERROR  */
-#line 332 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2399 "engines/director/lingo/lingo-gr.cpp"
+#line 2433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tSPRITE  */
-#line 333 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2405 "engines/director/lingo/lingo-gr.cpp"
+#line 2439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tWHILE  */
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2411 "engines/director/lingo/lingo-gr.cpp"
+#line 2445 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tWINDOW  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2417 "engines/director/lingo/lingo-gr.cpp"
+#line 2451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tWITH  */
-#line 337 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2423 "engines/director/lingo/lingo-gr.cpp"
+#line 2457 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tWITHIN  */
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2429 "engines/director/lingo/lingo-gr.cpp"
+#line 2463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tWORD  */
-#line 339 "engines/director/lingo/lingo-gr.y"
+#line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2435 "engines/director/lingo/lingo-gr.cpp"
+#line 2469 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* idlist: %empty  */
-#line 342 "engines/director/lingo/lingo-gr.y"
+#line 343 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2475 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* nonemptyidlist: ID  */
-#line 346 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2450 "engines/director/lingo/lingo-gr.cpp"
+#line 2484 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 350 "engines/director/lingo/lingo-gr.y"
+#line 351 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2458 "engines/director/lingo/lingo-gr.cpp"
+#line 2492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* proc: ID cmdargs '\n'  */
-#line 373 "engines/director/lingo/lingo-gr.y"
+#line 374 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2464 "engines/director/lingo/lingo-gr.cpp"
+#line 2498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* proc: tPUT cmdargs '\n'  */
-#line 374 "engines/director/lingo/lingo-gr.y"
+#line 375 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2470 "engines/director/lingo/lingo-gr.cpp"
+#line 2504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* proc: tGO cmdargs '\n'  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+#line 376 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2476 "engines/director/lingo/lingo-gr.cpp"
+#line 2510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* proc: tGO frameargs '\n'  */
-#line 376 "engines/director/lingo/lingo-gr.y"
+#line 377 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2482 "engines/director/lingo/lingo-gr.cpp"
+#line 2516 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* proc: tPLAY cmdargs '\n'  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2488 "engines/director/lingo/lingo-gr.cpp"
+#line 2522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* proc: tPLAY frameargs '\n'  */
-#line 378 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2494 "engines/director/lingo/lingo-gr.cpp"
+#line 2528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* proc: tNEXT tREPEAT '\n'  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2500 "engines/director/lingo/lingo-gr.cpp"
+#line 2534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* proc: tEXIT tREPEAT '\n'  */
-#line 380 "engines/director/lingo/lingo-gr.y"
+#line 381 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2506 "engines/director/lingo/lingo-gr.cpp"
+#line 2540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* proc: tEXIT '\n'  */
-#line 381 "engines/director/lingo/lingo-gr.y"
+#line 382 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2512 "engines/director/lingo/lingo-gr.cpp"
+#line 2546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* proc: tASSERTERROR stmtoneliner  */
-#line 382 "engines/director/lingo/lingo-gr.y"
+#line 383 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2518 "engines/director/lingo/lingo-gr.cpp"
+#line 2552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* cmdargs: %empty  */
-#line 385 "engines/director/lingo/lingo-gr.y"
+#line 386 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2526 "engines/director/lingo/lingo-gr.cpp"
+#line 2560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* cmdargs: expr  */
-#line 388 "engines/director/lingo/lingo-gr.y"
+#line 389 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2536 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 393 "engines/director/lingo/lingo-gr.y"
+#line 394 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2545 "engines/director/lingo/lingo-gr.cpp"
+#line 2579 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* cmdargs: expr expr_nounarymath  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2556 "engines/director/lingo/lingo-gr.cpp"
+#line 2590 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+#line 404 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2566 "engines/director/lingo/lingo-gr.cpp"
+#line 2600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* cmdargs: '(' ')'  */
-#line 408 "engines/director/lingo/lingo-gr.y"
+#line 409 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2574 "engines/director/lingo/lingo-gr.cpp"
+#line 2608 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 412 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2583 "engines/director/lingo/lingo-gr.cpp"
+#line 2617 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* frameargs: tFRAME expr  */
-#line 421 "engines/director/lingo/lingo-gr.y"
+#line 422 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2593 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* frameargs: tMOVIE expr  */
-#line 426 "engines/director/lingo/lingo-gr.y"
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2638 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* frameargs: expr tOF tMOVIE expr  */
-#line 438 "engines/director/lingo/lingo-gr.y"
+#line 439 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2626 "engines/director/lingo/lingo-gr.cpp"
+#line 2660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 444 "engines/director/lingo/lingo-gr.y"
+#line 445 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2637 "engines/director/lingo/lingo-gr.cpp"
+#line 2671 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 453 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2643 "engines/director/lingo/lingo-gr.cpp"
+#line 2677 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2683 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 454 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2655 "engines/director/lingo/lingo-gr.cpp"
+#line 2689 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* asgn: tSET varorthe to expr '\n'  */
-#line 455 "engines/director/lingo/lingo-gr.y"
+#line 456 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100: /* definevars: tGLOBAL idlist '\n'  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 461 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2667 "engines/director/lingo/lingo-gr.cpp"
+#line 2701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* definevars: tPROPERTY idlist '\n'  */
-#line 461 "engines/director/lingo/lingo-gr.y"
+#line 462 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2673 "engines/director/lingo/lingo-gr.cpp"
+#line 2707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102: /* definevars: tINSTANCE idlist '\n'  */
-#line 462 "engines/director/lingo/lingo-gr.y"
+#line 463 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* ifstmt: tIF expr tTHEN stmt  */
-#line 465 "engines/director/lingo/lingo-gr.y"
+#line 466 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2688 "engines/director/lingo/lingo-gr.cpp"
+#line 2722 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 469 "engines/director/lingo/lingo-gr.y"
+#line 470 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 473 "engines/director/lingo/lingo-gr.y"
+#line 474 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2740 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2715 "engines/director/lingo/lingo-gr.cpp"
+#line 2749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 483 "engines/director/lingo/lingo-gr.y"
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2724 "engines/director/lingo/lingo-gr.cpp"
+#line 2758 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 487 "engines/director/lingo/lingo-gr.y"
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2731 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 491 "engines/director/lingo/lingo-gr.y"
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2738 "engines/director/lingo/lingo-gr.cpp"
+#line 2772 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 493 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2745 "engines/director/lingo/lingo-gr.cpp"
+#line 2779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2752 "engines/director/lingo/lingo-gr.cpp"
+#line 2786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* tell: tTELL expr tTO stmtoneliner  */
-#line 499 "engines/director/lingo/lingo-gr.y"
+#line 500 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 2761 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 503 "engines/director/lingo/lingo-gr.y"
+#line 504 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2768 "engines/director/lingo/lingo-gr.cpp"
+#line 2802 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* when: tWHEN ID tTHEN expr  */
-#line 507 "engines/director/lingo/lingo-gr.y"
+#line 508 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 2774 "engines/director/lingo/lingo-gr.cpp"
+#line 2808 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* stmtlist: %empty  */
-#line 509 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2780 "engines/director/lingo/lingo-gr.cpp"
+#line 2814 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* nonemptystmtlist: stmtlistline  */
-#line 514 "engines/director/lingo/lingo-gr.y"
+#line 515 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2791 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2835 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* stmtlistline: '\n'  */
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2841 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 534 "engines/director/lingo/lingo-gr.y"
+#line 535 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2847 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 536 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2853 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 536 "engines/director/lingo/lingo-gr.y"
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2859 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 537 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2865 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 538 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* var: ID  */
-#line 544 "engines/director/lingo/lingo-gr.y"
+  case 131: /* var: ID  */
+#line 547 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* list: '[' exprlist ']'  */
-#line 554 "engines/director/lingo/lingo-gr.y"
+  case 135: /* chunk: tFIELD simpleexpr_noparens  */
+#line 557 "engines/director/lingo/lingo-gr.y"
+                                        {
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[0].node));
+		(yyval.node) = new FuncNode(new Common::String("field"), args); }
+#line 2892 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 136: /* chunk: tCAST simpleexpr_noparens  */
+#line 561 "engines/director/lingo/lingo-gr.y"
+                                                {
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[0].node));
+		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
+#line 2901 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 137: /* object: tSCRIPT simpleexpr_noparens  */
+#line 567 "engines/director/lingo/lingo-gr.y"
+                                                {
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[0].node));
+		(yyval.node) = new FuncNode(new Common::String("script"), args); }
+#line 2910 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 138: /* object: tWINDOW simpleexpr_noparens  */
+#line 571 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[0].node));
+		(yyval.node) = new FuncNode(new Common::String("window"), args); }
+#line 2919 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 139: /* list: '[' exprlist ']'  */
+#line 577 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2925 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* list: '[' ':' ']'  */
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 140: /* list: '[' ':' ']'  */
+#line 578 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* list: '[' proplist ']'  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 141: /* list: '[' proplist ']'  */
+#line 579 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* proplist: proppair  */
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 142: /* proplist: proppair  */
+#line 582 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2876 "engines/director/lingo/lingo-gr.cpp"
+#line 2946 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* proplist: proplist ',' proppair  */
-#line 563 "engines/director/lingo/lingo-gr.y"
+  case 143: /* proplist: proplist ',' proppair  */
+#line 586 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2884 "engines/director/lingo/lingo-gr.cpp"
+#line 2954 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* proppair: tSYMBOL ':' expr  */
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 144: /* proppair: tSYMBOL ':' expr  */
+#line 591 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2890 "engines/director/lingo/lingo-gr.cpp"
+#line 2960 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* proppair: ID ':' expr  */
-#line 569 "engines/director/lingo/lingo-gr.y"
+  case 145: /* proppair: ID ':' expr  */
+#line 592 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2896 "engines/director/lingo/lingo-gr.cpp"
+#line 2966 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* proppair: tSTRING ':' expr  */
-#line 570 "engines/director/lingo/lingo-gr.y"
+  case 146: /* proppair: tSTRING ':' expr  */
+#line 593 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2902 "engines/director/lingo/lingo-gr.cpp"
+#line 2972 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* parens: '(' expr ')'  */
-#line 573 "engines/director/lingo/lingo-gr.y"
+  case 147: /* parens: '(' expr ')'  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2908 "engines/director/lingo/lingo-gr.cpp"
+#line 2978 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* unarymath: '+' simpleexpr  */
-#line 575 "engines/director/lingo/lingo-gr.y"
+  case 148: /* unarymath: '+' simpleexpr  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2914 "engines/director/lingo/lingo-gr.cpp"
+#line 2984 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* unarymath: '-' simpleexpr  */
-#line 576 "engines/director/lingo/lingo-gr.y"
+  case 149: /* unarymath: '-' simpleexpr  */
+#line 599 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2920 "engines/director/lingo/lingo-gr.cpp"
+#line 2990 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* expr: expr '+' expr  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 159: /* expr: expr '+' expr  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2926 "engines/director/lingo/lingo-gr.cpp"
+#line 2996 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* expr: expr '-' expr  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 160: /* expr: expr '-' expr  */
+#line 619 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2932 "engines/director/lingo/lingo-gr.cpp"
+#line 3002 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* expr: expr '*' expr  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 161: /* expr: expr '*' expr  */
+#line 620 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2938 "engines/director/lingo/lingo-gr.cpp"
+#line 3008 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* expr: expr '/' expr  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 162: /* expr: expr '/' expr  */
+#line 621 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2944 "engines/director/lingo/lingo-gr.cpp"
+#line 3014 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* expr: expr tMOD expr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 163: /* expr: expr tMOD expr  */
+#line 622 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2950 "engines/director/lingo/lingo-gr.cpp"
+#line 3020 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* expr: expr '>' expr  */
-#line 600 "engines/director/lingo/lingo-gr.y"
+  case 164: /* expr: expr '>' expr  */
+#line 623 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2956 "engines/director/lingo/lingo-gr.cpp"
+#line 3026 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* expr: expr '<' expr  */
-#line 601 "engines/director/lingo/lingo-gr.y"
+  case 165: /* expr: expr '<' expr  */
+#line 624 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2962 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* expr: expr tEQ expr  */
-#line 602 "engines/director/lingo/lingo-gr.y"
+  case 166: /* expr: expr tEQ expr  */
+#line 625 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2968 "engines/director/lingo/lingo-gr.cpp"
+#line 3038 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* expr: expr tNEQ expr  */
-#line 603 "engines/director/lingo/lingo-gr.y"
+  case 167: /* expr: expr tNEQ expr  */
+#line 626 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2974 "engines/director/lingo/lingo-gr.cpp"
+#line 3044 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* expr: expr tGE expr  */
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 168: /* expr: expr tGE expr  */
+#line 627 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2980 "engines/director/lingo/lingo-gr.cpp"
+#line 3050 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* expr: expr tLE expr  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 169: /* expr: expr tLE expr  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2986 "engines/director/lingo/lingo-gr.cpp"
+#line 3056 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* expr: expr tAND expr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 170: /* expr: expr tAND expr  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2992 "engines/director/lingo/lingo-gr.cpp"
+#line 3062 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* expr: expr tOR expr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 171: /* expr: expr tOR expr  */
+#line 630 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2998 "engines/director/lingo/lingo-gr.cpp"
+#line 3068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr: expr '&' expr  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+  case 172: /* expr: expr '&' expr  */
+#line 631 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3004 "engines/director/lingo/lingo-gr.cpp"
+#line 3074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr: expr tCONCAT expr  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+  case 173: /* expr: expr tCONCAT expr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3010 "engines/director/lingo/lingo-gr.cpp"
+#line 3080 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* expr: expr tCONTAINS expr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 174: /* expr: expr tCONTAINS expr  */
+#line 633 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3016 "engines/director/lingo/lingo-gr.cpp"
+#line 3086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* expr: expr tSTARTS expr  */
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 175: /* expr: expr tSTARTS expr  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3022 "engines/director/lingo/lingo-gr.cpp"
+#line 3092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 178: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3028 "engines/director/lingo/lingo-gr.cpp"
+#line 3098 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 179: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 644 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3034 "engines/director/lingo/lingo-gr.cpp"
+#line 3104 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 180: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 645 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3040 "engines/director/lingo/lingo-gr.cpp"
+#line 3110 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 181: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3046 "engines/director/lingo/lingo-gr.cpp"
+#line 3116 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 182: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 183: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 648 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+#line 3128 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+  case 184: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 649 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3064 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 185: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 650 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3070 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 186: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 651 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 3146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+  case 187: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 652 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 188: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 631 "engines/director/lingo/lingo-gr.y"
+  case 189: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 654 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 190: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 655 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3100 "engines/director/lingo/lingo-gr.cpp"
+#line 3170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 191: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 656 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 192: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 657 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3112 "engines/director/lingo/lingo-gr.cpp"
+#line 3182 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 635 "engines/director/lingo/lingo-gr.y"
+  case 193: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 658 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3118 "engines/director/lingo/lingo-gr.cpp"
+#line 3188 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 636 "engines/director/lingo/lingo-gr.y"
+  case 194: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 659 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 3194 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 195: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 662 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3130 "engines/director/lingo/lingo-gr.cpp"
+#line 3200 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 196: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 663 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3136 "engines/director/lingo/lingo-gr.cpp"
+#line 3206 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* exprlist: %empty  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 197: /* exprlist: %empty  */
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3142 "engines/director/lingo/lingo-gr.cpp"
+#line 3212 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* nonemptyexprlist: expr  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 199: /* nonemptyexprlist: expr  */
+#line 670 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3151 "engines/director/lingo/lingo-gr.cpp"
+#line 3221 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 200: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 674 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3159 "engines/director/lingo/lingo-gr.cpp"
+#line 3229 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3163 "engines/director/lingo/lingo-gr.cpp"
+#line 3233 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3358,7 +3428,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 656 "engines/director/lingo/lingo-gr.y"
+#line 679 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index f57b4b4f4b..36cf2a5888 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -176,6 +176,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<node> expr expr_nounarymath sprite
 %type<node> var varorchunk varorthe
 %type<node> list proppair
+%type<node> chunk object
 %type<nodelist> proplist exprlist nonemptyexprlist
 
 %left tAND tOR
@@ -538,19 +539,41 @@ simpleexpr_noparens_nounarymath:
 	| tNOT simpleexpr[arg]  %prec tUNARY	{ $$ = new UnaryOpNode(LC::c_not, $arg); }
 	| ID '(' exprlist[args] ')'		{ $$ = new FuncNode($ID, $args); }
 	| var
+	| chunk
+	| object
 	| list
 	;
 
 var: ID							{ $$ = new VarNode($ID); } ;
 
 varorchunk: var
-	// TODO: chunk ref
+	| chunk
 	;
 
 varorthe: var
 	// TODO: the
 	;
 
+chunk: tFIELD simpleexpr_noparens[arg]	{
+		NodeList *args = new NodeList;
+		args->push_back($arg);
+		$$ = new FuncNode(new Common::String("field"), args); }
+	| tCAST simpleexpr_noparens[arg]	{
+		NodeList *args = new NodeList;
+		args->push_back($arg);
+		$$ = new FuncNode(new Common::String("cast"), args); }
+	;
+
+object: tSCRIPT simpleexpr_noparens[arg]	{
+		NodeList *args = new NodeList;
+		args->push_back($arg);
+		$$ = new FuncNode(new Common::String("script"), args); }
+	| tWINDOW simpleexpr_noparens[arg]		{
+		NodeList *args = new NodeList;
+		args->push_back($arg);
+		$$ = new FuncNode(new Common::String("window"), args); }
+	;
+
 list: '[' exprlist ']'			{ $$ = new ListNode($exprlist); }
 	| '[' ':' ']'				{ $$ = new PropListNode(new NodeList); }
 	| '[' proplist ']'			{ $$ = new PropListNode($proplist); }


Commit: 510681249bfdfde6283d56a370002f03037f148f
    https://github.com/scummvm/scummvm/commit/510681249bfdfde6283d56a370002f03037f148f
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Clean up token types

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 3fca98cda1..6feac1ba4f 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -158,143 +158,154 @@ enum yysymbol_kind_t
   YYSYMBOL_tUNARY = 3,                     /* tUNARY  */
   YYSYMBOL_tLEXERROR = 4,                  /* tLEXERROR  */
   YYSYMBOL_tINT = 5,                       /* tINT  */
-  YYSYMBOL_tTHEENTITY = 6,                 /* tTHEENTITY  */
-  YYSYMBOL_tTHEENTITYWITHID = 7,           /* tTHEENTITYWITHID  */
-  YYSYMBOL_tTHEMENUITEMENTITY = 8,         /* tTHEMENUITEMENTITY  */
-  YYSYMBOL_tTHEMENUITEMSENTITY = 9,        /* tTHEMENUITEMSENTITY  */
-  YYSYMBOL_tFLOAT = 10,                    /* tFLOAT  */
-  YYSYMBOL_tTHEFUNC = 11,                  /* tTHEFUNC  */
-  YYSYMBOL_tTHEFUNCINOF = 12,              /* tTHEFUNCINOF  */
-  YYSYMBOL_tVARID = 13,                    /* tVARID  */
-  YYSYMBOL_tSTRING = 14,                   /* tSTRING  */
-  YYSYMBOL_tSYMBOL = 15,                   /* tSYMBOL  */
-  YYSYMBOL_tENDCLAUSE = 16,                /* tENDCLAUSE  */
-  YYSYMBOL_tPLAYACCEL = 17,                /* tPLAYACCEL  */
-  YYSYMBOL_tTHEOBJECTPROP = 18,            /* tTHEOBJECTPROP  */
-  YYSYMBOL_tCAST = 19,                     /* tCAST  */
-  YYSYMBOL_tFIELD = 20,                    /* tFIELD  */
-  YYSYMBOL_tSCRIPT = 21,                   /* tSCRIPT  */
-  YYSYMBOL_tWINDOW = 22,                   /* tWINDOW  */
-  YYSYMBOL_tDOWN = 23,                     /* tDOWN  */
-  YYSYMBOL_tELSE = 24,                     /* tELSE  */
-  YYSYMBOL_tELSIF = 25,                    /* tELSIF  */
-  YYSYMBOL_tEXIT = 26,                     /* tEXIT  */
-  YYSYMBOL_tFRAME = 27,                    /* tFRAME  */
-  YYSYMBOL_tGLOBAL = 28,                   /* tGLOBAL  */
-  YYSYMBOL_tGO = 29,                       /* tGO  */
-  YYSYMBOL_tIF = 30,                       /* tIF  */
-  YYSYMBOL_tIN = 31,                       /* tIN  */
-  YYSYMBOL_tINTO = 32,                     /* tINTO  */
-  YYSYMBOL_tMACRO = 33,                    /* tMACRO  */
-  YYSYMBOL_tMOVIE = 34,                    /* tMOVIE  */
-  YYSYMBOL_tNEXT = 35,                     /* tNEXT  */
-  YYSYMBOL_tOF = 36,                       /* tOF  */
-  YYSYMBOL_tPREVIOUS = 37,                 /* tPREVIOUS  */
-  YYSYMBOL_tPUT = 38,                      /* tPUT  */
-  YYSYMBOL_tREPEAT = 39,                   /* tREPEAT  */
-  YYSYMBOL_tSET = 40,                      /* tSET  */
-  YYSYMBOL_tTHEN = 41,                     /* tTHEN  */
-  YYSYMBOL_tTO = 42,                       /* tTO  */
-  YYSYMBOL_tWHEN = 43,                     /* tWHEN  */
-  YYSYMBOL_tWITH = 44,                     /* tWITH  */
-  YYSYMBOL_tWHILE = 45,                    /* tWHILE  */
-  YYSYMBOL_tFACTORY = 46,                  /* tFACTORY  */
-  YYSYMBOL_tOPEN = 47,                     /* tOPEN  */
-  YYSYMBOL_tPLAY = 48,                     /* tPLAY  */
-  YYSYMBOL_tINSTANCE = 49,                 /* tINSTANCE  */
-  YYSYMBOL_tGE = 50,                       /* tGE  */
-  YYSYMBOL_tLE = 51,                       /* tLE  */
-  YYSYMBOL_tEQ = 52,                       /* tEQ  */
-  YYSYMBOL_tNEQ = 53,                      /* tNEQ  */
-  YYSYMBOL_tAND = 54,                      /* tAND  */
-  YYSYMBOL_tOR = 55,                       /* tOR  */
-  YYSYMBOL_tNOT = 56,                      /* tNOT  */
-  YYSYMBOL_tMOD = 57,                      /* tMOD  */
-  YYSYMBOL_tAFTER = 58,                    /* tAFTER  */
-  YYSYMBOL_tBEFORE = 59,                   /* tBEFORE  */
-  YYSYMBOL_tCONCAT = 60,                   /* tCONCAT  */
-  YYSYMBOL_tCONTAINS = 61,                 /* tCONTAINS  */
-  YYSYMBOL_tSTARTS = 62,                   /* tSTARTS  */
-  YYSYMBOL_tCHAR = 63,                     /* tCHAR  */
-  YYSYMBOL_tITEM = 64,                     /* tITEM  */
-  YYSYMBOL_tLINE = 65,                     /* tLINE  */
-  YYSYMBOL_tWORD = 66,                     /* tWORD  */
-  YYSYMBOL_tSPRITE = 67,                   /* tSPRITE  */
-  YYSYMBOL_tINTERSECTS = 68,               /* tINTERSECTS  */
-  YYSYMBOL_tWITHIN = 69,                   /* tWITHIN  */
-  YYSYMBOL_tTELL = 70,                     /* tTELL  */
-  YYSYMBOL_tPROPERTY = 71,                 /* tPROPERTY  */
-  YYSYMBOL_tON = 72,                       /* tON  */
-  YYSYMBOL_tMETHOD = 73,                   /* tMETHOD  */
-  YYSYMBOL_tENDIF = 74,                    /* tENDIF  */
-  YYSYMBOL_tENDREPEAT = 75,                /* tENDREPEAT  */
-  YYSYMBOL_tENDTELL = 76,                  /* tENDTELL  */
-  YYSYMBOL_tASSERTERROR = 77,              /* tASSERTERROR  */
-  YYSYMBOL_78_ = 78,                       /* '<'  */
-  YYSYMBOL_79_ = 79,                       /* '>'  */
-  YYSYMBOL_80_ = 80,                       /* '&'  */
-  YYSYMBOL_81_ = 81,                       /* '+'  */
-  YYSYMBOL_82_ = 82,                       /* '-'  */
-  YYSYMBOL_83_ = 83,                       /* '*'  */
-  YYSYMBOL_84_ = 84,                       /* '/'  */
-  YYSYMBOL_85_ = 85,                       /* '%'  */
-  YYSYMBOL_86_n_ = 86,                     /* '\n'  */
-  YYSYMBOL_87_ = 87,                       /* ','  */
-  YYSYMBOL_88_ = 88,                       /* '('  */
-  YYSYMBOL_89_ = 89,                       /* ')'  */
-  YYSYMBOL_90_ = 90,                       /* '['  */
-  YYSYMBOL_91_ = 91,                       /* ']'  */
-  YYSYMBOL_92_ = 92,                       /* ':'  */
-  YYSYMBOL_YYACCEPT = 93,                  /* $accept  */
-  YYSYMBOL_script = 94,                    /* script  */
-  YYSYMBOL_scriptpartlist = 95,            /* scriptpartlist  */
-  YYSYMBOL_scriptpart = 96,                /* scriptpart  */
-  YYSYMBOL_macro = 97,                     /* macro  */
-  YYSYMBOL_factory = 98,                   /* factory  */
-  YYSYMBOL_method = 99,                    /* method  */
-  YYSYMBOL_methodlist = 100,               /* methodlist  */
-  YYSYMBOL_nonemptymethodlist = 101,       /* nonemptymethodlist  */
-  YYSYMBOL_methodlistline = 102,           /* methodlistline  */
-  YYSYMBOL_handler = 103,                  /* handler  */
-  YYSYMBOL_endargdef = 104,                /* endargdef  */
-  YYSYMBOL_ID = 105,                       /* ID  */
-  YYSYMBOL_idlist = 106,                   /* idlist  */
-  YYSYMBOL_nonemptyidlist = 107,           /* nonemptyidlist  */
-  YYSYMBOL_stmt = 108,                     /* stmt  */
-  YYSYMBOL_stmtoneliner = 109,             /* stmtoneliner  */
-  YYSYMBOL_proc = 110,                     /* proc  */
-  YYSYMBOL_cmdargs = 111,                  /* cmdargs  */
-  YYSYMBOL_frameargs = 112,                /* frameargs  */
-  YYSYMBOL_asgn = 113,                     /* asgn  */
-  YYSYMBOL_to = 114,                       /* to  */
-  YYSYMBOL_definevars = 115,               /* definevars  */
-  YYSYMBOL_ifstmt = 116,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 117,               /* ifelsestmt  */
-  YYSYMBOL_loop = 118,                     /* loop  */
-  YYSYMBOL_tell = 119,                     /* tell  */
-  YYSYMBOL_when = 120,                     /* when  */
-  YYSYMBOL_stmtlist = 121,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 122,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 123,             /* stmtlistline  */
-  YYSYMBOL_simpleexpr_noparens_nounarymath = 124, /* simpleexpr_noparens_nounarymath  */
-  YYSYMBOL_var = 125,                      /* var  */
-  YYSYMBOL_varorchunk = 126,               /* varorchunk  */
-  YYSYMBOL_varorthe = 127,                 /* varorthe  */
-  YYSYMBOL_chunk = 128,                    /* chunk  */
-  YYSYMBOL_object = 129,                   /* object  */
-  YYSYMBOL_list = 130,                     /* list  */
-  YYSYMBOL_proplist = 131,                 /* proplist  */
-  YYSYMBOL_proppair = 132,                 /* proppair  */
-  YYSYMBOL_parens = 133,                   /* parens  */
-  YYSYMBOL_unarymath = 134,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 135,               /* simpleexpr  */
-  YYSYMBOL_simpleexpr_noparens = 136,      /* simpleexpr_noparens  */
-  YYSYMBOL_simpleexpr_nounarymath = 137,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_expr = 138,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 139,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 140,                   /* sprite  */
-  YYSYMBOL_exprlist = 141,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 142          /* nonemptyexprlist  */
+  YYSYMBOL_tFLOAT = 6,                     /* tFLOAT  */
+  YYSYMBOL_tVARID = 7,                     /* tVARID  */
+  YYSYMBOL_tSTRING = 8,                    /* tSTRING  */
+  YYSYMBOL_tSYMBOL = 9,                    /* tSYMBOL  */
+  YYSYMBOL_tENDCLAUSE = 10,                /* tENDCLAUSE  */
+  YYSYMBOL_tCAST = 11,                     /* tCAST  */
+  YYSYMBOL_tFIELD = 12,                    /* tFIELD  */
+  YYSYMBOL_tSCRIPT = 13,                   /* tSCRIPT  */
+  YYSYMBOL_tWINDOW = 14,                   /* tWINDOW  */
+  YYSYMBOL_tDOWN = 15,                     /* tDOWN  */
+  YYSYMBOL_tELSE = 16,                     /* tELSE  */
+  YYSYMBOL_tELSIF = 17,                    /* tELSIF  */
+  YYSYMBOL_tEXIT = 18,                     /* tEXIT  */
+  YYSYMBOL_tFRAME = 19,                    /* tFRAME  */
+  YYSYMBOL_tGLOBAL = 20,                   /* tGLOBAL  */
+  YYSYMBOL_tGO = 21,                       /* tGO  */
+  YYSYMBOL_tIF = 22,                       /* tIF  */
+  YYSYMBOL_tIN = 23,                       /* tIN  */
+  YYSYMBOL_tINTO = 24,                     /* tINTO  */
+  YYSYMBOL_tMACRO = 25,                    /* tMACRO  */
+  YYSYMBOL_tMOVIE = 26,                    /* tMOVIE  */
+  YYSYMBOL_tNEXT = 27,                     /* tNEXT  */
+  YYSYMBOL_tOF = 28,                       /* tOF  */
+  YYSYMBOL_tPREVIOUS = 29,                 /* tPREVIOUS  */
+  YYSYMBOL_tPUT = 30,                      /* tPUT  */
+  YYSYMBOL_tREPEAT = 31,                   /* tREPEAT  */
+  YYSYMBOL_tSET = 32,                      /* tSET  */
+  YYSYMBOL_tTHEN = 33,                     /* tTHEN  */
+  YYSYMBOL_tTO = 34,                       /* tTO  */
+  YYSYMBOL_tWHEN = 35,                     /* tWHEN  */
+  YYSYMBOL_tWITH = 36,                     /* tWITH  */
+  YYSYMBOL_tWHILE = 37,                    /* tWHILE  */
+  YYSYMBOL_tFACTORY = 38,                  /* tFACTORY  */
+  YYSYMBOL_tOPEN = 39,                     /* tOPEN  */
+  YYSYMBOL_tPLAY = 40,                     /* tPLAY  */
+  YYSYMBOL_tINSTANCE = 41,                 /* tINSTANCE  */
+  YYSYMBOL_tGE = 42,                       /* tGE  */
+  YYSYMBOL_tLE = 43,                       /* tLE  */
+  YYSYMBOL_tEQ = 44,                       /* tEQ  */
+  YYSYMBOL_tNEQ = 45,                      /* tNEQ  */
+  YYSYMBOL_tAND = 46,                      /* tAND  */
+  YYSYMBOL_tOR = 47,                       /* tOR  */
+  YYSYMBOL_tNOT = 48,                      /* tNOT  */
+  YYSYMBOL_tMOD = 49,                      /* tMOD  */
+  YYSYMBOL_tAFTER = 50,                    /* tAFTER  */
+  YYSYMBOL_tBEFORE = 51,                   /* tBEFORE  */
+  YYSYMBOL_tCONCAT = 52,                   /* tCONCAT  */
+  YYSYMBOL_tCONTAINS = 53,                 /* tCONTAINS  */
+  YYSYMBOL_tSTARTS = 54,                   /* tSTARTS  */
+  YYSYMBOL_tCHAR = 55,                     /* tCHAR  */
+  YYSYMBOL_tCHARS = 56,                    /* tCHARS  */
+  YYSYMBOL_tITEM = 57,                     /* tITEM  */
+  YYSYMBOL_tITEMS = 58,                    /* tITEMS  */
+  YYSYMBOL_tLINE = 59,                     /* tLINE  */
+  YYSYMBOL_tLINES = 60,                    /* tLINES  */
+  YYSYMBOL_tWORD = 61,                     /* tWORD  */
+  YYSYMBOL_tWORDS = 62,                    /* tWORDS  */
+  YYSYMBOL_tABBREVIATED = 63,              /* tABBREVIATED  */
+  YYSYMBOL_tABBREV = 64,                   /* tABBREV  */
+  YYSYMBOL_tABBR = 65,                     /* tABBR  */
+  YYSYMBOL_tLONG = 66,                     /* tLONG  */
+  YYSYMBOL_tSHORT = 67,                    /* tSHORT  */
+  YYSYMBOL_tCASTMEMBERS = 68,              /* tCASTMEMBERS  */
+  YYSYMBOL_tDATE = 69,                     /* tDATE  */
+  YYSYMBOL_tLAST = 70,                     /* tLAST  */
+  YYSYMBOL_tMENU = 71,                     /* tMENU  */
+  YYSYMBOL_tMENUITEM = 72,                 /* tMENUITEM  */
+  YYSYMBOL_tMENUITEMS = 73,                /* tMENUITEMS  */
+  YYSYMBOL_tNUMBER = 74,                   /* tNUMBER  */
+  YYSYMBOL_tTHE = 75,                      /* tTHE  */
+  YYSYMBOL_tTIME = 76,                     /* tTIME  */
+  YYSYMBOL_tSOUND = 77,                    /* tSOUND  */
+  YYSYMBOL_tSPRITE = 78,                   /* tSPRITE  */
+  YYSYMBOL_tINTERSECTS = 79,               /* tINTERSECTS  */
+  YYSYMBOL_tWITHIN = 80,                   /* tWITHIN  */
+  YYSYMBOL_tTELL = 81,                     /* tTELL  */
+  YYSYMBOL_tPROPERTY = 82,                 /* tPROPERTY  */
+  YYSYMBOL_tON = 83,                       /* tON  */
+  YYSYMBOL_tMETHOD = 84,                   /* tMETHOD  */
+  YYSYMBOL_tENDIF = 85,                    /* tENDIF  */
+  YYSYMBOL_tENDREPEAT = 86,                /* tENDREPEAT  */
+  YYSYMBOL_tENDTELL = 87,                  /* tENDTELL  */
+  YYSYMBOL_tASSERTERROR = 88,              /* tASSERTERROR  */
+  YYSYMBOL_89_ = 89,                       /* '<'  */
+  YYSYMBOL_90_ = 90,                       /* '>'  */
+  YYSYMBOL_91_ = 91,                       /* '&'  */
+  YYSYMBOL_92_ = 92,                       /* '+'  */
+  YYSYMBOL_93_ = 93,                       /* '-'  */
+  YYSYMBOL_94_ = 94,                       /* '*'  */
+  YYSYMBOL_95_ = 95,                       /* '/'  */
+  YYSYMBOL_96_ = 96,                       /* '%'  */
+  YYSYMBOL_97_n_ = 97,                     /* '\n'  */
+  YYSYMBOL_98_ = 98,                       /* ','  */
+  YYSYMBOL_99_ = 99,                       /* '('  */
+  YYSYMBOL_100_ = 100,                     /* ')'  */
+  YYSYMBOL_101_ = 101,                     /* '['  */
+  YYSYMBOL_102_ = 102,                     /* ']'  */
+  YYSYMBOL_103_ = 103,                     /* ':'  */
+  YYSYMBOL_YYACCEPT = 104,                 /* $accept  */
+  YYSYMBOL_script = 105,                   /* script  */
+  YYSYMBOL_scriptpartlist = 106,           /* scriptpartlist  */
+  YYSYMBOL_scriptpart = 107,               /* scriptpart  */
+  YYSYMBOL_macro = 108,                    /* macro  */
+  YYSYMBOL_factory = 109,                  /* factory  */
+  YYSYMBOL_method = 110,                   /* method  */
+  YYSYMBOL_methodlist = 111,               /* methodlist  */
+  YYSYMBOL_nonemptymethodlist = 112,       /* nonemptymethodlist  */
+  YYSYMBOL_methodlistline = 113,           /* methodlistline  */
+  YYSYMBOL_handler = 114,                  /* handler  */
+  YYSYMBOL_endargdef = 115,                /* endargdef  */
+  YYSYMBOL_ID = 116,                       /* ID  */
+  YYSYMBOL_idlist = 117,                   /* idlist  */
+  YYSYMBOL_nonemptyidlist = 118,           /* nonemptyidlist  */
+  YYSYMBOL_stmt = 119,                     /* stmt  */
+  YYSYMBOL_stmtoneliner = 120,             /* stmtoneliner  */
+  YYSYMBOL_proc = 121,                     /* proc  */
+  YYSYMBOL_cmdargs = 122,                  /* cmdargs  */
+  YYSYMBOL_frameargs = 123,                /* frameargs  */
+  YYSYMBOL_asgn = 124,                     /* asgn  */
+  YYSYMBOL_to = 125,                       /* to  */
+  YYSYMBOL_definevars = 126,               /* definevars  */
+  YYSYMBOL_ifstmt = 127,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 128,               /* ifelsestmt  */
+  YYSYMBOL_loop = 129,                     /* loop  */
+  YYSYMBOL_tell = 130,                     /* tell  */
+  YYSYMBOL_when = 131,                     /* when  */
+  YYSYMBOL_stmtlist = 132,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 133,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 134,             /* stmtlistline  */
+  YYSYMBOL_simpleexpr_noparens_nounarymath = 135, /* simpleexpr_noparens_nounarymath  */
+  YYSYMBOL_var = 136,                      /* var  */
+  YYSYMBOL_varorchunk = 137,               /* varorchunk  */
+  YYSYMBOL_varorthe = 138,                 /* varorthe  */
+  YYSYMBOL_chunk = 139,                    /* chunk  */
+  YYSYMBOL_object = 140,                   /* object  */
+  YYSYMBOL_list = 141,                     /* list  */
+  YYSYMBOL_proplist = 142,                 /* proplist  */
+  YYSYMBOL_proppair = 143,                 /* proppair  */
+  YYSYMBOL_parens = 144,                   /* parens  */
+  YYSYMBOL_unarymath = 145,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 146,               /* simpleexpr  */
+  YYSYMBOL_simpleexpr_noparens = 147,      /* simpleexpr_noparens  */
+  YYSYMBOL_simpleexpr_nounarymath = 148,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_expr = 149,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 150,         /* expr_nounarymath  */
+  YYSYMBOL_sprite = 151,                   /* sprite  */
+  YYSYMBOL_exprlist = 152,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 153          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -614,21 +625,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  125
+#define YYFINAL  143
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2900
+#define YYLAST   3493
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  93
+#define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  50
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  200
+#define YYNRULES  218
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  374
+#define YYNSTATES  393
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   332
+#define YYMAXUTOK   343
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -643,15 +654,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      86,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      97,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    85,    80,     2,
-      88,    89,    83,    81,    87,    82,     2,    84,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    92,     2,
-      78,     2,    79,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    96,    91,     2,
+      99,   100,    94,    92,    98,    93,     2,    95,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   103,     2,
+      89,     2,    90,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    90,     2,    91,     2,     2,     2,     2,     2,     2,
+       2,   101,     2,   102,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -675,7 +686,8 @@ static const yytype_int8 yytranslate[] =
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88
 };
 
 #if YYDEBUG
@@ -685,24 +697,25 @@ static const yytype_int16 yyrline[] =
        0,   197,   197,   199,   205,   212,   213,   214,   215,   216,
      245,   249,   251,   253,   254,   257,   263,   270,   271,   276,
      280,   284,   285,   286,   291,   292,   293,   294,   295,   296,
-     297,   302,   303,   306,   308,   309,   310,   311,   314,   315,
-     316,   317,   318,   320,   321,   323,   326,   327,   328,   329,
-     330,   332,   333,   334,   336,   337,   338,   339,   340,   343,
-     344,   347,   351,   361,   362,   363,   364,   365,   366,   369,
-     370,   371,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   386,   389,   394,   398,   404,   409,   412,   422,
-     427,   433,   439,   445,   453,   454,   455,   456,   459,   459,
-     461,   462,   463,   466,   470,   474,   480,   484,   488,   492,
-     494,   496,   500,   504,   508,   510,   511,   515,   521,   528,
-     529,   535,   536,   537,   538,   539,   540,   541,   542,   543,
-     544,   547,   549,   550,   553,   557,   561,   567,   571,   577,
-     578,   579,   582,   586,   591,   592,   593,   596,   598,   599,
-     602,   603,   604,   607,   608,   611,   612,   616,   617,   618,
-     619,   620,   621,   622,   623,   624,   625,   626,   627,   628,
-     629,   630,   631,   632,   633,   634,   641,   642,   643,   644,
-     645,   646,   647,   648,   649,   650,   651,   652,   653,   654,
-     655,   656,   657,   658,   659,   662,   663,   666,   667,   670,
-     674
+     297,   298,   299,   300,   301,   302,   303,   308,   309,   313,
+     315,   316,   317,   318,   319,   320,   321,   322,   324,   325,
+     326,   328,   329,   330,   331,   332,   333,   335,   336,   338,
+     341,   342,   343,   344,   345,   346,   347,   348,   349,   352,
+     353,   355,   356,   357,   358,   359,   360,   363,   364,   367,
+     371,   381,   382,   383,   384,   385,   386,   389,   390,   391,
+     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
+     406,   409,   414,   418,   424,   429,   432,   442,   447,   453,
+     459,   465,   473,   474,   475,   476,   479,   479,   481,   482,
+     483,   486,   490,   494,   500,   504,   508,   512,   514,   516,
+     520,   524,   528,   530,   531,   535,   541,   548,   549,   555,
+     556,   557,   558,   559,   560,   561,   562,   563,   564,   567,
+     569,   570,   573,   577,   581,   587,   591,   597,   598,   599,
+     602,   606,   611,   612,   613,   616,   618,   619,   622,   623,
+     624,   627,   628,   631,   632,   636,   637,   638,   639,   640,
+     641,   642,   643,   644,   645,   646,   647,   648,   649,   650,
+     651,   652,   653,   654,   661,   662,   663,   664,   665,   666,
+     667,   668,   669,   670,   671,   672,   673,   674,   675,   676,
+     677,   678,   679,   682,   683,   686,   687,   690,   694
 };
 #endif
 
@@ -720,29 +733,29 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   static const char *const yy_sname[] =
   {
   "end of file", "error", "invalid token", "tUNARY", "tLEXERROR", "tINT",
-  "tTHEENTITY", "tTHEENTITYWITHID", "tTHEMENUITEMENTITY",
-  "tTHEMENUITEMSENTITY", "tFLOAT", "tTHEFUNC", "tTHEFUNCINOF", "tVARID",
-  "tSTRING", "tSYMBOL", "tENDCLAUSE", "tPLAYACCEL", "tTHEOBJECTPROP",
-  "tCAST", "tFIELD", "tSCRIPT", "tWINDOW", "tDOWN", "tELSE", "tELSIF",
-  "tEXIT", "tFRAME", "tGLOBAL", "tGO", "tIF", "tIN", "tINTO", "tMACRO",
-  "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET",
-  "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tFACTORY", "tOPEN", "tPLAY",
-  "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD",
-  "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM",
-  "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
-  "tPROPERTY", "tON", "tMETHOD", "tENDIF", "tENDREPEAT", "tENDTELL",
-  "tASSERTERROR", "'<'", "'>'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
-  "'\\n'", "','", "'('", "')'", "'['", "']'", "':'", "$accept", "script",
-  "scriptpartlist", "scriptpart", "macro", "factory", "method",
-  "methodlist", "nonemptymethodlist", "methodlistline", "handler",
-  "endargdef", "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner",
-  "proc", "cmdargs", "frameargs", "asgn", "to", "definevars", "ifstmt",
-  "ifelsestmt", "loop", "tell", "when", "stmtlist", "nonemptystmtlist",
-  "stmtlistline", "simpleexpr_noparens_nounarymath", "var", "varorchunk",
-  "varorthe", "chunk", "object", "list", "proplist", "proppair", "parens",
-  "unarymath", "simpleexpr", "simpleexpr_noparens",
-  "simpleexpr_nounarymath", "expr", "expr_nounarymath", "sprite",
-  "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "tFLOAT", "tVARID", "tSTRING", "tSYMBOL", "tENDCLAUSE", "tCAST",
+  "tFIELD", "tSCRIPT", "tWINDOW", "tDOWN", "tELSE", "tELSIF", "tEXIT",
+  "tFRAME", "tGLOBAL", "tGO", "tIF", "tIN", "tINTO", "tMACRO", "tMOVIE",
+  "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO",
+  "tWHEN", "tWITH", "tWHILE", "tFACTORY", "tOPEN", "tPLAY", "tINSTANCE",
+  "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD", "tAFTER",
+  "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tCHARS", "tITEM",
+  "tITEMS", "tLINE", "tLINES", "tWORD", "tWORDS", "tABBREVIATED",
+  "tABBREV", "tABBR", "tLONG", "tSHORT", "tCASTMEMBERS", "tDATE", "tLAST",
+  "tMENU", "tMENUITEM", "tMENUITEMS", "tNUMBER", "tTHE", "tTIME", "tSOUND",
+  "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL", "tPROPERTY", "tON",
+  "tMETHOD", "tENDIF", "tENDREPEAT", "tENDTELL", "tASSERTERROR", "'<'",
+  "'>'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "','", "'('",
+  "')'", "'['", "']'", "':'", "$accept", "script", "scriptpartlist",
+  "scriptpart", "macro", "factory", "method", "methodlist",
+  "nonemptymethodlist", "methodlistline", "handler", "endargdef", "ID",
+  "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "cmdargs",
+  "frameargs", "asgn", "to", "definevars", "ifstmt", "ifelsestmt", "loop",
+  "tell", "when", "stmtlist", "nonemptystmtlist", "stmtlistline",
+  "simpleexpr_noparens_nounarymath", "var", "varorchunk", "varorthe",
+  "chunk", "object", "list", "proplist", "proppair", "parens", "unarymath",
+  "simpleexpr", "simpleexpr_noparens", "simpleexpr_nounarymath", "expr",
+  "expr_nounarymath", "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -760,13 +773,14 @@ static const yytype_int16 yytoknum[] =
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,    60,    62,
-      38,    43,    45,    42,    47,    37,    10,    44,    40,    41,
-      91,    93,    58
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,    60,
+      62,    38,    43,    45,    42,    47,    37,    10,    44,    40,
+      41,    91,    93,    58
 };
 #endif
 
-#define YYPACT_NINF (-265)
+#define YYPACT_NINF (-297)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -780,44 +794,46 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1577,  -265,  -265,  -265,  -265,  -265,  -265,   -33,  -265,  2498,
-     958,  1037,  -265,  -265,  2498,  -265,   -27,  -265,  -265,  1116,
-      73,  2498,  -265,  2498,  -265,  -265,  2498,  -265,   958,  2498,
-    -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,
-    -265,  -265,  -265,  -265,  1037,  2498,  2498,  2380,  -265,    20,
-    1577,  -265,  -265,  -265,  -265,  1116,  -265,  -265,  -265,  -265,
-    -265,  -265,  -265,  -265,  -265,  -265,   -42,  -265,  -265,  -265,
-    -265,  -265,  -265,  -265,   -25,   -57,  -265,  -265,  -265,  -265,
-    1274,  1274,  1274,  1274,  1037,  1037,  1195,  1037,  1195,  1195,
-     877,   472,   -30,   -23,   -17,  -265,  -265,  -265,  -265,  -265,
-    -265,  -265,  -265,   553,  -265,  1037,   361,  2498,    -2,    17,
-     634,  2498,  1037,  -265,  -265,   -24,    45,    22,    35,    38,
-      41,   227,    43,  2498,  -265,  -265,  -265,    44,   715,  -265,
-    -265,  2498,  -265,  -265,  -265,  -265,  -265,  -265,   796,  2803,
-    -265,  2768,  -265,  -265,  -265,  2578,   -54,    14,    42,   -56,
-       2,  -265,  2803,    51,    57,  1037,  -265,  -265,    98,  1037,
-    1037,  1037,  1037,  1347,  1347,  1505,  1037,  1037,  1426,  1037,
-    1037,  1037,  1037,  1037,  1037,  1037,  1037,  -265,  -265,  -265,
-    2631,  -265,  2591,  2136,  1037,  1037,  1037,  1037,    59,  -265,
-    -265,  2557,  2557,  2557,    97,  2644,  -265,  -265,  1037,  1037,
-     -46,  -265,  -265,  -265,  2380,  2197,  -265,    64,  -265,  -265,
-     117,  2816,  1195,  1195,  1037,  -265,  1037,  1037,  -265,  1037,
-    2439,  -265,  -265,  1037,    63,  1037,    -9,    -9,    -9,    -9,
-     128,   128,  -265,    -1,    -9,    -9,    -9,    -9,    -1,   -50,
-     -50,  -265,  -265,    57,  1037,  1037,  1037,  1037,  1037,  1037,
-    1037,  1037,  1037,  1037,  1037,  1037,  1037,  1037,  1037,  1037,
-    1037,  1037,  2197,   129,  2197,  -265,    68,  -265,    69,    70,
-    1037,  2197,  2681,  2803,  2498,  -265,  -265,    71,  -265,  -265,
-    -265,  -265,  -265,  1700,  -265,  -265,  2197,  1037,  -265,  -265,
-     -48,  2803,  2803,  2803,   -54,    14,    66,  -265,  2803,  -265,
-    2803,    -9,    -9,    -9,    -9,   128,   128,  -265,    -1,    -9,
-      -9,    -9,    -9,    -1,   -50,   -50,  -265,  -265,    57,  1638,
-    2258,  2197,  -265,  -265,  -265,    86,  1761,  -265,  2498,   -46,
-      75,  -265,  1829,  2803,  -265,  2319,    76,  2197,  -265,   121,
-    1037,    85,    89,  -265,  -265,  2498,  2197,  -265,  -265,  1890,
-    1037,  2694,  -265,  2197,    33,  -265,  1952,    90,  2731,  2197,
-    2197,  -265,  2498,    91,  -265,  2197,  2014,  -265,  -265,  2075,
-      96,   100,  -265,  -265
+    1883,  -297,  -297,  -297,  -297,  -297,  -297,   -21,  -297,  3086,
+    1119,  1216,  -297,  -297,  3086,  -297,   -12,  -297,  -297,  1313,
+      57,  3086,  -297,  3086,  -297,  -297,  3086,  -297,  1119,  3086,
+    -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,
+    -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,
+    -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,
+    -297,  -297,  1216,  3086,  3086,  2930,  -297,    37,  1883,  -297,
+    -297,  -297,  -297,  1313,  -297,  -297,  -297,  -297,  -297,  -297,
+    -297,  -297,  -297,  -297,   -54,  -297,  -297,  -297,  -297,  -297,
+    -297,  -297,   -47,   -44,  -297,  -297,  -297,  -297,  1507,  1507,
+    1507,  1507,  1216,  1216,  1410,  1216,  1410,  1410,  1022,   535,
+     -40,   -31,    -1,  -297,  -297,  -297,  -297,  -297,  -297,  -297,
+    -297,   634,  -297,  1216,   205,  3086,    10,    20,   731,  3086,
+    1216,  -297,  -297,   -16,    36,    24,    25,    26,    27,   124,
+      29,  3086,  -297,  -297,  -297,    31,   828,  -297,  -297,  3086,
+    -297,  -297,  -297,  -297,  -297,  -297,   925,  3372,  -297,  3318,
+    -297,  -297,  -297,   421,   -22,    28,   -11,   -83,   -62,  -297,
+    3372,    32,    45,  1216,  -297,  -297,   104,  1216,  1216,  1216,
+    1216,  1598,  1598,  1792,  1216,  1695,  1695,  1216,  1216,  1216,
+    1216,  1216,  1216,  1216,  1216,  -297,  -297,  -297,  3204,  -297,
+     222,  2610,  1216,  1216,  1216,  1216,  1216,    47,  -297,  -297,
+    3164,  3164,  3164,   106,  3217,  -297,  -297,  1216,  1216,   -59,
+    -297,  -297,  -297,  2930,  2690,  -297,    51,  -297,  -297,   125,
+    3385,  1410,  1410,  1216,  -297,  1216,  1216,  -297,  1216,  3008,
+    -297,  -297,  1216,    52,  1216,     9,     9,     9,     9,  3398,
+    3398,  -297,    -8,     9,     9,     9,     9,    -8,   -38,   -38,
+    -297,  -297,    45,  1216,  1216,  1216,  1216,  1216,  1216,  1216,
+    1216,  1216,  1216,  1216,  1216,  1216,  1216,  1216,  1216,  1216,
+    1216,  2690,   137,  2690,  -297,    58,  -297,    59,    60,  1216,
+    2690,  3230,  3372,  3086,  -297,  -297,    62,  -297,  -297,  -297,
+    -297,  -297,  2043,  -297,  -297,  2690,  1216,  -297,  -297,   -18,
+    3372,  3372,  3372,   -22,    28,    61,  -297,  3372,  -297,  3372,
+       9,     9,     9,     9,  3398,  3398,  -297,    -8,     9,     9,
+       9,     9,    -8,   -38,   -38,  -297,  -297,    45,  1963,  2770,
+    2690,  -297,  -297,  -297,    93,  2130,  -297,  3086,   -59,    63,
+    -297,  2210,  3372,  -297,  2850,    64,  2690,  -297,   120,  1216,
+      66,    68,  -297,  -297,  3086,  2690,  -297,  -297,  2290,  1216,
+    3286,  -297,  2690,    13,  -297,  2370,    75,  3299,  2690,  2690,
+    -297,  3086,    77,  -297,  2690,  2450,  -297,  -297,  2530,    78,
+      82,  -297,  -297
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -825,64 +841,66 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,    24,    28,    31,    47,    55,    30,     0,    32,    59,
-      82,     0,    33,    35,     0,    39,    40,    42,    45,    82,
-      46,    48,    51,     0,    56,    54,     0,    43,    82,    59,
-      26,    44,    41,    38,    25,    27,    49,    29,    36,    37,
-      58,    53,    34,    57,    50,    59,     0,    52,     5,     0,
-       2,     3,     6,     7,     8,    82,     9,    63,    69,    70,
-      71,    64,    65,    66,    67,    68,     0,    80,    40,    46,
-      48,    50,    52,    61,     0,    60,   121,   122,   124,   123,
-      28,    31,    47,    55,    32,    39,    41,    53,     0,     0,
-       0,   197,   131,     0,     0,   150,   127,   128,   129,   130,
-     151,   152,   157,    83,   158,     0,     0,    59,     0,     0,
-      83,     0,     0,   131,   134,     0,     0,     0,     0,     0,
-       0,     0,     0,    59,    81,     1,     4,     0,    83,    79,
-     100,     0,   153,   154,   136,   135,   137,   138,    89,    90,
-     125,     0,   148,   149,    87,     0,   124,   123,     0,   131,
-       0,   142,   199,     0,   198,   197,    74,    75,    42,     0,
-       0,     0,     0,    26,    44,    38,     0,     0,    49,     0,
-       0,     0,     0,     0,     0,     0,     0,   155,   156,   176,
-      85,   177,     0,     0,     0,     0,     0,     0,     0,    78,
-      73,    35,    25,    27,     0,     0,    98,    99,     0,     0,
-      13,    76,    77,   102,     0,   115,   101,     0,    72,    62,
-      42,    93,     0,     0,     0,   147,     0,     0,   140,     0,
-       0,   141,   139,     0,     0,     0,   168,   169,   166,   167,
-     170,   171,   163,   173,   174,   175,   165,   164,   172,   159,
-     160,   161,   162,    84,     0,     0,     0,     0,     0,     0,
+       0,    24,    31,    37,    61,    72,    36,     0,    38,    77,
+     100,     0,    39,    41,     0,    52,    53,    56,    59,   100,
+      60,    63,    70,     0,    73,    71,     0,    57,   100,    77,
+      29,    58,    54,    51,    28,    30,    34,    67,    32,    33,
+      42,    43,    45,    46,    75,    76,    25,    26,    27,    47,
+      64,    35,    44,    48,    49,    50,    55,    69,    65,    66,
+      40,    74,    68,    77,     0,    62,     5,     0,     2,     3,
+       6,     7,     8,   100,     9,    81,    87,    88,    89,    82,
+      83,    84,    85,    86,     0,    98,    53,    60,    63,    68,
+      62,    79,     0,    78,   139,   140,   142,   141,    31,    37,
+      61,    72,    38,    52,    54,    66,     0,     0,     0,   215,
+     149,     0,     0,   168,   145,   146,   147,   148,   169,   170,
+     175,   101,   176,     0,     0,    77,     0,     0,   101,     0,
+       0,   149,   152,     0,     0,     0,     0,     0,     0,     0,
+       0,    77,    99,     1,     4,     0,   101,    97,   118,     0,
+     171,   172,   154,   153,   155,   156,   107,   108,   143,     0,
+     166,   167,   105,     0,   142,   141,     0,   149,     0,   160,
+     217,     0,   216,   215,    92,    93,    56,     0,     0,     0,
+       0,    29,    58,    51,     0,    34,    67,     0,     0,     0,
+       0,     0,     0,     0,     0,   173,   174,   194,   103,   195,
+       0,     0,     0,     0,     0,     0,     0,     0,    96,    91,
+      41,    28,    30,     0,     0,   116,   117,     0,     0,    13,
+      94,    95,   120,     0,   133,   119,     0,    90,    80,    56,
+     111,     0,     0,     0,   165,     0,     0,   158,     0,     0,
+     159,   157,     0,     0,     0,   186,   187,   184,   185,   188,
+     189,   181,   191,   192,   193,   183,   182,   190,   177,   178,
+     179,   180,   102,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   115,   103,   115,   132,     0,   133,     0,     0,
-       0,   115,     0,   114,     0,    17,    18,    11,    14,    15,
-     112,   119,   120,     0,   116,   117,   115,     0,   195,   196,
-       0,   146,   144,   145,     0,     0,     0,   143,   200,   126,
-      92,   187,   188,   185,   186,   189,   190,   182,   192,   193,
-     194,   184,   183,   191,   178,   179,   180,   181,    86,     0,
-       0,    10,    94,    95,    96,     0,     0,    97,    59,     0,
-       0,   118,    20,    91,    88,     0,     0,   115,   105,     0,
-       0,     0,     0,    16,   113,    21,   115,   107,   104,     0,
-       0,     0,   109,   115,     0,    22,     0,     0,     0,   115,
-      12,    19,     0,     0,   106,   115,     0,    23,   108,     0,
-       0,     0,   110,   111
+       0,   133,   121,   133,   150,     0,   151,     0,     0,     0,
+     133,     0,   132,     0,    17,    18,    11,    14,    15,   130,
+     137,   138,     0,   134,   135,   133,     0,   213,   214,     0,
+     164,   162,   163,     0,     0,     0,   161,   218,   144,   110,
+     205,   206,   203,   204,   207,   208,   200,   210,   211,   212,
+     202,   201,   209,   196,   197,   198,   199,   104,     0,     0,
+      10,   112,   113,   114,     0,     0,   115,    77,     0,     0,
+     136,    20,   109,   106,     0,     0,   133,   123,     0,     0,
+       0,     0,    16,   131,    21,   133,   125,   122,     0,     0,
+       0,   127,   133,     0,    22,     0,     0,     0,   133,    12,
+      19,     0,     0,   124,   133,     0,    23,   126,     0,     0,
+       0,   128,   129
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -265,  -265,  -265,   109,  -265,  -265,  -265,  -265,  -265,  -145,
-    -265,  -265,     0,   -28,  -265,     4,   -44,  -265,    -3,   166,
-    -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,  -249,  -265,
-    -264,   -16,   -19,   -67,  -265,  -115,  -265,  -265,  -265,   -22,
-     -79,    18,   -78,    32,  -265,   211,    58,   -68,    40,  -171
+    -297,  -297,  -297,   112,  -297,  -297,  -297,  -297,  -297,  -167,
+    -297,  -297,     0,   -28,  -297,     3,   -61,  -297,    -6,   161,
+    -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -266,  -297,
+    -296,   -68,   -19,   -92,  -297,  -137,  -297,  -297,  -297,   -49,
+     -94,   -53,   -99,    15,  -297,   218,    38,   -51,    22,  -182
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    49,    50,    51,    52,    53,   276,   277,   278,   279,
-      54,   354,    92,    74,    75,   282,    57,    58,    93,    94,
-      59,   198,    60,    61,    62,    63,    64,    65,   283,   284,
-     285,    95,    96,   266,   115,    97,    98,    99,   150,   151,
-     100,   101,   102,   134,   179,   152,   180,   104,   153,   154
+       0,    67,    68,    69,    70,    71,   295,   296,   297,   298,
+      72,   373,   110,    92,    93,   301,    75,    76,   111,   112,
+      77,   217,    78,    79,    80,    81,    82,    83,   302,   303,
+     304,   113,   114,   285,   133,   115,   116,   117,   168,   169,
+     118,   119,   120,   152,   197,   170,   198,   122,   171,   172
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -890,662 +908,783 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      55,   120,   114,   124,    56,   243,    66,   186,   140,    73,
-     142,   143,   108,   319,   107,   321,   109,   122,   196,   331,
-     125,   113,   326,   116,   178,   118,   117,   274,   197,    73,
-     131,   178,   155,   174,   175,   181,   219,   332,   216,   223,
-     275,   334,   181,   290,   129,    73,   123,    55,   186,   178,
-      55,   166,   127,    67,    56,   331,   186,   331,   155,   178,
-     181,   130,   331,   156,   132,   132,   132,   132,   331,   157,
-     181,   171,   172,   173,   174,   175,   267,   267,   267,   188,
-     172,   173,   174,   175,   189,   331,   199,   177,   349,   220,
-     318,   149,   331,   221,   177,   207,   331,   356,   133,   133,
-     133,   133,   331,   190,   360,   331,   217,    73,   200,   339,
-     366,   194,   177,   135,   136,   137,   369,   111,   112,   361,
-     362,   201,   177,    73,   202,   268,   269,   203,   340,   206,
-     208,   209,   225,   218,   288,   289,   159,   160,   161,   162,
-     184,   185,   222,   186,   223,   264,   166,   167,   187,   270,
-     286,   287,   299,   320,   322,   323,   324,   329,   219,   126,
-     280,   344,   348,   350,   169,   170,   171,   172,   173,   174,
-     175,   352,   265,   265,   265,   353,   364,   368,   159,   160,
-     161,   162,   372,    55,   343,   186,   373,   263,   166,   167,
-     187,   113,   113,   113,   119,   224,   211,     0,   297,     0,
-       0,     0,     0,     0,    55,    55,   169,   170,   171,   172,
-     173,   174,   175,     0,     0,     0,     0,     0,     0,     0,
-     296,   103,   106,     0,     0,     0,     0,     0,     0,     0,
-     110,     0,     0,     0,     0,     0,     0,     0,     0,   103,
+      73,   138,   132,    74,   142,   158,   350,   160,   161,    91,
+      84,   204,   262,   127,   125,   338,   173,   340,   215,   126,
+     238,   131,   136,   134,   345,   293,   135,   196,   216,    91,
+     150,   150,   150,   150,   196,   140,   239,   143,   294,   351,
+     240,   204,   350,   147,   350,   151,   151,   151,   151,   350,
+     148,   309,   196,   195,   149,   350,   192,   193,   204,   173,
+     195,   184,   196,    91,   141,    73,   174,   145,    73,   218,
+     199,    74,   350,   286,   286,   286,    85,   199,   195,   350,
+     242,   235,   353,   350,   190,   191,   192,   193,   195,   350,
+     368,   237,   350,   129,   130,   199,   175,   207,   337,   375,
+     189,   190,   191,   192,   193,   199,   379,   208,   358,   167,
+     380,   381,   385,   226,   153,   154,   155,   209,   388,   287,
+     288,   219,   220,   221,   222,    91,   225,   359,   227,   213,
+     244,   236,   307,   308,   241,   177,   178,   179,   180,   202,
+     203,    91,   204,   242,   283,   184,   205,   206,   305,   228,
+     289,   306,   318,   339,   369,   341,   342,   343,   223,   348,
+     363,   367,   299,   371,   238,   372,   177,   178,   179,   180,
+     202,   203,   383,   204,   387,   391,   184,   205,   206,   392,
+     144,   362,   187,   188,   189,   190,   191,   192,   193,   137,
+     316,   284,   284,   284,   230,   243,     0,     0,     0,     0,
+       0,    73,     0,     0,   282,     0,     0,     0,     0,     0,
+     131,   131,   131,   187,   188,   189,   190,   191,   192,   193,
+       0,   224,     0,    73,    73,     0,     0,     0,   121,   124,
+       0,     0,     0,     0,     0,     0,     0,   128,   201,   315,
+       0,     0,     0,     0,     0,     0,   121,   177,   178,   179,
+     180,   202,   203,     0,   204,     0,     0,   184,   205,   206,
+       0,     0,     0,     0,   177,   178,   179,   180,   202,   203,
+       0,   204,     0,     0,   184,   205,   206,     0,     0,     0,
+     139,    73,     0,    73,     0,     0,     0,     0,     0,     0,
+      73,   146,     0,   347,   187,   188,   189,   190,   191,   192,
+     193,     0,    73,     0,     0,    73,     0,     0,     0,     0,
+       0,   187,   188,   189,   190,   191,   192,   193,     0,   361,
+     156,   157,   234,   159,     0,     0,   163,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    73,    73,
+      73,   200,   357,     0,     0,    73,     0,    91,   214,     0,
+       0,    73,     0,     0,    73,     0,    73,   366,     0,     0,
+       0,     0,     0,     0,   374,    73,     0,     0,    73,     0,
+       0,     0,    73,     0,     0,    73,     0,     0,    73,    73,
+       0,   386,     0,     0,    73,    73,     0,     0,    73,     0,
+       0,     0,     0,     0,     0,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,     0,     0,     0,     0,     0,     0,     0,     0,
+     249,   250,   251,   253,   254,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   291,   292,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   121,     0,     0,     0,     0,
-       0,     0,    55,     0,    55,     0,   128,     0,     0,   204,
-       0,    55,     0,     0,   328,     0,     0,   159,   160,   161,
-     162,   184,   185,    55,   186,     0,    55,   166,   167,   187,
-       0,     0,     0,     0,     0,   138,   139,     0,   141,     0,
-     342,   145,     0,     0,     0,   169,   170,   171,   172,   173,
-     174,   175,     0,   205,     0,     0,   182,     0,     0,    55,
-      55,    55,     0,   195,   338,     0,    55,     0,    73,     0,
-       0,     0,    55,     0,     0,    55,     0,    55,     0,   347,
-       0,     0,     0,     0,     0,   355,    55,     0,     0,    55,
-       0,     0,     0,    55,     0,     0,    55,     0,     0,    55,
-      55,     0,   367,     0,     0,    55,    55,     0,     0,    55,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,     0,     0,     0,
-       0,     0,     0,     0,     0,   230,   231,   232,   235,     0,
-       0,     0,   183,     0,     0,     0,     0,     0,     0,   272,
-     273,   159,   160,   161,   162,   184,   185,     0,   186,     0,
-       0,   166,   167,   187,     0,     0,     0,   291,   292,     0,
-     293,     0,     0,     0,   298,     0,   300,     0,     0,   169,
-     170,   171,   172,   173,   174,   175,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,     0,     0,     0,     0,     0,    76,     0,     0,
-       0,   325,    77,     0,     0,     1,   146,   147,     0,     0,
-       0,    80,    81,    82,    83,     6,     0,     0,   333,     8,
-       0,     0,     0,    12,    13,     0,    15,    68,    17,    18,
-       0,    69,    70,     0,    22,     0,    24,    25,     0,    27,
-       0,     0,     0,     0,     0,     0,    30,    31,    86,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    87,
-      42,    43,    71,     0,     0,     0,     0,     0,     0,    72,
-       0,   351,     0,    88,    89,     0,     0,     0,    76,     0,
-     105,   358,    91,    77,   148,     0,     1,    78,    79,     0,
-       0,     0,    80,    81,    82,    83,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    68,   158,
-      18,     0,    69,    70,     0,    22,     0,    24,    25,     0,
-      27,     0,     0,   159,   160,   161,   162,   163,   164,    86,
-     165,    34,    35,   166,   167,   168,    37,    38,    39,    40,
-      87,    42,    43,    71,     0,     0,     0,     0,     0,     0,
-      72,   169,   170,   171,   172,   173,   174,   175,     0,    76,
-     176,   105,     0,    91,    77,     0,     0,     1,    78,    79,
-       0,     0,     0,    80,    81,    82,    83,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,   191,     0,    15,    68,
-      17,    18,     0,    69,    70,     0,    22,     0,    24,    25,
-       0,    27,     0,     0,   159,   160,   161,   162,   163,   164,
-      86,   165,   192,   193,   166,   167,   168,    37,    38,    39,
-      40,    87,    42,    43,    71,     0,     0,     0,     0,     0,
-       0,    72,   169,   170,   171,   172,   173,   174,   175,     0,
-      76,   176,   105,     0,    91,    77,     0,     0,     1,    78,
-      79,     0,     0,     0,    80,    81,    82,    83,     6,     0,
-       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
-      68,    17,    18,     0,    69,    70,     0,    22,     0,    24,
-      25,     0,    27,     0,     0,   159,   160,   161,   162,   163,
-     164,    86,   165,    34,    35,   166,   167,   168,    37,    38,
-      39,    40,    87,    42,    43,    71,     0,     0,     0,     0,
-       0,     0,    72,   169,   170,   171,   172,   173,   174,   175,
-       0,    76,   176,   105,     0,    91,    77,     0,     0,     1,
-      78,    79,     0,     0,     0,    80,    81,    82,    83,     6,
+       0,     0,     0,   310,   311,     0,   312,     0,     0,     0,
+     317,     0,   319,   177,   178,   179,   180,   202,   203,     0,
+     204,     0,     0,   184,   205,   206,     0,     0,     0,     0,
+       0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   344,     0,     0,
+     187,   188,   189,   190,   191,   192,   193,     0,     0,   233,
+       0,   234,     0,     0,   352,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      94,    95,     1,   164,   165,     0,    98,    99,   100,   101,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,   370,     0,     0,
+       0,    30,    31,   104,    33,    34,    35,   377,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+       0,    57,    58,   105,    60,    61,    89,     0,     0,     0,
+       0,     0,     0,    90,     0,     0,     0,   106,   107,     0,
+       0,     0,     0,     0,   123,     0,   109,     0,   166,    94,
+      95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
        0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    68,   210,    18,     0,    69,    70,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,   159,   160,   161,   162,
-     163,   164,    86,   165,    34,    35,   166,   167,   168,    37,
-      38,    39,    40,    87,    42,    43,    71,     0,     0,     0,
-       0,     0,     0,    72,   169,   170,   171,   172,   173,   174,
-     175,     0,    76,     0,   105,     0,    91,    77,     0,     0,
-       1,    78,    79,     0,     0,     0,    80,    81,    82,    83,
+      15,    86,   176,    18,     0,    87,    88,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,   177,   178,   179,   180,
+     181,   182,   104,   183,    34,    35,   184,   185,   186,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,     0,
+      57,    58,   105,    60,    61,    89,     0,     0,     0,     0,
+       0,     0,    90,   187,   188,   189,   190,   191,   192,   193,
+       0,     0,   194,   123,     0,   109,    94,    95,     1,    96,
+      97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,   210,     0,    15,    86,    17,
+      18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
+      27,     0,     0,   177,   178,   179,   180,   181,   182,   104,
+     183,   211,   212,   184,   185,   186,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,     0,    57,    58,   105,
+      60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
+     187,   188,   189,   190,   191,   192,   193,     0,     0,   194,
+     123,     0,   109,    94,    95,     1,    96,    97,     0,    98,
+      99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
+       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
+      88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
+     177,   178,   179,   180,   181,   182,   104,   183,    34,    35,
+     184,   185,   186,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,     0,    57,    58,   105,    60,    61,    89,
+       0,     0,     0,     0,     0,     0,    90,   187,   188,   189,
+     190,   191,   192,   193,     0,     0,   194,   123,     0,   109,
+      94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
        6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,    30,    31,    86,    33,    34,    35,     0,     0,    36,
-      37,    38,    39,    40,    87,    42,    43,    71,     0,     0,
-       0,     0,     0,     0,    72,     0,     0,     0,    88,    89,
-       0,     0,     0,    76,     0,   105,   144,    91,    77,     0,
-       0,     1,    78,    79,     0,     0,     0,    80,    81,    82,
-      83,     6,     0,     0,     0,    84,     0,     0,     0,    12,
-      13,     0,    85,    68,    17,    18,     0,    69,    70,     0,
+       0,    15,    86,   229,    18,     0,    87,    88,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,   177,   178,   179,
+     180,   181,   182,   104,   183,    34,    35,   184,   185,   186,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+       0,    57,    58,   105,    60,    61,    89,     0,     0,     0,
+       0,     0,     0,    90,   187,   188,   189,   190,   191,   192,
+     193,     0,     0,     0,   123,     0,   109,    94,    95,     1,
+      96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
+      17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
+       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
+     104,    33,    34,    35,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,     0,    57,    58,
+     105,    60,    61,    89,     0,     0,     0,     0,     0,     0,
+      90,     0,     0,     0,   106,   107,     0,     0,     0,     0,
+       0,   123,   162,   109,    94,    95,     1,    96,    97,     0,
+      98,    99,   100,   101,     6,     0,     0,     0,   102,     0,
+       0,     0,    12,    13,     0,   103,    86,    17,    18,     0,
+      87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,    30,    31,   104,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,     0,    57,    58,   105,    60,    61,
+      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
+       0,   106,   107,     0,     0,     0,     0,     0,   108,     0,
+     109,    94,    95,     1,    96,    97,     0,    98,    99,   100,
+     101,     6,     0,     0,     0,     8,     0,     0,     0,    12,
+      13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
       22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,    30,    31,    86,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    87,    42,    43,    71,     0,
-       0,     0,     0,     0,     0,    72,     0,     0,     0,    88,
-      89,     0,    76,     0,     0,     0,    90,    77,    91,     0,
-       1,    78,    79,     0,     0,     0,    80,    81,    82,    83,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,    30,    31,    86,    33,    34,    35,     0,     0,    36,
-      37,    38,    39,    40,    87,    42,    43,    71,     0,     0,
-       0,     0,     0,     0,    72,     0,     0,     0,    88,    89,
-       0,    76,     0,     0,     0,   105,    77,    91,     0,     1,
-      78,    79,     0,     0,     0,    80,    81,    82,    83,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    68,    17,    18,     0,    69,    70,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
-      30,    31,    86,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    87,    42,    43,    71,     0,     0,     0,
-       0,     0,     0,    72,     0,     0,     0,    88,    89,     0,
-      76,     0,     0,     0,    90,    77,    91,     0,     1,    78,
-      79,     0,     0,     0,    80,    81,    82,    83,     6,     0,
+       0,     0,    30,    31,   104,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,   105,    60,    61,    89,     0,     0,
+       0,     0,     0,     0,    90,     0,     0,     0,   106,   107,
+       0,     0,     0,     0,     0,   123,     0,   109,    94,    95,
+       1,    96,    97,     0,    98,    99,   100,   101,     6,     0,
        0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
-      68,    17,    18,     0,    69,    70,     0,    22,     0,    24,
+      86,    17,    18,     0,    87,    88,     0,    22,     0,    24,
       25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
-      31,    86,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    71,     0,     0,     0,     0,
-       0,     0,    72,     0,     0,     0,    88,    89,     0,    76,
-       0,     0,     0,   105,    77,    91,     0,     1,    78,    79,
-       0,     0,     0,    80,    81,    82,    83,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    68,
-      17,    18,     0,    69,    70,     0,    22,     0,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
-      86,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    71,     0,     0,     0,     0,     0,
-       0,    72,    76,     0,     0,    88,    89,    77,     0,     0,
-       1,    78,    79,     0,    91,     0,    80,    81,    82,    83,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,     0,     0,    86,    33,    34,    35,     0,     0,    36,
-      37,    38,    39,    40,    87,    42,    43,    71,     0,     0,
-       0,     0,     0,     0,    72,     0,     0,     0,    88,    89,
-       0,    76,     0,     0,     0,   105,    77,    91,     0,     1,
-      78,    79,     0,     0,     0,    80,    81,    82,    83,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    68,    17,    18,     0,    69,    70,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
-       0,     0,    86,    33,    34,    35,     0,     0,     0,    37,
-      38,    39,    40,    87,    42,    43,    71,     0,     0,     0,
-       0,     0,     0,    72,     0,     0,     0,    88,    89,     0,
-      76,     0,     0,     0,   105,    77,    91,     0,     1,    78,
-      79,     0,     0,     0,    80,    81,    82,    83,     6,     0,
-       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
-      68,    17,    18,     0,    69,    70,     0,    22,     0,    24,
-      25,     0,    27,     0,     0,     0,     0,     0,     0,     0,
-       0,    86,     0,    34,    35,     0,     0,     0,    37,    38,
-      39,    40,    87,    42,    43,    71,     0,     0,     0,     0,
-       0,     0,    72,     0,     0,     0,     0,     0,     0,     0,
-       1,     0,     0,   105,     0,    91,     2,     3,     4,     5,
-       6,     0,     0,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,     0,    22,
-      23,    24,    25,    26,    27,    28,    29,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-       0,     1,     0,     0,    47,     0,     0,     2,     3,     4,
-       5,     6,   335,    48,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
+      31,   104,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
+      58,   105,    60,    61,    89,     0,     0,     0,     0,     0,
+       0,    90,     0,     0,     0,   106,   107,     0,     0,     0,
+       0,     0,   108,     0,   109,    94,    95,     1,    96,    97,
+       0,    98,    99,   100,   101,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
+       0,    87,    88,     0,    22,     0,    24,    25,     0,    27,
+       0,     0,     0,     0,     0,     0,    30,    31,   104,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    89,     0,     0,     0,     0,     0,     0,    90,     0,
+       0,     0,   106,   107,     0,     0,     0,     0,     0,   123,
+       0,   109,    94,    95,     1,    96,    97,     0,    98,    99,
+     100,   101,     6,     0,     0,     0,     8,     0,     0,     0,
+      12,    13,     0,    15,    86,    17,    18,     0,    87,    88,
+       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
+       0,     0,     0,    30,    31,   104,    33,    34,    35,     0,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-       0,     0,   336,     1,     0,    47,     0,     0,     0,     2,
-       3,     4,     5,     6,   281,     0,     7,     8,     9,    10,
-      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
-      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,     0,     0,     1,     0,   330,    47,     0,     0,
-       2,     3,     4,     5,     6,     0,   281,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,     0,     0,     0,   341,     0,    47,     0,
-       0,     0,     1,     0,     0,   345,     0,   281,     2,     3,
-       4,     5,     6,     0,     0,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    89,     0,
+       0,     0,     0,     0,     0,    90,     0,     0,     0,   106,
+     107,     0,     0,    94,    95,     1,    96,    97,   109,    98,
+      99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
+       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
+      88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
+       0,     0,     0,     0,     0,     0,   104,    33,    34,    35,
        0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,     0,     0,     1,     0,     0,    47,     0,     0,     2,
-       3,     4,     5,     6,     0,   281,     7,     8,     9,    10,
-      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
-      21,     0,    22,    23,    24,    25,     0,    27,    28,    29,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,     0,     0,   357,     1,     0,    47,     0,     0,
-       0,     2,     3,     4,     5,     6,   281,     0,     7,     8,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,     0,    57,    58,   105,    60,    61,    89,
+       0,     0,     0,     0,     0,     0,    90,     0,     0,     0,
+     106,   107,     0,     0,     0,     0,     0,   123,     0,   109,
+      94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,     0,     0,   104,    33,    34,    35,     0,     0,     0,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+       0,    57,    58,   105,    60,    61,    89,     0,     0,     0,
+       0,     0,     0,    90,     0,     0,     0,   106,   107,     0,
+       0,     0,     0,     0,   123,     0,   109,    94,    95,     1,
+      96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
+      17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
+       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
+     104,     0,    34,    35,     0,     0,     0,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,     0,    57,    58,
+     105,    60,    61,    89,     0,     0,     0,     0,     0,     0,
+      90,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       1,   123,     0,   109,     2,     3,     4,     5,     6,     0,
+       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
+       1,    65,     0,     0,     2,     3,     4,     5,     6,   354,
+      66,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
+      58,    59,    60,    61,    62,    63,     0,     0,   355,     0,
+       1,    65,     0,     0,     2,     3,     4,     5,     6,     0,
+     300,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
+      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
+     349,    65,     0,     0,     0,     0,     0,     1,     0,     0,
+     300,     2,     3,     4,     5,     6,     0,     0,     7,     8,
        9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
       19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,     0,     0,   363,     1,     0,    47,
-       0,     0,     0,     2,     3,     4,     5,     6,   281,     0,
-       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-       0,    27,    28,    29,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,     0,     0,     1,   370,
-       0,    47,     0,     0,     2,     3,     4,     5,     6,     0,
-     281,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,     0,     0,     1,
-     371,     0,    47,     0,     0,     2,     3,     4,     5,     6,
-       0,   281,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,     0,     0,
-       1,     0,     0,    47,     0,     0,     2,     3,     4,     5,
-       6,     0,   262,     7,     8,     9,    10,    11,    12,    13,
-       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
-      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,     0,
-       0,     1,     0,     0,    47,     0,     0,     2,     3,     4,
-       5,     6,     0,   281,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-       0,     0,     1,     0,     0,    47,     0,     0,     2,     3,
-       4,     5,     6,     0,   337,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,     0,     0,     1,     0,     0,    47,     0,     0,     2,
-       3,     4,     5,     6,     0,   346,     7,     8,     9,    10,
-       0,    12,    13,     0,    15,    16,    17,    18,    19,    69,
-      21,     0,    22,     0,    24,    25,     0,    27,    28,    29,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,   360,     1,    65,     0,
+     364,     2,     3,     4,     5,     6,     0,   300,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,   376,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,   382,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,   389,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,   390,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   281,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   356,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   365,     7,     8,
+       9,    10,     0,    12,    13,     0,    15,    16,    17,    18,
+      19,    87,    21,     0,    22,     0,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    89,    63,     0,     0,     1,   313,   314,    65,     2,
+       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
+       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
+      88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
        0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      71,    45,     1,   294,   295,     0,     0,    47,     2,     3,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    68,    17,    18,     0,    69,    70,
-       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    71,
-       0,     1,     0,     0,     0,     0,    72,     2,     3,     4,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,     0,    57,    58,    59,    60,    61,    89,
+       0,     0,     0,     1,     0,     0,    90,     2,     3,     4,
        5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
-      13,     0,    15,    68,    17,    18,     0,    69,    70,     0,
+      13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
       22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    71,     0,
-       1,     0,     0,     0,     0,    72,    80,    81,     4,     5,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    68,    17,    18,     0,    69,    70,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    71,   159,   160,
-     161,   162,   184,   185,    72,   186,     0,     0,   166,   167,
-     187,   159,   160,   161,   162,   184,   185,     0,   186,     0,
-       0,   166,   167,   187,     0,     0,   169,   170,   171,   172,
-     173,   174,   175,     0,     0,   214,     0,   215,     0,   169,
-     170,   171,   172,   173,   174,   175,     0,     0,     0,     0,
-     215,   244,   245,   246,   247,   248,   249,     0,   250,     0,
-       0,   251,   252,   253,   159,   160,   161,   162,   184,   185,
-       0,   186,     0,     0,   166,   167,   187,     0,     0,   254,
-     255,   256,   257,   258,   259,   260,     0,     0,   261,     0,
-       0,     0,   169,   170,   171,   172,   173,   174,   175,     0,
-     271,   159,   160,   161,   162,   184,   185,     0,   186,     0,
-       0,   166,   167,   187,   159,   160,   161,   162,   184,   185,
-       0,   186,     0,     0,   166,   167,   187,     0,     0,   169,
-     170,   171,   172,   173,   174,   175,     0,   327,     0,     0,
-       0,     0,   169,   170,   171,   172,   173,   174,   175,     0,
-     359,   159,   160,   161,   162,   184,   185,     0,   186,     0,
-       0,   166,   167,   187,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   169,
-     170,   171,   172,   173,   174,   175,     0,   365,   159,   160,
-     161,   162,   184,   185,     0,   186,     0,     0,   166,   167,
-     187,     0,     0,     0,     0,     0,   212,   213,     0,     0,
-       0,     0,     0,     0,     0,     0,   169,   170,   171,   172,
-     173,   174,   175,   159,   160,   161,   162,   184,   185,     0,
-     186,     0,     0,   166,   167,   187,   244,   245,   246,   247,
-     248,   249,     0,   250,     0,     0,   251,   252,   253,     0,
-       0,   169,   170,   171,   172,   173,   174,   175,     0,     0,
-       0,     0,     0,     0,   254,   255,   256,   257,   258,   259,
-     260
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    89,     0,     0,
+       0,     1,     0,     0,    90,    98,    99,     4,     5,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,     0,
+      57,    58,    59,    60,    61,    89,   263,   264,   265,   266,
+     267,   268,    90,   269,     0,     0,   270,   271,   272,   177,
+     178,   179,   180,   202,   203,     0,   204,     0,     0,   184,
+     205,   206,   177,   178,   179,   180,   202,   203,     0,   204,
+       0,     0,   184,   205,   206,     0,     0,     0,     0,     0,
+       0,     0,     0,   273,   274,   275,   276,   277,   278,   279,
+       0,     0,   280,     0,     0,     0,   187,   188,   189,   190,
+     191,   192,   193,     0,   290,     0,     0,     0,     0,   187,
+     188,   189,   190,   191,   192,   193,     0,   346,   177,   178,
+     179,   180,   202,   203,     0,   204,     0,     0,   184,   205,
+     206,   177,   178,   179,   180,   202,   203,     0,   204,     0,
+       0,   184,   205,   206,     0,     0,     0,     0,     0,     0,
+     177,   178,   179,   180,   202,   203,     0,   204,     0,     0,
+     184,   205,   206,     0,     0,   187,   188,   189,   190,   191,
+     192,   193,     0,   378,     0,     0,     0,     0,   187,   188,
+     189,   190,   191,   192,   193,     0,   384,   231,   232,     0,
+       0,     0,     0,     0,     0,     0,     0,   187,   188,   189,
+     190,   191,   192,   193,   177,   178,   179,   180,   202,   203,
+       0,   204,     0,     0,   184,   205,   206,   263,   264,   265,
+     266,   267,   268,     0,   269,     0,     0,   270,   271,   272,
+     177,   178,   179,   180,     0,     0,     0,   204,     0,     0,
+     184,   205,   206,     0,     0,     0,     0,     0,     0,     0,
+       0,   187,   188,   189,   190,   191,   192,   193,     0,     0,
+       0,     0,     0,     0,   273,   274,   275,   276,   277,   278,
+     279,     0,     0,     0,     0,     0,     0,   187,   188,   189,
+     190,   191,   192,   193
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,    21,    47,     0,   176,    39,    57,    86,     9,
-      88,    89,    39,   262,    14,   264,    19,    45,    42,   283,
-       0,    21,   271,    23,   103,    28,    26,    73,    52,    29,
-      87,   110,    88,    83,    84,   103,    92,   286,    92,    87,
-      86,    89,   110,   214,    86,    45,    46,    47,    57,   128,
-      50,    60,    55,    86,    50,   319,    57,   321,    88,   138,
-     128,    86,   326,    86,    80,    81,    82,    83,   332,    86,
-     138,    80,    81,    82,    83,    84,   191,   192,   193,   107,
-      81,    82,    83,    84,    86,   349,    41,   103,   337,    87,
-     261,    91,   356,    91,   110,   123,   360,   346,    80,    81,
-      82,    83,   366,    86,   353,   369,    92,   107,    86,    23,
-     359,   111,   128,    81,    82,    83,   365,    44,    45,    86,
-      87,    86,   138,   123,    86,   192,   193,    86,    42,    86,
-      86,   131,    34,    91,   212,   213,    50,    51,    52,    53,
-      54,    55,    91,    57,    87,    86,    60,    61,    62,    52,
-      86,    34,    89,    24,    86,    86,    86,    86,    92,    50,
-     204,    86,    86,    42,    78,    79,    80,    81,    82,    83,
-      84,    86,   191,   192,   193,    86,    86,    86,    50,    51,
-      52,    53,    86,   183,   329,    57,    86,   183,    60,    61,
-      62,   191,   192,   193,    28,   155,   138,    -1,   220,    -1,
-      -1,    -1,    -1,    -1,   204,   205,    78,    79,    80,    81,
-      82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     220,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+       0,    29,    21,     0,    65,   104,   302,   106,   107,     9,
+      31,    49,   194,    19,    14,   281,    99,   283,    34,    31,
+     103,    21,    28,    23,   290,    84,    26,   121,    44,    29,
+      98,    99,   100,   101,   128,    63,    98,     0,    97,   305,
+     102,    49,   338,    97,   340,    98,    99,   100,   101,   345,
+      97,   233,   146,   121,    98,   351,    94,    95,    49,    99,
+     128,    52,   156,    63,    64,    65,    97,    73,    68,    33,
+     121,    68,   368,   210,   211,   212,    97,   128,   146,   375,
+      98,   103,   100,   379,    92,    93,    94,    95,   156,   385,
+     356,   102,   388,    36,    37,   146,    97,   125,   280,   365,
+      91,    92,    93,    94,    95,   156,   372,    97,    15,   109,
+      97,    98,   378,   141,    99,   100,   101,    97,   384,   211,
+     212,    97,    97,    97,    97,   125,    97,    34,    97,   129,
+      26,   103,   231,   232,   102,    42,    43,    44,    45,    46,
+      47,   141,    49,    98,    97,    52,    53,    54,    97,   149,
+      44,    26,   100,    16,    34,    97,    97,    97,    34,    97,
+      97,    97,   223,    97,   103,    97,    42,    43,    44,    45,
+      46,    47,    97,    49,    97,    97,    52,    53,    54,    97,
+      68,   348,    89,    90,    91,    92,    93,    94,    95,    28,
+     239,   210,   211,   212,   156,   173,    -1,    -1,    -1,    -1,
+      -1,   201,    -1,    -1,   201,    -1,    -1,    -1,    -1,    -1,
+     210,   211,   212,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    -1,   223,   224,    -1,    -1,    -1,    10,    11,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,    33,   239,
+      -1,    -1,    -1,    -1,    -1,    -1,    28,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+      62,   281,    -1,   283,    -1,    -1,    -1,    -1,    -1,    -1,
+     290,    73,    -1,   293,    89,    90,    91,    92,    93,    94,
+      95,    -1,   302,    -1,    -1,   305,    -1,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,   347,
+     102,   103,   100,   105,    -1,    -1,   108,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,
+     340,   123,   339,    -1,    -1,   345,    -1,   347,   130,    -1,
+      -1,   351,    -1,    -1,   354,    -1,   356,   354,    -1,    -1,
+      -1,    -1,    -1,    -1,   364,   365,    -1,    -1,   368,    -1,
+      -1,    -1,   372,    -1,    -1,   375,    -1,    -1,   378,   379,
+      -1,   381,    -1,    -1,   384,   385,    -1,    -1,   388,    -1,
+      -1,    -1,    -1,    -1,    -1,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     202,   203,   204,   205,   206,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   217,   218,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,
-      -1,    -1,   262,    -1,   264,    -1,    55,    -1,    -1,    42,
-      -1,   271,    -1,    -1,   274,    -1,    -1,    50,    51,    52,
-      53,    54,    55,   283,    57,    -1,   286,    60,    61,    62,
-      -1,    -1,    -1,    -1,    -1,    84,    85,    -1,    87,    -1,
-     328,    90,    -1,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    84,    -1,    86,    -1,    -1,   105,    -1,    -1,   319,
-     320,   321,    -1,   112,   320,    -1,   326,    -1,   328,    -1,
-      -1,    -1,   332,    -1,    -1,   335,    -1,   337,    -1,   335,
-      -1,    -1,    -1,    -1,    -1,   345,   346,    -1,    -1,   349,
-      -1,    -1,    -1,   353,    -1,    -1,   356,    -1,    -1,   359,
-     360,    -1,   362,    -1,    -1,   365,   366,    -1,    -1,   369,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   184,   185,   186,   187,    -1,
-      -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,   198,
-     199,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    -1,    -1,    -1,   216,   217,    -1,
-     219,    -1,    -1,    -1,   223,    -1,   225,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,    -1,    -1,    -1,    -1,    -1,     5,    -1,    -1,
-      -1,   270,    10,    -1,    -1,    13,    14,    15,    -1,    -1,
-      -1,    19,    20,    21,    22,    23,    -1,    -1,   287,    27,
-      -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      -1,   340,    -1,    81,    82,    -1,    -1,    -1,     5,    -1,
-      88,   350,    90,    10,    92,    -1,    13,    14,    15,    -1,
-      -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,    -1,
-      27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    -1,    42,    -1,    44,    45,    -1,
-      47,    -1,    -1,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    78,    79,    80,    81,    82,    83,    84,    -1,     5,
-      87,    88,    -1,    90,    10,    -1,    -1,    13,    14,    15,
-      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    -1,    42,    -1,    44,    45,
-      -1,    47,    -1,    -1,    50,    51,    52,    53,    54,    55,
+      -1,    -1,    -1,   235,   236,    -1,   238,    -1,    -1,    -1,
+     242,    -1,   244,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
+      -1,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   289,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
+      -1,   100,    -1,    -1,   306,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
+      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
+      -1,    36,    37,    -1,    39,    -1,    -1,   359,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,   369,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,    -1,   101,    -1,   103,     5,
+       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
+      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
+      36,    37,    -1,    39,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-       5,    87,    88,    -1,    90,    10,    -1,    -1,    13,    14,
-      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    -1,    44,
-      45,    -1,    47,    -1,    -1,    50,    51,    52,    53,    54,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
+      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    98,    99,    -1,   101,     5,     6,     7,     8,
+       9,    -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,
+      19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
+      29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
+      39,    -1,    -1,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
+      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
+      99,    -1,   101,     5,     6,     7,     8,     9,    -1,    11,
+      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
+      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
+      32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    98,    99,    -1,   101,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
+      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
+      -1,    36,    37,    -1,    39,    -1,    -1,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,     5,    87,    88,    -1,    90,    10,    -1,    -1,    13,
-      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
-      44,    45,    -1,    47,    -1,    -1,    50,    51,    52,    53,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
+      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+       8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
+      -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
+      28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
+      78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
+      -1,    99,   100,   101,     5,     6,     7,     8,     9,    -1,
+      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
+      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
+      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
+     101,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
+      14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
+      24,    -1,    26,    27,    28,    29,    -1,    31,    32,    -1,
+      34,    -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,     5,    -1,    88,    -1,    90,    10,    -1,    -1,
-      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
-      -1,    -1,    -1,     5,    -1,    88,    89,    90,    10,    -1,
-      -1,    13,    14,    15,    -1,    -1,    -1,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
-      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
-      42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,
-      82,    -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,
-      13,    14,    15,    -1,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
-      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
-      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
-      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,
-       5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,
-      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    -1,    44,
-      45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,     5,
-      -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,    15,
-      -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    -1,    42,    -1,    44,    45,
-      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,     5,    -1,    -1,    81,    82,    10,    -1,    -1,
-      13,    14,    15,    -1,    90,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,
-      -1,     5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,
-      14,    15,    -1,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    -1,    42,    -1,
-      44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    56,    57,    58,    59,    -1,    -1,    -1,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    -1,    -1,    -1,    81,    82,    -1,
-       5,    -1,    -1,    -1,    88,    10,    90,    -1,    13,    14,
-      15,    -1,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    -1,    42,    -1,    44,
-      45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    56,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      13,    -1,    -1,    88,    -1,    90,    19,    20,    21,    22,
-      23,    -1,    -1,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
-      43,    44,    45,    46,    47,    48,    49,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,
-      22,    23,    24,    86,    26,    27,    28,    29,    30,    31,
-      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    74,    13,    -1,    77,    -1,    -1,    -1,    19,
-      20,    21,    22,    23,    86,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    13,    -1,    76,    77,    -1,    -1,
-      19,    20,    21,    22,    23,    -1,    86,    26,    27,    28,
-      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,    43,    44,    45,    -1,    47,    48,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,
-      59,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    -1,    75,    -1,    77,    -1,
-      -1,    -1,    13,    -1,    -1,    16,    -1,    86,    19,    20,
-      21,    22,    23,    -1,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,
-      20,    21,    22,    23,    -1,    86,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    43,    44,    45,    -1,    47,    48,    49,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    74,    13,    -1,    77,    -1,    -1,
-      -1,    19,    20,    21,    22,    23,    86,    -1,    26,    27,
-      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    -1,    42,    43,    44,    45,    -1,    47,
-      48,    49,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    74,    13,    -1,    77,
-      -1,    -1,    -1,    19,    20,    21,    22,    23,    86,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    -1,    42,    43,    44,    45,
-      -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,    55,
-      56,    57,    58,    59,    -1,    -1,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    13,    75,
-      -1,    77,    -1,    -1,    19,    20,    21,    22,    23,    -1,
-      86,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    38,    39,    40,    -1,    42,    43,    44,
-      45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    13,
-      75,    -1,    77,    -1,    -1,    19,    20,    21,    22,    23,
-      -1,    86,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    -1,    42,    43,
-      44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,    22,
-      23,    -1,    86,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
-      43,    44,    45,    -1,    47,    48,    49,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,    21,
-      22,    23,    -1,    86,    26,    27,    28,    29,    30,    31,
-      32,    -1,    34,    35,    36,    37,    38,    39,    40,    -1,
-      42,    43,    44,    45,    -1,    47,    48,    49,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,    20,
-      21,    22,    23,    -1,    86,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      -1,    42,    43,    44,    45,    -1,    47,    48,    49,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    -1,    -1,    13,    -1,    -1,    77,    -1,    -1,    19,
-      20,    21,    22,    23,    -1,    86,    26,    27,    28,    29,
-      -1,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
-      40,    -1,    42,    -1,    44,    45,    -1,    47,    48,    49,
-      -1,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    13,    14,    15,    -1,    -1,    77,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      -1,    42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    13,    -1,    -1,    -1,    -1,    77,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,
-      32,    -1,    34,    35,    36,    37,    -1,    39,    40,    -1,
-      42,    -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      13,    -1,    -1,    -1,    -1,    77,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    27,    -1,    -1,    -1,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    -1,    42,
-      -1,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    50,    51,
-      52,    53,    54,    55,    77,    57,    -1,    -1,    60,    61,
-      62,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    -1,    -1,    87,    -1,    89,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
-      89,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    87,    -1,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      86,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    50,    51,    52,    53,    54,    55,
-      -1,    57,    -1,    -1,    60,    61,    62,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    86,    -1,    -1,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    -1,
-      86,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
-      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    -1,    86,    50,    51,
-      52,    53,    54,    55,    -1,    57,    -1,    -1,    60,    61,
-      62,    -1,    -1,    -1,    -1,    -1,    68,    69,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    84,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    60,    61,    62,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      84
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
+      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
+       7,     8,     9,    -1,    11,    12,    13,    14,    15,    -1,
+      -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,
+      27,    28,    29,    -1,    31,    32,    -1,    34,    -1,    36,
+      37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
+      -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
+      -1,    -1,    99,    -1,   101,     5,     6,     7,     8,     9,
+      -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,    19,
+      -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,    29,
+      -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
+      -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,
+      -1,   101,     5,     6,     7,     8,     9,    -1,    11,    12,
+      13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,
+      23,    24,    -1,    26,    27,    28,    29,    -1,    31,    32,
+      -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,
+      93,    -1,    -1,     5,     6,     7,     8,     9,   101,    11,
+      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
+      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
+      32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
+      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
+      -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,    -1,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+       8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
+      -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
+      28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
+      78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       7,    99,    -1,   101,    11,    12,    13,    14,    15,    -1,
+      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    83,    -1,    -1,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    16,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+      87,    88,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
+      97,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
+      10,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    -1,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,     7,     8,     9,    88,    11,
+      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
+      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
+      32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      -1,    -1,    -1,     7,    -1,    -1,    88,    11,    12,    13,
+      14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
+      24,    -1,    26,    27,    28,    29,    -1,    31,    32,    -1,
+      34,    -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      -1,     7,    -1,    -1,    88,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
+      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
+      36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    42,    43,    44,    45,
+      46,    47,    88,    49,    -1,    -1,    52,    53,    54,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    98,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    97,    79,    80,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      42,    43,    44,    45,    -1,    -1,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    13,    19,    20,    21,    22,    23,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    42,    43,    44,    45,    46,    47,    48,    49,
-      54,    55,    56,    57,    58,    59,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    77,    86,    94,
-      95,    96,    97,    98,   103,   105,   108,   109,   110,   113,
-     115,   116,   117,   118,   119,   120,    39,    86,    35,    39,
-      40,    70,    77,   105,   106,   107,     5,    10,    14,    15,
-      19,    20,    21,    22,    27,    34,    56,    67,    81,    82,
-      88,    90,   105,   111,   112,   124,   125,   128,   129,   130,
-     133,   134,   135,   138,   140,    88,   138,   105,    39,   111,
-     138,    44,    45,   105,   125,   127,   105,   105,   111,   112,
-     106,   138,   106,   105,   109,     0,    96,   111,   138,    86,
-      86,    87,   124,   134,   136,   136,   136,   136,   138,   138,
-     135,   138,   135,   135,    89,   138,    14,    15,    92,   105,
-     131,   132,   138,   141,   142,    88,    86,    86,    36,    50,
-      51,    52,    53,    54,    55,    57,    60,    61,    62,    78,
-      79,    80,    81,    82,    83,    84,    87,   124,   133,   137,
-     139,   140,   138,    41,    54,    55,    57,    62,   106,    86,
-      86,    32,    58,    59,   105,   138,    42,    52,   114,    41,
-      86,    86,    86,    86,    42,    86,    86,   106,    86,   105,
-      36,   139,    68,    69,    87,    89,    92,    92,    91,    92,
-      87,    91,    91,    87,   141,    34,   138,   138,   138,   138,
-     138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
-     138,   138,   138,   142,    50,    51,    52,    53,    54,    55,
-      57,    60,    61,    62,    78,    79,    80,    81,    82,    83,
-      84,    87,    86,   108,    86,   125,   126,   128,   126,   126,
-      52,    86,   138,   138,    73,    86,    99,   100,   101,   102,
-     109,    86,   108,   121,   122,   123,    86,    34,   135,   135,
-     142,   138,   138,   138,    14,    15,   105,   132,   138,    89,
-     138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
-     138,   138,   138,   138,   138,   138,   138,   138,   142,   121,
-      24,   121,    86,    86,    86,   138,   121,    86,   105,    86,
-      76,   123,   121,   138,    89,    24,    74,    86,   108,    23,
-      42,    75,   106,   102,    86,    16,    86,   108,    86,   121,
-      42,   138,    86,    86,   104,   105,   121,    74,   138,    86,
-     121,    86,    87,    74,    86,    86,   121,   105,    86,   121,
-      75,    75,    86,    86
+       0,     7,    11,    12,    13,    14,    15,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    34,    35,    36,    37,    38,    39,    40,    41,
+      46,    47,    48,    49,    50,    51,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    69,    70,    71,    72,    73,    74,    76,    77,    78,
+      79,    80,    81,    82,    83,    88,    97,   105,   106,   107,
+     108,   109,   114,   116,   119,   120,   121,   124,   126,   127,
+     128,   129,   130,   131,    31,    97,    27,    31,    32,    81,
+      88,   116,   117,   118,     5,     6,     8,     9,    11,    12,
+      13,    14,    19,    26,    48,    78,    92,    93,    99,   101,
+     116,   122,   123,   135,   136,   139,   140,   141,   144,   145,
+     146,   149,   151,    99,   149,   116,    31,   122,   149,    36,
+      37,   116,   136,   138,   116,   116,   122,   123,   117,   149,
+     117,   116,   120,     0,   107,   122,   149,    97,    97,    98,
+     135,   145,   147,   147,   147,   147,   149,   149,   146,   149,
+     146,   146,   100,   149,     8,     9,   103,   116,   142,   143,
+     149,   152,   153,    99,    97,    97,    28,    42,    43,    44,
+      45,    46,    47,    49,    52,    53,    54,    89,    90,    91,
+      92,    93,    94,    95,    98,   135,   144,   148,   150,   151,
+     149,    33,    46,    47,    49,    53,    54,   117,    97,    97,
+      24,    50,    51,   116,   149,    34,    44,   125,    33,    97,
+      97,    97,    97,    34,    97,    97,   117,    97,   116,    28,
+     150,    79,    80,    98,   100,   103,   103,   102,   103,    98,
+     102,   102,    98,   152,    26,   149,   149,   149,   149,   149,
+     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
+     149,   149,   153,    42,    43,    44,    45,    46,    47,    49,
+      52,    53,    54,    89,    90,    91,    92,    93,    94,    95,
+      98,    97,   119,    97,   136,   137,   139,   137,   137,    44,
+      97,   149,   149,    84,    97,   110,   111,   112,   113,   120,
+      97,   119,   132,   133,   134,    97,    26,   146,   146,   153,
+     149,   149,   149,     8,     9,   116,   143,   149,   100,   149,
+     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
+     149,   149,   149,   149,   149,   149,   149,   153,   132,    16,
+     132,    97,    97,    97,   149,   132,    97,   116,    97,    87,
+     134,   132,   149,   100,    16,    85,    97,   119,    15,    34,
+      86,   117,   113,    97,    10,    97,   119,    97,   132,    34,
+     149,    97,    97,   115,   116,   132,    85,   149,    97,   132,
+      97,    98,    85,    97,    97,   132,   116,    97,   132,    86,
+      86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    93,    94,    95,    95,    96,    96,    96,    96,    96,
-      97,    98,    99,   100,   100,   101,   101,   102,   102,   103,
-     103,   104,   104,   104,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   105,   106,
-     106,   107,   107,   108,   108,   108,   108,   108,   108,   109,
-     109,   109,   110,   110,   110,   110,   110,   110,   110,   110,
-     110,   110,   111,   111,   111,   111,   111,   111,   111,   112,
-     112,   112,   112,   112,   113,   113,   113,   113,   114,   114,
-     115,   115,   115,   116,   116,   117,   117,   117,   117,   118,
-     118,   118,   119,   119,   120,   121,   121,   122,   122,   123,
-     123,   124,   124,   124,   124,   124,   124,   124,   124,   124,
-     124,   125,   126,   126,   127,   128,   128,   129,   129,   130,
-     130,   130,   131,   131,   132,   132,   132,   133,   134,   134,
-     135,   135,   135,   136,   136,   137,   137,   138,   138,   138,
-     138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
-     138,   138,   138,   138,   138,   138,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   140,   140,   141,   141,   142,
-     142
+       0,   104,   105,   106,   106,   107,   107,   107,   107,   107,
+     108,   109,   110,   111,   111,   112,   112,   113,   113,   114,
+     114,   115,   115,   115,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   116,   117,   117,   118,
+     118,   119,   119,   119,   119,   119,   119,   120,   120,   120,
+     121,   121,   121,   121,   121,   121,   121,   121,   121,   121,
+     122,   122,   122,   122,   122,   122,   122,   123,   123,   123,
+     123,   123,   124,   124,   124,   124,   125,   125,   126,   126,
+     126,   127,   127,   128,   128,   128,   128,   129,   129,   129,
+     130,   130,   131,   132,   132,   133,   133,   134,   134,   135,
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   136,
+     137,   137,   138,   139,   139,   140,   140,   141,   141,   141,
+     142,   142,   143,   143,   143,   144,   145,   145,   146,   146,
+     146,   147,   147,   148,   148,   149,   149,   149,   149,   149,
+     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
+     149,   149,   149,   149,   150,   150,   150,   150,   150,   150,
+     150,   150,   150,   150,   150,   150,   150,   150,   150,   150,
+     150,   150,   150,   151,   151,   152,   152,   153,   153
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1556,22 +1695,23 @@ static const yytype_int8 yyr2[] =
        5,     0,     1,     3,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
-       2,     2,     0,     1,     3,     2,     4,     2,     5,     2,
-       2,     5,     4,     3,     5,     5,     5,     5,     1,     1,
-       3,     3,     3,     4,     7,     6,     9,     7,    10,     7,
-      11,    12,     4,     6,     4,     0,     1,     1,     2,     1,
-       1,     1,     1,     1,     1,     2,     4,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     2,     2,     2,     3,
-       3,     3,     1,     3,     3,     3,     3,     3,     2,     2,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     0,     1,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     3,     3,     3,     3,     3,     3,     3,     2,     2,
+       0,     1,     3,     2,     4,     2,     5,     2,     2,     5,
+       4,     3,     5,     5,     5,     5,     1,     1,     3,     3,
+       3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
+       4,     6,     4,     0,     1,     1,     2,     1,     1,     1,
+       1,     1,     1,     2,     4,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     2,     2,     2,     3,     3,     3,
+       1,     3,     3,     3,     3,     3,     2,     2,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     1,     1,     3,     3,
+       3,     3,     3,     3,     1,     1,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     4,     4,     0,     1,     1,
-       3
+       3,     3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -1842,52 +1982,34 @@ yydestruct (const char *yymsg,
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   switch (yykind)
     {
-    case YYSYMBOL_tTHEFUNC: /* tTHEFUNC  */
-#line 191 "engines/director/lingo/lingo-gr.y"
-            { delete ((*yyvaluep).s); }
-#line 1849 "engines/director/lingo/lingo-gr.cpp"
-        break;
-
-    case YYSYMBOL_tTHEFUNCINOF: /* tTHEFUNCINOF  */
-#line 191 "engines/director/lingo/lingo-gr.y"
-            { delete ((*yyvaluep).s); }
-#line 1855 "engines/director/lingo/lingo-gr.cpp"
-        break;
-
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1861 "engines/director/lingo/lingo-gr.cpp"
+#line 1989 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1867 "engines/director/lingo/lingo-gr.cpp"
+#line 1995 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1873 "engines/director/lingo/lingo-gr.cpp"
+#line 2001 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1879 "engines/director/lingo/lingo-gr.cpp"
-        break;
-
-    case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
-#line 191 "engines/director/lingo/lingo-gr.y"
-            { delete ((*yyvaluep).s); }
-#line 1885 "engines/director/lingo/lingo-gr.cpp"
+#line 2007 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 191 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1891 "engines/director/lingo/lingo-gr.cpp"
+#line 2013 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2155,7 +2277,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 197 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2159 "engines/director/lingo/lingo-gr.cpp"
+#line 2281 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2166,7 +2288,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2170 "engines/director/lingo/lingo-gr.cpp"
+#line 2292 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2176,37 +2298,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2180 "engines/director/lingo/lingo-gr.cpp"
+#line 2302 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 212 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2186 "engines/director/lingo/lingo-gr.cpp"
+#line 2308 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 245 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2192 "engines/director/lingo/lingo-gr.cpp"
+#line 2314 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2198 "engines/director/lingo/lingo-gr.cpp"
+#line 2320 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2204 "engines/director/lingo/lingo-gr.cpp"
+#line 2326 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 253 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2210 "engines/director/lingo/lingo-gr.cpp"
+#line 2332 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2217,7 +2339,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2221 "engines/director/lingo/lingo-gr.cpp"
+#line 2343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2227,13 +2349,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2231 "engines/director/lingo/lingo-gr.cpp"
+#line 2353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 270 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2237 "engines/director/lingo/lingo-gr.cpp"
+#line 2359 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2242,994 +2364,1102 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2246 "engines/director/lingo/lingo-gr.cpp"
+#line 2368 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 280 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2253 "engines/director/lingo/lingo-gr.cpp"
+#line 2375 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 285 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2259 "engines/director/lingo/lingo-gr.cpp"
+#line 2381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 286 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2265 "engines/director/lingo/lingo-gr.cpp"
+#line 2387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 25: /* ID: tAFTER  */
+  case 25: /* ID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("after"); }
-#line 2271 "engines/director/lingo/lingo-gr.cpp"
+                        { (yyval.s) = new Common::String("abbreviated"); }
+#line 2393 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 26: /* ID: tAND  */
+  case 26: /* ID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("and"); }
-#line 2277 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.s) = new Common::String("abbrev"); }
+#line 2399 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 27: /* ID: tBEFORE  */
+  case 27: /* ID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("before"); }
-#line 2283 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.s) = new Common::String("abbr"); }
+#line 2405 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 28: /* ID: tCAST  */
+  case 28: /* ID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("cast"); }
-#line 2289 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.s) = new Common::String("after"); }
+#line 2411 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 29: /* ID: tCHAR  */
+  case 29: /* ID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("char"); }
-#line 2295 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.s) = new Common::String("and"); }
+#line 2417 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 30: /* ID: tDOWN  */
+  case 30: /* ID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("down"); }
-#line 2301 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.s) = new Common::String("before"); }
+#line 2423 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 31: /* ID: tCAST  */
+#line 298 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("cast"); }
+#line 2429 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 32: /* ID: tCHAR  */
+#line 299 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("char"); }
+#line 2435 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 33: /* ID: tCHARS  */
+#line 300 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("chars"); }
+#line 2441 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 34: /* ID: tCONTAINS  */
+#line 301 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("contains"); }
+#line 2447 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 31: /* ID: tFIELD  */
+  case 35: /* ID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("field"); }
-#line 2307 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.s) = new Common::String("date"); }
+#line 2453 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 32: /* ID: tFRAME  */
+  case 36: /* ID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("down"); }
+#line 2459 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 37: /* ID: tFIELD  */
+#line 308 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("field"); }
+#line 2465 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 38: /* ID: tFRAME  */
+#line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2313 "engines/director/lingo/lingo-gr.cpp"
+#line 2471 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 33: /* ID: tIN  */
-#line 306 "engines/director/lingo/lingo-gr.y"
+  case 39: /* ID: tIN  */
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2319 "engines/director/lingo/lingo-gr.cpp"
+#line 2477 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 34: /* ID: tINTERSECTS  */
-#line 308 "engines/director/lingo/lingo-gr.y"
+  case 40: /* ID: tINTERSECTS  */
+#line 315 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2325 "engines/director/lingo/lingo-gr.cpp"
+#line 2483 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 35: /* ID: tINTO  */
-#line 309 "engines/director/lingo/lingo-gr.y"
+  case 41: /* ID: tINTO  */
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2331 "engines/director/lingo/lingo-gr.cpp"
+#line 2489 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 36: /* ID: tITEM  */
-#line 310 "engines/director/lingo/lingo-gr.y"
+  case 42: /* ID: tITEM  */
+#line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2337 "engines/director/lingo/lingo-gr.cpp"
+#line 2495 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 43: /* ID: tITEMS  */
+#line 318 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("items"); }
+#line 2501 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 44: /* ID: tLAST  */
+#line 319 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("last"); }
+#line 2507 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 37: /* ID: tLINE  */
-#line 311 "engines/director/lingo/lingo-gr.y"
+  case 45: /* ID: tLINE  */
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2343 "engines/director/lingo/lingo-gr.cpp"
+#line 2513 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 46: /* ID: tLINES  */
+#line 321 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("lines"); }
+#line 2519 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 47: /* ID: tLONG  */
+#line 322 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("long"); }
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 48: /* ID: tMENU  */
+#line 324 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("menu"); }
+#line 2531 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 38: /* ID: tMOD  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+  case 49: /* ID: tMENUITEM  */
+#line 325 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("menuItem"); }
+#line 2537 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 50: /* ID: tMENUITEMS  */
+#line 326 "engines/director/lingo/lingo-gr.y"
+                        { (yyval.s) = new Common::String("menuItems"); }
+#line 2543 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 51: /* ID: tMOD  */
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2349 "engines/director/lingo/lingo-gr.cpp"
+#line 2549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 39: /* ID: tMOVIE  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+  case 52: /* ID: tMOVIE  */
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2355 "engines/director/lingo/lingo-gr.cpp"
+#line 2555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 40: /* ID: tNEXT  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+  case 53: /* ID: tNEXT  */
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2361 "engines/director/lingo/lingo-gr.cpp"
+#line 2561 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 41: /* ID: tNOT  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+  case 54: /* ID: tNOT  */
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2367 "engines/director/lingo/lingo-gr.cpp"
+#line 2567 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 42: /* ID: tOF  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+  case 55: /* ID: tNUMBER  */
+#line 332 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("number"); }
+#line 2573 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 56: /* ID: tOF  */
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2373 "engines/director/lingo/lingo-gr.cpp"
+#line 2579 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 43: /* ID: tOPEN  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+  case 57: /* ID: tOPEN  */
+#line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2379 "engines/director/lingo/lingo-gr.cpp"
+#line 2585 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 44: /* ID: tOR  */
-#line 321 "engines/director/lingo/lingo-gr.y"
+  case 58: /* ID: tOR  */
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2385 "engines/director/lingo/lingo-gr.cpp"
+#line 2591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 45: /* ID: tPREVIOUS  */
-#line 323 "engines/director/lingo/lingo-gr.y"
+  case 59: /* ID: tPREVIOUS  */
+#line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2391 "engines/director/lingo/lingo-gr.cpp"
+#line 2597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 46: /* ID: tREPEAT  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+  case 60: /* ID: tREPEAT  */
+#line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2397 "engines/director/lingo/lingo-gr.cpp"
+#line 2603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 47: /* ID: tSCRIPT  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+  case 61: /* ID: tSCRIPT  */
+#line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2403 "engines/director/lingo/lingo-gr.cpp"
+#line 2609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 48: /* ID: tSET  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+  case 62: /* ID: tASSERTERROR  */
+#line 343 "engines/director/lingo/lingo-gr.y"
+                        { (yyval.s) = new Common::String("scummvmAssertError"); }
+#line 2615 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 63: /* ID: tSET  */
+#line 344 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2409 "engines/director/lingo/lingo-gr.cpp"
+#line 2621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 49: /* ID: tSTARTS  */
-#line 329 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("starts"); }
-#line 2415 "engines/director/lingo/lingo-gr.cpp"
+  case 64: /* ID: tSHORT  */
+#line 345 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("short"); }
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50: /* ID: tTELL  */
-#line 330 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("tell"); }
-#line 2421 "engines/director/lingo/lingo-gr.cpp"
+  case 65: /* ID: tSOUND  */
+#line 346 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("sound"); }
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51: /* ID: tTO  */
-#line 332 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("to"); }
-#line 2427 "engines/director/lingo/lingo-gr.cpp"
+  case 66: /* ID: tSPRITE  */
+#line 347 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("sprite"); }
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 52: /* ID: tASSERTERROR  */
-#line 333 "engines/director/lingo/lingo-gr.y"
-                        { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2433 "engines/director/lingo/lingo-gr.cpp"
+  case 67: /* ID: tSTARTS  */
+#line 348 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("starts"); }
+#line 2645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 53: /* ID: tSPRITE  */
-#line 334 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("sprite"); }
-#line 2439 "engines/director/lingo/lingo-gr.cpp"
+  case 68: /* ID: tTELL  */
+#line 349 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("tell"); }
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 54: /* ID: tWHILE  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+  case 69: /* ID: tTIME  */
+#line 352 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("time"); }
+#line 2657 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 70: /* ID: tTO  */
+#line 353 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("to"); }
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 71: /* ID: tWHILE  */
+#line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2445 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 55: /* ID: tWINDOW  */
-#line 337 "engines/director/lingo/lingo-gr.y"
+  case 72: /* ID: tWINDOW  */
+#line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2451 "engines/director/lingo/lingo-gr.cpp"
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56: /* ID: tWITH  */
-#line 338 "engines/director/lingo/lingo-gr.y"
+  case 73: /* ID: tWITH  */
+#line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2457 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57: /* ID: tWITHIN  */
-#line 339 "engines/director/lingo/lingo-gr.y"
+  case 74: /* ID: tWITHIN  */
+#line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2463 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58: /* ID: tWORD  */
-#line 340 "engines/director/lingo/lingo-gr.y"
+  case 75: /* ID: tWORD  */
+#line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2469 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* idlist: %empty  */
-#line 343 "engines/director/lingo/lingo-gr.y"
+  case 76: /* ID: tWORDS  */
+#line 360 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("words"); }
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 77: /* idlist: %empty  */
+#line 363 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2475 "engines/director/lingo/lingo-gr.cpp"
+#line 2705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61: /* nonemptyidlist: ID  */
-#line 347 "engines/director/lingo/lingo-gr.y"
+  case 79: /* nonemptyidlist: ID  */
+#line 367 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2484 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 351 "engines/director/lingo/lingo-gr.y"
+  case 80: /* nonemptyidlist: nonemptyidlist ',' ID  */
+#line 371 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2492 "engines/director/lingo/lingo-gr.cpp"
+#line 2722 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* proc: ID cmdargs '\n'  */
-#line 374 "engines/director/lingo/lingo-gr.y"
+  case 90: /* proc: ID cmdargs '\n'  */
+#line 394 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2498 "engines/director/lingo/lingo-gr.cpp"
+#line 2728 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* proc: tPUT cmdargs '\n'  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+  case 91: /* proc: tPUT cmdargs '\n'  */
+#line 395 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2504 "engines/director/lingo/lingo-gr.cpp"
+#line 2734 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* proc: tGO cmdargs '\n'  */
-#line 376 "engines/director/lingo/lingo-gr.y"
+  case 92: /* proc: tGO cmdargs '\n'  */
+#line 396 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2510 "engines/director/lingo/lingo-gr.cpp"
+#line 2740 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* proc: tGO frameargs '\n'  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+  case 93: /* proc: tGO frameargs '\n'  */
+#line 397 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2516 "engines/director/lingo/lingo-gr.cpp"
+#line 2746 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* proc: tPLAY cmdargs '\n'  */
-#line 378 "engines/director/lingo/lingo-gr.y"
+  case 94: /* proc: tPLAY cmdargs '\n'  */
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2522 "engines/director/lingo/lingo-gr.cpp"
+#line 2752 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* proc: tPLAY frameargs '\n'  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+  case 95: /* proc: tPLAY frameargs '\n'  */
+#line 399 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2528 "engines/director/lingo/lingo-gr.cpp"
+#line 2758 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* proc: tNEXT tREPEAT '\n'  */
-#line 380 "engines/director/lingo/lingo-gr.y"
+  case 96: /* proc: tNEXT tREPEAT '\n'  */
+#line 400 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2534 "engines/director/lingo/lingo-gr.cpp"
+#line 2764 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* proc: tEXIT tREPEAT '\n'  */
-#line 381 "engines/director/lingo/lingo-gr.y"
+  case 97: /* proc: tEXIT tREPEAT '\n'  */
+#line 401 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2540 "engines/director/lingo/lingo-gr.cpp"
+#line 2770 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* proc: tEXIT '\n'  */
-#line 382 "engines/director/lingo/lingo-gr.y"
+  case 98: /* proc: tEXIT '\n'  */
+#line 402 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2546 "engines/director/lingo/lingo-gr.cpp"
+#line 2776 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* proc: tASSERTERROR stmtoneliner  */
-#line 383 "engines/director/lingo/lingo-gr.y"
+  case 99: /* proc: tASSERTERROR stmtoneliner  */
+#line 403 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2552 "engines/director/lingo/lingo-gr.cpp"
+#line 2782 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* cmdargs: %empty  */
-#line 386 "engines/director/lingo/lingo-gr.y"
+  case 100: /* cmdargs: %empty  */
+#line 406 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2560 "engines/director/lingo/lingo-gr.cpp"
+#line 2790 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* cmdargs: expr  */
-#line 389 "engines/director/lingo/lingo-gr.y"
+  case 101: /* cmdargs: expr  */
+#line 409 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2570 "engines/director/lingo/lingo-gr.cpp"
+#line 2800 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 394 "engines/director/lingo/lingo-gr.y"
+  case 102: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 414 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* cmdargs: expr expr_nounarymath  */
-#line 398 "engines/director/lingo/lingo-gr.y"
+  case 103: /* cmdargs: expr expr_nounarymath  */
+#line 418 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2590 "engines/director/lingo/lingo-gr.cpp"
+#line 2820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 104: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 424 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2600 "engines/director/lingo/lingo-gr.cpp"
+#line 2830 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* cmdargs: '(' ')'  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+  case 105: /* cmdargs: '(' ')'  */
+#line 429 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2608 "engines/director/lingo/lingo-gr.cpp"
+#line 2838 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 106: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 432 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2617 "engines/director/lingo/lingo-gr.cpp"
+#line 2847 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* frameargs: tFRAME expr  */
-#line 422 "engines/director/lingo/lingo-gr.y"
+  case 107: /* frameargs: tFRAME expr  */
+#line 442 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
+#line 2857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* frameargs: tMOVIE expr  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 108: /* frameargs: tMOVIE expr  */
+#line 447 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2638 "engines/director/lingo/lingo-gr.cpp"
+#line 2868 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 109: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* frameargs: expr tOF tMOVIE expr  */
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 110: /* frameargs: expr tOF tMOVIE expr  */
+#line 459 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2660 "engines/director/lingo/lingo-gr.cpp"
+#line 2890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 445 "engines/director/lingo/lingo-gr.y"
+  case 111: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 465 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 2901 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 112: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 473 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2677 "engines/director/lingo/lingo-gr.cpp"
+#line 2907 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 454 "engines/director/lingo/lingo-gr.y"
+  case 113: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 474 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2683 "engines/director/lingo/lingo-gr.cpp"
+#line 2913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 114: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 475 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2689 "engines/director/lingo/lingo-gr.cpp"
+#line 2919 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* asgn: tSET varorthe to expr '\n'  */
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 115: /* asgn: tSET varorthe to expr '\n'  */
+#line 476 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 2925 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* definevars: tGLOBAL idlist '\n'  */
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 118: /* definevars: tGLOBAL idlist '\n'  */
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2701 "engines/director/lingo/lingo-gr.cpp"
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* definevars: tPROPERTY idlist '\n'  */
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 119: /* definevars: tPROPERTY idlist '\n'  */
+#line 482 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2707 "engines/director/lingo/lingo-gr.cpp"
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* definevars: tINSTANCE idlist '\n'  */
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 120: /* definevars: tINSTANCE idlist '\n'  */
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2713 "engines/director/lingo/lingo-gr.cpp"
+#line 2943 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* ifstmt: tIF expr tTHEN stmt  */
-#line 466 "engines/director/lingo/lingo-gr.y"
+  case 121: /* ifstmt: tIF expr tTHEN stmt  */
+#line 486 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2722 "engines/director/lingo/lingo-gr.cpp"
+#line 2952 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 470 "engines/director/lingo/lingo-gr.y"
+  case 122: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+  case 123: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2740 "engines/director/lingo/lingo-gr.cpp"
+#line 2970 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 124: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 500 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 125: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 504 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2758 "engines/director/lingo/lingo-gr.cpp"
+#line 2988 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 126: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 508 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2765 "engines/director/lingo/lingo-gr.cpp"
+#line 2995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 127: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 512 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2772 "engines/director/lingo/lingo-gr.cpp"
+#line 3002 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+  case 128: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 514 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2779 "engines/director/lingo/lingo-gr.cpp"
+#line 3009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 129: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 516 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2786 "engines/director/lingo/lingo-gr.cpp"
+#line 3016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* tell: tTELL expr tTO stmtoneliner  */
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 130: /* tell: tTELL expr tTO stmtoneliner  */
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 504 "engines/director/lingo/lingo-gr.y"
+  case 131: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 2802 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* when: tWHEN ID tTHEN expr  */
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 132: /* when: tWHEN ID tTHEN expr  */
+#line 528 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 2808 "engines/director/lingo/lingo-gr.cpp"
+#line 3038 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* stmtlist: %empty  */
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 133: /* stmtlist: %empty  */
+#line 530 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2814 "engines/director/lingo/lingo-gr.cpp"
+#line 3044 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* nonemptystmtlist: stmtlistline  */
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 135: /* nonemptystmtlist: stmtlistline  */
+#line 535 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 3055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 521 "engines/director/lingo/lingo-gr.y"
+  case 136: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 541 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2835 "engines/director/lingo/lingo-gr.cpp"
+#line 3065 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* stmtlistline: '\n'  */
-#line 528 "engines/director/lingo/lingo-gr.y"
+  case 137: /* stmtlistline: '\n'  */
+#line 548 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 2841 "engines/director/lingo/lingo-gr.cpp"
+#line 3071 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 139: /* simpleexpr_noparens_nounarymath: tINT  */
+#line 555 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 3077 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 536 "engines/director/lingo/lingo-gr.y"
+  case 140: /* simpleexpr_noparens_nounarymath: tFLOAT  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 2853 "engines/director/lingo/lingo-gr.cpp"
+#line 3083 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 537 "engines/director/lingo/lingo-gr.y"
+  case 141: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
+#line 557 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 2859 "engines/director/lingo/lingo-gr.cpp"
+#line 3089 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 538 "engines/director/lingo/lingo-gr.y"
+  case 142: /* simpleexpr_noparens_nounarymath: tSTRING  */
+#line 558 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 2865 "engines/director/lingo/lingo-gr.cpp"
+#line 3095 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 143: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
+#line 559 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 2871 "engines/director/lingo/lingo-gr.cpp"
+#line 3101 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 540 "engines/director/lingo/lingo-gr.y"
+  case 144: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
+#line 560 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 2877 "engines/director/lingo/lingo-gr.cpp"
+#line 3107 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* var: ID  */
-#line 547 "engines/director/lingo/lingo-gr.y"
+  case 149: /* var: ID  */
+#line 567 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 2883 "engines/director/lingo/lingo-gr.cpp"
+#line 3113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* chunk: tFIELD simpleexpr_noparens  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 153: /* chunk: tFIELD simpleexpr_noparens  */
+#line 577 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 2892 "engines/director/lingo/lingo-gr.cpp"
+#line 3122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* chunk: tCAST simpleexpr_noparens  */
-#line 561 "engines/director/lingo/lingo-gr.y"
+  case 154: /* chunk: tCAST simpleexpr_noparens  */
+#line 581 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 2901 "engines/director/lingo/lingo-gr.cpp"
+#line 3131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* object: tSCRIPT simpleexpr_noparens  */
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 155: /* object: tSCRIPT simpleexpr_noparens  */
+#line 587 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 2910 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* object: tWINDOW simpleexpr_noparens  */
-#line 571 "engines/director/lingo/lingo-gr.y"
+  case 156: /* object: tWINDOW simpleexpr_noparens  */
+#line 591 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 2919 "engines/director/lingo/lingo-gr.cpp"
+#line 3149 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* list: '[' exprlist ']'  */
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 157: /* list: '[' exprlist ']'  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 2925 "engines/director/lingo/lingo-gr.cpp"
+#line 3155 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* list: '[' ':' ']'  */
-#line 578 "engines/director/lingo/lingo-gr.y"
+  case 158: /* list: '[' ':' ']'  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 2931 "engines/director/lingo/lingo-gr.cpp"
+#line 3161 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* list: '[' proplist ']'  */
-#line 579 "engines/director/lingo/lingo-gr.y"
+  case 159: /* list: '[' proplist ']'  */
+#line 599 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 2937 "engines/director/lingo/lingo-gr.cpp"
+#line 3167 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* proplist: proppair  */
-#line 582 "engines/director/lingo/lingo-gr.y"
+  case 160: /* proplist: proppair  */
+#line 602 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 2946 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* proplist: proplist ',' proppair  */
-#line 586 "engines/director/lingo/lingo-gr.y"
+  case 161: /* proplist: proplist ',' proppair  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 3184 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* proppair: tSYMBOL ':' expr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 162: /* proppair: tSYMBOL ':' expr  */
+#line 611 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 3190 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* proppair: ID ':' expr  */
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 163: /* proppair: ID ':' expr  */
+#line 612 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+#line 3196 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* proppair: tSTRING ':' expr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 164: /* proppair: tSTRING ':' expr  */
+#line 613 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 2972 "engines/director/lingo/lingo-gr.cpp"
+#line 3202 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* parens: '(' expr ')'  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 165: /* parens: '(' expr ')'  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[-1].node); }
-#line 2978 "engines/director/lingo/lingo-gr.cpp"
+#line 3208 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* unarymath: '+' simpleexpr  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 166: /* unarymath: '+' simpleexpr  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 2984 "engines/director/lingo/lingo-gr.cpp"
+#line 3214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* unarymath: '-' simpleexpr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 167: /* unarymath: '-' simpleexpr  */
+#line 619 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 2990 "engines/director/lingo/lingo-gr.cpp"
+#line 3220 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* expr: expr '+' expr  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 177: /* expr: expr '+' expr  */
+#line 638 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 2996 "engines/director/lingo/lingo-gr.cpp"
+#line 3226 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* expr: expr '-' expr  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 178: /* expr: expr '-' expr  */
+#line 639 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3002 "engines/director/lingo/lingo-gr.cpp"
+#line 3232 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* expr: expr '*' expr  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 179: /* expr: expr '*' expr  */
+#line 640 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3008 "engines/director/lingo/lingo-gr.cpp"
+#line 3238 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* expr: expr '/' expr  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 180: /* expr: expr '/' expr  */
+#line 641 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3014 "engines/director/lingo/lingo-gr.cpp"
+#line 3244 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* expr: expr tMOD expr  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 181: /* expr: expr tMOD expr  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3020 "engines/director/lingo/lingo-gr.cpp"
+#line 3250 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* expr: expr '>' expr  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 182: /* expr: expr '>' expr  */
+#line 643 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3026 "engines/director/lingo/lingo-gr.cpp"
+#line 3256 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* expr: expr '<' expr  */
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 183: /* expr: expr '<' expr  */
+#line 644 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3262 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* expr: expr tEQ expr  */
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 184: /* expr: expr tEQ expr  */
+#line 645 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3038 "engines/director/lingo/lingo-gr.cpp"
+#line 3268 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* expr: expr tNEQ expr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+  case 185: /* expr: expr tNEQ expr  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3044 "engines/director/lingo/lingo-gr.cpp"
+#line 3274 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* expr: expr tGE expr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 186: /* expr: expr tGE expr  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3050 "engines/director/lingo/lingo-gr.cpp"
+#line 3280 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* expr: expr tLE expr  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 187: /* expr: expr tLE expr  */
+#line 648 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3056 "engines/director/lingo/lingo-gr.cpp"
+#line 3286 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* expr: expr tAND expr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+  case 188: /* expr: expr tAND expr  */
+#line 649 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3062 "engines/director/lingo/lingo-gr.cpp"
+#line 3292 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* expr: expr tOR expr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 189: /* expr: expr tOR expr  */
+#line 650 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3068 "engines/director/lingo/lingo-gr.cpp"
+#line 3298 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* expr: expr '&' expr  */
-#line 631 "engines/director/lingo/lingo-gr.y"
+  case 190: /* expr: expr '&' expr  */
+#line 651 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3074 "engines/director/lingo/lingo-gr.cpp"
+#line 3304 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* expr: expr tCONCAT expr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 191: /* expr: expr tCONCAT expr  */
+#line 652 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3080 "engines/director/lingo/lingo-gr.cpp"
+#line 3310 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* expr: expr tCONTAINS expr  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 192: /* expr: expr tCONTAINS expr  */
+#line 653 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3086 "engines/director/lingo/lingo-gr.cpp"
+#line 3316 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* expr: expr tSTARTS expr  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 193: /* expr: expr tSTARTS expr  */
+#line 654 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3092 "engines/director/lingo/lingo-gr.cpp"
+#line 3322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 196: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 663 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3098 "engines/director/lingo/lingo-gr.cpp"
+#line 3328 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 644 "engines/director/lingo/lingo-gr.y"
+  case 197: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 664 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3104 "engines/director/lingo/lingo-gr.cpp"
+#line 3334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 198: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 665 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3110 "engines/director/lingo/lingo-gr.cpp"
+#line 3340 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 199: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3116 "engines/director/lingo/lingo-gr.cpp"
+#line 3346 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 200: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 667 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3122 "engines/director/lingo/lingo-gr.cpp"
+#line 3352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+  case 201: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 668 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3128 "engines/director/lingo/lingo-gr.cpp"
+#line 3358 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 649 "engines/director/lingo/lingo-gr.y"
+  case 202: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 669 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3134 "engines/director/lingo/lingo-gr.cpp"
+#line 3364 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 650 "engines/director/lingo/lingo-gr.y"
+  case 203: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 670 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3140 "engines/director/lingo/lingo-gr.cpp"
+#line 3370 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 204: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 671 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3146 "engines/director/lingo/lingo-gr.cpp"
+#line 3376 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 205: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 672 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3152 "engines/director/lingo/lingo-gr.cpp"
+#line 3382 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 653 "engines/director/lingo/lingo-gr.y"
+  case 206: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 673 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3158 "engines/director/lingo/lingo-gr.cpp"
+#line 3388 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 207: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 674 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3164 "engines/director/lingo/lingo-gr.cpp"
+#line 3394 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 655 "engines/director/lingo/lingo-gr.y"
+  case 208: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 675 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3170 "engines/director/lingo/lingo-gr.cpp"
+#line 3400 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 656 "engines/director/lingo/lingo-gr.y"
+  case 209: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3176 "engines/director/lingo/lingo-gr.cpp"
+#line 3406 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 657 "engines/director/lingo/lingo-gr.y"
+  case 210: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 677 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3182 "engines/director/lingo/lingo-gr.cpp"
+#line 3412 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 658 "engines/director/lingo/lingo-gr.y"
+  case 211: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 678 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3188 "engines/director/lingo/lingo-gr.cpp"
+#line 3418 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 659 "engines/director/lingo/lingo-gr.y"
+  case 212: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 679 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3194 "engines/director/lingo/lingo-gr.cpp"
+#line 3424 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 662 "engines/director/lingo/lingo-gr.y"
+  case 213: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 682 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3200 "engines/director/lingo/lingo-gr.cpp"
+#line 3430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 663 "engines/director/lingo/lingo-gr.y"
+  case 214: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 683 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3206 "engines/director/lingo/lingo-gr.cpp"
+#line 3436 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* exprlist: %empty  */
-#line 666 "engines/director/lingo/lingo-gr.y"
+  case 215: /* exprlist: %empty  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3212 "engines/director/lingo/lingo-gr.cpp"
+#line 3442 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* nonemptyexprlist: expr  */
-#line 670 "engines/director/lingo/lingo-gr.y"
+  case 217: /* nonemptyexprlist: expr  */
+#line 690 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3221 "engines/director/lingo/lingo-gr.cpp"
+#line 3451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 674 "engines/director/lingo/lingo-gr.y"
+  case 218: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 694 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3229 "engines/director/lingo/lingo-gr.cpp"
+#line 3459 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3233 "engines/director/lingo/lingo-gr.cpp"
+#line 3463 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3428,7 +3658,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 679 "engines/director/lingo/lingo-gr.y"
+#line 699 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 9b14b3717f..826068afdc 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -57,78 +57,89 @@ extern int yydebug;
     tUNARY = 258,                  /* tUNARY  */
     tLEXERROR = 259,               /* tLEXERROR  */
     tINT = 260,                    /* tINT  */
-    tTHEENTITY = 261,              /* tTHEENTITY  */
-    tTHEENTITYWITHID = 262,        /* tTHEENTITYWITHID  */
-    tTHEMENUITEMENTITY = 263,      /* tTHEMENUITEMENTITY  */
-    tTHEMENUITEMSENTITY = 264,     /* tTHEMENUITEMSENTITY  */
-    tFLOAT = 265,                  /* tFLOAT  */
-    tTHEFUNC = 266,                /* tTHEFUNC  */
-    tTHEFUNCINOF = 267,            /* tTHEFUNCINOF  */
-    tVARID = 268,                  /* tVARID  */
-    tSTRING = 269,                 /* tSTRING  */
-    tSYMBOL = 270,                 /* tSYMBOL  */
-    tENDCLAUSE = 271,              /* tENDCLAUSE  */
-    tPLAYACCEL = 272,              /* tPLAYACCEL  */
-    tTHEOBJECTPROP = 273,          /* tTHEOBJECTPROP  */
-    tCAST = 274,                   /* tCAST  */
-    tFIELD = 275,                  /* tFIELD  */
-    tSCRIPT = 276,                 /* tSCRIPT  */
-    tWINDOW = 277,                 /* tWINDOW  */
-    tDOWN = 278,                   /* tDOWN  */
-    tELSE = 279,                   /* tELSE  */
-    tELSIF = 280,                  /* tELSIF  */
-    tEXIT = 281,                   /* tEXIT  */
-    tFRAME = 282,                  /* tFRAME  */
-    tGLOBAL = 283,                 /* tGLOBAL  */
-    tGO = 284,                     /* tGO  */
-    tIF = 285,                     /* tIF  */
-    tIN = 286,                     /* tIN  */
-    tINTO = 287,                   /* tINTO  */
-    tMACRO = 288,                  /* tMACRO  */
-    tMOVIE = 289,                  /* tMOVIE  */
-    tNEXT = 290,                   /* tNEXT  */
-    tOF = 291,                     /* tOF  */
-    tPREVIOUS = 292,               /* tPREVIOUS  */
-    tPUT = 293,                    /* tPUT  */
-    tREPEAT = 294,                 /* tREPEAT  */
-    tSET = 295,                    /* tSET  */
-    tTHEN = 296,                   /* tTHEN  */
-    tTO = 297,                     /* tTO  */
-    tWHEN = 298,                   /* tWHEN  */
-    tWITH = 299,                   /* tWITH  */
-    tWHILE = 300,                  /* tWHILE  */
-    tFACTORY = 301,                /* tFACTORY  */
-    tOPEN = 302,                   /* tOPEN  */
-    tPLAY = 303,                   /* tPLAY  */
-    tINSTANCE = 304,               /* tINSTANCE  */
-    tGE = 305,                     /* tGE  */
-    tLE = 306,                     /* tLE  */
-    tEQ = 307,                     /* tEQ  */
-    tNEQ = 308,                    /* tNEQ  */
-    tAND = 309,                    /* tAND  */
-    tOR = 310,                     /* tOR  */
-    tNOT = 311,                    /* tNOT  */
-    tMOD = 312,                    /* tMOD  */
-    tAFTER = 313,                  /* tAFTER  */
-    tBEFORE = 314,                 /* tBEFORE  */
-    tCONCAT = 315,                 /* tCONCAT  */
-    tCONTAINS = 316,               /* tCONTAINS  */
-    tSTARTS = 317,                 /* tSTARTS  */
-    tCHAR = 318,                   /* tCHAR  */
-    tITEM = 319,                   /* tITEM  */
-    tLINE = 320,                   /* tLINE  */
-    tWORD = 321,                   /* tWORD  */
-    tSPRITE = 322,                 /* tSPRITE  */
-    tINTERSECTS = 323,             /* tINTERSECTS  */
-    tWITHIN = 324,                 /* tWITHIN  */
-    tTELL = 325,                   /* tTELL  */
-    tPROPERTY = 326,               /* tPROPERTY  */
-    tON = 327,                     /* tON  */
-    tMETHOD = 328,                 /* tMETHOD  */
-    tENDIF = 329,                  /* tENDIF  */
-    tENDREPEAT = 330,              /* tENDREPEAT  */
-    tENDTELL = 331,                /* tENDTELL  */
-    tASSERTERROR = 332             /* tASSERTERROR  */
+    tFLOAT = 261,                  /* tFLOAT  */
+    tVARID = 262,                  /* tVARID  */
+    tSTRING = 263,                 /* tSTRING  */
+    tSYMBOL = 264,                 /* tSYMBOL  */
+    tENDCLAUSE = 265,              /* tENDCLAUSE  */
+    tCAST = 266,                   /* tCAST  */
+    tFIELD = 267,                  /* tFIELD  */
+    tSCRIPT = 268,                 /* tSCRIPT  */
+    tWINDOW = 269,                 /* tWINDOW  */
+    tDOWN = 270,                   /* tDOWN  */
+    tELSE = 271,                   /* tELSE  */
+    tELSIF = 272,                  /* tELSIF  */
+    tEXIT = 273,                   /* tEXIT  */
+    tFRAME = 274,                  /* tFRAME  */
+    tGLOBAL = 275,                 /* tGLOBAL  */
+    tGO = 276,                     /* tGO  */
+    tIF = 277,                     /* tIF  */
+    tIN = 278,                     /* tIN  */
+    tINTO = 279,                   /* tINTO  */
+    tMACRO = 280,                  /* tMACRO  */
+    tMOVIE = 281,                  /* tMOVIE  */
+    tNEXT = 282,                   /* tNEXT  */
+    tOF = 283,                     /* tOF  */
+    tPREVIOUS = 284,               /* tPREVIOUS  */
+    tPUT = 285,                    /* tPUT  */
+    tREPEAT = 286,                 /* tREPEAT  */
+    tSET = 287,                    /* tSET  */
+    tTHEN = 288,                   /* tTHEN  */
+    tTO = 289,                     /* tTO  */
+    tWHEN = 290,                   /* tWHEN  */
+    tWITH = 291,                   /* tWITH  */
+    tWHILE = 292,                  /* tWHILE  */
+    tFACTORY = 293,                /* tFACTORY  */
+    tOPEN = 294,                   /* tOPEN  */
+    tPLAY = 295,                   /* tPLAY  */
+    tINSTANCE = 296,               /* tINSTANCE  */
+    tGE = 297,                     /* tGE  */
+    tLE = 298,                     /* tLE  */
+    tEQ = 299,                     /* tEQ  */
+    tNEQ = 300,                    /* tNEQ  */
+    tAND = 301,                    /* tAND  */
+    tOR = 302,                     /* tOR  */
+    tNOT = 303,                    /* tNOT  */
+    tMOD = 304,                    /* tMOD  */
+    tAFTER = 305,                  /* tAFTER  */
+    tBEFORE = 306,                 /* tBEFORE  */
+    tCONCAT = 307,                 /* tCONCAT  */
+    tCONTAINS = 308,               /* tCONTAINS  */
+    tSTARTS = 309,                 /* tSTARTS  */
+    tCHAR = 310,                   /* tCHAR  */
+    tCHARS = 311,                  /* tCHARS  */
+    tITEM = 312,                   /* tITEM  */
+    tITEMS = 313,                  /* tITEMS  */
+    tLINE = 314,                   /* tLINE  */
+    tLINES = 315,                  /* tLINES  */
+    tWORD = 316,                   /* tWORD  */
+    tWORDS = 317,                  /* tWORDS  */
+    tABBREVIATED = 318,            /* tABBREVIATED  */
+    tABBREV = 319,                 /* tABBREV  */
+    tABBR = 320,                   /* tABBR  */
+    tLONG = 321,                   /* tLONG  */
+    tSHORT = 322,                  /* tSHORT  */
+    tCASTMEMBERS = 323,            /* tCASTMEMBERS  */
+    tDATE = 324,                   /* tDATE  */
+    tLAST = 325,                   /* tLAST  */
+    tMENU = 326,                   /* tMENU  */
+    tMENUITEM = 327,               /* tMENUITEM  */
+    tMENUITEMS = 328,              /* tMENUITEMS  */
+    tNUMBER = 329,                 /* tNUMBER  */
+    tTHE = 330,                    /* tTHE  */
+    tTIME = 331,                   /* tTIME  */
+    tSOUND = 332,                  /* tSOUND  */
+    tSPRITE = 333,                 /* tSPRITE  */
+    tINTERSECTS = 334,             /* tINTERSECTS  */
+    tWITHIN = 335,                 /* tWITHIN  */
+    tTELL = 336,                   /* tTELL  */
+    tPROPERTY = 337,               /* tPROPERTY  */
+    tON = 338,                     /* tON  */
+    tMETHOD = 339,                 /* tMETHOD  */
+    tENDIF = 340,                  /* tENDIF  */
+    tENDREPEAT = 341,              /* tENDREPEAT  */
+    tENDTELL = 342,                /* tENDTELL  */
+    tASSERTERROR = 343             /* tASSERTERROR  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -153,7 +164,7 @@ union YYSTYPE
 	Director::Node *node;
 	Director::NodeList *nodelist;
 
-#line 157 "engines/director/lingo/lingo-gr.h"
+#line 168 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 36cf2a5888..38ccf713b7 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -128,19 +128,19 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 
 %token tLEXERROR
 %token<i> tINT
-%token<e> tTHEENTITY tTHEENTITYWITHID tTHEMENUITEMENTITY tTHEMENUITEMSENTITY
 %token<f> tFLOAT
-%token<s> tTHEFUNC tTHEFUNCINOF
 %token<s> tVARID tSTRING tSYMBOL
-%token<s> tENDCLAUSE tPLAYACCEL
-%token<objectprop> tTHEOBJECTPROP
+%token<s> tENDCLAUSE
 %token tCAST tFIELD tSCRIPT tWINDOW
 %token tDOWN tELSE tELSIF tEXIT tFRAME tGLOBAL tGO tIF tIN tINTO tMACRO
 %token tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
 %token tWITH tWHILE tFACTORY tOPEN tPLAY tINSTANCE
 %token tGE tLE tEQ tNEQ tAND tOR tNOT tMOD
-%token tAFTER tBEFORE tCONCAT tCONTAINS tSTARTS tCHAR tITEM tLINE tWORD
-%token tSPRITE tINTERSECTS tWITHIN tTELL tPROPERTY
+%token tAFTER tBEFORE tCONCAT tCONTAINS tSTARTS
+%token tCHAR tCHARS tITEM tITEMS tLINE tLINES tWORD tWORDS
+%token tABBREVIATED tABBREV tABBR tLONG tSHORT
+%token tCASTMEMBERS tDATE tLAST tMENU tMENUITEM tMENUITEMS tNUMBER tTHE tTIME
+%token tSOUND tSPRITE tINTERSECTS tWITHIN tTELL tPROPERTY
 %token tON tMETHOD tENDIF tENDREPEAT tENDTELL
 %token tASSERTERROR
 
@@ -289,32 +289,47 @@ endargdef:	/* nothing */
 // GENERIC VAR STUFF
 
 ID: tVARID
+	| tABBREVIATED	{ $$ = new Common::String("abbreviated"); }
+	| tABBREV		{ $$ = new Common::String("abbrev"); }
+	| tABBR			{ $$ = new Common::String("abbr"); }
 	| tAFTER		{ $$ = new Common::String("after"); }
 	| tAND			{ $$ = new Common::String("and"); }
 	| tBEFORE		{ $$ = new Common::String("before"); }
 	| tCAST			{ $$ = new Common::String("cast"); }
 	| tCHAR			{ $$ = new Common::String("char"); }
+	| tCHARS		{ $$ = new Common::String("chars"); }
+	| tCONTAINS		{ $$ = new Common::String("contains"); }
+	| tDATE			{ $$ = new Common::String("date"); }
 	| tDOWN			{ $$ = new Common::String("down"); }
-	// tENDCLAUSE
 	// tELSE
+	// tENDCLAUSE
 	// | tEXIT			{ $$ = new Common::String("exit"); }
 	// tFACTORY
 	| tFIELD		{ $$ = new Common::String("field"); }
 	| tFRAME		{ $$ = new Common::String("frame"); }
 	// | tGLOBAL		{ $$ = new Common::String("global"); }
+	// tGO
 	// tIF
 	| tIN			{ $$ = new Common::String("in"); }
 	// | tINSTANCE		{ $$ = new Common::String("instance"); }
 	| tINTERSECTS	{ $$ = new Common::String("intersects"); }
 	| tINTO			{ $$ = new Common::String("into"); }
 	| tITEM			{ $$ = new Common::String("item"); }
+	| tITEMS		{ $$ = new Common::String("items"); }
+	| tLAST			{ $$ = new Common::String("last"); }
 	| tLINE			{ $$ = new Common::String("line"); }
+	| tLINES		{ $$ = new Common::String("lines"); }
+	| tLONG			{ $$ = new Common::String("long"); }
 	// | tMACRO		{ $$ = new Common::String("macro"); }
+	| tMENU			{ $$ = new Common::String("menu"); }
+	| tMENUITEM		{ $$ = new Common::String("menuItem"); }
+	| tMENUITEMS	{ $$ = new Common::String("menuItems"); }
 	// | tMETHOD		{ $$ = new Common::String("method"); }
 	| tMOD			{ $$ = new Common::String("mod"); }
 	| tMOVIE		{ $$ = new Common::String("movie"); }
 	| tNEXT			{ $$ = new Common::String("next"); }
 	| tNOT			{ $$ = new Common::String("not"); }
+	| tNUMBER		{ $$ = new Common::String("number"); }
 	| tOF			{ $$ = new Common::String("of"); }
 	// | tON			{ $$ = new Common::String("on"); }
 	| tOPEN			{ $$ = new Common::String("open"); }
@@ -325,19 +340,24 @@ ID: tVARID
 	// | tPUT			{ $$ = new Common::String("put"); }
 	| tREPEAT		{ $$ = new Common::String("repeat"); }
 	| tSCRIPT		{ $$ = new Common::String("script"); }
+	| tASSERTERROR	{ $$ = new Common::String("scummvmAssertError"); }
 	| tSET			{ $$ = new Common::String("set"); }
+	| tSHORT		{ $$ = new Common::String("short"); }
+	| tSOUND		{ $$ = new Common::String("sound"); }
+	| tSPRITE		{ $$ = new Common::String("sprite"); }
 	| tSTARTS		{ $$ = new Common::String("starts"); }
 	| tTELL			{ $$ = new Common::String("tell"); }
+	// tTHE
 	// tTHEN
+	| tTIME			{ $$ = new Common::String("time"); }
 	| tTO			{ $$ = new Common::String("to"); }
-	| tASSERTERROR	{ $$ = new Common::String("scummvmAssertError"); }
-	| tSPRITE		{ $$ = new Common::String("sprite"); }
 	// | tWHEN			{ $$ = new Common::String("when"); }
 	| tWHILE		{ $$ = new Common::String("while"); }
 	| tWINDOW		{ $$ = new Common::String("window"); }
 	| tWITH			{ $$ = new Common::String("with"); }
 	| tWITHIN		{ $$ = new Common::String("within"); }
 	| tWORD			{ $$ = new Common::String("word"); }
+	| tWORDS		{ $$ = new Common::String("words"); }
 	;
 
 idlist: /* empty */					{ $$ = new IDList; }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 01af757442..b90700fd60 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -355,8 +355,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 71
-#define YY_END_OF_BUFFER 72
+#define YY_NUM_RULES 84
+#define YY_END_OF_BUFFER 85
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -364,42 +364,41 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[310] =
+static const flex_int16_t yy_accept[295] =
     {   0,
-        0,    0,   72,   70,    1,   68,   68,   70,   70,   67,
-       67,   66,   67,   63,   67,   64,   64,   64,   64,   64,
-       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
-       64,   64,   64,    1,   64,    1,   68,    0,   69,    2,
-       62,   65,   66,   61,   59,   60,   64,   64,   64,   64,
-       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
-       64,   10,   22,   64,   64,   64,   64,   64,   64,   64,
-       31,   32,   64,   34,   64,   64,   64,   64,   64,   64,
-       64,   64,   64,   64,   50,   64,   64,   64,    1,    0,
-       64,    2,   65,   64,    4,   64,   64,   64,   64,   64,
-
-       64,   12,   64,   64,   64,   64,   18,   64,   64,   64,
-       64,   64,   64,   27,   64,   64,   30,   64,   64,   64,
-       64,   38,   64,   64,   64,   41,   64,   64,   64,   64,
-       64,   64,   64,   64,   64,    0,   64,   64,   64,    6,
-        7,   64,    9,   11,    0,   14,   64,   64,   64,    0,
-       64,   64,   21,   23,   24,   64,   64,   64,   29,   33,
-       35,   64,   64,   64,   64,   64,   64,   64,   43,    0,
-       49,   55,   64,   64,   53,   58,    0,   64,    3,   64,
-       64,   12,   15,   16,   64,   18,   64,   64,   25,   64,
-       28,   64,   64,   64,   64,   64,   64,   64,   48,   48,
-
-       48,   56,   64,   64,    0,   64,    5,   64,   12,   17,
-       64,   64,   26,   64,   64,   39,   40,   64,   52,   42,
-        0,   48,   48,   57,   54,    0,   64,   64,   64,   64,
-       64,   64,   64,    0,    0,    0,   48,   48,    0,   13,
-        8,   19,   64,   36,   37,   64,    0,    0,    0,   48,
-       48,   13,   64,   64,    0,    0,    0,    0,   48,   20,
-       64,   47,   46,   47,    0,    0,    0,    0,   48,   64,
-       46,    0,    0,    0,    0,    0,   64,    0,    0,    0,
-        0,    0,    0,   64,    0,    0,   47,   46,   46,   47,
-        0,   64,   45,   46,   46,    0,   64,   46,   64,    0,
-
-       46,   64,    0,    0,   51,    0,    0,   44,    0
+        0,    0,   85,   83,    1,   81,   81,   83,   83,   80,
+       80,   79,   80,   76,   80,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,    1,   77,    1,   81,    0,   82,    2,
+       75,   78,   79,   74,   72,   73,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   23,   27,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   44,   45,   77,   47,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   64,   77,   77,   77,    1,    0,   77,    2,
+
+       78,   77,   77,    7,   77,   77,   77,   77,   77,   77,
+       77,   16,   77,   77,   77,   77,   22,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   39,   77,   77,   42,
+       77,   77,   77,   77,   77,   51,   77,   77,   77,   55,
+       77,   77,   77,   77,   77,   61,   77,   77,   77,   77,
+       77,   77,    0,   77,    5,   77,   77,    9,   10,   77,
+       13,   14,   15,    0,   17,   77,   77,   77,    0,   77,
+       77,   26,   28,   30,   31,   33,   77,   35,   77,   77,
+       41,   77,   46,   48,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   60,   62,   63,   65,   77,   77,   68,
+
+       70,    0,   77,   77,    6,   77,   11,   77,   16,   19,
+       20,   77,   22,   77,   77,   29,   32,   34,   77,   77,
+       40,   77,   77,   77,   77,   77,   77,   56,   57,   77,
+       77,   66,   77,   77,   71,    0,   77,    4,    8,   77,
+       16,   21,   77,   77,   77,   38,   43,   77,   77,   52,
+       53,   77,   58,   59,   67,   69,    0,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,    0,   18,   77,   12,
+       24,   77,   36,   49,   50,   77,   18,   77,   77,   37,
+       77,   77,   25,   77,    3,   77,   77,   77,   77,   77,
+       77,   77,   54,    0
+
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -413,11 +412,11 @@ static const YY_CHAR yy_ec[256] =
        12,   13,    1,    1,   14,   15,   16,   17,   18,   19,
        20,   21,   22,   23,   23,   24,   25,   26,   27,   28,
        23,   29,   30,   31,   32,   33,   34,   35,   36,   23,
-        7,    1,    7,    7,   37,    1,   38,   39,   40,   41,
+        7,    1,    7,    7,   23,    1,   37,   38,   39,   40,
 
-       42,   43,   44,   45,   46,   23,   23,   47,   48,   49,
-       50,   51,   23,   52,   53,   54,   55,   56,   57,   58,
-       59,   23,    1,    1,    1,    1,    1,    1,    1,    1,
+       41,   42,   43,   44,   45,   23,   23,   46,   47,   48,
+       49,   50,   23,   51,   52,   53,   54,   55,   56,   57,
+       58,   23,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -434,268 +433,244 @@ static const YY_CHAR yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static const YY_CHAR yy_meta[60] =
+static const YY_CHAR yy_meta[59] =
     {   0,
         1,    2,    3,    3,    1,    1,    1,    1,    1,    4,
         1,    1,    1,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    6,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5
     } ;
 
-static const flex_int16_t yy_base[322] =
+static const flex_int16_t yy_base[301] =
     {   0,
-        0,   58,  618,  698,   59,  698,  698,  612,    0,  698,
-      607,   55,   54,  698,  600,   49,   51,   57,   46,   50,
-       57,   63,    0,   63,   58,   97,   87,   97,   98,  100,
-      136,  138,  136,  117,  155,  129,  698,  603,  698,    0,
-      698,  594,  134,  698,  698,  698,    0,   97,  121,  136,
-      136,  147,  142,  137,  142,  156,  152,  157,  178,  169,
-      601,    0,  172,  182,  178,  189,  177,  189,  174,  179,
-        0,    0,  193,    0,  198,  196,  186,  190,  205,  189,
-      192,  201,  204,  224,    0,  230,  224,  218,  260,  239,
-      240,    0,  576,  240,    0,  234,  234,  238,  237,  243,
-
-      241,  544,  240,  250,  250,  266,  283,  255,  269,  264,
-      275,  266,  278,    0,  278,  271,    0,  278,  270,  274,
-      280,    0,  292,  293,  288,    0,  294,  291,  297,  320,
-      300,  304,  315,  312,  318,  322,  310,  313,  316,    0,
-        0,  333,    0,    0,  532,    0,  331,  332,  338,  327,
-      341,  329,    0,    0,    0,  333,  334,  345,    0,    0,
-        0,  344,  349,  356,  345,  350,  347,  349,    0,  380,
-        0,    0,  367,  361,  364,    0,  358,  365,    0,  375,
-      373,    0,    0,    0,  373,  698,  373,  370,    0,  385,
-        0,  378,  378,  377,  382,  381,  398,  388,  531,  419,
-
-      422,    0,  391,  406,  408,  409,    0,  413,    0,    0,
-      426,  425,    0,  413,  415,    0,    0,  422,    0,    0,
-      432,  442,  449,    0,    0,  423,  417,  426,  442,  448,
-      441,  442,  451,  466,  462,  461,  483,  485,  454,    0,
-        0,    0,  461,    0,    0,  463,  465,  489,  473,  448,
-      500,  698,  469,  473,  488,  351,  490,  508,  507,    0,
-      499,  698,    0,  698,  299,  509,  510,  518,  252,  498,
-        0,  529,  526,  247,  536,  546,  512,  518,  526,  550,
-      563,  552,  552,  556,  211,  168,  139,  529,  562,  132,
-       98,  531,   89,   86,   81,  570,  547,  587,  561,  599,
-
-      600,  562,  567,  563,    0,   79,   70,   68,  698,  649,
-      651,  654,  657,  662,  667,  669,  674,  679,  681,  686,
-      691
+        0,   57,  167,  615,   58,  615,  615,  158,    0,  615,
+      152,   54,   53,  615,  119,   52,   50,   58,   55,   62,
+       58,   69,    0,   86,   84,  108,  105,  122,  123,   83,
+      162,  164,  173,  195,  202,   71,  615,  122,  615,    0,
+      615,  115,   74,  615,  615,  615,    0,   98,   85,  103,
+      111,  110,  128,  118,  157,  170,  177,  139,  136,  143,
+      182,  193,  112,    0,  197,  184,  191,  197,  204,  216,
+      209,  221,  199,  205,  216,    0,    0,  226,    0,  232,
+      233,  217,  231,  236,  233,  239,  239,  243,  259,  251,
+      259,  254,    0,  262,  273,  254,  306,  275,  275,    0,
+
+       79,  266,  274,    0,  271,  271,  277,  280,  295,  290,
+      300,   79,  291,  299,  302,  304,  327,  299,  313,  309,
+      304,  314,  317,  310,  311,  325,    0,  325,  319,    0,
+      336,  327,  323,  330,  336,    0,  348,  345,  346,    0,
+      344,  350,  346,  348,  354,  353,  364,  358,  363,  371,
+      371,  377,  380,  371,  379,  374,  375,    0,  377,  394,
+        0,    0,    0,   75,    0,  393,  394,  399,  389,  400,
+      389,    0,  391,    0,  392,    0,  396,  405,  403,  410,
+        0,  414,    0,    0,  412,  421,  427,  418,  422,  417,
+      425,  418,  422,    0,    0,    0,    0,  436,  429,  436,
+
+      430,  430,  436,  433,    0,  449,    0,  450,    0,    0,
+        0,  450,  615,  450,  449,    0,    0,    0,  449,  467,
+        0,  457,  460,  460,  460,  461,  460,    0,    0,  476,
+      467,    0,  465,  474,    0,  476,  475,  483,    0,  484,
+        0,    0,  490,  494,  498,    0,    0,  486,  489,    0,
+        0,  498,    0,    0,    0,    0,  495,  491,  516,  503,
+      513,  518,  511,  507,  502,  527,  507,    0,  513,    0,
+        0,  516,  518,    0,    0,  520,  615,  533,  526,    0,
+      531,  535,    0,  544,    0,  538,  537,  545,  542,  544,
+      549,  548,    0,  615,  599,   65,  601,  603,  607,  609
+
     } ;
 
-static const flex_int16_t yy_def[322] =
+static const flex_int16_t yy_def[301] =
     {   0,
-      309,    1,  309,  309,  309,  309,  309,  310,  311,  309,
-      309,  309,  309,  309,  309,  312,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-      312,  312,  312,  309,  312,  309,  309,  310,  309,  313,
-      309,  309,  309,  309,  309,  309,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  309,  309,
-      312,  313,  309,  312,  312,  312,  312,  312,  312,  312,
-
-      312,  312,  312,  312,  312,  312,  309,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  309,  312,  312,  312,  312,
-      312,  312,  312,  312,  314,  312,  312,  312,  312,  309,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  315,
-      312,  312,  312,  312,  312,  312,  309,  312,  312,  312,
-      312,  316,  312,  312,  312,  309,  312,  312,  312,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  315,  315,
-
-      315,  312,  312,  312,  309,  312,  312,  312,  316,  312,
-      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
-      309,  315,  315,  312,  312,  309,  312,  312,  312,  312,
-      312,  312,  312,  309,  309,  309,  315,  315,  309,  312,
-      312,  312,  312,  312,  312,  312,  309,  309,  309,  315,
-      315,  309,  312,  312,  309,  317,  309,  318,  315,  312,
-      312,  309,  319,  309,  318,  318,  318,  318,  315,  312,
-      319,  309,  318,  318,  318,  309,  312,  309,  309,  318,
-      317,  318,  309,  312,  309,  309,  318,  319,  319,  318,
-      309,  312,  309,  319,  319,  320,  312,  321,  312,  309,
-
-      321,  312,  309,  309,  312,  309,  309,  309,    0,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309
+      294,    1,  294,  294,  294,  294,  294,  295,  296,  294,
+      294,  294,  294,  294,  294,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  294,  297,  294,  294,  295,  294,  298,
+      294,  294,  294,  294,  294,  294,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  294,  294,  297,  298,
+
+      294,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  294,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  294,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  299,  297,  297,  297,  297,  294,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+
+      297,  294,  297,  297,  297,  297,  297,  297,  300,  297,
+      297,  297,  294,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  294,  297,  297,  297,  297,
+      300,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  294,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  294,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  294,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,    0,  294,  294,  294,  294,  294,  294
+
     } ;
 
-static const flex_int16_t yy_nxt[758] =
+static const flex_int16_t yy_nxt[674] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,    4,   12,
        13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
        23,   24,   23,   25,   26,   27,   28,   29,   30,   31,
-       32,   23,   23,   33,   23,   23,   23,   16,   17,   18,
-       19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
-       29,   30,   31,   32,   23,   23,   33,   23,   23,   34,
-       36,   37,   37,   42,   43,   44,   45,   48,   50,  308,
-       51,  308,   54,   55,   49,   56,   35,   52,   58,   65,
-      308,   62,  293,   53,   57,   59,   60,  293,   63,   61,
-      293,   48,   50,   64,   51,   54,   55,   49,   56,  296,
-
-       35,   52,   58,   65,   69,   62,   53,   57,   59,   60,
-       66,   63,   61,   70,   67,   71,   64,   78,   89,   37,
-       37,   75,   72,   68,   73,   74,   76,   94,   69,   77,
-       36,   37,   37,  272,   66,   90,   70,   95,   67,   71,
-      272,   78,   42,   43,   75,   72,   68,   73,   74,   76,
-       94,   79,   77,   80,   96,   83,   86,   87,   84,   90,
-       98,   95,   88,   81,   85,   97,   82,   99,   91,  293,
-      100,  101,  102,  103,  104,   79,   58,   80,   96,   83,
-       86,   87,   84,   59,   98,   88,   81,   85,   97,   82,
-       99,  105,   91,  100,  101,  106,  102,  103,  104,  110,
-
-       58,  108,  109,  111,  112,  114,   59,  113,  116,  117,
-      118,  119,  293,  120,  128,  105,  122,  123,  106,  126,
-      127,  115,  121,  110,  108,  109,  111,  129,  112,  114,
-      113,  116,  117,  124,  118,  119,  125,  120,  128,  122,
-      123,  130,  126,  127,  115,  121,  135,  131,  281,  133,
-      129,  132,  136,  276,  134,  137,  124,  138,  144,  125,
-      139,   89,   37,   37,  140,  130,  141,  142,  143,  135,
-      146,  131,  133,  147,  148,  132,  136,  134,   90,  137,
-      149,  138,  144,  139,  107,  151,  152,  140,  154,  141,
-      142,  143,  155,  146,  156,  153,  147,  148,  157,  158,
-
-      272,  159,   90,  160,  149,  161,  162,  163,  151,  164,
-      152,  154,  166,  150,  165,  167,  155,  156,  153,  168,
-      169,  170,  157,  158,  159,  172,  160,  173,  161,  162,
-      163,  174,  175,  164,  176,  166,  150,  177,  165,  167,
-      178,  179,  168,  169,  180,  171,  181,  183,  172,  184,
-      173,  185,  256,  186,  187,  174,  175,  188,  176,  189,
-      190,  177,  191,  178,  179,  192,  193,  180,  171,  194,
-      181,  183,  195,  184,  196,  185,  186,  197,  187,  198,
-      188,  170,  189,  190,  202,  204,  191,  203,  205,  192,
-      193,  206,  207,  194,  208,  195,  210,  196,  211,  212,
-
-      197,  213,  198,  200,  214,  201,  215,  216,  202,  204,
-      203,  205,  217,  218,  206,  219,  207,  220,  208,  210,
-      221,  211,  212,  221,  224,  213,  200,  214,  201,  215,
-      216,  225,  222,  221,  226,  217,  218,  227,  228,  219,
-      220,  229,  230,  221,  231,  232,  233,  224,  234,  258,
-      221,  239,  240,  223,  225,  241,  222,  226,  235,  242,
-      227,  228,  236,  243,  246,  229,  230,  231,  232,  233,
-      244,  237,  234,  238,  239,  240,  223,  245,  241,  247,
-      248,  235,  249,  242,  221,  236,  221,  243,  246,  252,
-      256,  253,  254,  244,  237,  255,  238,  257,  260,  251,
-
-      245,  221,  261,  247,  248,  262,  249,  264,  221,  258,
-      272,  272,  252,  250,  253,  254,  270,  259,  255,  272,
-      257,  260,  273,  251,  266,  261,  277,  272,  274,  262,
-      272,  264,  221,  145,  267,  269,  250,  272,  268,  275,
-      270,  259,  284,  285,  286,  145,  273,  276,  266,  277,
-      278,  272,  274,  272,  294,  279,  280,  267,  269,  297,
-      282,  268,  234,  275,  281,  284,  285,  287,  286,  290,
-      291,  296,  283,  292,  278,  299,  236,  294,  279,  280,
-      295,  307,  297,  282,  288,   93,  234,  302,  300,  289,
-      305,  287,  306,  290,  291,  283,  271,  292,  299,  236,
-
-      300,  300,  107,   93,  295,  307,  263,   39,  288,  271,
-      302,   46,  289,  305,   41,  306,   39,  309,  309,  309,
-      303,  309,  309,  271,  309,  304,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  271,  309,  309,  309,
-      309,  309,  309,  309,  303,  309,  309,  309,  304,   38,
-       38,  309,   38,   38,   38,   40,   40,   47,   47,   47,
-       92,   92,   92,  182,  309,  309,  182,  182,  199,  309,
-      309,  199,  209,  209,  209,  263,  309,  309,  263,  263,
-      265,  309,  309,  265,  271,  271,  271,  298,  309,  309,
-      298,  298,  301,  309,  301,  301,  301,    3,  309,  309,
-
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309
+       32,   23,   23,   33,   23,   23,   16,   17,   18,   19,
+       20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
+       30,   31,   32,   23,   23,   33,   23,   23,   34,   36,
+       37,   37,   42,   43,   44,   45,   48,   51,   55,   40,
+       49,   52,   36,   37,   37,   35,  164,   50,   53,   60,
+      164,   56,   42,   43,   54,   57,   61,   58,  101,   48,
+       51,   55,   62,   49,   52,   63,   59,   67,   35,   50,
+
+       83,   53,   60,   56,   64,   68,   54,   57,   61,   58,
+       69,   65,  102,  117,   62,  103,   66,   63,   59,  104,
+       67,   70,   73,   83,  101,   71,   39,   64,   68,  105,
+       46,   74,   69,   65,   72,  102,   75,  103,   66,  106,
+       76,  107,  104,  108,   70,   73,   80,   77,   71,   78,
+       79,   81,  105,   74,   82,  112,   72,  113,   75,   41,
+      114,  106,   39,   76,  107,  108,  294,  294,   80,   77,
+      294,   78,   79,   81,  294,  294,   82,   84,  112,   85,
+      113,   90,   86,  114,   91,   92,  294,  109,   87,   88,
+       93,  294,   89,   94,   95,  115,   97,   37,   37,   96,
+
+       84,  120,   85,  110,   90,   86,  111,   91,   92,  109,
+       87,   88,   93,   98,   89,   99,   94,   95,  115,  116,
+      121,   96,  122,   60,  120,  110,  118,  119,  111,  123,
+       61,  124,  294,  129,  125,  130,   98,  127,   99,  126,
+      131,  116,  121,  132,  122,  133,   60,  136,  118,  119,
+      134,  123,   61,  128,  124,  129,  125,  130,  137,  135,
+      127,  126,  131,  140,  138,  141,  132,  139,  133,  136,
+      142,  143,  144,  134,  145,  128,  146,  294,  147,  148,
+      137,  135,  152,  149,  294,  140,  138,  141,  153,  139,
+      154,  156,  142,  143,  155,  144,  145,  157,  150,  146,
+
+      147,  158,  148,  151,  152,  159,  149,   97,   37,   37,
+      160,  153,  161,  154,  156,  162,  155,  163,  168,  157,
+      150,  165,  166,  158,   98,  151,  167,  159,  117,  170,
+      171,  175,  160,  173,  174,  161,  176,  162,  177,  172,
+      163,  168,  178,  165,  166,  179,  180,   98,  167,  181,
+      182,  170,  183,  171,  175,  173,  174,  169,  184,  176,
+      177,  172,  185,  186,  178,  187,  188,  192,  179,  180,
+      189,  181,  190,  182,  183,  191,  193,  194,  195,  169,
+      184,  196,  294,  197,  185,  186,  198,  199,  187,  188,
+      192,  200,  189,  201,  190,  202,  204,  191,  193,  194,
+
+      195,  203,  205,  206,  196,  197,  207,  208,  198,  210,
+      199,  211,  212,  214,  200,  213,  201,  215,  202,  204,
+      216,  217,  218,  203,  205,  206,  219,  221,  207,  220,
+      208,  222,  210,  223,  211,  212,  214,  213,  224,  215,
+      225,  229,  216,  217,  218,  226,  227,  228,  230,  219,
+      221,  220,  231,  232,  222,  233,  223,  234,  294,  235,
+      236,  224,  237,  225,  229,  238,  239,  226,  227,  228,
+      230,  240,  294,  242,  231,  243,  232,  233,  244,  245,
+      234,  235,  236,  246,  237,  247,  248,  238,  249,  239,
+      250,  251,  252,  253,  240,  242,  254,  243,  255,  256,
+
+      244,  245,  257,  258,  259,  261,  246,  247,  248,  260,
+      249,  262,  250,  251,  252,  263,  253,  264,  254,  265,
+      255,  256,  266,  267,  257,  258,  268,  259,  261,  269,
+      271,  260,  270,  272,  262,  273,  274,  275,  263,  264,
+      276,  265,  277,  278,  266,  267,  279,  280,  268,  281,
+      282,  285,  269,  271,  270,  283,  272,  273,  274,  275,
+      284,  286,  289,  276,  277,  278,  287,  288,  279,  280,
+      290,  281,  291,  282,  285,  292,  293,  283,  294,  294,
+      294,  294,  284,  294,  286,  289,  294,  294,  287,  288,
+      294,  294,  290,  294,  291,  294,  294,  292,  293,   38,
+
+       38,  294,   38,   38,   47,   47,  100,  100,  209,  294,
+      294,  209,  241,  241,    3,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294
     } ;
 
-static const flex_int16_t yy_chk[758] =
+static const flex_int16_t yy_chk[674] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
-        5,    5,    5,   12,   12,   13,   13,   16,   17,  308,
-       18,  307,   19,   20,   16,   20,    2,   18,   21,   25,
-      306,   24,  295,   18,   20,   21,   22,  294,   24,   22,
-      293,   16,   17,   24,   18,   19,   20,   16,   20,  291,
-
-        2,   18,   21,   25,   27,   24,   18,   20,   21,   22,
-       26,   24,   22,   27,   26,   28,   24,   30,   34,   34,
-       34,   29,   28,   26,   28,   28,   29,   48,   27,   29,
-       36,   36,   36,  290,   26,   34,   27,   49,   26,   28,
-      287,   30,   43,   43,   29,   28,   26,   28,   28,   29,
-       48,   31,   29,   31,   50,   32,   33,   33,   32,   34,
-       52,   49,   33,   31,   32,   51,   31,   53,   35,  286,
-       54,   55,   56,   57,   58,   31,   35,   31,   50,   32,
-       33,   33,   32,   35,   52,   33,   31,   32,   51,   31,
-       53,   59,   35,   54,   55,   60,   56,   57,   58,   64,
-
-       35,   63,   63,   65,   66,   68,   35,   67,   69,   70,
-       73,   75,  285,   76,   82,   59,   77,   78,   60,   80,
-       81,   68,   76,   64,   63,   63,   65,   83,   66,   68,
-       67,   69,   70,   79,   73,   75,   79,   76,   82,   77,
-       78,   84,   80,   81,   68,   76,   88,   86,  274,   87,
-       83,   86,   90,  269,   87,   91,   79,   94,  101,   79,
-       96,   89,   89,   89,   97,   84,   98,   99,  100,   88,
-      103,   86,   87,  104,  105,   86,   90,   87,   89,   91,
-      106,   94,  101,   96,  107,  108,  109,   97,  110,   98,
-       99,  100,  111,  103,  112,  109,  104,  105,  113,  115,
-
-      265,  116,   89,  118,  106,  119,  120,  121,  108,  123,
-      109,  110,  125,  107,  124,  127,  111,  112,  109,  128,
-      129,  130,  113,  115,  116,  131,  118,  132,  119,  120,
-      121,  133,  134,  123,  135,  125,  107,  136,  124,  127,
-      137,  138,  128,  129,  139,  130,  142,  147,  131,  148,
-      132,  149,  256,  150,  151,  133,  134,  152,  135,  156,
-      157,  136,  158,  137,  138,  162,  163,  139,  130,  164,
-      142,  147,  165,  148,  166,  149,  150,  167,  151,  168,
-      152,  170,  156,  157,  173,  175,  158,  174,  177,  162,
-      163,  178,  180,  164,  181,  165,  185,  166,  187,  188,
-
-      167,  190,  168,  170,  192,  170,  193,  194,  173,  175,
-      174,  177,  195,  196,  178,  197,  180,  198,  181,  185,
-      200,  187,  188,  201,  203,  190,  170,  192,  170,  193,
-      194,  204,  200,  221,  205,  195,  196,  206,  208,  197,
-      198,  211,  212,  222,  214,  215,  218,  203,  221,  250,
-      223,  226,  227,  201,  204,  228,  200,  205,  221,  229,
-      206,  208,  221,  230,  233,  211,  212,  214,  215,  218,
-      231,  222,  221,  223,  226,  227,  201,  232,  228,  234,
-      235,  221,  236,  229,  237,  221,  238,  230,  233,  239,
-      248,  243,  246,  231,  222,  247,  223,  249,  253,  238,
-
-      232,  251,  254,  234,  235,  255,  236,  257,  259,  258,
-      266,  267,  239,  237,  243,  246,  261,  251,  247,  268,
-      249,  253,  266,  238,  258,  254,  270,  273,  267,  255,
-      272,  257,  199,  145,  258,  259,  237,  275,  258,  268,
-      261,  251,  277,  278,  279,  102,  266,  276,  258,  270,
-      272,  280,  267,  282,  288,  272,  273,  258,  259,  292,
-      275,  258,  276,  268,  281,  277,  278,  280,  279,  282,
-      283,  296,  276,  284,  272,  297,  276,  288,  272,  273,
-      289,  304,  292,  275,  281,   93,  276,  299,  298,  281,
-      302,  280,  303,  282,  283,  276,  298,  284,  297,  276,
-
-      300,  301,   61,   42,  289,  304,  296,   38,  281,  301,
-      299,   15,  281,  302,   11,  303,    8,    3,    0,    0,
-      300,    0,    0,  298,    0,  300,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  301,    0,    0,    0,
-        0,    0,    0,    0,  300,    0,    0,    0,  300,  310,
-      310,    0,  310,  310,  310,  311,  311,  312,  312,  312,
-      313,  313,  313,  314,    0,    0,  314,  314,  315,    0,
-        0,  315,  316,  316,  316,  317,    0,    0,  317,  317,
-      318,    0,    0,  318,  319,  319,  319,  320,    0,    0,
-      320,  320,  321,    0,  321,  321,  321,  309,  309,  309,
-
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    5,
+        5,    5,   12,   12,   13,   13,   16,   17,   19,  296,
+       16,   18,   36,   36,   36,    2,  164,   16,   18,   21,
+      112,   19,   43,   43,   18,   20,   21,   20,  101,   16,
+       17,   19,   22,   16,   18,   22,   20,   25,    2,   16,
+
+       30,   18,   21,   19,   24,   25,   18,   20,   21,   20,
+       25,   24,   48,   63,   22,   49,   24,   22,   20,   50,
+       25,   26,   27,   30,   42,   26,   38,   24,   25,   51,
+       15,   27,   25,   24,   26,   48,   27,   49,   24,   52,
+       28,   53,   50,   54,   26,   27,   29,   28,   26,   28,
+       28,   29,   51,   27,   29,   58,   26,   59,   27,   11,
+       60,   52,    8,   28,   53,   54,    3,    0,   29,   28,
+        0,   28,   28,   29,    0,    0,   29,   31,   58,   31,
+       59,   32,   31,   60,   32,   32,    0,   55,   31,   31,
+       32,    0,   31,   33,   33,   61,   34,   34,   34,   33,
+
+       31,   66,   31,   56,   32,   31,   57,   32,   32,   55,
+       31,   31,   32,   34,   31,   35,   33,   33,   61,   62,
+       67,   33,   68,   35,   66,   56,   65,   65,   57,   69,
+       35,   70,    0,   73,   71,   74,   34,   72,   35,   71,
+       75,   62,   67,   78,   68,   80,   35,   82,   65,   65,
+       81,   69,   35,   72,   70,   73,   71,   74,   83,   81,
+       72,   71,   75,   85,   84,   86,   78,   84,   80,   82,
+       87,   88,   89,   81,   90,   72,   91,    0,   92,   94,
+       83,   81,   96,   94,    0,   85,   84,   86,   98,   84,
+       99,  103,   87,   88,  102,   89,   90,  105,   95,   91,
+
+       92,  106,   94,   95,   96,  107,   94,   97,   97,   97,
+      108,   98,  109,   99,  103,  110,  102,  111,  116,  105,
+       95,  113,  114,  106,   97,   95,  115,  107,  117,  118,
+      119,  122,  108,  120,  121,  109,  123,  110,  124,  119,
+      111,  116,  125,  113,  114,  126,  128,   97,  115,  129,
+      131,  118,  132,  119,  122,  120,  121,  117,  133,  123,
+      124,  119,  134,  135,  125,  137,  138,  143,  126,  128,
+      139,  129,  141,  131,  132,  142,  144,  145,  146,  117,
+      133,  147,    0,  148,  134,  135,  149,  150,  137,  138,
+      143,  151,  139,  152,  141,  153,  155,  142,  144,  145,
+
+      146,  154,  156,  157,  147,  148,  159,  160,  149,  166,
+      150,  167,  168,  170,  151,  169,  152,  171,  153,  155,
+      173,  175,  177,  154,  156,  157,  178,  180,  159,  179,
+      160,  182,  166,  185,  167,  168,  170,  169,  186,  171,
+      187,  191,  173,  175,  177,  188,  189,  190,  192,  178,
+      180,  179,  193,  198,  182,  199,  185,  200,    0,  201,
+      202,  186,  203,  187,  191,  204,  206,  188,  189,  190,
+      192,  208,    0,  212,  193,  214,  198,  199,  215,  219,
+      200,  201,  202,  220,  203,  222,  223,  204,  224,  206,
+      225,  226,  227,  230,  208,  212,  231,  214,  233,  234,
+
+      215,  219,  236,  237,  238,  243,  220,  222,  223,  240,
+      224,  244,  225,  226,  227,  245,  230,  248,  231,  249,
+      233,  234,  252,  257,  236,  237,  258,  238,  243,  259,
+      261,  240,  260,  262,  244,  263,  264,  265,  245,  248,
+      266,  249,  267,  269,  252,  257,  272,  273,  258,  276,
+      278,  282,  259,  261,  260,  279,  262,  263,  264,  265,
+      281,  284,  288,  266,  267,  269,  286,  287,  272,  273,
+      289,  276,  290,  278,  282,  291,  292,  279,    0,    0,
+        0,    0,  281,    0,  284,  288,    0,    0,  286,  287,
+        0,    0,  289,    0,  290,    0,    0,  291,  292,  295,
+
+      295,    0,  295,  295,  297,  297,  298,  298,  299,    0,
+        0,  299,  300,  300,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -806,8 +781,8 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-#line 809 "engines/director/lingo/lingo-lex.cpp"
-#line 810 "engines/director/lingo/lingo-lex.cpp"
+#line 784 "engines/director/lingo/lingo-lex.cpp"
+#line 785 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1030,7 +1005,7 @@ YY_DECL
 #line 111 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1033 "engines/director/lingo/lingo-lex.cpp"
+#line 1008 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1058,13 +1033,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 310 )
+				if ( yy_current_state >= 295 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 309 );
+		while ( yy_current_state != 294 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1097,51 +1072,71 @@ YY_RULE_SETUP
 case 3:
 YY_RULE_SETUP
 #line 117 "engines/director/lingo/lingo-lex.l"
-{ count(); return tAFTER; }		// D3
+{ count(); return tABBREVIATED; }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
 #line 118 "engines/director/lingo/lingo-lex.l"
-{ count(); return tAND; }
+{ count(); return tABBREV; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
 #line 119 "engines/director/lingo/lingo-lex.l"
-{ count(); return tBEFORE; }	// D3
+{ count(); return tABBR; }
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
 #line 120 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCAST; }
+{ count(); return tAFTER; }		// D3
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
 #line 121 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCHAR; }		// D3
+{ count(); return tAND; }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
 #line 122 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONTAINS; }
+{ count(); return tBEFORE; }	// D3
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
 #line 123 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDOWN; }
+{ count(); return tCAST; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
 #line 124 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIF; }
+{ count(); return tCHAR; }		// D3
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
 #line 125 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSE; }
+{ count(); return tCHARS; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 126 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCONTAINS; }
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 127 "engines/director/lingo/lingo-lex.l"
+{ count(); return tDATE; }
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 128 "engines/director/lingo/lingo-lex.l"
+{ count(); return tDOWN; }
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 129 "engines/director/lingo/lingo-lex.l"
+{ count(); return tELSE; }
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 130 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1161,449 +1156,309 @@ YY_RULE_SETUP
 		return tENDCLAUSE;
 	}
 	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 144 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFACTORY; }
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 145 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEXIT; }
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 146 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFIELD; }
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 147 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFRAME; }
-	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 148 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+{ count(); return tEXIT; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 149 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tFACTORY; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 150 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINSTANCE; }
+{ count(); return tFIELD; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 151 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS;}
+{ count(); return tFRAME; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 152 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 153 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIN; }
+{ count(); return tGO; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 154 "engines/director/lingo/lingo-lex.l"
-{ count(); return tITEM; }
+{ count(); return tIF; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 155 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLINE; }
+{ count(); return tINSTANCE; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 156 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO;; }
+{ count(); return tINTERSECTS;}
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 157 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMETHOD; }
+{ count(); return tINTO; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 158 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOD;}
+{ count(); return tIN; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 159 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tITEM; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 160 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tITEMS; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 161 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tLAST; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 162 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tLINE; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 163 "engines/director/lingo/lingo-lex.l"
-{ count(); return tON; }		// D3
+{ count(); return tLINES; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOPEN; }
+{ count(); return tLONG; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tMACRO; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAY; }
+{ count(); return tMENU; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 167 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); return tMENUITEM;}
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 168 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPROPERTY; }	// D4
+{ count(); return tMENUITEMS; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 169 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 170 "engines/director/lingo/lingo-lex.l"
-{ count(); return tREPEAT; }
+{ count(); return tMOD;}
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 171 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSCRIPT; }
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 172 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return tNEXT; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 173 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 174 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTELL; }
+{ count(); return tNUMBER; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 175 "engines/director/lingo/lingo-lex.l"
-{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2') ptr++;
-
-		ptr += 6; // skip 'number '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2') ptr++;
-
-		ptr += 3; // Skip 'of '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2') ptr++;
-
-		Common::String field;
-		while (*ptr != ' ' && *ptr != '\t' && *ptr != '\xC2')
-			field += *ptr++;
-
-		// the number of menuItems of menu <xx>
-		if (!field.compareToIgnoreCase("menuItems")) {
-			Common::String key = Common::String::format("%dnumber", kTheMenuItems);
-
-			yylval.e[0] = kTheMenuItems;
-			yylval.e[1] = g_lingo->_theEntityFields[key]->field;
-
-			return tTHEMENUITEMSENTITY;
-		}
-
-		yylval.s = new Common::String(Common::String::format("numberOf%s", field.c_str()));
-
-		if (g_lingo->_builtinFuncs.contains(*yylval.s)) {
-			return tTHEFUNCINOF;
-		} else {
-			warning("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
-			return tLEXERROR;
-		}
-	}
+{ count(); return tOF; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 210 "engines/director/lingo/lingo-lex.l"
-{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t') ptr++;
-
-		ptr += 5; // skip 'last '
-		while (*ptr == ' ' || *ptr == '\t') ptr++;
-
-		Common::String field;
-		while (*ptr != ' ' && *ptr != '\t')
-			field += *ptr++;
-
-		yylval.s = new Common::String(Common::String::format("last%sOf", field.c_str()));
-
-		if (g_lingo->_builtinFuncs.contains(*yylval.s)) {
-			return tTHEFUNCINOF;
-		} else {
-			warning("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
-			return tLEXERROR;
-		}
-	}
+#line 176 "engines/director/lingo/lingo-lex.l"
+{ count(); return tON; }		// D3
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 232 "engines/director/lingo/lingo-lex.l"
-{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		Common::String field;
-		while (*ptr != ' ' && *ptr != '\t' && *ptr != '\xC2')
-			field += *ptr++;
-
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		ptr += 3; // Skip 'of '
-
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		if (g_lingo->_theEntities.contains(ptr)) {
-			field = Common::String::format("%d%s", g_lingo->_theEntities[ptr]->entity, field.c_str());
-
-			if (!g_lingo->_theEntityFields.contains(field)) {
-				warning("LEXER: Unhandled the field %s of %s", field.c_str(), ptr);
-				return tLEXERROR;
-			}
-
-			if (g_lingo->_theEntityFields[field]->entity != g_lingo->_theEntities[ptr]->entity) {
-				warning("LEXER: Unsupported field '%s' for entity '%s'", field.c_str(), ptr);
-				return tLEXERROR;
-			}
-
-			yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
-			yylval.e[1] = g_lingo->_theEntityFields[field]->field;
-
-			// the <field> of menuItem <expr>" of menu <expr>
-			if (g_lingo->_theEntityFields[field]->entity == kTheMenuItem)
-				return tTHEMENUITEMENTITY;
-
-			if (g_lingo->_theEntities[ptr]->hasId)
-				return tTHEENTITYWITHID;
-			else
-				return tTHEENTITY;
-		} else {
-			if (g_director->getVersion() >= 400) {
-				Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
-
-				yylval.objectprop.obj = new Common::String(ptr);
-				yylval.objectprop.prop = new Common::String(field);
-
-				return tTHEOBJECTPROP;
-			} else if (g_lingo->_builtinFuncs.contains(field)) { // Let's hope they don't do it in D4+
-				if (g_lingo->_builtinFuncs[field].nargs == 1 && g_lingo->_builtinFuncs[field].maxArgs == 1) {
-					yylval.s = new Common::String(field);
-					Common::String rest(ptr);
-
-					// It is the dreaded 'the <builtin> of <expr>'
-					// with 'expr' starting with VARID, which leads to clash
-					//
-					// put 'of VARID' back.
-
-					for (int i = rest.size() - 1; i >= 0; i--)
-						unput(rest[i]);
-
-					unput(' '); unput('f'); unput('o');
-
-					return tTHEFUNC;
-				}
-			}
-		}
-
-		warning("LEXER: Unhandled the entity '%s', field '%s'", ptr, field.c_str());
-	}
+#line 177 "engines/director/lingo/lingo-lex.l"
+{ count(); return tOPEN; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 305 "engines/director/lingo/lingo-lex.l"
-{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		Common::String field;
-		while (*ptr != ' ' && *ptr != '\t' && *ptr != '\xC2')
-			field += *ptr++;
-
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		field = Common::String::format("%d%s", g_lingo->_theEntities[ptr]->entity, field.c_str());
-
-		if (!g_lingo->_theEntityFields.contains(field)) {
-			warning("LEXER: Unhandled the field %s", ptr);
-			return tLEXERROR;
-		}
-
-		if (g_lingo->_theEntityFields[field]->entity != g_lingo->_theEntities[ptr]->entity) {
-			warning("LEXER: Unsupported field '%s' for entity '%s'", field.c_str(), ptr);
-			return tLEXERROR;
-		}
-
-		yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
-		yylval.e[1] = g_lingo->_theEntityFields[field]->field;
-
-		if (g_lingo->_theEntities[ptr]->hasId)
-			return tTHEENTITYWITHID;
-		else
-			return tTHEENTITY;
-	}
+#line 178 "engines/director/lingo/lingo-lex.l"
+{ count(); return tOR; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 339 "engines/director/lingo/lingo-lex.l"
-{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		if (g_lingo->_theEntities.contains(ptr)) {
-			yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
-			yylval.e[1] = 0;	// No field
-
-			if (g_lingo->_theEntities[ptr]->hasId)
-				return tTHEENTITYWITHID;
-			else
-				return tTHEENTITY;
-		}
-
-		if (g_lingo->_builtinFuncs.contains(ptr)) {
-			if (g_lingo->_builtinFuncs[ptr].nargs == 1 && g_lingo->_builtinFuncs[ptr].maxArgs == 1) {
-				yylval.s = new Common::String(ptr);
-				return tTHEFUNC;
-			}
-		}
-
-		warning("LEXER: Unhandled the entity '%s'", ptr);
-	}
+#line 179 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPLAY; }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 365 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
+#line 180 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 366 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+#line 181 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 367 "engines/director/lingo/lingo-lex.l"
-{ count(); return tASSERTERROR; }
+#line 182 "engines/director/lingo/lingo-lex.l"
+{ count(); return tPUT; }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 368 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+#line 183 "engines/director/lingo/lingo-lex.l"
+{ count(); return tREPEAT; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 369 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+#line 184 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSCRIPT; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 370 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+#line 185 "engines/director/lingo/lingo-lex.l"
+{ count(); return tASSERTERROR; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 371 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+#line 186 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSET; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 372 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+#line 187 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSHORT; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 373 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWINDOW; }
+#line 188 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSOUND; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 374 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+#line 189 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 376 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+#line 190 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 377 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+#line 191 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTELL; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 378 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+#line 192 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTHE; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 379 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
+#line 193 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTHEN; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 380 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEQ; }
+#line 194 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTIME; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 382 "engines/director/lingo/lingo-lex.l"
+#line 195 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTO; }
+	YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 196 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHEN; }
+	YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 197 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHILE; }
+	YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 198 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWINDOW; }
+	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 199 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWITH; }
+	YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 200 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWITHIN; }
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 201 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWORD; }
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 202 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWORDS; }
+	YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 204 "engines/director/lingo/lingo-lex.l"
+{ count(); return tNEQ; }
+	YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 205 "engines/director/lingo/lingo-lex.l"
+{ count(); return tGE; }
+	YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 206 "engines/director/lingo/lingo-lex.l"
+{ count(); return tLE; }
+	YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 207 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCONCAT; }
+	YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 208 "engines/director/lingo/lingo-lex.l"
+{ count(); return tEQ; }
+	YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 210 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1611,43 +1466,43 @@ YY_RULE_SETUP
 		return tVARID;
 	}
 	YY_BREAK
-case 65:
+case 78:
 YY_RULE_SETUP
-#line 388 "engines/director/lingo/lingo-lex.l"
+#line 216 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return tFLOAT; }
 	YY_BREAK
-case 66:
+case 79:
 YY_RULE_SETUP
-#line 389 "engines/director/lingo/lingo-lex.l"
+#line 217 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return tINT; }
 	YY_BREAK
-case 67:
+case 80:
 YY_RULE_SETUP
-#line 390 "engines/director/lingo/lingo-lex.l"
+#line 218 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
-case 68:
-/* rule 68 can match eol */
+case 81:
+/* rule 81 can match eol */
 YY_RULE_SETUP
-#line 391 "engines/director/lingo/lingo-lex.l"
+#line 219 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
-case 69:
+case 82:
 YY_RULE_SETUP
-#line 392 "engines/director/lingo/lingo-lex.l"
+#line 220 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return tSTRING; }
 	YY_BREAK
-case 70:
+case 83:
 YY_RULE_SETUP
-#line 393 "engines/director/lingo/lingo-lex.l"
+#line 221 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
-case 71:
+case 84:
 YY_RULE_SETUP
-#line 395 "engines/director/lingo/lingo-lex.l"
+#line 223 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1650 "engines/director/lingo/lingo-lex.cpp"
+#line 1505 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1946,7 +1801,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 310 )
+			if ( yy_current_state >= 295 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1974,11 +1829,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 310 )
+		if ( yy_current_state >= 295 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 309);
+	yy_is_jam = (yy_current_state == 294);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2656,7 +2511,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 395 "engines/director/lingo/lingo-lex.l"
+#line 223 "engines/director/lingo/lingo-lex.l"
 
 
 extern int yydebug;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 1776101089..5666919c75 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -114,14 +114,18 @@ spc [ \t\xC2]
 
 [#]{identifier}	{ count(); yylval.s = new Common::String(yytext + 1); return tSYMBOL; }	// D3, skip '#'
 
+abbreviated	{ count(); return tABBREVIATED; }
+abbrev		{ count(); return tABBREV; }
+abbr		{ count(); return tABBR; }
 after		{ count(); return tAFTER; }		// D3
 and			{ count(); return tAND; }
 before		{ count(); return tBEFORE; }	// D3
 cast		{ count(); return tCAST; }
 char		{ count(); return tCHAR; }		// D3
+chars		{ count(); return tCHARS; }
 contains	{ count(); return tCONTAINS; }
+date		{ count(); return tDATE; }
 down		{ count(); return tDOWN; }
-if			{ count(); return tIF; }
 else		{ count(); return tELSE; }
 end({spc}+{identifier})?	{
 		count();
@@ -141,24 +145,33 @@ end({spc}+{identifier})?	{
 
 		return tENDCLAUSE;
 	}
-^{spc}*factory { count(); return tFACTORY; }
 exit		{ count(); return tEXIT; }
+^{spc}*factory { count(); return tFACTORY; }
 field		{ count(); return tFIELD; }
 frame		{ count(); return tFRAME; }
 global		{ count(); return tGLOBAL; }
 go{spc}+(to)?	{ count(); return tGO; }
+if			{ count(); return tIF; }
 instance	{ count(); return tINSTANCE; }
 intersects	{ count(); return tINTERSECTS;}
 into		{ count(); return tINTO; }
 in			{ count(); return tIN; }
 item		{ count(); return tITEM; }
+items		{ count(); return tITEMS; }
+last		{ count(); return tLAST; }
 line		{ count(); return tLINE; }
-macro		{ count(); return tMACRO;; }
+lines		{ count(); return tLINES; }
+long		{ count(); return tLONG; }
+macro		{ count(); return tMACRO; }
+menu		{ count(); return tMENU; }
+menuItem	{ count(); return tMENUITEM;}
+menuItems	{ count(); return tMENUITEMS; }
 method		{ count(); return tMETHOD; }
 mod			{ count(); return tMOD;}
 movie		{ count(); return tMOVIE; }
 next		{ count(); return tNEXT; }
 not			{ count(); return tNOT; }
+number		{ count(); return tNUMBER; }
 of			{ count(); return tOF; }
 on			{ count(); return tON; }		// D3
 open		{ count(); return tOPEN; }
@@ -169,209 +182,24 @@ property	{ count(); return tPROPERTY; }	// D4
 put			{ count(); return tPUT; }
 repeat		{ count(); return tREPEAT; }
 script		{ count(); return tSCRIPT; }
+scummvmAssertError	{ count(); return tASSERTERROR; }
 set			{ count(); return tSET; }
+short		{ count(); return tSHORT; }
+sound		{ count(); return tSOUND; }
+sprite			{ count(); return tSPRITE; }
 starts		{ count(); return tSTARTS; }
 tell		{ count(); return tTELL; }
-the{spc}+number{spc}+of{spc}+[[:alpha:]]+{spc}+(in|of){spc}+ {
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2') ptr++;
-
-		ptr += 6; // skip 'number '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2') ptr++;
-
-		ptr += 3; // Skip 'of '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2') ptr++;
-
-		Common::String field;
-		while (*ptr != ' ' && *ptr != '\t' && *ptr != '\xC2')
-			field += *ptr++;
-
-		// the number of menuItems of menu <xx>
-		if (!field.compareToIgnoreCase("menuItems")) {
-			Common::String key = Common::String::format("%dnumber", kTheMenuItems);
-
-			yylval.e[0] = kTheMenuItems;
-			yylval.e[1] = g_lingo->_theEntityFields[key]->field;
-
-			return tTHEMENUITEMSENTITY;
-		}
-
-		yylval.s = new Common::String(Common::String::format("numberOf%s", field.c_str()));
-
-		if (g_lingo->_builtinFuncs.contains(*yylval.s)) {
-			return tTHEFUNCINOF;
-		} else {
-			warning("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
-			return tLEXERROR;
-		}
-	}
-the{spc}+last{spc}+[[:alpha:]]+{spc}+(in|of){spc}+	{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t') ptr++;
-
-		ptr += 5; // skip 'last '
-		while (*ptr == ' ' || *ptr == '\t') ptr++;
-
-		Common::String field;
-		while (*ptr != ' ' && *ptr != '\t')
-			field += *ptr++;
-
-		yylval.s = new Common::String(Common::String::format("last%sOf", field.c_str()));
-
-		if (g_lingo->_builtinFuncs.contains(*yylval.s)) {
-			return tTHEFUNCINOF;
-		} else {
-			warning("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
-			return tLEXERROR;
-		}
-	}
-the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier}	{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		Common::String field;
-		while (*ptr != ' ' && *ptr != '\t' && *ptr != '\xC2')
-			field += *ptr++;
-
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		ptr += 3; // Skip 'of '
-
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		if (g_lingo->_theEntities.contains(ptr)) {
-			field = Common::String::format("%d%s", g_lingo->_theEntities[ptr]->entity, field.c_str());
-
-			if (!g_lingo->_theEntityFields.contains(field)) {
-				warning("LEXER: Unhandled the field %s of %s", field.c_str(), ptr);
-				return tLEXERROR;
-			}
-
-			if (g_lingo->_theEntityFields[field]->entity != g_lingo->_theEntities[ptr]->entity) {
-				warning("LEXER: Unsupported field '%s' for entity '%s'", field.c_str(), ptr);
-				return tLEXERROR;
-			}
-
-			yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
-			yylval.e[1] = g_lingo->_theEntityFields[field]->field;
-
-			// the <field> of menuItem <expr>" of menu <expr>
-			if (g_lingo->_theEntityFields[field]->entity == kTheMenuItem)
-				return tTHEMENUITEMENTITY;
-
-			if (g_lingo->_theEntities[ptr]->hasId)
-				return tTHEENTITYWITHID;
-			else
-				return tTHEENTITY;
-		} else {
-			if (g_director->getVersion() >= 400) {
-				Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
-
-				yylval.objectprop.obj = new Common::String(ptr);
-				yylval.objectprop.prop = new Common::String(field);
-
-				return tTHEOBJECTPROP;
-			} else if (g_lingo->_builtinFuncs.contains(field)) { // Let's hope they don't do it in D4+
-				if (g_lingo->_builtinFuncs[field].nargs == 1 && g_lingo->_builtinFuncs[field].maxArgs == 1) {
-					yylval.s = new Common::String(field);
-					Common::String rest(ptr);
-
-					// It is the dreaded 'the <builtin> of <expr>'
-					// with 'expr' starting with VARID, which leads to clash
-					//
-					// put 'of VARID' back.
-
-					for (int i = rest.size() - 1; i >= 0; i--)
-						unput(rest[i]);
-
-					unput(' '); unput('f'); unput('o');
-
-					return tTHEFUNC;
-				}
-			}
-		}
-
-		warning("LEXER: Unhandled the entity '%s', field '%s'", ptr, field.c_str());
-	}
-the{spc}+[[:alpha:]]+{spc}+(date|time)		{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		Common::String field;
-		while (*ptr != ' ' && *ptr != '\t' && *ptr != '\xC2')
-			field += *ptr++;
-
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		field = Common::String::format("%d%s", g_lingo->_theEntities[ptr]->entity, field.c_str());
-
-		if (!g_lingo->_theEntityFields.contains(field)) {
-			warning("LEXER: Unhandled the field %s", ptr);
-			return tLEXERROR;
-		}
-
-		if (g_lingo->_theEntityFields[field]->entity != g_lingo->_theEntities[ptr]->entity) {
-			warning("LEXER: Unsupported field '%s' for entity '%s'", field.c_str(), ptr);
-			return tLEXERROR;
-		}
-
-		yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
-		yylval.e[1] = g_lingo->_theEntityFields[field]->field;
-
-		if (g_lingo->_theEntities[ptr]->hasId)
-			return tTHEENTITYWITHID;
-		else
-			return tTHEENTITY;
-	}
-the{spc}+[[:alpha:]]+		{
-		count();
-
-		const char *ptr = &yytext[4]; // Skip 'the '
-		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
-			ptr++;
-
-		if (g_lingo->_theEntities.contains(ptr)) {
-			yylval.e[0] = g_lingo->_theEntities[ptr]->entity;
-			yylval.e[1] = 0;	// No field
-
-			if (g_lingo->_theEntities[ptr]->hasId)
-				return tTHEENTITYWITHID;
-			else
-				return tTHEENTITY;
-		}
-
-		if (g_lingo->_builtinFuncs.contains(ptr)) {
-			if (g_lingo->_builtinFuncs[ptr].nargs == 1 && g_lingo->_builtinFuncs[ptr].maxArgs == 1) {
-				yylval.s = new Common::String(ptr);
-				return tTHEFUNC;
-			}
-		}
-
-		warning("LEXER: Unhandled the entity '%s'", ptr);
-	}
-then			{ count(); return tTHEN; }
-to				{ count(); return tTO; }
-scummvmAssertError	{ count(); return tASSERTERROR; }
-sprite			{ count(); return tSPRITE; }
-with			{ count(); return tWITH; }
-within			{ count(); return tWITHIN; }
-when			{ count(); return tWHEN; }
-while			{ count(); return tWHILE; }
-window			{ count(); return tWINDOW; }
-word			{ count(); return tWORD; }
+the			{ count(); return tTHE; }
+then		{ count(); return tTHEN; }
+time		{ count(); return tTIME; }
+to			{ count(); return tTO; }
+when		{ count(); return tWHEN; }
+while		{ count(); return tWHILE; }
+window		{ count(); return tWINDOW; }
+with		{ count(); return tWITH; }
+within		{ count(); return tWITHIN; }
+word		{ count(); return tWORD; }
+words		{ count(); return tWORDS; }
 
 [<][>]			{ count(); return tNEQ; }
 [>][=]			{ count(); return tGE; }


Commit: de3f586e320807f803aecce8130edc0457efc9b5
    https://github.com/scummvm/scummvm/commit/de3f586e320807f803aecce8130edc0457efc9b5
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix objectproppush/assign

Changed it to get the object from the stack. This allows objects which
aren't simple variables.

Changed paths:
    engines/director/lingo/lingo-code.cpp


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 37c1adc4c5..70a3c7764b 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -107,8 +107,8 @@ static struct FuncDescr {
 	{ LC::c_negate,			"c_negate",			"" },
 	{ LC::c_neq,			"c_neq",			"" },
 	{ LC::c_not,			"c_not",			"" },
-	{ LC::c_objectpropassign,"c_objectpropassign","ss" }, // object, prop
-	{ LC::c_objectproppush,	"c_objectproppush","ss" }, // object, prop
+	{ LC::c_objectpropassign,"c_objectpropassign","s" }, // prop
+	{ LC::c_objectproppush,	"c_objectproppush","s" }, // prop
 	{ LC::c_of,				"c_of",				"" },
 	{ LC::c_or,				"c_or",				"" },
 	{ LC::c_procret,		"c_procret",		"" },
@@ -562,18 +562,14 @@ void LC::c_themenuitementityassign() {
 }
 
 void LC::c_objectproppush() {
-	Datum objName(g_lingo->readString());
-	objName.type = VARREF;
-	Datum obj = g_lingo->varFetch(objName);
+	Datum obj = g_lingo->pop();
 	Common::String propName = g_lingo->readString();
 
 	g_lingo->push(g_lingo->getObjectProp(obj, propName));
 }
 
 void LC::c_objectpropassign() {
-	Datum objName(g_lingo->readString());
-	objName.type = VARREF;
-	Datum obj = g_lingo->varFetch(objName);
+	Datum obj = g_lingo->pop();
 	Common::String propName = g_lingo->readString();
 
 	Datum d = g_lingo->pop();


Commit: 68d7eb1249828e40cf2c657d2641ecd1b67dd9cb
    https://github.com/scummvm/scummvm/commit/68d7eb1249828e40cf2c657d2641ecd1b67dd9cb
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Change codeCmd/codeFunc arg type

This will let us call these with a string literal.

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index a84ee236a9..065bf8ce9d 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -251,9 +251,9 @@ int LingoCompiler::codeInt(int val) {
 	return _currentAssembly->size();
 }
 
-int LingoCompiler::codeCmd(Common::String *s, int numpar) {
+int LingoCompiler::codeCmd(const Common::String &s, int numpar) {
 	// Insert current line number to our asserts
-	if (s->equalsIgnoreCase("scummvmAssert") || s->equalsIgnoreCase("scummvmAssertEqual")) {
+	if (s.equalsIgnoreCase("scummvmAssert") || s.equalsIgnoreCase("scummvmAssertEqual")) {
 		code1(LC::c_intpush);
 		codeInt(_linenumber);
 
@@ -262,7 +262,7 @@ int LingoCompiler::codeCmd(Common::String *s, int numpar) {
 
 	int ret = code1(LC::c_callcmd);
 
-	codeString(s->c_str());
+	codeString(s.c_str());
 
 	inst num = 0;
 	WRITE_UINT32(&num, numpar);
@@ -271,10 +271,10 @@ int LingoCompiler::codeCmd(Common::String *s, int numpar) {
 	return ret;
 }
 
-int LingoCompiler::codeFunc(Common::String *s, int numpar) {
+int LingoCompiler::codeFunc(const Common::String &s, int numpar) {
 	int ret = code1(LC::c_callfunc);
 
-	codeString(s->c_str());
+	codeString(s.c_str());
 
 	inst num = 0;
 	WRITE_UINT32(&num, numpar);
@@ -481,7 +481,7 @@ bool LingoCompiler::visitCmdNode(CmdNode *node) {
 				var->name->equalsIgnoreCase("previous")) {
 			code1(LC::c_symbolpush);
 			codeString(var->name->c_str());
-			codeCmd(node->name, 1);
+			codeCmd(*node->name, 1);
 			return true;
 		}
 	}
@@ -490,7 +490,7 @@ bool LingoCompiler::visitCmdNode(CmdNode *node) {
 	if (node->name->equalsIgnoreCase("play") && node->args->size() == 1 && (*node->args)[0]->type == kVarNode) {
 		VarNode *var = static_cast<VarNode *>((*node->args)[0]);
 		if (var->name->equalsIgnoreCase("done")) {
-			codeCmd(node->name, 0);
+			codeCmd(*node->name, 0);
 			return true;
 		}
 	}
@@ -505,7 +505,7 @@ bool LingoCompiler::visitCmdNode(CmdNode *node) {
 				COMPILE(arg);
 			}
 		}
-		codeCmd(node->name, node->args->size());
+		codeCmd(*node->name, node->args->size());
 		return true;
 	}
 
@@ -521,13 +521,13 @@ bool LingoCompiler::visitCmdNode(CmdNode *node) {
 			for (uint i = 1; i < node->args->size(); i++) {
 				COMPILE((*node->args)[i]);
 			}
-			codeCmd(node->name, node->args->size());
+			codeCmd(*node->name, node->args->size());
 			return true;
 		}
 	}
 
 	COMPILE_LIST(node->args);
-	codeCmd(node->name, node->args->size());
+	codeCmd(*node->name, node->args->size());
 	return true;
 }
 
@@ -848,7 +848,7 @@ bool LingoCompiler::visitPropPairNode(PropPairNode *node) {
 
 bool LingoCompiler::visitFuncNode(FuncNode *node) {
 	COMPILE_LIST(node->args);
-	codeFunc(node->name, node->args->size());
+	codeFunc(*node->name, node->args->size());
 	return true;
 }
 
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index a37424354f..28671ceee9 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -42,9 +42,9 @@ public:
 	int code2(inst code_1, inst code_2) { int o = code1(code_1); code1(code_2); return o; }
 	int code3(inst code_1, inst code_2, inst code_3) { int o = code1(code_1); code1(code_2); code1(code_3); return o; }
 	int code4(inst code_1, inst code_2, inst code_3, inst code_4) { int o = code1(code_1); code1(code_2); code1(code_3); code1(code_4); return o; }
-	int codeCmd(Common::String *s, int numpar);
+	int codeCmd(const Common::String &s, int numpar);
 	int codeFloat(double f);
-	int codeFunc(Common::String *s, int numpar);
+	int codeFunc(const Common::String &s, int numpar);
 	int codeInt(int val);
 	int codeString(const char *s);
 	void codeVarSet(const Common::String &name);


Commit: d393fa547294b594ff74b13542d7d02065568be0
    https://github.com/scummvm/scummvm/commit/d393fa547294b594ff74b13542d7d02065568be0
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement 'the'

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index f9c698a826..dac79872de 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -63,6 +63,15 @@ struct FrameNode;
 struct MovieNode;
 struct IntersectsNode;
 struct WithinNode;
+struct TheNode;
+struct TheOfNode;
+struct TheNumberOfNode;
+struct TheLastNode;
+struct TheDateTimeNode;
+struct MenuNode;
+struct MenuItemNode;
+struct SoundNode;
+struct SpriteNode;
 
 typedef Common::Array<Node *> NodeList;
 typedef Common::Array<Common::String *> IDList;
@@ -114,7 +123,24 @@ enum NodeType {
 	kFrameNode,
 	kMovieNode,
 	kIntersectsNode,
-	kWithinNode
+	kWithinNode,
+	kTheNode,
+	kTheOfNode,
+	kTheNumberOfNode,
+	kTheLastNode,
+	kTheDateTimeNode,
+	kMenuNode,
+	kMenuItemNode,
+	kSoundNode,
+	kSpriteNode
+};
+
+enum NumberOfType {
+	kNumberOfChars,
+	kNumberOfWords,
+	kNumberOfItems,
+	kNumberOfLines,
+	kNumberOfMenuItems
 };
 
 /* NodeVisitor */
@@ -161,6 +187,15 @@ public:
 	virtual bool visitMovieNode(MovieNode *node) = 0;
 	virtual bool visitIntersectsNode(IntersectsNode *node) = 0;
 	virtual bool visitWithinNode(WithinNode *node) = 0;
+	virtual bool visitTheNode(TheNode *node) = 0;
+	virtual bool visitTheOfNode(TheOfNode *node) = 0;
+	virtual bool visitTheNumberOfNode(TheNumberOfNode *node) = 0;
+	virtual bool visitTheLastNode(TheLastNode *node) = 0;
+	virtual bool visitTheDateTimeNode(TheDateTimeNode *node) = 0;
+	virtual bool visitMenuNode(MenuNode *node) = 0;
+	virtual bool visitMenuItemNode(MenuItemNode *node) = 0;
+	virtual bool visitSoundNode(SoundNode *node) = 0;
+	virtual bool visitSpriteNode(SpriteNode *node) = 0;
 };
 
 /* Node */
@@ -772,6 +807,142 @@ struct WithinNode : ExprNode {
 	}
 };
 
+/* TheNode */
+
+struct TheNode : ExprNode {
+	Common::String *prop;
+
+	TheNode(Common::String *propIn) : ExprNode(kTheNode), prop(propIn) {}
+	virtual ~TheNode() {
+		delete prop;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitTheNode(this);
+	}
+};
+
+/* TheOfNode */
+
+struct TheOfNode : ExprNode {
+	Common::String *prop;
+	Node *obj;
+
+	TheOfNode(Common::String *propIn, Node *objIn)
+		: ExprNode(kTheOfNode), prop(propIn), obj(objIn) {}
+	virtual ~TheOfNode() {
+		delete prop;
+		delete obj;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitTheOfNode(this);
+	}
+};
+
+/* TheNumberOfNode */
+
+struct TheNumberOfNode : ExprNode {
+	NumberOfType type;
+	Node *arg;
+
+	TheNumberOfNode(NumberOfType typeIn, Node *argIn)
+		: ExprNode(kTheNumberOfNode), type(typeIn), arg(argIn) {}
+	virtual ~TheNumberOfNode() {
+		delete arg;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitTheNumberOfNode(this);
+	}
+};
+
+/* TheLastNode */
+
+struct TheLastNode : ExprNode {
+	ChunkType type;
+	Node *arg;
+
+	TheLastNode(ChunkType typeIn, Node *argIn)
+		: ExprNode(kTheLastNode), type(typeIn), arg(argIn) {}
+	virtual ~TheLastNode() {
+		delete arg;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitTheLastNode(this);
+	}
+};
+
+/* TheDateTimeNode */
+
+struct TheDateTimeNode : ExprNode {
+	int field;
+	int entity;
+
+	TheDateTimeNode(int fieldIn, int entityIn)
+		: ExprNode(kTheDateTimeNode), field(fieldIn), entity(entityIn) {}
+	virtual ~TheDateTimeNode() {}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitTheDateTimeNode(this);
+	}
+};
+
+/* MenuNode */
+
+struct MenuNode : ExprNode {
+	Node *arg;
+
+	MenuNode(Node *argIn) : ExprNode(kMenuNode), arg(argIn) {}
+	virtual ~MenuNode() {
+		delete arg;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitMenuNode(this);
+	}
+};
+
+/* MenuItemNode */
+
+struct MenuItemNode : ExprNode {
+	Node *arg1;
+	Node *arg2;
+
+	MenuItemNode(Node *arg1In, Node *arg2In)
+		: ExprNode(kMenuItemNode), arg1(arg1In), arg2(arg2In) {}
+	virtual ~MenuItemNode() {
+		delete arg1;
+		delete arg2;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitMenuItemNode(this);
+	}
+};
+
+/* SoundNode */
+
+struct SoundNode : ExprNode {
+	Node *arg;
+
+	SoundNode(Node *argIn) : ExprNode(kSoundNode), arg(argIn) {}
+	virtual ~SoundNode() {
+		delete arg;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitSoundNode(this);
+	}
+};
+
+/* SpriteNode */
+
+struct SpriteNode : ExprNode {
+	Node *arg;
+
+	SpriteNode(Node *argIn) : ExprNode(kSpriteNode), arg(argIn) {}
+	virtual ~SpriteNode() {
+		delete arg;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitSpriteNode(this);
+	}
+};
+
 } // End of namespace Director
 
 #endif
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 065bf8ce9d..fafb6ab4aa 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -52,6 +52,7 @@
 #include "director/lingo/lingo-code.h"
 #include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-object.h"
+#include "director/lingo/lingo-the.h"
 
 namespace Director {
 
@@ -569,7 +570,115 @@ bool LingoCompiler::visitPutBeforeNode(PutBeforeNode *node) {
 
 /* SetNode */
 
+bool LingoCompiler::codeTheFieldSet(int entity, Node *id, const Common::String &field) {
+	Common::String fieldId = Common::String::format("%d%s", entity, field.c_str());
+	if (!g_lingo->_theEntityFields.contains(fieldId)) {
+		warning("LingoCompiler::codeTheFieldSet: Unhandled the field %s of %s", field.c_str(), g_lingo->entity2str(entity));
+		return false;
+	}
+	COMPILE(id);
+	code1(LC::c_theentityassign);
+	codeInt(entity);
+	codeInt(g_lingo->_theEntityFields[fieldId]->field);
+	return true;
+}
+
 bool LingoCompiler::visitSetNode(SetNode *node) {
+	if (node->var->type == kTheNode) {
+		TheNode *the = static_cast<TheNode *>(node->var);
+		if (g_lingo->_theEntities.contains(*the->prop) && !g_lingo->_theEntities[*the->prop]->hasId) {
+			COMPILE(node->val);
+			code1(LC::c_intpush);
+			codeInt(0); // Put dummy id
+			code1(LC::c_theentityassign);
+			codeInt(g_lingo->_theEntities[*the->prop]->entity);
+			codeInt(0);	// No field
+			return true;
+		}
+		warning("LingoCompiler:visitSetNode: Unhandled the entity '%s'", the->prop->c_str());
+		return false;
+	}
+
+	if (node->var->type == kTheOfNode) {
+		COMPILE(node->val);
+		TheOfNode *the = static_cast<TheOfNode *>(node->var);
+		switch (the->obj->type) {
+		case kFuncNode:
+			{
+				FuncNode *func = static_cast<FuncNode *>(the->obj);
+				if (func->args->size() == 1) {
+					if (func->name->equalsIgnoreCase("cast")) {
+						return codeTheFieldGet(kTheCast, (*func->args)[0], *the->prop);
+					}
+					if (func->name->equalsIgnoreCase("field")) {
+						return codeTheFieldGet(kTheField, (*func->args)[0], *the->prop);
+					}
+					// window is an object and is handled by that case
+				}
+			}
+			break;
+		case kMenuNode:
+			{
+				MenuNode *menu = static_cast<MenuNode *>(the->obj);
+				return codeTheFieldGet(kTheMenu, menu->arg, *the->prop);
+			}
+			break;
+		case kMenuItemNode:
+			{
+				MenuItemNode *menuItem = static_cast<MenuItemNode *>(the->obj);
+				Common::String fieldId = Common::String::format("%d%s", kTheMenuItem, the->prop->c_str());
+				if (!g_lingo->_theEntityFields.contains(fieldId)) {
+					warning("LingoCompiler:visitTheNode: Unhandled the field %s of menuItem", the->prop->c_str());
+					return false;
+				}
+				COMPILE(menuItem->arg1)
+				COMPILE(menuItem->arg2);
+				code1(LC::c_theentitypush);
+				codeInt(kTheMenuItem);
+				codeInt(g_lingo->_theEntityFields[fieldId]->field);
+				return true;
+			}
+			break;
+		case kSoundNode:
+			{
+				SoundNode *sound = static_cast<SoundNode *>(the->obj);
+				return codeTheFieldGet(kTheSoundEntity, sound->arg, *the->prop);
+			}
+			break;
+		case kSpriteNode:
+			{
+				SpriteNode *sprite = static_cast<SpriteNode *>(the->obj);
+				return codeTheFieldGet(kTheSprite, sprite->arg, *the->prop);
+			}
+			break;
+		case kVarNode:
+			{
+				VarNode *var = static_cast<VarNode *>(the->obj);
+				if (the->prop->equalsIgnoreCase("number") && var->name->equalsIgnoreCase("castMembers")) {
+					code1(LC::c_intpush);
+					codeInt(0); // Put dummy id
+					code1(LC::c_theentitypush);
+					codeInt(kTheCastMembers);
+					codeInt(kTheNumber);
+					return true;
+				}
+			}
+			break;
+		default:
+			break;
+		}
+
+		if (g_director->getVersion() >= 400) {
+			COMPILE(the->obj);
+			code1(LC::c_objectproppush);
+			codeString(the->prop->c_str());
+			return true;
+		}
+
+		warning("LingoCompiler::visitSetNode: Unhandled the field %s", the->prop->c_str());
+		return false;
+	}
+
 	if (node->var->type == kVarNode) {
 		registerMethodVar(*static_cast<VarNode *>(node->var)->name);	
 	}
@@ -930,6 +1039,214 @@ bool LingoCompiler::visitWithinNode(WithinNode *node) {
 	COMPILE(node->sprite2);
 	code1(LC::c_within);
 	return true;
-};
+}
+
+/* TheNode */
+
+bool LingoCompiler::visitTheNode(TheNode *node) {
+	if (g_lingo->_theEntities.contains(*node->prop) && !g_lingo->_theEntities[*node->prop]->hasId) {
+		code1(LC::c_intpush);
+		codeInt(0); // Put dummy id
+		code1(LC::c_theentitypush);
+		codeInt(g_lingo->_theEntities[*node->prop]->entity);
+		codeInt(0);	// No field
+		return true;
+	}
+
+	warning("LingoCompiler:visitTheNode: Unhandled the entity '%s'", node->prop->c_str());
+	return false;
+}
+
+/* TheOfNode */
+
+bool LingoCompiler::codeTheFieldGet(int entity, Node *id, const Common::String &field) {
+	Common::String fieldId = Common::String::format("%d%s", entity, field.c_str());
+	if (!g_lingo->_theEntityFields.contains(fieldId)) {
+		warning("LingoCompiler::codeTheFieldGet: Unhandled the field %s of %s", field.c_str(), g_lingo->entity2str(entity));
+		return false;
+	}
+	COMPILE(id);
+	code1(LC::c_theentitypush);
+	codeInt(entity);
+	codeInt(g_lingo->_theEntityFields[fieldId]->field);
+	return true;
+}
+
+bool LingoCompiler::visitTheOfNode(TheOfNode *node) {
+	switch (node->obj->type) {
+	case kFuncNode:
+		{
+			FuncNode *func = static_cast<FuncNode *>(node->obj);
+			if (func->args->size() == 1) {
+				if (func->name->equalsIgnoreCase("cast")) {
+					return codeTheFieldGet(kTheCast, (*func->args)[0], *node->prop);
+				}
+				if (func->name->equalsIgnoreCase("field")) {
+					return codeTheFieldGet(kTheField, (*func->args)[0], *node->prop);
+				}
+				// window is an object and is handled by that case
+			}
+		}
+		break;
+	case kMenuNode:
+		{
+			MenuNode *menu = static_cast<MenuNode *>(node->obj);
+			return codeTheFieldGet(kTheMenu, menu->arg, *node->prop);
+		}
+		break;
+	case kMenuItemNode:
+		{
+			MenuItemNode *menuItem = static_cast<MenuItemNode *>(node->obj);
+			Common::String fieldId = Common::String::format("%d%s", kTheMenuItem, node->prop->c_str());
+			if (!g_lingo->_theEntityFields.contains(fieldId)) {
+				warning("LingoCompiler:visitTheNode: Unhandled the field %s of menuItem", node->prop->c_str());
+				return false;
+			}
+			COMPILE(menuItem->arg1)
+			COMPILE(menuItem->arg2);
+			code1(LC::c_theentitypush);
+			codeInt(kTheMenuItem);
+			codeInt(g_lingo->_theEntityFields[fieldId]->field);
+			return true;
+		}
+		break;
+	case kSoundNode:
+		{
+			SoundNode *sound = static_cast<SoundNode *>(node->obj);
+			return codeTheFieldGet(kTheSoundEntity, sound->arg, *node->prop);
+		}
+		break;
+	case kSpriteNode:
+		{
+			SpriteNode *sprite = static_cast<SpriteNode *>(node->obj);
+			return codeTheFieldGet(kTheSprite, sprite->arg, *node->prop);
+		}
+		break;
+	case kVarNode:
+		{
+			VarNode *var = static_cast<VarNode *>(node->obj);
+			if (node->prop->equalsIgnoreCase("number") && var->name->equalsIgnoreCase("castMembers")) {
+				code1(LC::c_intpush);
+				codeInt(0); // Put dummy id
+				code1(LC::c_theentitypush);
+				codeInt(kTheCastMembers);
+				codeInt(kTheNumber);
+				return true;
+			}
+		}
+		break;
+	default:
+		break;
+	}
+
+	if (g_director->getVersion() >= 400) {
+		COMPILE(node->obj);
+		code1(LC::c_objectproppush);
+		codeString(node->prop->c_str());
+		return true;
+	}
+
+	if (g_lingo->_builtinFuncs.contains(*node->prop)) {
+		COMPILE(node->obj);
+		codeFunc(*node->prop, 1);
+		return true;
+	}
+
+	warning("LingoCompiler::visitTheOfNode: Unhandled the field %s", node->prop->c_str());
+	return false;
+}
+
+/* TheNumberOfNode */
+
+bool LingoCompiler::visitTheNumberOfNode(TheNumberOfNode *node) {
+	switch (node->type) {
+	case kNumberOfChars:
+		COMPILE(node->arg);
+		codeFunc("numberOfChars", 1);
+		break;
+	case kNumberOfWords:
+		COMPILE(node->arg);
+		codeFunc("numberOfWords", 1);
+		break;
+	case kNumberOfItems:
+		COMPILE(node->arg);
+		codeFunc("numberOfItems", 1);
+		break;
+	case kNumberOfLines:
+		COMPILE(node->arg);
+		codeFunc("numberOfLines", 1);
+		break;
+	case kNumberOfMenuItems:
+		{
+			if (node->arg->type != kMenuNode) {
+				warning("LingoCompiler::visitTheNumberOfNode: expected menu");
+				return false;
+			}
+			MenuNode *menu = static_cast<MenuNode *>(node->arg);
+			COMPILE(menu->arg);
+			code1(LC::c_theentitypush);
+			codeInt(kTheMenuItems);
+			codeInt(kTheNumber);
+		}
+		break;
+	}
+	return true;
+}
+
+/* TheLastNode */
+
+bool LingoCompiler::visitTheLastNode(TheLastNode *node) {
+	COMPILE(node->arg);
+	switch (node->type) {
+	case kNumberOfChars:
+		codeFunc("lastCharOf", 1);
+		break;
+	case kNumberOfWords:
+		codeFunc("lastWordOf", 1);
+		break;
+	case kNumberOfItems:
+		codeFunc("lastItemOf", 1);
+		break;
+	case kNumberOfLines:
+		codeFunc("lastLineOf", 1);
+		break;
+	}
+	return true;
+}
+
+/* TheDateTimeNode */
+
+bool LingoCompiler::visitTheDateTimeNode(TheDateTimeNode *node) {
+	code1(LC::c_intpush);
+	codeInt(0); // Put dummy id
+	code1(LC::c_theentitypush);
+	codeInt(node->entity);
+	codeInt(node->field);
+	return true;
+}
+
+/* MenuNode */
+
+bool LingoCompiler::visitMenuNode(MenuNode *node) {
+	return true;
+}
+
+/* MenuItemNode */
+
+bool LingoCompiler::visitMenuItemNode(MenuItemNode *node) {
+	return true;
+}
+
+/* SoundItem */
+
+bool LingoCompiler::visitSoundNode(SoundNode *node) {
+	return true;
+}
+
+/* SpriteNode */
+
+bool LingoCompiler::visitSpriteNode(SpriteNode *node) {
+	return true;
+}
 
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 28671ceee9..b210ff291b 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -50,6 +50,8 @@ public:
 	void codeVarSet(const Common::String &name);
 	void codeVarRef(const Common::String &name);
 	void codeVarGet(const Common::String &name);
+	bool codeTheFieldSet(int entity, Node *id, const Common::String &field);
+	bool codeTheFieldGet(int entity, Node *id, const Common::String &field);
 	void registerFactory(Common::String &s);
 	void registerMethodVar(const Common::String &name, VarType type = kVarGeneric);
 	void updateLoopJumps(uint nextTargetPos, uint exitTargetPos);
@@ -110,6 +112,15 @@ public:
 	virtual bool visitMovieNode(MovieNode *node);
 	virtual bool visitIntersectsNode(IntersectsNode *node);
 	virtual bool visitWithinNode(WithinNode *node);
+	virtual bool visitTheNode(TheNode *node);
+	virtual bool visitTheOfNode(TheOfNode *node);
+	virtual bool visitTheNumberOfNode(TheNumberOfNode *node);
+	virtual bool visitTheLastNode(TheLastNode *node);
+	virtual bool visitTheDateTimeNode(TheDateTimeNode *node);
+	virtual bool visitMenuNode(MenuNode *node);
+	virtual bool visitMenuItemNode(MenuItemNode *node);
+	virtual bool visitSoundNode(SoundNode *node);
+	virtual bool visitSpriteNode(SpriteNode *node);
 
 private:
 	int parse(const char *code);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 6feac1ba4f..d2bdec6bd7 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -82,6 +82,7 @@
 #include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-object.h"
+#include "director/lingo/lingo-the.h"
 
 extern int yylex();
 extern int yyparse();
@@ -124,7 +125,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 }
 
 
-#line 128 "engines/director/lingo/lingo-gr.cpp"
+#line 129 "engines/director/lingo/lingo-gr.cpp"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -287,25 +288,30 @@ enum yysymbol_kind_t
   YYSYMBOL_stmtlist = 132,                 /* stmtlist  */
   YYSYMBOL_nonemptystmtlist = 133,         /* nonemptystmtlist  */
   YYSYMBOL_stmtlistline = 134,             /* stmtlistline  */
-  YYSYMBOL_simpleexpr_noparens_nounarymath = 135, /* simpleexpr_noparens_nounarymath  */
+  YYSYMBOL_simpleexpr_nounarymath = 135,   /* simpleexpr_nounarymath  */
   YYSYMBOL_var = 136,                      /* var  */
   YYSYMBOL_varorchunk = 137,               /* varorchunk  */
   YYSYMBOL_varorthe = 138,                 /* varorthe  */
   YYSYMBOL_chunk = 139,                    /* chunk  */
   YYSYMBOL_object = 140,                   /* object  */
-  YYSYMBOL_list = 141,                     /* list  */
-  YYSYMBOL_proplist = 142,                 /* proplist  */
-  YYSYMBOL_proppair = 143,                 /* proppair  */
-  YYSYMBOL_parens = 144,                   /* parens  */
-  YYSYMBOL_unarymath = 145,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 146,               /* simpleexpr  */
-  YYSYMBOL_simpleexpr_noparens = 147,      /* simpleexpr_noparens  */
-  YYSYMBOL_simpleexpr_nounarymath = 148,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_expr = 149,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 150,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 151,                   /* sprite  */
-  YYSYMBOL_exprlist = 152,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 153          /* nonemptyexprlist  */
+  YYSYMBOL_the = 141,                      /* the  */
+  YYSYMBOL_theobj = 142,                   /* theobj  */
+  YYSYMBOL_menu = 143,                     /* menu  */
+  YYSYMBOL_writablethe = 144,              /* writablethe  */
+  YYSYMBOL_thedatetime = 145,              /* thedatetime  */
+  YYSYMBOL_thenumberof = 146,              /* thenumberof  */
+  YYSYMBOL_chunktype = 147,                /* chunktype  */
+  YYSYMBOL_inof = 148,                     /* inof  */
+  YYSYMBOL_list = 149,                     /* list  */
+  YYSYMBOL_proplist = 150,                 /* proplist  */
+  YYSYMBOL_proppair = 151,                 /* proppair  */
+  YYSYMBOL_unarymath = 152,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 153,               /* simpleexpr  */
+  YYSYMBOL_expr = 154,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 155,         /* expr_nounarymath  */
+  YYSYMBOL_sprite = 156,                   /* sprite  */
+  YYSYMBOL_exprlist = 157,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 158          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -625,18 +631,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  143
+#define YYFINAL  149
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3493
+#define YYLAST   3926
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  50
+#define YYNNTS  55
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  218
+#define YYNRULES  249
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  393
+#define YYNSTATES  457
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -694,28 +700,31 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   197,   197,   199,   205,   212,   213,   214,   215,   216,
-     245,   249,   251,   253,   254,   257,   263,   270,   271,   276,
-     280,   284,   285,   286,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   308,   309,   313,
-     315,   316,   317,   318,   319,   320,   321,   322,   324,   325,
-     326,   328,   329,   330,   331,   332,   333,   335,   336,   338,
-     341,   342,   343,   344,   345,   346,   347,   348,   349,   352,
-     353,   355,   356,   357,   358,   359,   360,   363,   364,   367,
-     371,   381,   382,   383,   384,   385,   386,   389,   390,   391,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     406,   409,   414,   418,   424,   429,   432,   442,   447,   453,
-     459,   465,   473,   474,   475,   476,   479,   479,   481,   482,
-     483,   486,   490,   494,   500,   504,   508,   512,   514,   516,
-     520,   524,   528,   530,   531,   535,   541,   548,   549,   555,
-     556,   557,   558,   559,   560,   561,   562,   563,   564,   567,
-     569,   570,   573,   577,   581,   587,   591,   597,   598,   599,
-     602,   606,   611,   612,   613,   616,   618,   619,   622,   623,
-     624,   627,   628,   631,   632,   636,   637,   638,   639,   640,
-     641,   642,   643,   644,   645,   646,   647,   648,   649,   650,
-     651,   652,   653,   654,   661,   662,   663,   664,   665,   666,
-     667,   668,   669,   670,   671,   672,   673,   674,   675,   676,
-     677,   678,   679,   682,   683,   686,   687,   690,   694
+       0,   195,   195,   197,   203,   210,   211,   212,   213,   214,
+     243,   247,   249,   251,   252,   255,   261,   268,   269,   274,
+     278,   282,   283,   284,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   306,   307,   311,
+     313,   314,   315,   316,   317,   318,   319,   320,   322,   323,
+     324,   326,   327,   328,   329,   330,   331,   333,   334,   336,
+     339,   340,   341,   342,   343,   344,   345,   346,   347,   350,
+     351,   353,   354,   355,   356,   357,   358,   361,   362,   365,
+     369,   379,   380,   381,   382,   383,   384,   387,   388,   389,
+     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
+     404,   407,   412,   416,   422,   427,   430,   440,   445,   451,
+     457,   463,   471,   472,   473,   474,   477,   477,   479,   480,
+     481,   484,   488,   492,   498,   502,   506,   510,   512,   514,
+     518,   522,   526,   528,   529,   533,   539,   546,   547,   553,
+     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
+     564,   567,   569,   570,   573,   574,   577,   581,   587,   591,
+     597,   598,   599,   600,   603,   604,   605,   606,   607,   610,
+     612,   613,   614,   617,   618,   619,   620,   621,   622,   623,
+     624,   625,   626,   630,   631,   632,   633,   634,   637,   638,
+     639,   640,   643,   643,   645,   646,   647,   650,   654,   659,
+     660,   661,   664,   665,   668,   669,   673,   674,   675,   676,
+     677,   678,   679,   680,   681,   682,   683,   684,   685,   686,
+     687,   688,   689,   690,   691,   698,   699,   700,   701,   702,
+     703,   704,   705,   706,   707,   708,   709,   710,   711,   712,
+     713,   714,   715,   716,   719,   720,   723,   724,   727,   731
 };
 #endif
 
@@ -752,10 +761,11 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "cmdargs",
   "frameargs", "asgn", "to", "definevars", "ifstmt", "ifelsestmt", "loop",
   "tell", "when", "stmtlist", "nonemptystmtlist", "stmtlistline",
-  "simpleexpr_noparens_nounarymath", "var", "varorchunk", "varorthe",
-  "chunk", "object", "list", "proplist", "proppair", "parens", "unarymath",
-  "simpleexpr", "simpleexpr_noparens", "simpleexpr_nounarymath", "expr",
-  "expr_nounarymath", "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "simpleexpr_nounarymath", "var", "varorchunk", "varorthe", "chunk",
+  "object", "the", "theobj", "menu", "writablethe", "thedatetime",
+  "thenumberof", "chunktype", "inof", "list", "proplist", "proppair",
+  "unarymath", "simpleexpr", "expr", "expr_nounarymath", "sprite",
+  "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -780,7 +790,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-297)
+#define YYPACT_NINF (-325)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -794,46 +804,52 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1883,  -297,  -297,  -297,  -297,  -297,  -297,   -21,  -297,  3086,
-    1119,  1216,  -297,  -297,  3086,  -297,   -12,  -297,  -297,  1313,
-      57,  3086,  -297,  3086,  -297,  -297,  3086,  -297,  1119,  3086,
-    -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,
-    -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,
-    -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,
-    -297,  -297,  1216,  3086,  3086,  2930,  -297,    37,  1883,  -297,
-    -297,  -297,  -297,  1313,  -297,  -297,  -297,  -297,  -297,  -297,
-    -297,  -297,  -297,  -297,   -54,  -297,  -297,  -297,  -297,  -297,
-    -297,  -297,   -47,   -44,  -297,  -297,  -297,  -297,  1507,  1507,
-    1507,  1507,  1216,  1216,  1410,  1216,  1410,  1410,  1022,   535,
-     -40,   -31,    -1,  -297,  -297,  -297,  -297,  -297,  -297,  -297,
-    -297,   634,  -297,  1216,   205,  3086,    10,    20,   731,  3086,
-    1216,  -297,  -297,   -16,    36,    24,    25,    26,    27,   124,
-      29,  3086,  -297,  -297,  -297,    31,   828,  -297,  -297,  3086,
-    -297,  -297,  -297,  -297,  -297,  -297,   925,  3372,  -297,  3318,
-    -297,  -297,  -297,   421,   -22,    28,   -11,   -83,   -62,  -297,
-    3372,    32,    45,  1216,  -297,  -297,   104,  1216,  1216,  1216,
-    1216,  1598,  1598,  1792,  1216,  1695,  1695,  1216,  1216,  1216,
-    1216,  1216,  1216,  1216,  1216,  -297,  -297,  -297,  3204,  -297,
-     222,  2610,  1216,  1216,  1216,  1216,  1216,    47,  -297,  -297,
-    3164,  3164,  3164,   106,  3217,  -297,  -297,  1216,  1216,   -59,
-    -297,  -297,  -297,  2930,  2690,  -297,    51,  -297,  -297,   125,
-    3385,  1410,  1410,  1216,  -297,  1216,  1216,  -297,  1216,  3008,
-    -297,  -297,  1216,    52,  1216,     9,     9,     9,     9,  3398,
-    3398,  -297,    -8,     9,     9,     9,     9,    -8,   -38,   -38,
-    -297,  -297,    45,  1216,  1216,  1216,  1216,  1216,  1216,  1216,
-    1216,  1216,  1216,  1216,  1216,  1216,  1216,  1216,  1216,  1216,
-    1216,  2690,   137,  2690,  -297,    58,  -297,    59,    60,  1216,
-    2690,  3230,  3372,  3086,  -297,  -297,    62,  -297,  -297,  -297,
-    -297,  -297,  2043,  -297,  -297,  2690,  1216,  -297,  -297,   -18,
-    3372,  3372,  3372,   -22,    28,    61,  -297,  3372,  -297,  3372,
-       9,     9,     9,     9,  3398,  3398,  -297,    -8,     9,     9,
-       9,     9,    -8,   -38,   -38,  -297,  -297,    45,  1963,  2770,
-    2690,  -297,  -297,  -297,    93,  2130,  -297,  3086,   -59,    63,
-    -297,  2210,  3372,  -297,  2850,    64,  2690,  -297,   120,  1216,
-      66,    68,  -297,  -297,  3086,  2690,  -297,  -297,  2290,  1216,
-    3286,  -297,  2690,    13,  -297,  2370,    75,  3299,  2690,  2690,
-    -297,  3086,    77,  -297,  2690,  2450,  -297,  -297,  2530,    78,
-      82,  -297,  -297
+    2029,  -325,  -325,  -325,  -325,  -325,  -325,   -27,  -325,  3310,
+    1162,  1259,  -325,  -325,  3310,  -325,   -12,  -325,  -325,  1356,
+      12,  3232,  -325,  3310,  -325,  -325,  3310,  -325,  1162,  3310,
+    -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
+    -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
+    -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
+    -325,  -325,  1259,  3310,  3310,  3076,  -325,    75,  2029,  -325,
+    -325,  -325,  -325,  1356,  -325,  -325,  -325,  -325,  -325,  -325,
+    -325,  -325,  -325,  -325,   -61,  -325,  -325,  -325,  -325,  -325,
+    -325,  -325,    -5,    -2,  -325,  -325,  -325,  -325,  1453,  1453,
+    1453,  1453,  1259,  1259,  1453,  3388,  1259,  1453,  1453,  1065,
+     578,     8,    16,    18,  -325,  -325,  -325,  -325,  -325,  -325,
+    -325,  -325,  -325,  -325,  -325,   677,  -325,  1259,   452,  3310,
+      19,    24,   774,  3310,  1259,  3466,  -325,  -325,   -17,  -325,
+      89,    26,    29,    30,    33,   204,    35,  3310,  -325,  -325,
+    -325,    37,   871,  -325,  -325,  3310,  -325,  -325,  -325,  -325,
+     968,  3761,  -325,   -36,   -31,   -30,    -7,     5,    36,   108,
+     109,  3748,  -325,  -325,  -325,   261,    38,    39,    41,   -83,
+      -4,  -325,  3761,    42,    48,  1259,  -325,  -325,   113,  1259,
+    1259,  1259,  1259,  1744,  1744,  1938,  1259,  1841,  1841,  1259,
+    1259,  1259,  1259,  1259,  1259,  1259,  1259,  -325,  3597,  -325,
+    3584,  2756,  1259,  1259,  1259,  1259,  1259,    43,  -325,  -325,
+    3544,  3544,  3544,   104,  3610,   122,  -325,  -325,  1259,  1259,
+     -73,  -325,  -325,  -325,  3076,  2836,  -325,    54,  -325,  -325,
+     126,  3777,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
+    -325,  -325,  -325,  -325,  -325,  -325,    60,  1550,  1647,  1453,
+    1453,  1259,  -325,  1259,  1259,  -325,  1259,  3154,  -325,  -325,
+    1259,    53,  1259,   -15,   -15,   -15,   -15,  3831,  3831,  -325,
+     -39,   -15,   -15,   -15,   -15,   -39,   -37,   -37,  -325,  -325,
+      48,  1259,  1259,  1259,  1259,  1259,  1259,  1259,  1259,  1259,
+    1259,  1259,  1259,  1259,  1259,  1259,  1259,  1259,  1259,  2836,
+     138,  2836,  -325,    59,  -325,    61,    62,  1259,  2836,  1647,
+    3666,  3761,  3310,  -325,  -325,    63,  -325,  -325,  -325,  -325,
+    -325,  2189,  -325,  -325,  2836,  1259,  -325,  -325,  1453,    60,
+      60,    60,    60,  1453,  1453,    60,  1453,  1453,  -325,  -325,
+    -325,  -325,  -325,  -325,   -70,  3761,  3761,  3761,    38,    39,
+      58,  -325,  3761,  -325,  3761,   -15,   -15,   -15,   -15,  3831,
+    3831,  -325,   -39,   -15,   -15,   -15,   -15,   -39,   -37,   -37,
+    -325,  -325,    48,  2109,  2916,  2836,  -325,  -325,  -325,   134,
+    2276,  -325,  3310,   -73,    65,  -325,  2356,  3761,  -325,  1453,
+    1453,  1453,  1453,  -325,   129,    92,  -325,  -325,  -325,  2996,
+      67,  2836,  -325,   131,  1259,    69,    70,  -325,  -325,  3310,
+    -325,  -325,  -325,  -325,    98,  1453,  -325,  2836,  -325,  -325,
+    2436,  1259,  3679,  -325,  2836,     2,  -325,  1453,  2516,    73,
+    3692,  2836,  2836,  -325,  3310,  -325,    76,  -325,  2836,  2596,
+    -325,  -325,  2676,    77,    78,  -325,  -325
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -851,56 +867,64 @@ static const yytype_uint8 yydefact[] =
        6,     7,     8,   100,     9,    81,    87,    88,    89,    82,
       83,    84,    85,    86,     0,    98,    53,    60,    63,    68,
       62,    79,     0,    78,   139,   140,   142,   141,    31,    37,
-      61,    72,    38,    52,    54,    66,     0,     0,     0,   215,
-     149,     0,     0,   168,   145,   146,   147,   148,   169,   170,
-     175,   101,   176,     0,     0,    77,     0,     0,   101,     0,
-       0,   149,   152,     0,     0,     0,     0,     0,     0,     0,
-       0,    77,    99,     1,     4,     0,   101,    97,   118,     0,
-     171,   172,   154,   153,   155,   156,   107,   108,   143,     0,
-     166,   167,   105,     0,   142,   141,     0,   149,     0,   160,
-     217,     0,   216,   215,    92,    93,    56,     0,     0,     0,
-       0,    29,    58,    51,     0,    34,    67,     0,     0,     0,
-       0,     0,     0,     0,     0,   173,   174,   194,   103,   195,
+      61,    72,    38,    52,    54,     0,    66,     0,     0,     0,
+     246,   151,     0,     0,   204,   146,   147,   148,   149,   160,
+     161,   162,   150,   205,   206,   101,   207,     0,     0,    77,
+       0,     0,   101,     0,     0,     0,   151,   154,     0,   155,
+       0,     0,     0,     0,     0,     0,     0,    77,    99,     1,
+       4,     0,   101,    97,   118,     0,   157,   156,   158,   159,
+     107,   108,   143,    25,    26,    27,    47,    64,    44,    55,
+     170,     0,   202,   203,   105,     0,   142,   141,     0,   151,
+       0,   197,   248,     0,   247,   246,    92,    93,    56,     0,
+       0,     0,     0,    29,    58,    51,     0,    34,    67,     0,
+       0,     0,     0,     0,     0,     0,     0,   225,   103,   226,
        0,     0,     0,     0,     0,     0,     0,     0,    96,    91,
-      41,    28,    30,     0,     0,   116,   117,     0,     0,    13,
-      94,    95,   120,     0,   133,   119,     0,    90,    80,    56,
-     111,     0,     0,     0,   165,     0,     0,   158,     0,     0,
-     159,   157,     0,     0,     0,   186,   187,   184,   185,   188,
-     189,   181,   191,   192,   193,   183,   182,   190,   177,   178,
-     179,   180,   102,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   133,   121,   133,   150,     0,   151,     0,     0,     0,
-     133,     0,   132,     0,    17,    18,    11,    14,    15,   130,
-     137,   138,     0,   134,   135,   133,     0,   213,   214,     0,
-     164,   162,   163,     0,     0,     0,   161,   218,   144,   110,
-     205,   206,   203,   204,   207,   208,   200,   210,   211,   212,
-     202,   201,   209,   196,   197,   198,   199,   104,     0,     0,
-      10,   112,   113,   114,     0,     0,   115,    77,     0,     0,
-     136,    20,   109,   106,     0,     0,   133,   123,     0,     0,
-       0,     0,    16,   131,    21,   133,   125,   122,     0,     0,
-       0,   127,   133,     0,    22,     0,     0,     0,   133,    12,
-      19,     0,     0,   124,   133,     0,    23,   126,     0,     0,
-       0,   128,   129
+      41,    28,    30,     0,     0,    55,   116,   117,     0,     0,
+      13,    94,    95,   120,     0,   133,   119,     0,    90,    80,
+      56,   111,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   188,   190,   191,   189,     0,     0,     0,     0,
+       0,     0,   145,     0,     0,   195,     0,     0,   196,   194,
+       0,     0,     0,   217,   218,   215,   216,   219,   220,   212,
+     222,   223,   224,   214,   213,   221,   208,   209,   210,   211,
+     102,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   133,
+     121,   133,   152,     0,   153,     0,     0,     0,   133,     0,
+       0,   132,     0,    17,    18,    11,    14,    15,   130,   137,
+     138,     0,   134,   135,   133,     0,   192,   193,     0,    33,
+      43,    46,    76,    48,    49,    50,    65,    66,   172,   165,
+     164,   171,   244,   245,     0,   201,   199,   200,     0,     0,
+       0,   198,   249,   144,   110,   236,   237,   234,   235,   238,
+     239,   231,   241,   242,   243,   233,   232,   240,   227,   228,
+     229,   230,   104,     0,     0,    10,   112,   113,   114,     0,
+       0,   115,    77,     0,     0,   136,    20,   109,   163,     0,
+       0,     0,     0,   169,     0,     0,   167,   168,   106,     0,
+       0,   133,   123,     0,     0,     0,     0,    16,   131,    21,
+     183,   185,   186,   184,     0,     0,   187,   133,   125,   122,
+       0,     0,     0,   127,   133,     0,    22,     0,     0,     0,
+       0,   133,    12,    19,     0,   166,     0,   124,   133,     0,
+      23,   126,     0,     0,     0,   128,   129
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -297,  -297,  -297,   112,  -297,  -297,  -297,  -297,  -297,  -167,
-    -297,  -297,     0,   -28,  -297,     3,   -61,  -297,    -6,   161,
-    -297,  -297,  -297,  -297,  -297,  -297,  -297,  -297,  -266,  -297,
-    -296,   -68,   -19,   -92,  -297,  -137,  -297,  -297,  -297,   -49,
-     -94,   -53,   -99,    15,  -297,   218,    38,   -51,    22,  -182
+    -325,  -325,  -325,   114,  -325,  -325,  -325,  -325,  -325,  -221,
+    -325,  -325,     0,   -28,  -325,     3,   -63,  -325,    -6,   156,
+    -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -303,  -325,
+    -324,  -100,   -16,  -110,  -325,  -118,  -325,  -325,   -69,  -220,
+     169,  -325,  -325,  -325,  -255,  -325,  -325,   -76,  -325,   -57,
+     264,    32,   -43,     9,  -188
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    67,    68,    69,    70,    71,   295,   296,   297,   298,
-      72,   373,   110,    92,    93,   301,    75,    76,   111,   112,
-      77,   217,    78,    79,    80,    81,    82,    83,   302,   303,
-     304,   113,   114,   285,   133,   115,   116,   117,   168,   169,
-     118,   119,   120,   152,   197,   170,   198,   122,   171,   172
+       0,    67,    68,    69,    70,    71,   324,   325,   326,   327,
+      72,   435,   111,    92,    93,   330,    75,    76,   112,   113,
+      77,   228,    78,    79,    80,    81,    82,    83,   331,   332,
+     333,   114,   115,   313,   138,   116,   117,   118,   348,   349,
+     119,   120,   121,   256,   338,   122,   180,   181,   123,   124,
+     182,   208,   126,   183,   184
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -908,315 +932,353 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      73,   138,   132,    74,   142,   158,   350,   160,   161,    91,
-      84,   204,   262,   127,   125,   338,   173,   340,   215,   126,
-     238,   131,   136,   134,   345,   293,   135,   196,   216,    91,
-     150,   150,   150,   150,   196,   140,   239,   143,   294,   351,
-     240,   204,   350,   147,   350,   151,   151,   151,   151,   350,
-     148,   309,   196,   195,   149,   350,   192,   193,   204,   173,
-     195,   184,   196,    91,   141,    73,   174,   145,    73,   218,
-     199,    74,   350,   286,   286,   286,    85,   199,   195,   350,
-     242,   235,   353,   350,   190,   191,   192,   193,   195,   350,
-     368,   237,   350,   129,   130,   199,   175,   207,   337,   375,
-     189,   190,   191,   192,   193,   199,   379,   208,   358,   167,
-     380,   381,   385,   226,   153,   154,   155,   209,   388,   287,
-     288,   219,   220,   221,   222,    91,   225,   359,   227,   213,
-     244,   236,   307,   308,   241,   177,   178,   179,   180,   202,
-     203,    91,   204,   242,   283,   184,   205,   206,   305,   228,
-     289,   306,   318,   339,   369,   341,   342,   343,   223,   348,
-     363,   367,   299,   371,   238,   372,   177,   178,   179,   180,
-     202,   203,   383,   204,   387,   391,   184,   205,   206,   392,
-     144,   362,   187,   188,   189,   190,   191,   192,   193,   137,
-     316,   284,   284,   284,   230,   243,     0,     0,     0,     0,
-       0,    73,     0,     0,   282,     0,     0,     0,     0,     0,
-     131,   131,   131,   187,   188,   189,   190,   191,   192,   193,
-       0,   224,     0,    73,    73,     0,     0,     0,   121,   124,
-       0,     0,     0,     0,     0,     0,     0,   128,   201,   315,
-       0,     0,     0,     0,     0,     0,   121,   177,   178,   179,
-     180,   202,   203,     0,   204,     0,     0,   184,   205,   206,
-       0,     0,     0,     0,   177,   178,   179,   180,   202,   203,
-       0,   204,     0,     0,   184,   205,   206,     0,     0,     0,
-     139,    73,     0,    73,     0,     0,     0,     0,     0,     0,
-      73,   146,     0,   347,   187,   188,   189,   190,   191,   192,
-     193,     0,    73,     0,     0,    73,     0,     0,     0,     0,
-       0,   187,   188,   189,   190,   191,   192,   193,     0,   361,
-     156,   157,   234,   159,     0,     0,   163,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    73,    73,
-      73,   200,   357,     0,     0,    73,     0,    91,   214,     0,
-       0,    73,     0,     0,    73,     0,    73,   366,     0,     0,
-       0,     0,     0,     0,   374,    73,     0,     0,    73,     0,
-       0,     0,    73,     0,     0,    73,     0,     0,    73,    73,
-       0,   386,     0,     0,    73,    73,     0,     0,    73,     0,
-       0,     0,     0,     0,     0,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,     0,     0,     0,     0,     0,     0,     0,     0,
-     249,   250,   251,   253,   254,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   291,   292,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   310,   311,     0,   312,     0,     0,     0,
-     317,     0,   319,   177,   178,   179,   180,   202,   203,     0,
-     204,     0,     0,   184,   205,   206,     0,     0,     0,     0,
-       0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   344,     0,     0,
-     187,   188,   189,   190,   191,   192,   193,     0,     0,   233,
-       0,   234,     0,     0,   352,     0,     0,     0,     0,     0,
+      73,   144,   148,    74,    84,   137,   383,   395,   385,    91,
+     214,   322,   214,   131,   129,   390,   185,   226,   290,   130,
+     266,   136,   142,   140,   323,   207,   141,   227,   270,    91,
+     408,   396,   207,   242,   214,   146,   153,   196,   244,   246,
+     243,   156,   157,   158,   159,   245,   247,   162,   133,   134,
+     172,   173,   207,   202,   203,   204,   205,   204,   205,   395,
+     207,   395,   248,    91,   147,    73,   395,   151,    73,   249,
+      85,    74,   395,   354,   250,   149,   201,   202,   203,   204,
+     205,   251,   209,   336,   399,   400,   401,   402,   337,   209,
+     405,   252,   154,   253,   267,   254,   155,   255,   268,   443,
+     444,   217,   314,   314,   314,   170,   395,   185,   430,   209,
+     179,   315,   316,   186,   395,   187,   218,   209,   395,   237,
+     382,   219,   229,   230,   438,   395,   231,   232,   395,    91,
+     233,   442,   236,   223,   238,   170,   257,   258,   449,   272,
+     311,   263,   264,   265,   269,   452,   270,    91,   317,   413,
+     319,   334,   335,   363,   384,   239,   386,   424,   387,   388,
+     393,   266,   418,   425,   429,   431,   433,   434,   414,   437,
+     447,   328,   417,   451,   455,   456,   189,   190,   191,   192,
+     212,   213,   150,   214,   143,   426,   196,   215,   216,   351,
+     139,   361,   241,     0,   271,     0,     0,     0,     0,     0,
+     350,   350,   352,   353,   312,   312,   312,     0,     0,     0,
+       0,    73,     0,     0,   310,     0,     0,     0,     0,     0,
+     136,   136,   136,   199,   200,   201,   202,   203,   204,   205,
+       0,     0,     0,     0,    73,    73,     0,     0,   234,     0,
+       0,     0,     0,     0,     0,     0,   189,   190,   191,   192,
+     212,   213,     0,   214,     0,     0,   196,   215,   216,     0,
+       0,     0,   350,     0,     0,     0,     0,   360,     0,     0,
+       0,     0,     0,     0,   125,   128,     0,     0,     0,     0,
+       0,   398,     0,   132,     0,     0,   403,   404,     0,   406,
+     407,     0,   125,   199,   200,   201,   202,   203,   204,   205,
+       0,   235,     0,   189,   190,   191,   192,   212,   213,    73,
+     214,    73,     0,   196,   215,   216,     0,     0,    73,     0,
+       0,     0,   392,     0,     0,     0,   145,     0,     0,     0,
+       0,    73,     0,     0,    73,     0,     0,   152,     0,     0,
+       0,     0,   420,   421,   422,   423,     0,     0,     0,     0,
+     199,   200,   201,   202,   203,   204,   205,     0,     0,   261,
+       0,   262,     0,     0,   416,     0,   160,   161,   403,     0,
+     171,     0,     0,   175,     0,     0,     0,     0,     0,     0,
+     445,     0,     0,    73,    73,    73,     0,   412,     0,     0,
+      73,   210,    91,     0,     0,     0,    73,     0,   224,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
+       0,    73,   428,     0,     0,     0,     0,     0,     0,   436,
+       0,     0,     0,     0,     0,     0,     0,    73,     0,     0,
+      73,     0,     0,     0,    73,     0,     0,     0,    73,     0,
+       0,    73,    73,     0,   450,     0,     0,     0,    73,    73,
+       0,     0,    73,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+       0,     0,     0,     0,     0,     0,   277,   278,   279,   281,
+     282,     0,     0,     0,     0,   211,     0,     0,     0,     0,
+       0,     0,   320,   321,   189,   190,   191,   192,   212,   213,
+       0,   214,     0,     0,   196,   215,   216,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      94,    95,     1,   164,   165,     0,    98,    99,   100,   101,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,   370,     0,     0,
-       0,    30,    31,   104,    33,    34,    35,   377,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-       0,    57,    58,   105,    60,    61,    89,     0,     0,     0,
-       0,     0,     0,    90,     0,     0,     0,   106,   107,     0,
-       0,     0,     0,     0,   123,     0,   109,     0,   166,    94,
+       0,     0,     0,     0,     0,     0,     0,   355,   356,     0,
+     357,     0,     0,     0,   362,     0,   364,     0,     0,     0,
+       0,   199,   200,   201,   202,   203,   204,   205,     0,     0,
+       0,     0,     0,     0,     0,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     380,   381,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   389,     0,    94,    95,     1,   176,   177,     0,    98,
+      99,   100,   101,     6,     0,     0,     0,     8,     0,   397,
+       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
+      88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
+       0,     0,     0,     0,    30,    31,   104,    33,    34,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,   105,    57,    58,   106,    60,    61,    89,
+       0,     0,     0,     0,     0,     0,    90,     0,     0,     0,
+     107,   108,     0,     0,     0,     0,     0,   127,   432,   110,
+       0,   178,    94,    95,     1,    96,    97,     0,    98,    99,
+     100,   101,     6,     0,     0,   440,     8,     0,     0,     0,
+      12,    13,     0,    15,    86,   188,    18,     0,    87,    88,
+       0,    22,     0,    24,    25,     0,    27,     0,     0,   189,
+     190,   191,   192,   193,   194,   104,   195,    34,    35,   196,
+     197,   198,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,   105,    57,    58,   106,    60,    61,    89,     0,
+       0,     0,     0,     0,     0,    90,   199,   200,   201,   202,
+     203,   204,   205,     0,     0,   206,   127,     0,   110,    94,
       95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    86,   176,    18,     0,    87,    88,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,   177,   178,   179,   180,
-     181,   182,   104,   183,    34,    35,   184,   185,   186,    38,
+       0,     0,     0,     8,     0,     0,     0,    12,   220,     0,
+      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,   189,   190,   191,   192,
+     193,   194,   104,   195,   221,   222,   196,   197,   198,    38,
       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,     0,
-      57,    58,   105,    60,    61,    89,     0,     0,     0,     0,
-       0,     0,    90,   187,   188,   189,   190,   191,   192,   193,
-       0,     0,   194,   123,     0,   109,    94,    95,     1,    96,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   105,
+      57,    58,   106,    60,    61,    89,     0,     0,     0,     0,
+       0,     0,    90,   199,   200,   201,   202,   203,   204,   205,
+       0,     0,   206,   127,     0,   110,    94,    95,     1,    96,
       97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,   210,     0,    15,    86,    17,
+       8,     0,     0,     0,    12,    13,     0,    15,    86,    17,
       18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
-      27,     0,     0,   177,   178,   179,   180,   181,   182,   104,
-     183,   211,   212,   184,   185,   186,    38,    39,    40,    41,
+      27,     0,     0,   189,   190,   191,   192,   193,   194,   104,
+     195,    34,    35,   196,   197,   198,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,     0,    57,    58,   105,
+      51,    52,    53,    54,    55,    56,   105,    57,    58,   106,
       60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
-     187,   188,   189,   190,   191,   192,   193,     0,     0,   194,
-     123,     0,   109,    94,    95,     1,    96,    97,     0,    98,
+     199,   200,   201,   202,   203,   204,   205,     0,     0,   206,
+     127,     0,   110,    94,    95,     1,    96,    97,     0,    98,
       99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
+       0,    12,    13,     0,    15,    86,   240,    18,     0,    87,
       88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-     177,   178,   179,   180,   181,   182,   104,   183,    34,    35,
-     184,   185,   186,    38,    39,    40,    41,    42,    43,    44,
+     189,   190,   191,   192,   193,   194,   104,   195,    34,    35,
+     196,   197,   198,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,     0,    57,    58,   105,    60,    61,    89,
-       0,     0,     0,     0,     0,     0,    90,   187,   188,   189,
-     190,   191,   192,   193,     0,     0,   194,   123,     0,   109,
+      54,    55,    56,   105,    57,    58,   106,    60,    61,    89,
+       0,     0,     0,     0,     0,     0,    90,   199,   200,   201,
+     202,   203,   204,   205,     0,     0,     0,   127,     0,   110,
       94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
        6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    86,   229,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,   177,   178,   179,
-     180,   181,   182,   104,   183,    34,    35,   184,   185,   186,
+       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,    30,    31,   104,    33,    34,    35,     0,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-       0,    57,    58,   105,    60,    61,    89,     0,     0,     0,
-       0,     0,     0,    90,   187,   188,   189,   190,   191,   192,
-     193,     0,     0,     0,   123,     0,   109,    94,    95,     1,
+     105,    57,    58,   106,    60,    61,    89,     0,     0,     0,
+       0,     0,     0,    90,     0,     0,     0,   107,   108,     0,
+       0,     0,     0,     0,   127,   174,   110,    94,    95,     1,
       96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
+       0,   102,     0,     0,     0,    12,    13,     0,   103,    86,
       17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
        0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
      104,    33,    34,    35,     0,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,     0,    57,    58,
-     105,    60,    61,    89,     0,     0,     0,     0,     0,     0,
-      90,     0,     0,     0,   106,   107,     0,     0,     0,     0,
-       0,   123,   162,   109,    94,    95,     1,    96,    97,     0,
-      98,    99,   100,   101,     6,     0,     0,     0,   102,     0,
-       0,     0,    12,    13,     0,   103,    86,    17,    18,     0,
+       0,    51,    52,    53,    54,    55,    56,   105,    57,    58,
+     106,    60,    61,    89,     0,     0,     0,     0,     0,     0,
+      90,     0,     0,     0,   107,   108,     0,     0,     0,     0,
+       0,   109,     0,   110,    94,    95,     1,    96,    97,     0,
+      98,    99,   100,   101,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
       87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
        0,     0,     0,     0,     0,    30,    31,   104,    33,    34,
       35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,     0,    57,    58,   105,    60,    61,
+      53,    54,    55,    56,   105,    57,    58,   106,    60,    61,
       89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
-       0,   106,   107,     0,     0,     0,     0,     0,   108,     0,
-     109,    94,    95,     1,    96,    97,     0,    98,    99,   100,
+       0,   107,   108,     0,     0,     0,     0,     0,   127,     0,
+     110,    94,    95,     1,    96,    97,     0,    98,    99,   100,
      101,     6,     0,     0,     0,     8,     0,     0,     0,    12,
       13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
       22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
        0,     0,    30,    31,   104,    33,    34,    35,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,   105,    60,    61,    89,     0,     0,
-       0,     0,     0,     0,    90,     0,     0,     0,   106,   107,
-       0,     0,     0,     0,     0,   123,     0,   109,    94,    95,
+      56,   105,    57,    58,   106,    60,    61,    89,     0,     0,
+       0,     0,     0,     0,    90,     0,     0,     0,   107,   108,
+       0,     0,     0,     0,     0,   109,     0,   110,    94,    95,
        1,    96,    97,     0,    98,    99,   100,   101,     6,     0,
        0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
       86,    17,    18,     0,    87,    88,     0,    22,     0,    24,
       25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
       31,   104,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
-      58,   105,    60,    61,    89,     0,     0,     0,     0,     0,
-       0,    90,     0,     0,     0,   106,   107,     0,     0,     0,
-       0,     0,   108,     0,   109,    94,    95,     1,    96,    97,
+      50,     0,    51,    52,    53,    54,    55,    56,   105,    57,
+      58,    59,    60,    61,    89,     0,     0,     0,     0,     0,
+       0,    90,     0,     0,     0,   107,   108,     0,     0,     0,
+       0,     0,   127,     0,   110,    94,    95,     1,    96,    97,
        0,    98,    99,   100,   101,     6,     0,     0,     0,     8,
        0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
        0,    87,    88,     0,    22,     0,    24,    25,     0,    27,
        0,     0,     0,     0,     0,     0,    30,    31,   104,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      34,    35,     0,    36,    37,    38,   339,    40,   340,    42,
+     341,    44,   342,    46,    47,    48,    49,    50,     0,    51,
+      52,   343,   344,   345,    56,   105,    57,   346,   347,    60,
       61,    89,     0,     0,     0,     0,     0,     0,    90,     0,
-       0,     0,   106,   107,     0,     0,     0,     0,     0,   123,
-       0,   109,    94,    95,     1,    96,    97,     0,    98,    99,
+       0,     0,   107,   108,     0,     0,     0,     0,     0,   127,
+       0,   110,    94,    95,     1,    96,    97,     0,    98,    99,
      100,   101,     6,     0,     0,     0,     8,     0,     0,     0,
       12,    13,     0,    15,    86,    17,    18,     0,    87,    88,
        0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
        0,     0,     0,    30,    31,   104,    33,    34,    35,     0,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    89,     0,
-       0,     0,     0,     0,     0,    90,     0,     0,     0,   106,
-     107,     0,     0,    94,    95,     1,    96,    97,   109,    98,
+      46,    47,    48,    49,    50,     0,    51,    52,   343,   344,
+      55,    56,   105,    57,   346,   347,    60,    61,    89,     0,
+       0,     0,     0,     0,     0,    90,     0,     0,     0,   107,
+     108,     0,     0,     0,     0,     0,   127,     0,   110,    94,
+      95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+       0,     0,   104,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   105,
+      57,    58,   106,    60,    61,    89,     0,     0,     0,     0,
+       0,     0,    90,     0,     0,     0,   107,   108,     0,     0,
+       0,     0,     0,   127,     0,   110,    94,    95,     1,    96,
+      97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,    13,     0,    15,    86,    17,
+      18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
+      27,     0,     0,     0,     0,     0,     0,     0,     0,   104,
+      33,    34,    35,     0,     0,     0,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,   105,    57,    58,   106,
+      60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
+       0,     0,     0,   107,   108,     0,     0,     0,     0,     0,
+     127,     0,   110,    94,    95,     1,    96,    97,     0,    98,
       99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
        0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
       88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,     0,     0,   104,    33,    34,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+       0,     0,     0,     0,     0,     0,   104,     0,    34,    35,
+       0,     0,     0,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,     0,    57,    58,   105,    60,    61,    89,
+      54,    55,    56,   105,    57,    58,   106,    60,    61,    89,
        0,     0,     0,     0,     0,     0,    90,     0,     0,     0,
-     106,   107,     0,     0,     0,     0,     0,   123,     0,   109,
-      94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,     0,     0,   104,    33,    34,    35,     0,     0,     0,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-       0,    57,    58,   105,    60,    61,    89,     0,     0,     0,
-       0,     0,     0,    90,     0,     0,     0,   106,   107,     0,
-       0,     0,     0,     0,   123,     0,   109,    94,    95,     1,
-      96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
+       0,     0,     0,     0,     0,     0,     1,   127,     0,   110,
+       2,     3,     4,     5,     6,     0,     0,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,    26,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,     0,    57,    58,    59,    60,    61,
+      62,    63,    64,     0,     0,     0,     1,    65,     0,     0,
+       2,     3,     4,     5,     6,   409,    66,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,     0,    57,    58,    59,    60,    61,
+      62,    63,     0,     0,   410,     0,     1,    65,     0,     0,
+       2,     3,     4,     5,     6,     0,   329,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,     0,    57,    58,    59,    60,    61,
+      62,    63,     0,     0,     0,     0,   394,    65,     0,     0,
+       0,     0,     0,     1,     0,     0,   329,     2,     3,     4,
+       5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,     0,   415,     1,    65,     0,   419,     2,     3,     4,
+       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,   439,     0,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,   446,     0,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,     0,   453,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,     0,   454,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   309,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   411,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
+       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
+       5,     6,     0,   427,     7,     8,     9,    10,     0,    12,
+      13,     0,    15,    16,    17,    18,    19,    87,    21,     0,
+      22,     0,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    89,    63,     0,
+       0,     1,   358,   359,    65,     2,     3,     4,     5,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
+      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,     0,
+      57,    58,    59,    60,    61,    89,     0,     0,     0,     1,
+       0,     0,    90,     2,     3,     4,     5,     6,     0,     0,
        0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
       17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
-     104,     0,    34,    35,     0,     0,     0,    38,    39,    40,
+       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,     0,    57,    58,
-     105,    60,    61,    89,     0,     0,     0,     0,     0,     0,
-      90,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       1,   123,     0,   109,     2,     3,     4,     5,     6,     0,
-       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
-       1,    65,     0,     0,     2,     3,     4,     5,     6,   354,
-      66,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,   355,     0,
-       1,    65,     0,     0,     2,     3,     4,     5,     6,     0,
-     300,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
-     349,    65,     0,     0,     0,     0,     0,     1,     0,     0,
-     300,     2,     3,     4,     5,     6,     0,     0,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,   360,     1,    65,     0,
-     364,     2,     3,     4,     5,     6,     0,   300,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,   376,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,   382,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,   389,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,   390,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   281,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   300,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   356,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   365,     7,     8,
-       9,    10,     0,    12,    13,     0,    15,    16,    17,    18,
-      19,    87,    21,     0,    22,     0,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+       0,    51,    52,    53,    54,    55,    56,   135,    57,    58,
+      59,    60,    61,    89,     0,     0,     0,     1,     0,     0,
+      90,     2,     3,     4,     5,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
+       0,    87,    88,     0,    22,     0,    24,    25,     0,    27,
+       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    89,    63,     0,     0,     1,   313,   314,    65,     2,
+      61,    89,     0,     0,     0,     1,     0,     0,    90,     2,
        3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
        0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
       88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
        0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
        0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,     0,    57,    58,    59,    60,    61,    89,
+      45,   163,   164,   165,   166,   167,     0,    51,   168,    53,
+      54,    55,   169,     0,    57,    58,    59,    60,    61,    89,
        0,     0,     0,     1,     0,     0,    90,     2,     3,     4,
        5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
       13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
@@ -1224,7 +1286,7 @@ static const yytype_int16 yytable[] =
        0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    89,     0,     0,
+     225,     0,    57,    58,    59,    60,    61,    89,     0,     0,
        0,     1,     0,     0,    90,    98,    99,     4,     5,     6,
        0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
       15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
@@ -1232,107 +1294,126 @@ static const yytype_int16 yytable[] =
       30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
       49,    50,     0,    51,    52,    53,    54,    55,    56,     0,
-      57,    58,    59,    60,    61,    89,   263,   264,   265,   266,
-     267,   268,    90,   269,     0,     0,   270,   271,   272,   177,
-     178,   179,   180,   202,   203,     0,   204,     0,     0,   184,
-     205,   206,   177,   178,   179,   180,   202,   203,     0,   204,
-       0,     0,   184,   205,   206,     0,     0,     0,     0,     0,
-       0,     0,     0,   273,   274,   275,   276,   277,   278,   279,
-       0,     0,   280,     0,     0,     0,   187,   188,   189,   190,
-     191,   192,   193,     0,   290,     0,     0,     0,     0,   187,
-     188,   189,   190,   191,   192,   193,     0,   346,   177,   178,
-     179,   180,   202,   203,     0,   204,     0,     0,   184,   205,
-     206,   177,   178,   179,   180,   202,   203,     0,   204,     0,
-       0,   184,   205,   206,     0,     0,     0,     0,     0,     0,
-     177,   178,   179,   180,   202,   203,     0,   204,     0,     0,
-     184,   205,   206,     0,     0,   187,   188,   189,   190,   191,
-     192,   193,     0,   378,     0,     0,     0,     0,   187,   188,
-     189,   190,   191,   192,   193,     0,   384,   231,   232,     0,
-       0,     0,     0,     0,     0,     0,     0,   187,   188,   189,
-     190,   191,   192,   193,   177,   178,   179,   180,   202,   203,
-       0,   204,     0,     0,   184,   205,   206,   263,   264,   265,
-     266,   267,   268,     0,   269,     0,     0,   270,   271,   272,
-     177,   178,   179,   180,     0,     0,     0,   204,     0,     0,
-     184,   205,   206,     0,     0,     0,     0,     0,     0,     0,
-       0,   187,   188,   189,   190,   191,   192,   193,     0,     0,
-       0,     0,     0,     0,   273,   274,   275,   276,   277,   278,
-     279,     0,     0,     0,     0,     0,     0,   187,   188,   189,
-     190,   191,   192,   193
+      57,    58,    59,    60,    61,    89,   189,   190,   191,   192,
+     212,   213,    90,   214,     0,     0,   196,   215,   216,   291,
+     292,   293,   294,   295,   296,     0,   297,     0,     0,   298,
+     299,   300,   189,   190,   191,   192,   212,   213,     0,   214,
+       0,     0,   196,   215,   216,     0,     0,     0,     0,     0,
+       0,     0,     0,   199,   200,   201,   202,   203,   204,   205,
+       0,     0,     0,     0,   262,     0,   301,   302,   303,   304,
+     305,   306,   307,     0,     0,   308,     0,     0,     0,   199,
+     200,   201,   202,   203,   204,   205,     0,   318,   189,   190,
+     191,   192,   212,   213,     0,   214,     0,     0,   196,   215,
+     216,   189,   190,   191,   192,   212,   213,     0,   214,     0,
+       0,   196,   215,   216,   189,   190,   191,   192,   212,   213,
+       0,   214,     0,     0,   196,   215,   216,     0,     0,     0,
+       0,     0,     0,     0,     0,   199,   200,   201,   202,   203,
+     204,   205,     0,   391,     0,     0,     0,     0,   199,   200,
+     201,   202,   203,   204,   205,     0,   441,     0,     0,     0,
+       0,   199,   200,   201,   202,   203,   204,   205,     0,   448,
+     189,   190,   191,   192,   212,   213,     0,   214,     0,     0,
+     196,   215,   216,   189,   190,   191,   192,   212,   213,     0,
+     214,     0,     0,   196,   215,   216,     0,     0,     0,   291,
+     292,   293,   294,   295,   296,     0,   297,   259,   260,   298,
+     299,   300,     0,     0,     0,     0,     0,   199,   200,   201,
+     202,   203,   204,   205,     0,     0,     0,     0,     0,     0,
+     199,   200,   201,   202,   203,   204,   205,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   301,   302,   303,   304,
+     305,   306,   307,   189,   190,   191,   192,     0,     0,     0,
+     214,     0,     0,   196,   215,   216,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     199,   200,   201,   202,   203,   204,   205
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,    21,     0,    65,   104,   302,   106,   107,     9,
-      31,    49,   194,    19,    14,   281,    99,   283,    34,    31,
-     103,    21,    28,    23,   290,    84,    26,   121,    44,    29,
-      98,    99,   100,   101,   128,    63,    98,     0,    97,   305,
-     102,    49,   338,    97,   340,    98,    99,   100,   101,   345,
-      97,   233,   146,   121,    98,   351,    94,    95,    49,    99,
-     128,    52,   156,    63,    64,    65,    97,    73,    68,    33,
-     121,    68,   368,   210,   211,   212,    97,   128,   146,   375,
-      98,   103,   100,   379,    92,    93,    94,    95,   156,   385,
-     356,   102,   388,    36,    37,   146,    97,   125,   280,   365,
-      91,    92,    93,    94,    95,   156,   372,    97,    15,   109,
-      97,    98,   378,   141,    99,   100,   101,    97,   384,   211,
-     212,    97,    97,    97,    97,   125,    97,    34,    97,   129,
-      26,   103,   231,   232,   102,    42,    43,    44,    45,    46,
-      47,   141,    49,    98,    97,    52,    53,    54,    97,   149,
-      44,    26,   100,    16,    34,    97,    97,    97,    34,    97,
-      97,    97,   223,    97,   103,    97,    42,    43,    44,    45,
-      46,    47,    97,    49,    97,    97,    52,    53,    54,    97,
-      68,   348,    89,    90,    91,    92,    93,    94,    95,    28,
-     239,   210,   211,   212,   156,   173,    -1,    -1,    -1,    -1,
-      -1,   201,    -1,    -1,   201,    -1,    -1,    -1,    -1,    -1,
-     210,   211,   212,    89,    90,    91,    92,    93,    94,    95,
-      -1,    97,    -1,   223,   224,    -1,    -1,    -1,    10,    11,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,    33,   239,
-      -1,    -1,    -1,    -1,    -1,    -1,    28,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
-      62,   281,    -1,   283,    -1,    -1,    -1,    -1,    -1,    -1,
-     290,    73,    -1,   293,    89,    90,    91,    92,    93,    94,
-      95,    -1,   302,    -1,    -1,   305,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,   347,
-     102,   103,   100,   105,    -1,    -1,   108,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,
-     340,   123,   339,    -1,    -1,   345,    -1,   347,   130,    -1,
-      -1,   351,    -1,    -1,   354,    -1,   356,   354,    -1,    -1,
-      -1,    -1,    -1,    -1,   364,   365,    -1,    -1,   368,    -1,
-      -1,    -1,   372,    -1,    -1,   375,    -1,    -1,   378,   379,
-      -1,   381,    -1,    -1,   384,   385,    -1,    -1,   388,    -1,
-      -1,    -1,    -1,    -1,    -1,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     202,   203,   204,   205,   206,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   217,   218,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   235,   236,    -1,   238,    -1,    -1,    -1,
-     242,    -1,   244,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
-      -1,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   289,    -1,    -1,
+       0,    29,    65,     0,    31,    21,   309,   331,   311,     9,
+      49,    84,    49,    19,    14,   318,    99,    34,   206,    31,
+     103,    21,    28,    23,    97,   125,    26,    44,    98,    29,
+     100,   334,   132,    69,    49,    63,    97,    52,    69,    69,
+      76,    98,    99,   100,   101,    76,    76,   104,    36,    37,
+     107,   108,   152,    92,    93,    94,    95,    94,    95,   383,
+     160,   385,    69,    63,    64,    65,   390,    73,    68,    76,
+      97,    68,   396,   261,    69,     0,    91,    92,    93,    94,
+      95,    76,   125,    23,   339,   340,   341,   342,    28,   132,
+     345,    55,    97,    57,    98,    59,    98,    61,   102,    97,
+      98,   129,   220,   221,   222,   105,   430,    99,   411,   152,
+     110,   221,   222,    97,   438,    97,    97,   160,   442,   147,
+     308,    97,    33,    97,   427,   449,    97,    97,   452,   129,
+      97,   434,    97,   133,    97,   135,    28,    28,   441,    26,
+      97,   103,   103,   102,   102,   448,    98,   147,    44,    15,
+      28,    97,    26,   100,    16,   155,    97,    28,    97,    97,
+      97,   103,    97,    71,    97,    34,    97,    97,    34,    71,
+      97,   234,   393,    97,    97,    97,    42,    43,    44,    45,
+      46,    47,    68,    49,    28,   405,    52,    53,    54,   258,
+      21,   267,   160,    -1,   185,    -1,    -1,    -1,    -1,    -1,
+     257,   258,   259,   260,   220,   221,   222,    -1,    -1,    -1,
+      -1,   211,    -1,    -1,   211,    -1,    -1,    -1,    -1,    -1,
+     220,   221,   222,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,    -1,   234,   235,    -1,    -1,    34,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,   319,    -1,    -1,    -1,    -1,   267,    -1,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    -1,    -1,    -1,    -1,
+      -1,   338,    -1,    19,    -1,    -1,   343,   344,    -1,   346,
+     347,    -1,    28,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    -1,    42,    43,    44,    45,    46,    47,   309,
+      49,   311,    -1,    52,    53,    54,    -1,    -1,   318,    -1,
+      -1,    -1,   322,    -1,    -1,    -1,    62,    -1,    -1,    -1,
+      -1,   331,    -1,    -1,   334,    -1,    -1,    73,    -1,    -1,
+      -1,    -1,   399,   400,   401,   402,    -1,    -1,    -1,    -1,
       89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
-      -1,   100,    -1,    -1,   306,    -1,    -1,    -1,    -1,    -1,
+      -1,   100,    -1,    -1,   392,    -1,   102,   103,   425,    -1,
+     106,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
+     437,    -1,    -1,   383,   384,   385,    -1,   384,    -1,    -1,
+     390,   127,   392,    -1,    -1,    -1,   396,    -1,   134,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   409,
+      -1,   411,   409,    -1,    -1,    -1,    -1,    -1,    -1,   419,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   427,    -1,    -1,
+     430,    -1,    -1,    -1,   434,    -1,    -1,    -1,   438,    -1,
+      -1,   441,   442,    -1,   444,    -1,    -1,    -1,   448,   449,
+      -1,    -1,   452,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+      -1,    -1,    -1,    -1,    -1,    -1,   212,   213,   214,   215,
+     216,    -1,    -1,    -1,    -1,    33,    -1,    -1,    -1,    -1,
+      -1,    -1,   228,   229,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
-      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    39,    -1,    -1,   359,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,   369,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    99,    -1,   101,    -1,   103,     5,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   263,   264,    -1,
+     266,    -1,    -1,    -1,   270,    -1,   272,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   317,    -1,     5,     6,     7,     8,     9,    -1,    11,
+      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,   335,
+      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
+      32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    99,   414,   101,
+      -1,   103,     5,     6,     7,     8,     9,    -1,    11,    12,
+      13,    14,    15,    -1,    -1,   431,    19,    -1,    -1,    -1,
+      23,    24,    -1,    26,    27,    28,    29,    -1,    31,    32,
+      -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    98,    99,    -1,   101,     5,
        6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
       -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
       26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
       36,    37,    -1,    39,    -1,    -1,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
       -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
       -1,    -1,    98,    99,    -1,   101,     5,     6,     7,     8,
@@ -1342,7 +1423,7 @@ static const yytype_int16 yycheck[] =
       39,    -1,    -1,    42,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
       89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
       99,    -1,   101,     5,     6,     7,     8,     9,    -1,    11,
@@ -1352,36 +1433,36 @@ static const yytype_int16 yycheck[] =
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    98,    99,    -1,   101,
+      92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,   101,
        5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
       15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
       -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    39,    -1,    -1,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,     7,
        8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
       -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
       28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
       48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      -1,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
+      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
       88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
-      -1,    99,   100,   101,     5,     6,     7,     8,     9,    -1,
+      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    -1,
       11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
       -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
       31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
       -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
       51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
       81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
       -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
      101,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
@@ -1391,7 +1472,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
       -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
       -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
        7,     8,     9,    -1,    11,    12,    13,    14,    15,    -1,
@@ -1400,7 +1481,7 @@ static const yytype_int16 yycheck[] =
       37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
       -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
       -1,    -1,    99,    -1,   101,     5,     6,     7,     8,     9,
@@ -1410,7 +1491,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
       -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,
       -1,   101,     5,     6,     7,     8,     9,    -1,    11,    12,
@@ -1420,150 +1501,174 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    -1,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    -1,
       -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,
-      93,    -1,    -1,     5,     6,     7,     8,     9,   101,    11,
+      93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,
+       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
+      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
+      36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
+      -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,
+      -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,     8,
+       9,    -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,
+      19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
+      29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,
+      49,    50,    51,    -1,    -1,    -1,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+      -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,
+      99,    -1,   101,     5,     6,     7,     8,     9,    -1,    11,
       12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
       -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
       32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    50,    51,
+      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
-       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
-      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,    -1,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
-       8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     7,    99,    -1,   101,
+      11,    12,    13,    14,    15,    -1,    -1,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    82,    83,    -1,    -1,    -1,     7,    88,    -1,    -1,
+      11,    12,    13,    14,    15,    16,    97,    18,    19,    20,
+      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,    -1,
+      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
+      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    -1,    -1,    87,    88,    -1,    -1,
+      -1,    -1,    -1,     7,    -1,    -1,    97,    11,    12,    13,
+      14,    15,    -1,    -1,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    86,     7,    88,    -1,    10,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    -1,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    -1,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,     7,     8,     9,    88,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
+      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
+      36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,     7,
+      -1,    -1,    88,    11,    12,    13,    14,    15,    -1,    -1,
       -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
       28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,    57,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      -1,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       7,    99,    -1,   101,    11,    12,    13,    14,    15,    -1,
-      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
-      77,    78,    79,    80,    81,    82,    83,    -1,    -1,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    16,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-      87,    88,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
-      97,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
-      10,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    -1,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    -1,    -1,    -1,     7,    -1,    -1,
+      88,    11,    12,    13,    14,    15,    -1,    -1,    -1,    19,
+      -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,    29,
+      -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,     7,     8,     9,    88,    11,
+      80,    81,    -1,    -1,    -1,     7,    -1,    -1,    88,    11,
       12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
       -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
       32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
@@ -1592,26 +1697,31 @@ static const yytype_int16 yycheck[] =
       53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
       -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    98,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
+      -1,    -1,    -1,    -1,   100,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    98,    -1,    -1,    -1,    89,
       90,    91,    92,    93,    94,    95,    -1,    97,    42,    43,
       44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
       54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    89,    90,    91,    92,    93,
+      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
       94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    79,    80,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      42,    43,    44,    45,    -1,    -1,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95
+      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    42,
+      43,    44,    45,    46,    47,    -1,    49,    79,    80,    52,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    42,    43,    44,    45,    -1,    -1,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1628,36 +1738,42 @@ static const yytype_uint8 yystos[] =
      108,   109,   114,   116,   119,   120,   121,   124,   126,   127,
      128,   129,   130,   131,    31,    97,    27,    31,    32,    81,
       88,   116,   117,   118,     5,     6,     8,     9,    11,    12,
-      13,    14,    19,    26,    48,    78,    92,    93,    99,   101,
-     116,   122,   123,   135,   136,   139,   140,   141,   144,   145,
-     146,   149,   151,    99,   149,   116,    31,   122,   149,    36,
-      37,   116,   136,   138,   116,   116,   122,   123,   117,   149,
-     117,   116,   120,     0,   107,   122,   149,    97,    97,    98,
-     135,   145,   147,   147,   147,   147,   149,   149,   146,   149,
-     146,   146,   100,   149,     8,     9,   103,   116,   142,   143,
-     149,   152,   153,    99,    97,    97,    28,    42,    43,    44,
-      45,    46,    47,    49,    52,    53,    54,    89,    90,    91,
-      92,    93,    94,    95,    98,   135,   144,   148,   150,   151,
-     149,    33,    46,    47,    49,    53,    54,   117,    97,    97,
-      24,    50,    51,   116,   149,    34,    44,   125,    33,    97,
-      97,    97,    97,    34,    97,    97,   117,    97,   116,    28,
-     150,    79,    80,    98,   100,   103,   103,   102,   103,    98,
-     102,   102,    98,   152,    26,   149,   149,   149,   149,   149,
-     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
-     149,   149,   153,    42,    43,    44,    45,    46,    47,    49,
-      52,    53,    54,    89,    90,    91,    92,    93,    94,    95,
-      98,    97,   119,    97,   136,   137,   139,   137,   137,    44,
-      97,   149,   149,    84,    97,   110,   111,   112,   113,   120,
-      97,   119,   132,   133,   134,    97,    26,   146,   146,   153,
-     149,   149,   149,     8,     9,   116,   143,   149,   100,   149,
-     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
-     149,   149,   149,   149,   149,   149,   149,   153,   132,    16,
-     132,    97,    97,    97,   149,   132,    97,   116,    97,    87,
-     134,   132,   149,   100,    16,    85,    97,   119,    15,    34,
-      86,   117,   113,    97,    10,    97,   119,    97,   132,    34,
-     149,    97,    97,   115,   116,   132,    85,   149,    97,   132,
-      97,    98,    85,    97,    97,   132,   116,    97,   132,    86,
-      86,    97,    97
+      13,    14,    19,    26,    48,    75,    78,    92,    93,    99,
+     101,   116,   122,   123,   135,   136,   139,   140,   141,   144,
+     145,   146,   149,   152,   153,   154,   156,    99,   154,   116,
+      31,   122,   154,    36,    37,    75,   116,   136,   138,   144,
+     116,   116,   122,   123,   117,   154,   117,   116,   120,     0,
+     107,   122,   154,    97,    97,    98,   153,   153,   153,   153,
+     154,   154,   153,    63,    64,    65,    66,    67,    70,    74,
+     116,   154,   153,   153,   100,   154,     8,     9,   103,   116,
+     150,   151,   154,   157,   158,    99,    97,    97,    28,    42,
+      43,    44,    45,    46,    47,    49,    52,    53,    54,    89,
+      90,    91,    92,    93,    94,    95,    98,   135,   155,   156,
+     154,    33,    46,    47,    49,    53,    54,   117,    97,    97,
+      24,    50,    51,   116,   154,    74,    34,    44,   125,    33,
+      97,    97,    97,    97,    34,    97,    97,   117,    97,   116,
+      28,   155,    69,    76,    69,    76,    69,    76,    69,    76,
+      69,    76,    55,    57,    59,    61,   147,    28,    28,    79,
+      80,    98,   100,   103,   103,   102,   103,    98,   102,   102,
+      98,   157,    26,   154,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+     158,    42,    43,    44,    45,    46,    47,    49,    52,    53,
+      54,    89,    90,    91,    92,    93,    94,    95,    98,    97,
+     119,    97,   136,   137,   139,   137,   137,    44,    97,    28,
+     154,   154,    84,    97,   110,   111,   112,   113,   120,    97,
+     119,   132,   133,   134,    97,    26,    23,    28,   148,    56,
+      58,    60,    62,    71,    72,    73,    77,    78,   142,   143,
+     153,   142,   153,   153,   158,   154,   154,   154,     8,     9,
+     116,   151,   154,   100,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+     154,   154,   158,   132,    16,   132,    97,    97,    97,   154,
+     132,    97,   116,    97,    87,   134,   132,   154,   153,   148,
+     148,   148,   148,   153,   153,   148,   153,   153,   100,    16,
+      85,    97,   119,    15,    34,    86,   117,   113,    97,    10,
+     153,   153,   153,   153,    28,    71,   143,    97,   119,    97,
+     132,    34,   154,    97,    97,   115,   116,    71,   132,    85,
+     154,    97,   132,    97,    98,   153,    85,    97,    97,   132,
+     116,    97,   132,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1677,14 +1793,17 @@ static const yytype_uint8 yyr1[] =
      123,   123,   124,   124,   124,   124,   125,   125,   126,   126,
      126,   127,   127,   128,   128,   128,   128,   129,   129,   129,
      130,   130,   131,   132,   132,   133,   133,   134,   134,   135,
-     135,   135,   135,   135,   135,   135,   135,   135,   135,   136,
-     137,   137,   138,   139,   139,   140,   140,   141,   141,   141,
-     142,   142,   143,   143,   143,   144,   145,   145,   146,   146,
-     146,   147,   147,   148,   148,   149,   149,   149,   149,   149,
-     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
-     149,   149,   149,   149,   150,   150,   150,   150,   150,   150,
-     150,   150,   150,   150,   150,   150,   150,   150,   150,   150,
-     150,   150,   150,   151,   151,   152,   152,   153,   153
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   136,   137,   137,   138,   138,   139,   139,   140,   140,
+     141,   141,   141,   141,   142,   142,   142,   142,   142,   143,
+     144,   144,   144,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   146,   146,   146,   146,   146,   147,   147,
+     147,   147,   148,   148,   149,   149,   149,   150,   150,   151,
+     151,   151,   152,   152,   153,   153,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   155,   155,   155,   155,   155,
+     155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
+     155,   155,   155,   155,   156,   156,   157,   157,   158,   158
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1704,14 +1823,17 @@ static const yytype_int8 yyr2[] =
        4,     3,     5,     5,     5,     5,     1,     1,     3,     3,
        3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
        4,     6,     4,     0,     1,     1,     2,     1,     1,     1,
-       1,     1,     1,     2,     4,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     2,     2,     2,     3,     3,     3,
-       1,     3,     3,     3,     3,     3,     2,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     3,     3,     3,
+       1,     1,     1,     2,     4,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
+       1,     1,     1,     5,     1,     1,     5,     2,     2,     2,
+       2,     4,     4,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     6,     6,     6,     6,     6,     1,     1,
+       1,     1,     1,     1,     3,     3,     3,     1,     3,     3,
+       3,     3,     2,     2,     1,     1,     1,     1,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     1,     1,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     1,     1,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -1983,33 +2105,33 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_tVARID: /* tVARID  */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1989 "engines/director/lingo/lingo-gr.cpp"
+#line 2111 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1995 "engines/director/lingo/lingo-gr.cpp"
+#line 2117 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2001 "engines/director/lingo/lingo-gr.cpp"
+#line 2123 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2007 "engines/director/lingo/lingo-gr.cpp"
+#line 2129 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2013 "engines/director/lingo/lingo-gr.cpp"
+#line 2135 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2275,1191 +2397,1353 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* script: scriptpartlist  */
-#line 197 "engines/director/lingo/lingo-gr.y"
+#line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2281 "engines/director/lingo/lingo-gr.cpp"
+#line 2403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
-#line 199 "engines/director/lingo/lingo-gr.y"
+#line 197 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2292 "engines/director/lingo/lingo-gr.cpp"
+#line 2414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
-#line 205 "engines/director/lingo/lingo-gr.y"
+#line 203 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2302 "engines/director/lingo/lingo-gr.cpp"
+#line 2424 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
-#line 212 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2308 "engines/director/lingo/lingo-gr.cpp"
+#line 2430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
-#line 245 "engines/director/lingo/lingo-gr.y"
+#line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2314 "engines/director/lingo/lingo-gr.cpp"
+#line 2436 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
-#line 249 "engines/director/lingo/lingo-gr.y"
+#line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2320 "engines/director/lingo/lingo-gr.cpp"
+#line 2442 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
-#line 251 "engines/director/lingo/lingo-gr.y"
+#line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2326 "engines/director/lingo/lingo-gr.cpp"
+#line 2448 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
-#line 253 "engines/director/lingo/lingo-gr.y"
+#line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2332 "engines/director/lingo/lingo-gr.cpp"
+#line 2454 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
-#line 257 "engines/director/lingo/lingo-gr.y"
+#line 255 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2343 "engines/director/lingo/lingo-gr.cpp"
+#line 2465 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
-#line 263 "engines/director/lingo/lingo-gr.y"
+#line 261 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2353 "engines/director/lingo/lingo-gr.cpp"
+#line 2475 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
-#line 270 "engines/director/lingo/lingo-gr.y"
+#line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2359 "engines/director/lingo/lingo-gr.cpp"
+#line 2481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
-#line 276 "engines/director/lingo/lingo-gr.y"
+#line 274 "engines/director/lingo/lingo-gr.y"
                                                                {	// D3
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2368 "engines/director/lingo/lingo-gr.cpp"
+#line 2490 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
-#line 280 "engines/director/lingo/lingo-gr.y"
+#line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2375 "engines/director/lingo/lingo-gr.cpp"
+#line 2497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
-#line 285 "engines/director/lingo/lingo-gr.y"
+#line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2381 "engines/director/lingo/lingo-gr.cpp"
+#line 2503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
-#line 286 "engines/director/lingo/lingo-gr.y"
+#line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2387 "engines/director/lingo/lingo-gr.cpp"
+#line 2509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tABBREVIATED  */
-#line 292 "engines/director/lingo/lingo-gr.y"
+#line 290 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2393 "engines/director/lingo/lingo-gr.cpp"
+#line 2515 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tABBREV  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2399 "engines/director/lingo/lingo-gr.cpp"
+#line 2521 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tABBR  */
-#line 294 "engines/director/lingo/lingo-gr.y"
+#line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2405 "engines/director/lingo/lingo-gr.cpp"
+#line 2527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tAFTER  */
-#line 295 "engines/director/lingo/lingo-gr.y"
+#line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2411 "engines/director/lingo/lingo-gr.cpp"
+#line 2533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tAND  */
-#line 296 "engines/director/lingo/lingo-gr.y"
+#line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2417 "engines/director/lingo/lingo-gr.cpp"
+#line 2539 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tBEFORE  */
-#line 297 "engines/director/lingo/lingo-gr.y"
+#line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2423 "engines/director/lingo/lingo-gr.cpp"
+#line 2545 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tCAST  */
-#line 298 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2429 "engines/director/lingo/lingo-gr.cpp"
+#line 2551 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tCHAR  */
-#line 299 "engines/director/lingo/lingo-gr.y"
+#line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2435 "engines/director/lingo/lingo-gr.cpp"
+#line 2557 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tCHARS  */
-#line 300 "engines/director/lingo/lingo-gr.y"
+#line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2563 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tCONTAINS  */
-#line 301 "engines/director/lingo/lingo-gr.y"
+#line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2447 "engines/director/lingo/lingo-gr.cpp"
+#line 2569 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tDATE  */
-#line 302 "engines/director/lingo/lingo-gr.y"
+#line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2453 "engines/director/lingo/lingo-gr.cpp"
+#line 2575 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tDOWN  */
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2459 "engines/director/lingo/lingo-gr.cpp"
+#line 2581 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tFIELD  */
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2465 "engines/director/lingo/lingo-gr.cpp"
+#line 2587 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tFRAME  */
-#line 309 "engines/director/lingo/lingo-gr.y"
+#line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2593 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tIN  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2477 "engines/director/lingo/lingo-gr.cpp"
+#line 2599 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tINTERSECTS  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2483 "engines/director/lingo/lingo-gr.cpp"
+#line 2605 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tINTO  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2489 "engines/director/lingo/lingo-gr.cpp"
+#line 2611 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tITEM  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2495 "engines/director/lingo/lingo-gr.cpp"
+#line 2617 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tITEMS  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2501 "engines/director/lingo/lingo-gr.cpp"
+#line 2623 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tLAST  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2507 "engines/director/lingo/lingo-gr.cpp"
+#line 2629 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tLINE  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2513 "engines/director/lingo/lingo-gr.cpp"
+#line 2635 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tLINES  */
-#line 321 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2519 "engines/director/lingo/lingo-gr.cpp"
+#line 2641 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tLONG  */
-#line 322 "engines/director/lingo/lingo-gr.y"
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2647 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tMENU  */
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2531 "engines/director/lingo/lingo-gr.cpp"
+#line 2653 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tMENUITEM  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2537 "engines/director/lingo/lingo-gr.cpp"
+#line 2659 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tMENUITEMS  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+#line 324 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2543 "engines/director/lingo/lingo-gr.cpp"
+#line 2665 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tMOD  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2549 "engines/director/lingo/lingo-gr.cpp"
+#line 2671 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tMOVIE  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2555 "engines/director/lingo/lingo-gr.cpp"
+#line 2677 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tNEXT  */
-#line 330 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2561 "engines/director/lingo/lingo-gr.cpp"
+#line 2683 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tNOT  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2567 "engines/director/lingo/lingo-gr.cpp"
+#line 2689 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tNUMBER  */
-#line 332 "engines/director/lingo/lingo-gr.y"
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2573 "engines/director/lingo/lingo-gr.cpp"
+#line 2695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tOF  */
-#line 333 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tOPEN  */
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2585 "engines/director/lingo/lingo-gr.cpp"
+#line 2707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tOR  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2591 "engines/director/lingo/lingo-gr.cpp"
+#line 2713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tPREVIOUS  */
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2597 "engines/director/lingo/lingo-gr.cpp"
+#line 2719 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* ID: tREPEAT  */
-#line 341 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2603 "engines/director/lingo/lingo-gr.cpp"
+#line 2725 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* ID: tSCRIPT  */
-#line 342 "engines/director/lingo/lingo-gr.y"
+#line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2609 "engines/director/lingo/lingo-gr.cpp"
+#line 2731 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* ID: tASSERTERROR  */
-#line 343 "engines/director/lingo/lingo-gr.y"
+#line 341 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2737 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* ID: tSET  */
-#line 344 "engines/director/lingo/lingo-gr.y"
+#line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2621 "engines/director/lingo/lingo-gr.cpp"
+#line 2743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* ID: tSHORT  */
-#line 345 "engines/director/lingo/lingo-gr.y"
+#line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
+#line 2749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* ID: tSOUND  */
-#line 346 "engines/director/lingo/lingo-gr.y"
+#line 344 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* ID: tSPRITE  */
-#line 347 "engines/director/lingo/lingo-gr.y"
+#line 345 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* ID: tSTARTS  */
-#line 348 "engines/director/lingo/lingo-gr.y"
+#line 346 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2645 "engines/director/lingo/lingo-gr.cpp"
+#line 2767 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* ID: tTELL  */
-#line 349 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2773 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* ID: tTIME  */
-#line 352 "engines/director/lingo/lingo-gr.y"
+#line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2657 "engines/director/lingo/lingo-gr.cpp"
+#line 2779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* ID: tTO  */
-#line 353 "engines/director/lingo/lingo-gr.y"
+#line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2785 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* ID: tWHILE  */
-#line 355 "engines/director/lingo/lingo-gr.y"
+#line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2669 "engines/director/lingo/lingo-gr.cpp"
+#line 2791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* ID: tWINDOW  */
-#line 356 "engines/director/lingo/lingo-gr.y"
+#line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2675 "engines/director/lingo/lingo-gr.cpp"
+#line 2797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* ID: tWITH  */
-#line 357 "engines/director/lingo/lingo-gr.y"
+#line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* ID: tWITHIN  */
-#line 358 "engines/director/lingo/lingo-gr.y"
+#line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* ID: tWORD  */
-#line 359 "engines/director/lingo/lingo-gr.y"
+#line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+#line 2815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* ID: tWORDS  */
-#line 360 "engines/director/lingo/lingo-gr.y"
+#line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* idlist: %empty  */
-#line 363 "engines/director/lingo/lingo-gr.y"
+#line 361 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* nonemptyidlist: ID  */
-#line 367 "engines/director/lingo/lingo-gr.y"
+#line 365 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2836 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 371 "engines/director/lingo/lingo-gr.y"
+#line 369 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2722 "engines/director/lingo/lingo-gr.cpp"
+#line 2844 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* proc: ID cmdargs '\n'  */
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 392 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2728 "engines/director/lingo/lingo-gr.cpp"
+#line 2850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* proc: tPUT cmdargs '\n'  */
-#line 395 "engines/director/lingo/lingo-gr.y"
+#line 393 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2734 "engines/director/lingo/lingo-gr.cpp"
+#line 2856 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* proc: tGO cmdargs '\n'  */
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 394 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2740 "engines/director/lingo/lingo-gr.cpp"
+#line 2862 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* proc: tGO frameargs '\n'  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+#line 395 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2746 "engines/director/lingo/lingo-gr.cpp"
+#line 2868 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* proc: tPLAY cmdargs '\n'  */
-#line 398 "engines/director/lingo/lingo-gr.y"
+#line 396 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2752 "engines/director/lingo/lingo-gr.cpp"
+#line 2874 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* proc: tPLAY frameargs '\n'  */
-#line 399 "engines/director/lingo/lingo-gr.y"
+#line 397 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2758 "engines/director/lingo/lingo-gr.cpp"
+#line 2880 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* proc: tNEXT tREPEAT '\n'  */
-#line 400 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2764 "engines/director/lingo/lingo-gr.cpp"
+#line 2886 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* proc: tEXIT tREPEAT '\n'  */
-#line 401 "engines/director/lingo/lingo-gr.y"
+#line 399 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2770 "engines/director/lingo/lingo-gr.cpp"
+#line 2892 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* proc: tEXIT '\n'  */
-#line 402 "engines/director/lingo/lingo-gr.y"
+#line 400 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2776 "engines/director/lingo/lingo-gr.cpp"
+#line 2898 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* proc: tASSERTERROR stmtoneliner  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+#line 401 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2782 "engines/director/lingo/lingo-gr.cpp"
+#line 2904 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100: /* cmdargs: %empty  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+#line 404 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2790 "engines/director/lingo/lingo-gr.cpp"
+#line 2912 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* cmdargs: expr  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+#line 407 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2800 "engines/director/lingo/lingo-gr.cpp"
+#line 2922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 414 "engines/director/lingo/lingo-gr.y"
+#line 412 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2809 "engines/director/lingo/lingo-gr.cpp"
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* cmdargs: expr expr_nounarymath  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 416 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2820 "engines/director/lingo/lingo-gr.cpp"
+#line 2942 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 424 "engines/director/lingo/lingo-gr.y"
+#line 422 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2830 "engines/director/lingo/lingo-gr.cpp"
+#line 2952 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* cmdargs: '(' ')'  */
-#line 429 "engines/director/lingo/lingo-gr.y"
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2838 "engines/director/lingo/lingo-gr.cpp"
+#line 2960 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 430 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* frameargs: tFRAME expr  */
-#line 442 "engines/director/lingo/lingo-gr.y"
+#line 440 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2857 "engines/director/lingo/lingo-gr.cpp"
+#line 2979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* frameargs: tMOVIE expr  */
-#line 447 "engines/director/lingo/lingo-gr.y"
+#line 445 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2868 "engines/director/lingo/lingo-gr.cpp"
+#line 2990 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 453 "engines/director/lingo/lingo-gr.y"
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 3001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* frameargs: expr tOF tMOVIE expr  */
-#line 459 "engines/director/lingo/lingo-gr.y"
+#line 457 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2890 "engines/director/lingo/lingo-gr.cpp"
+#line 3012 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 465 "engines/director/lingo/lingo-gr.y"
+#line 463 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2901 "engines/director/lingo/lingo-gr.cpp"
+#line 3023 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 473 "engines/director/lingo/lingo-gr.y"
+#line 471 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2907 "engines/director/lingo/lingo-gr.cpp"
+#line 3029 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 472 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2913 "engines/director/lingo/lingo-gr.cpp"
+#line 3035 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 475 "engines/director/lingo/lingo-gr.y"
+#line 473 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2919 "engines/director/lingo/lingo-gr.cpp"
+#line 3041 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* asgn: tSET varorthe to expr '\n'  */
-#line 476 "engines/director/lingo/lingo-gr.y"
+#line 474 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 2925 "engines/director/lingo/lingo-gr.cpp"
+#line 3047 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* definevars: tGLOBAL idlist '\n'  */
-#line 481 "engines/director/lingo/lingo-gr.y"
+#line 479 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 2931 "engines/director/lingo/lingo-gr.cpp"
+#line 3053 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* definevars: tPROPERTY idlist '\n'  */
-#line 482 "engines/director/lingo/lingo-gr.y"
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 2937 "engines/director/lingo/lingo-gr.cpp"
+#line 3059 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* definevars: tINSTANCE idlist '\n'  */
-#line 483 "engines/director/lingo/lingo-gr.y"
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 2943 "engines/director/lingo/lingo-gr.cpp"
+#line 3065 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* ifstmt: tIF expr tTHEN stmt  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 484 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 2952 "engines/director/lingo/lingo-gr.cpp"
+#line 3074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 2959 "engines/director/lingo/lingo-gr.cpp"
+#line 3081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 2970 "engines/director/lingo/lingo-gr.cpp"
+#line 3092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 500 "engines/director/lingo/lingo-gr.y"
+#line 498 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 2979 "engines/director/lingo/lingo-gr.cpp"
+#line 3101 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 504 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 2988 "engines/director/lingo/lingo-gr.cpp"
+#line 3110 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 508 "engines/director/lingo/lingo-gr.y"
+#line 506 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 2995 "engines/director/lingo/lingo-gr.cpp"
+#line 3117 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 512 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3002 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 514 "engines/director/lingo/lingo-gr.y"
+#line 512 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3009 "engines/director/lingo/lingo-gr.cpp"
+#line 3131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 516 "engines/director/lingo/lingo-gr.y"
+#line 514 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3016 "engines/director/lingo/lingo-gr.cpp"
+#line 3138 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130: /* tell: tTELL expr tTO stmtoneliner  */
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 518 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3025 "engines/director/lingo/lingo-gr.cpp"
+#line 3147 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+#line 522 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* when: tWHEN ID tTHEN expr  */
-#line 528 "engines/director/lingo/lingo-gr.y"
+#line 526 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3038 "engines/director/lingo/lingo-gr.cpp"
+#line 3160 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* stmtlist: %empty  */
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3044 "engines/director/lingo/lingo-gr.cpp"
+#line 3166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* nonemptystmtlist: stmtlistline  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3055 "engines/director/lingo/lingo-gr.cpp"
+#line 3177 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 541 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3065 "engines/director/lingo/lingo-gr.cpp"
+#line 3187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* stmtlistline: '\n'  */
-#line 548 "engines/director/lingo/lingo-gr.y"
+#line 546 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3071 "engines/director/lingo/lingo-gr.cpp"
+#line 3193 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* simpleexpr_noparens_nounarymath: tINT  */
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 139: /* simpleexpr_nounarymath: tINT  */
+#line 553 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3077 "engines/director/lingo/lingo-gr.cpp"
+#line 3199 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* simpleexpr_noparens_nounarymath: tFLOAT  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 140: /* simpleexpr_nounarymath: tFLOAT  */
+#line 554 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3083 "engines/director/lingo/lingo-gr.cpp"
+#line 3205 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* simpleexpr_noparens_nounarymath: tSYMBOL  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 141: /* simpleexpr_nounarymath: tSYMBOL  */
+#line 555 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3089 "engines/director/lingo/lingo-gr.cpp"
+#line 3211 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* simpleexpr_noparens_nounarymath: tSTRING  */
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 142: /* simpleexpr_nounarymath: tSTRING  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3095 "engines/director/lingo/lingo-gr.cpp"
+#line 3217 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* simpleexpr_noparens_nounarymath: tNOT simpleexpr  */
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 143: /* simpleexpr_nounarymath: tNOT simpleexpr  */
+#line 557 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3101 "engines/director/lingo/lingo-gr.cpp"
+#line 3223 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* simpleexpr_noparens_nounarymath: ID '(' exprlist ')'  */
-#line 560 "engines/director/lingo/lingo-gr.y"
+  case 144: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
+#line 558 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3107 "engines/director/lingo/lingo-gr.cpp"
+#line 3229 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 145: /* simpleexpr_nounarymath: '(' expr ')'  */
+#line 559 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = (yyvsp[-1].node); }
+#line 3235 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* var: ID  */
+  case 151: /* var: ID  */
 #line 567 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3113 "engines/director/lingo/lingo-gr.cpp"
+#line 3241 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* chunk: tFIELD simpleexpr_noparens  */
+  case 156: /* chunk: tFIELD simpleexpr  */
 #line 577 "engines/director/lingo/lingo-gr.y"
-                                        {
+                                {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3122 "engines/director/lingo/lingo-gr.cpp"
+#line 3250 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* chunk: tCAST simpleexpr_noparens  */
+  case 157: /* chunk: tCAST simpleexpr  */
 #line 581 "engines/director/lingo/lingo-gr.y"
-                                                {
+                                        {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3131 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* object: tSCRIPT simpleexpr_noparens  */
+  case 158: /* object: tSCRIPT simpleexpr  */
 #line 587 "engines/director/lingo/lingo-gr.y"
-                                                {
+                                        {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3140 "engines/director/lingo/lingo-gr.cpp"
+#line 3268 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* object: tWINDOW simpleexpr_noparens  */
+  case 159: /* object: tWINDOW simpleexpr  */
 #line 591 "engines/director/lingo/lingo-gr.y"
-                                                        {
+                                                {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3149 "engines/director/lingo/lingo-gr.cpp"
+#line 3277 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 163: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 600 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
+#line 3283 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 166: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 605 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
+#line 3289 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 167: /* theobj: tSOUND simpleexpr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new SoundNode((yyvsp[0].node)); }
+#line 3295 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 168: /* theobj: tSPRITE simpleexpr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
+#line 3301 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 169: /* menu: tMENU simpleexpr  */
+#line 610 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new MenuNode((yyvsp[0].node)); }
+#line 3307 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 170: /* writablethe: tTHE ID  */
+#line 612 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheNode((yyvsp[0].s)); }
+#line 3313 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 171: /* writablethe: tTHE ID tOF theobj  */
+#line 613 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
+#line 3319 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 172: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 614 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
+#line 3325 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 173: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 617 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
+#line 3331 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 174: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 618 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
+#line 3337 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 175: /* thedatetime: tTHE tABBREV tDATE  */
+#line 619 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
+#line 3343 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 176: /* thedatetime: tTHE tABBREV tTIME  */
+#line 620 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
+#line 3349 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 177: /* thedatetime: tTHE tABBR tDATE  */
+#line 621 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
+#line 3355 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 178: /* thedatetime: tTHE tABBR tTIME  */
+#line 622 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
+#line 3361 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 179: /* thedatetime: tTHE tLONG tDATE  */
+#line 623 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
+#line 3367 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 180: /* thedatetime: tTHE tLONG tTIME  */
+#line 624 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
+#line 3373 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 181: /* thedatetime: tTHE tSHORT tDATE  */
+#line 625 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
+#line 3379 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 182: /* thedatetime: tTHE tSHORT tTIME  */
+#line 626 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
+#line 3385 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 183: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 630 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
+#line 3391 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 184: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 631 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
+#line 3397 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 185: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 186: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 633 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
+#line 3409 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 187: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 634 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
+#line 3415 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 188: /* chunktype: tCHAR  */
+#line 637 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.chunktype) = kChunkChar; }
+#line 3421 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 189: /* chunktype: tWORD  */
+#line 638 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.chunktype) = kChunkWord; }
+#line 3427 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 190: /* chunktype: tITEM  */
+#line 639 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.chunktype) = kChunkItem; }
+#line 3433 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 191: /* chunktype: tLINE  */
+#line 640 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.chunktype) = kChunkLine; }
+#line 3439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* list: '[' exprlist ']'  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 194: /* list: '[' exprlist ']'  */
+#line 645 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3155 "engines/director/lingo/lingo-gr.cpp"
+#line 3445 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* list: '[' ':' ']'  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 195: /* list: '[' ':' ']'  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3161 "engines/director/lingo/lingo-gr.cpp"
+#line 3451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* list: '[' proplist ']'  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 196: /* list: '[' proplist ']'  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3167 "engines/director/lingo/lingo-gr.cpp"
+#line 3457 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* proplist: proppair  */
-#line 602 "engines/director/lingo/lingo-gr.y"
+  case 197: /* proplist: proppair  */
+#line 650 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3176 "engines/director/lingo/lingo-gr.cpp"
+#line 3466 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* proplist: proplist ',' proppair  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 198: /* proplist: proplist ',' proppair  */
+#line 654 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3184 "engines/director/lingo/lingo-gr.cpp"
+#line 3474 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* proppair: tSYMBOL ':' expr  */
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 199: /* proppair: tSYMBOL ':' expr  */
+#line 659 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3190 "engines/director/lingo/lingo-gr.cpp"
+#line 3480 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* proppair: ID ':' expr  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+  case 200: /* proppair: ID ':' expr  */
+#line 660 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3196 "engines/director/lingo/lingo-gr.cpp"
+#line 3486 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* proppair: tSTRING ':' expr  */
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 201: /* proppair: tSTRING ':' expr  */
+#line 661 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3202 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 165: /* parens: '(' expr ')'  */
-#line 616 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = (yyvsp[-1].node); }
-#line 3208 "engines/director/lingo/lingo-gr.cpp"
+#line 3492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* unarymath: '+' simpleexpr  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 202: /* unarymath: '+' simpleexpr  */
+#line 664 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3214 "engines/director/lingo/lingo-gr.cpp"
+#line 3498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* unarymath: '-' simpleexpr  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 203: /* unarymath: '-' simpleexpr  */
+#line 665 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3220 "engines/director/lingo/lingo-gr.cpp"
+#line 3504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* expr: expr '+' expr  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+  case 208: /* expr: expr '+' expr  */
+#line 675 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3226 "engines/director/lingo/lingo-gr.cpp"
+#line 3510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* expr: expr '-' expr  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 209: /* expr: expr '-' expr  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3232 "engines/director/lingo/lingo-gr.cpp"
+#line 3516 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* expr: expr '*' expr  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 210: /* expr: expr '*' expr  */
+#line 677 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3238 "engines/director/lingo/lingo-gr.cpp"
+#line 3522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* expr: expr '/' expr  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 211: /* expr: expr '/' expr  */
+#line 678 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3244 "engines/director/lingo/lingo-gr.cpp"
+#line 3528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* expr: expr tMOD expr  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 212: /* expr: expr tMOD expr  */
+#line 679 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* expr: expr '>' expr  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 213: /* expr: expr '>' expr  */
+#line 680 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3256 "engines/director/lingo/lingo-gr.cpp"
+#line 3540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* expr: expr '<' expr  */
-#line 644 "engines/director/lingo/lingo-gr.y"
+  case 214: /* expr: expr '<' expr  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3262 "engines/director/lingo/lingo-gr.cpp"
+#line 3546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* expr: expr tEQ expr  */
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 215: /* expr: expr tEQ expr  */
+#line 682 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3268 "engines/director/lingo/lingo-gr.cpp"
+#line 3552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* expr: expr tNEQ expr  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 216: /* expr: expr tNEQ expr  */
+#line 683 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3274 "engines/director/lingo/lingo-gr.cpp"
+#line 3558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* expr: expr tGE expr  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 217: /* expr: expr tGE expr  */
+#line 684 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3280 "engines/director/lingo/lingo-gr.cpp"
+#line 3564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* expr: expr tLE expr  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+  case 218: /* expr: expr tLE expr  */
+#line 685 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3286 "engines/director/lingo/lingo-gr.cpp"
+#line 3570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* expr: expr tAND expr  */
-#line 649 "engines/director/lingo/lingo-gr.y"
+  case 219: /* expr: expr tAND expr  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3292 "engines/director/lingo/lingo-gr.cpp"
+#line 3576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* expr: expr tOR expr  */
-#line 650 "engines/director/lingo/lingo-gr.y"
+  case 220: /* expr: expr tOR expr  */
+#line 687 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3298 "engines/director/lingo/lingo-gr.cpp"
+#line 3582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* expr: expr '&' expr  */
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 221: /* expr: expr '&' expr  */
+#line 688 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3304 "engines/director/lingo/lingo-gr.cpp"
+#line 3588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* expr: expr tCONCAT expr  */
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 222: /* expr: expr tCONCAT expr  */
+#line 689 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3310 "engines/director/lingo/lingo-gr.cpp"
+#line 3594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* expr: expr tCONTAINS expr  */
-#line 653 "engines/director/lingo/lingo-gr.y"
+  case 223: /* expr: expr tCONTAINS expr  */
+#line 690 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3316 "engines/director/lingo/lingo-gr.cpp"
+#line 3600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* expr: expr tSTARTS expr  */
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 224: /* expr: expr tSTARTS expr  */
+#line 691 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3322 "engines/director/lingo/lingo-gr.cpp"
+#line 3606 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 663 "engines/director/lingo/lingo-gr.y"
+  case 227: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3328 "engines/director/lingo/lingo-gr.cpp"
+#line 3612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 228: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 701 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3334 "engines/director/lingo/lingo-gr.cpp"
+#line 3618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 665 "engines/director/lingo/lingo-gr.y"
+  case 229: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3340 "engines/director/lingo/lingo-gr.cpp"
+#line 3624 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 666 "engines/director/lingo/lingo-gr.y"
+  case 230: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 703 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3346 "engines/director/lingo/lingo-gr.cpp"
+#line 3630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 667 "engines/director/lingo/lingo-gr.y"
+  case 231: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 704 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3352 "engines/director/lingo/lingo-gr.cpp"
+#line 3636 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 201: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 668 "engines/director/lingo/lingo-gr.y"
+  case 232: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3358 "engines/director/lingo/lingo-gr.cpp"
+#line 3642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 202: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 669 "engines/director/lingo/lingo-gr.y"
+  case 233: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3364 "engines/director/lingo/lingo-gr.cpp"
+#line 3648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 670 "engines/director/lingo/lingo-gr.y"
+  case 234: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 707 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3370 "engines/director/lingo/lingo-gr.cpp"
+#line 3654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 204: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 671 "engines/director/lingo/lingo-gr.y"
+  case 235: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 708 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3376 "engines/director/lingo/lingo-gr.cpp"
+#line 3660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 205: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 236: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 709 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3382 "engines/director/lingo/lingo-gr.cpp"
+#line 3666 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 206: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 673 "engines/director/lingo/lingo-gr.y"
+  case 237: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 710 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3388 "engines/director/lingo/lingo-gr.cpp"
+#line 3672 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 207: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 674 "engines/director/lingo/lingo-gr.y"
+  case 238: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 711 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3394 "engines/director/lingo/lingo-gr.cpp"
+#line 3678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 239: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 712 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3400 "engines/director/lingo/lingo-gr.cpp"
+#line 3684 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 240: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 713 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3406 "engines/director/lingo/lingo-gr.cpp"
+#line 3690 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+  case 241: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 714 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3412 "engines/director/lingo/lingo-gr.cpp"
+#line 3696 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 678 "engines/director/lingo/lingo-gr.y"
+  case 242: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 715 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3418 "engines/director/lingo/lingo-gr.cpp"
+#line 3702 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 679 "engines/director/lingo/lingo-gr.y"
+  case 243: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 716 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3424 "engines/director/lingo/lingo-gr.cpp"
+#line 3708 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 213: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 682 "engines/director/lingo/lingo-gr.y"
+  case 244: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 719 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3430 "engines/director/lingo/lingo-gr.cpp"
+#line 3714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 245: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 720 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3436 "engines/director/lingo/lingo-gr.cpp"
+#line 3720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* exprlist: %empty  */
-#line 686 "engines/director/lingo/lingo-gr.y"
+  case 246: /* exprlist: %empty  */
+#line 723 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3442 "engines/director/lingo/lingo-gr.cpp"
+#line 3726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* nonemptyexprlist: expr  */
-#line 690 "engines/director/lingo/lingo-gr.y"
+  case 248: /* nonemptyexprlist: expr  */
+#line 727 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3451 "engines/director/lingo/lingo-gr.cpp"
+#line 3735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 249: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 731 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3459 "engines/director/lingo/lingo-gr.cpp"
+#line 3743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3463 "engines/director/lingo/lingo-gr.cpp"
+#line 3747 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3658,7 +3942,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 699 "engines/director/lingo/lingo-gr.y"
+#line 736 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 826068afdc..246cc1d60b 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -148,23 +148,18 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 111 "engines/director/lingo/lingo-gr.y"
+#line 112 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
 	double f;
-	int e[2];	// Entity + field
-
-	struct {
-		Common::String *obj;
-		Common::String *prop;
-	} objectprop;
+	Director::ChunkType chunktype;
 
 	Director::IDList *idlist;
 	Director::Node *node;
 	Director::NodeList *nodelist;
 
-#line 168 "engines/director/lingo/lingo-gr.h"
+#line 163 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 38ccf713b7..d95d9cf5e6 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -65,6 +65,7 @@
 #include "director/lingo/lingo-codegen.h"
 #include "director/lingo/lingo-gr.h"
 #include "director/lingo/lingo-object.h"
+#include "director/lingo/lingo-the.h"
 
 extern int yylex();
 extern int yyparse();
@@ -112,12 +113,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 	Common::String *s;
 	int i;
 	double f;
-	int e[2];	// Entity + field
-
-	struct {
-		Common::String *obj;
-		Common::String *prop;
-	} objectprop;
+	Director::ChunkType chunktype;
 
 	Director::IDList *idlist;
 	Director::Node *node;
@@ -171,10 +167,12 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<node> stmtlistline
 
 // EXPRESSION
-%type<node> simpleexpr_noparens_nounarymath simpleexpr simpleexpr_noparens simpleexpr_nounarymath
-%type<node> parens unarymath
+%type<node> simpleexpr_nounarymath simpleexpr
+%type<node> unarymath
 %type<node> expr expr_nounarymath sprite
 %type<node> var varorchunk varorthe
+%type<chunktype> chunktype
+%type<node> the writablethe theobj menu thedatetime thenumberof
 %type<node> list proppair
 %type<node> chunk object
 %type<nodelist> proplist exprlist nonemptyexprlist
@@ -551,16 +549,18 @@ stmtlistline: '\n'					{ $$ = nullptr; }
 
 // EXPRESSION
 
-simpleexpr_noparens_nounarymath:
+simpleexpr_nounarymath:
 	  tINT							{ $$ = new IntNode($tINT); }
 	| tFLOAT						{ $$ = new FloatNode($tFLOAT); }
 	| tSYMBOL						{ $$ = new SymbolNode($tSYMBOL); }	// D3
 	| tSTRING						{ $$ = new StringNode($tSTRING); }
 	| tNOT simpleexpr[arg]  %prec tUNARY	{ $$ = new UnaryOpNode(LC::c_not, $arg); }
 	| ID '(' exprlist[args] ')'		{ $$ = new FuncNode($ID, $args); }
+	| '(' expr ')'					{ $$ = $expr; } ;
 	| var
 	| chunk
 	| object
+	| the
 	| list
 	;
 
@@ -571,29 +571,77 @@ varorchunk: var
 	;
 
 varorthe: var
-	// TODO: the
+	| writablethe
 	;
 
-chunk: tFIELD simpleexpr_noparens[arg]	{
+chunk: tFIELD simpleexpr[arg]	{
 		NodeList *args = new NodeList;
 		args->push_back($arg);
 		$$ = new FuncNode(new Common::String("field"), args); }
-	| tCAST simpleexpr_noparens[arg]	{
+	| tCAST simpleexpr[arg]		{
 		NodeList *args = new NodeList;
 		args->push_back($arg);
 		$$ = new FuncNode(new Common::String("cast"), args); }
 	;
 
-object: tSCRIPT simpleexpr_noparens[arg]	{
+object: tSCRIPT simpleexpr[arg]		{
 		NodeList *args = new NodeList;
 		args->push_back($arg);
 		$$ = new FuncNode(new Common::String("script"), args); }
-	| tWINDOW simpleexpr_noparens[arg]		{
+	| tWINDOW simpleexpr[arg]		{
 		NodeList *args = new NodeList;
 		args->push_back($arg);
 		$$ = new FuncNode(new Common::String("window"), args); }
 	;
 
+the: writablethe
+	| thedatetime
+	| thenumberof
+	| tTHE tLAST chunktype inof simpleexpr	{ $$ = new TheLastNode($chunktype, $simpleexpr); }
+	;
+
+theobj: simpleexpr
+	| menu
+	| tMENUITEM simpleexpr[item] tOF tMENU simpleexpr[menu] { $$ = new MenuItemNode($item, $menu); }
+	| tSOUND simpleexpr[arg]			{ $$ = new SoundNode($arg); }
+	| tSPRITE simpleexpr[arg]			{ $$ = new SpriteNode($arg); }
+	;
+
+menu: tMENU	simpleexpr[arg]				{ $$ = new MenuNode($arg); } ;
+
+writablethe: tTHE ID					{ $$ = new TheNode($ID); }
+	| tTHE ID tOF theobj				{ $$ = new TheOfNode($ID, $theobj); }
+	| tTHE tNUMBER tOF theobj			{ $$ = new TheOfNode(new Common::String("number"), $theobj); }
+	;
+
+thedatetime: tTHE tABBREVIATED tDATE	{ $$ = new TheDateTimeNode(kTheAbbr, kTheDate); }
+	| tTHE tABBREVIATED tTIME			{ $$ = new TheDateTimeNode(kTheAbbr, kTheTime); }
+	| tTHE tABBREV tDATE				{ $$ = new TheDateTimeNode(kTheAbbr, kTheDate); }
+	| tTHE tABBREV tTIME				{ $$ = new TheDateTimeNode(kTheAbbr, kTheTime); }
+	| tTHE tABBR tDATE					{ $$ = new TheDateTimeNode(kTheAbbr, kTheDate); }
+	| tTHE tABBR tTIME					{ $$ = new TheDateTimeNode(kTheAbbr, kTheTime); }
+	| tTHE tLONG tDATE					{ $$ = new TheDateTimeNode(kTheLong, kTheDate); }
+	| tTHE tLONG tTIME					{ $$ = new TheDateTimeNode(kTheLong, kTheTime); }
+	| tTHE tSHORT tDATE					{ $$ = new TheDateTimeNode(kTheShort, kTheDate); }
+	| tTHE tSHORT tTIME					{ $$ = new TheDateTimeNode(kTheShort, kTheTime); }
+	;
+
+thenumberof:
+	  tTHE tNUMBER tOF tCHARS inof simpleexpr	{ $$ = new TheNumberOfNode(kNumberOfChars, $simpleexpr); }
+	| tTHE tNUMBER tOF tWORDS inof simpleexpr	{ $$ = new TheNumberOfNode(kNumberOfWords, $simpleexpr); }
+	| tTHE tNUMBER tOF tITEMS inof simpleexpr	{ $$ = new TheNumberOfNode(kNumberOfItems, $simpleexpr); }
+	| tTHE tNUMBER tOF tLINES inof simpleexpr	{ $$ = new TheNumberOfNode(kNumberOfLines, $simpleexpr); }
+	| tTHE tNUMBER tOF tMENUITEMS inof menu		{ $$ = new TheNumberOfNode(kNumberOfMenuItems, $menu); }
+	;
+
+chunktype: tCHAR				{ $$ = kChunkChar; }
+	| tWORD						{ $$ = kChunkWord; }
+	| tITEM						{ $$ = kChunkItem; }
+	| tLINE						{ $$ = kChunkLine; }
+	;
+
+inof: tIN | tOF ;
+
 list: '[' exprlist ']'			{ $$ = new ListNode($exprlist); }
 	| '[' ':' ']'				{ $$ = new PropListNode(new NodeList); }
 	| '[' proplist ']'			{ $$ = new PropListNode($proplist); }
@@ -613,25 +661,14 @@ proppair: tSYMBOL ':' expr		{ $$ = new PropPairNode(new SymbolNode($tSYMBOL), $e
 	| tSTRING ':' expr 			{ $$ = new PropPairNode(new StringNode($tSTRING), $expr); }
 	;
 
-parens:	'(' expr ')'				{ $$ = $expr; } ;
-
 unarymath: '+' simpleexpr[arg]  %prec tUNARY	{ $$ = $arg; }
 	| '-' simpleexpr[arg]  %prec tUNARY			{ $$ = new UnaryOpNode(LC::c_negate, $arg); }
 	;
 
-simpleexpr: simpleexpr_noparens_nounarymath
-	| parens
+simpleexpr: simpleexpr_nounarymath
 	| unarymath
 	;
 
-simpleexpr_noparens: simpleexpr_noparens_nounarymath
-	| unarymath
-	;
-
-simpleexpr_nounarymath: simpleexpr_noparens_nounarymath
-	| parens
-	;
-
 // REMEMBER TO SYNC THIS WITH expr_nounarymath!
 expr: simpleexpr
 	| sprite


Commit: a37b2f6bb6bd2df59e073795caf2cfed7b37cd19
    https://github.com/scummvm/scummvm/commit/a37b2f6bb6bd2df59e073795caf2cfed7b37cd19
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix chunk expr type checks

Changed paths:
    engines/director/lingo/lingo-code.cpp


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 70a3c7764b..827fb41bf3 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1037,7 +1037,7 @@ void LC::c_charOf() {
 	Datum src = g_lingo->pop(false);
 	Datum index = g_lingo->pop();
 
-	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && src.isRef())) {
+	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && !src.isRef())) {
 		g_lingo->lingoError("LC::c_charOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1052,7 +1052,7 @@ void LC::c_charToOf() {
 	Datum indexFrom = g_lingo->pop();
 
 	if ((indexTo.type != INT && indexTo.type != FLOAT) || (indexFrom.type != INT && indexFrom.type != FLOAT)
-			|| (src.type != STRING && src.isRef())) {
+			|| (src.type != STRING && !src.isRef())) {
 		warning("LC::c_charToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1065,7 +1065,7 @@ void LC::c_itemOf() {
 	Datum src = g_lingo->pop(false);
 	Datum index = g_lingo->pop();
 
-	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && src.isRef())) {
+	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && !src.isRef())) {
 		warning("LC::c_itemOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1080,7 +1080,7 @@ void LC::c_itemToOf() {
 	Datum indexFrom = g_lingo->pop();
 
 	if ((indexTo.type != INT && indexTo.type != FLOAT) || (indexFrom.type != INT && indexFrom.type != FLOAT)
-			|| (src.type != STRING && src.isRef())) {
+			|| (src.type != STRING && !src.isRef())) {
 		warning("LC::c_itemToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1093,7 +1093,7 @@ void LC::c_lineOf() {
 	Datum src = g_lingo->pop(false);
 	Datum index = g_lingo->pop();
 
-	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && src.isRef())) {
+	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && !src.isRef())) {
 		warning("LC::c_lineOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1108,7 +1108,7 @@ void LC::c_lineToOf() {
 	Datum indexFrom = g_lingo->pop();
 
 	if ((indexTo.type != INT && indexTo.type != FLOAT) || (indexFrom.type != INT && indexFrom.type != FLOAT)
-			|| (src.type != STRING && src.isRef())) {
+			|| (src.type != STRING && !src.isRef())) {
 		warning("LC::c_lineToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1121,7 +1121,7 @@ void LC::c_wordOf() {
 	Datum src = g_lingo->pop(false);
 	Datum index = g_lingo->pop();
 
-	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && src.isRef())) {
+	if ((index.type != INT && index.type != FLOAT) || (src.type != STRING && !src.isRef())) {
 		warning("LC::c_wordOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
@@ -1136,7 +1136,7 @@ void LC::c_wordToOf() {
 	Datum indexFrom = g_lingo->pop();
 
 	if ((indexTo.type != INT && indexTo.type != FLOAT) || (indexFrom.type != INT && indexFrom.type != FLOAT)
-			|| (src.type != STRING && src.isRef())) {
+			|| (src.type != STRING && !src.isRef())) {
 		warning("LC::c_wordToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;


Commit: 1a311812cfb53e6332c248d41239aa06907d6109
    https://github.com/scummvm/scummvm/commit/1a311812cfb53e6332c248d41239aa06907d6109
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement chunk expressions

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index dac79872de..987b9ba2e8 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -72,6 +72,7 @@ struct MenuNode;
 struct MenuItemNode;
 struct SoundNode;
 struct SpriteNode;
+struct ChunkExprNode;
 
 typedef Common::Array<Node *> NodeList;
 typedef Common::Array<Common::String *> IDList;
@@ -132,7 +133,8 @@ enum NodeType {
 	kMenuNode,
 	kMenuItemNode,
 	kSoundNode,
-	kSpriteNode
+	kSpriteNode,
+	kChunkExprNode
 };
 
 enum NumberOfType {
@@ -196,6 +198,7 @@ public:
 	virtual bool visitMenuItemNode(MenuItemNode *node) = 0;
 	virtual bool visitSoundNode(SoundNode *node) = 0;
 	virtual bool visitSpriteNode(SpriteNode *node) = 0;
+	virtual bool visitChunkExprNode(ChunkExprNode *node) = 0;
 };
 
 /* Node */
@@ -943,6 +946,26 @@ struct SpriteNode : ExprNode {
 	}
 };
 
+/* ChunkExprNode */
+
+struct ChunkExprNode : ExprNode {
+	ChunkType type;
+	Node *start;
+	Node *end;
+	Node *src;
+
+	ChunkExprNode(ChunkType typeIn, Node *startIn, Node *endIn, Node *srcIn)
+		: ExprNode(kChunkExprNode), type(typeIn), start(startIn), end(endIn), src(srcIn) {}
+	virtual ~ChunkExprNode() {
+		delete start;
+		delete end;
+		delete src;
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitChunkExprNode(this);
+	}
+};
+
 } // End of namespace Director
 
 #endif
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index fafb6ab4aa..35f340c9b5 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -1249,4 +1249,45 @@ bool LingoCompiler::visitSpriteNode(SpriteNode *node) {
 	return true;
 }
 
+/* ChunkExprNode */
+
+bool LingoCompiler::visitChunkExprNode(ChunkExprNode *node) {
+	COMPILE(node->start);
+	if (node->end) {
+		COMPILE(node->end);
+	}
+	COMPILE(node->src);
+	switch (node->type) {
+	case kChunkChar:
+		if (node->end) {
+			code1(LC::c_charToOf);
+		} else {
+			code1(LC::c_charOf);
+		}
+		break;
+	case kChunkWord:
+		if (node->end) {
+			code1(LC::c_wordToOf);
+		} else {
+			code1(LC::c_wordOf);
+		}
+		break;
+	case kChunkItem:
+		if (node->end) {
+			code1(LC::c_itemToOf);
+		} else {
+			code1(LC::c_itemOf);
+		}
+		break;
+	case kChunkLine:
+		if (node->end) {
+			code1(LC::c_lineToOf);
+		} else {
+			code1(LC::c_lineOf);
+		}
+		break;
+	}
+	return true;
+}
+
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index b210ff291b..7b4aef032e 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -121,6 +121,7 @@ public:
 	virtual bool visitMenuItemNode(MenuItemNode *node);
 	virtual bool visitSoundNode(SoundNode *node);
 	virtual bool visitSpriteNode(SpriteNode *node);
+	virtual bool visitChunkExprNode(ChunkExprNode *node);
 
 private:
 	int parse(const char *code);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index d2bdec6bd7..ec01f11b1d 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -631,18 +631,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  149
+#define YYFINAL  153
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3926
+#define YYLAST   3841
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  55
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  249
+#define YYNRULES  257
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  457
+#define YYNSTATES  489
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -715,16 +715,17 @@ static const yytype_int16 yyrline[] =
      481,   484,   488,   492,   498,   502,   506,   510,   512,   514,
      518,   522,   526,   528,   529,   533,   539,   546,   547,   553,
      554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
-     564,   567,   569,   570,   573,   574,   577,   581,   587,   591,
-     597,   598,   599,   600,   603,   604,   605,   606,   607,   610,
-     612,   613,   614,   617,   618,   619,   620,   621,   622,   623,
-     624,   625,   626,   630,   631,   632,   633,   634,   637,   638,
-     639,   640,   643,   643,   645,   646,   647,   650,   654,   659,
-     660,   661,   664,   665,   668,   669,   673,   674,   675,   676,
-     677,   678,   679,   680,   681,   682,   683,   684,   685,   686,
-     687,   688,   689,   690,   691,   698,   699,   700,   701,   702,
-     703,   704,   705,   706,   707,   708,   709,   710,   711,   712,
-     713,   714,   715,   716,   719,   720,   723,   724,   727,   731
+     564,   567,   569,   570,   573,   574,   577,   581,   585,   587,
+     589,   591,   593,   595,   597,   599,   603,   607,   613,   614,
+     615,   616,   619,   620,   621,   622,   623,   626,   628,   629,
+     630,   633,   634,   635,   636,   637,   638,   639,   640,   641,
+     642,   646,   647,   648,   649,   650,   653,   654,   655,   656,
+     659,   659,   661,   662,   663,   666,   670,   675,   676,   677,
+     680,   681,   684,   685,   689,   690,   691,   692,   693,   694,
+     695,   696,   697,   698,   699,   700,   701,   702,   703,   704,
+     705,   706,   707,   714,   715,   716,   717,   718,   719,   720,
+     721,   722,   723,   724,   725,   726,   727,   728,   729,   730,
+     731,   732,   735,   736,   739,   740,   743,   747
 };
 #endif
 
@@ -790,7 +791,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-325)
+#define YYPACT_NINF (-335)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -804,58 +805,61 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2029,  -325,  -325,  -325,  -325,  -325,  -325,   -27,  -325,  3310,
-    1162,  1259,  -325,  -325,  3310,  -325,   -12,  -325,  -325,  1356,
-      12,  3232,  -325,  3310,  -325,  -325,  3310,  -325,  1162,  3310,
-    -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
-    -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
-    -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
-    -325,  -325,  1259,  3310,  3310,  3076,  -325,    75,  2029,  -325,
-    -325,  -325,  -325,  1356,  -325,  -325,  -325,  -325,  -325,  -325,
-    -325,  -325,  -325,  -325,   -61,  -325,  -325,  -325,  -325,  -325,
-    -325,  -325,    -5,    -2,  -325,  -325,  -325,  -325,  1453,  1453,
-    1453,  1453,  1259,  1259,  1453,  3388,  1259,  1453,  1453,  1065,
-     578,     8,    16,    18,  -325,  -325,  -325,  -325,  -325,  -325,
-    -325,  -325,  -325,  -325,  -325,   677,  -325,  1259,   452,  3310,
-      19,    24,   774,  3310,  1259,  3466,  -325,  -325,   -17,  -325,
-      89,    26,    29,    30,    33,   204,    35,  3310,  -325,  -325,
-    -325,    37,   871,  -325,  -325,  3310,  -325,  -325,  -325,  -325,
-     968,  3761,  -325,   -36,   -31,   -30,    -7,     5,    36,   108,
-     109,  3748,  -325,  -325,  -325,   261,    38,    39,    41,   -83,
-      -4,  -325,  3761,    42,    48,  1259,  -325,  -325,   113,  1259,
-    1259,  1259,  1259,  1744,  1744,  1938,  1259,  1841,  1841,  1259,
-    1259,  1259,  1259,  1259,  1259,  1259,  1259,  -325,  3597,  -325,
-    3584,  2756,  1259,  1259,  1259,  1259,  1259,    43,  -325,  -325,
-    3544,  3544,  3544,   104,  3610,   122,  -325,  -325,  1259,  1259,
-     -73,  -325,  -325,  -325,  3076,  2836,  -325,    54,  -325,  -325,
-     126,  3777,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
-    -325,  -325,  -325,  -325,  -325,  -325,    60,  1550,  1647,  1453,
-    1453,  1259,  -325,  1259,  1259,  -325,  1259,  3154,  -325,  -325,
-    1259,    53,  1259,   -15,   -15,   -15,   -15,  3831,  3831,  -325,
-     -39,   -15,   -15,   -15,   -15,   -39,   -37,   -37,  -325,  -325,
-      48,  1259,  1259,  1259,  1259,  1259,  1259,  1259,  1259,  1259,
-    1259,  1259,  1259,  1259,  1259,  1259,  1259,  1259,  1259,  2836,
-     138,  2836,  -325,    59,  -325,    61,    62,  1259,  2836,  1647,
-    3666,  3761,  3310,  -325,  -325,    63,  -325,  -325,  -325,  -325,
-    -325,  2189,  -325,  -325,  2836,  1259,  -325,  -325,  1453,    60,
-      60,    60,    60,  1453,  1453,    60,  1453,  1453,  -325,  -325,
-    -325,  -325,  -325,  -325,   -70,  3761,  3761,  3761,    38,    39,
-      58,  -325,  3761,  -325,  3761,   -15,   -15,   -15,   -15,  3831,
-    3831,  -325,   -39,   -15,   -15,   -15,   -15,   -39,   -37,   -37,
-    -325,  -325,    48,  2109,  2916,  2836,  -325,  -325,  -325,   134,
-    2276,  -325,  3310,   -73,    65,  -325,  2356,  3761,  -325,  1453,
-    1453,  1453,  1453,  -325,   129,    92,  -325,  -325,  -325,  2996,
-      67,  2836,  -325,   131,  1259,    69,    70,  -325,  -325,  3310,
-    -325,  -325,  -325,  -325,    98,  1453,  -325,  2836,  -325,  -325,
-    2436,  1259,  3679,  -325,  2836,     2,  -325,  1453,  2516,    73,
-    3692,  2836,  2836,  -325,  3310,  -325,    76,  -325,  2836,  2596,
-    -325,  -325,  2676,    77,    78,  -325,  -325
+    2170,  -335,  -335,  -335,  -335,  -335,  -335,   -20,  -335,  3373,
+    1303,  1400,  -335,  -335,  3373,  -335,   -15,  -335,  -335,  1497,
+      55,   619,  -335,  3373,  -335,  -335,  3373,  -335,  1303,  3373,
+    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,
+    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,
+    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,
+    -335,  -335,  1400,  3373,  3373,  3217,  -335,    25,  2170,  -335,
+    -335,  -335,  -335,  1497,  -335,  -335,  -335,  -335,  -335,  -335,
+    -335,  -335,  -335,  -335,   -63,  -335,  -335,  -335,  -335,  -335,
+    -335,  -335,   -31,     9,  -335,  -335,  -335,  -335,  1594,  1594,
+    1594,  1594,  1400,  1400,  1594,  1594,  1594,  1594,  1594,  3451,
+    1400,  1594,  1594,  1206,   719,   -25,    23,    32,  -335,  -335,
+    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,   818,
+    -335,  1400,   251,  3373,    35,    44,   915,  3373,  1400,  3529,
+    -335,  -335,    -3,  -335,    93,    49,    58,    61,    63,   123,
+      65,  3373,  -335,  -335,  -335,    74,  1012,  -335,  -335,  3373,
+    -335,  -335,  -335,  -335,  1109,  3733,  -335,    83,    84,    87,
+      91,   -54,   -39,   -33,   -24,    -9,    47,   120,   124,  3679,
+    -335,  -335,  -335,   333,    75,    76,    78,   -75,    29,  -335,
+    3733,    81,    90,  1400,  -335,  -335,   164,  1400,  1400,  1400,
+    1400,  1885,  1885,  2079,  1400,  1982,  1982,  1400,  1400,  1400,
+    1400,  1400,  1400,  1400,  1400,  -335,   443,  -335,   411,  2897,
+    1400,  1400,  1400,  1400,  1400,    95,  -335,  -335,  3607,  3607,
+    3607,   149,   508,   173,  -335,  -335,  1400,  1400,   -77,  -335,
+    -335,  -335,  3217,  2977,  -335,   105,  -335,  -335,   178,  3746,
+    1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  -335,  -335,
+    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,
+    -335,  -335,    31,  1691,  1788,  1594,  1594,  1400,  -335,  1400,
+    1400,  -335,  1400,  3295,  -335,  -335,  1400,   106,  1400,   -10,
+     -10,   -10,   -10,   142,   142,  -335,    -5,   -10,   -10,   -10,
+     -10,    -5,     6,     6,  -335,  -335,    90,  1400,  1400,  1400,
+    1400,  1400,  1400,  1400,  1400,  1400,  1400,  1400,  1400,  1400,
+    1400,  1400,  1400,  1400,  1400,  2977,   189,  2977,  -335,   110,
+    -335,   111,   126,  1400,  2977,  1788,   527,  3733,  3373,  -335,
+    -335,   127,  -335,  -335,  -335,  -335,  -335,  2330,  -335,  -335,
+    2977,  1400,  -335,   193,  -335,   197,  -335,   198,  -335,   199,
+    -335,  -335,  1594,    31,    31,    31,    31,  1594,  1594,    31,
+    1594,  1594,  -335,  -335,  -335,  -335,  -335,  -335,   -22,  3733,
+    3733,  3733,    75,    76,   135,  -335,  3733,  -335,  3733,   -10,
+     -10,   -10,   -10,   142,   142,  -335,    -5,   -10,   -10,   -10,
+     -10,    -5,     6,     6,  -335,  -335,    90,  2250,  3057,  2977,
+    -335,  -335,  -335,     4,  2417,  -335,  3373,   -77,   143,  -335,
+    2497,  3733,  1594,  1594,  1594,  1594,  -335,  1594,  1594,  1594,
+    1594,  -335,   211,   170,  -335,  -335,  -335,  3137,   147,  2977,
+    -335,   212,  1400,   148,   150,  -335,  -335,  3373,  -335,  -335,
+    -335,  -335,  -335,  -335,  -335,  -335,   194,  1594,  -335,  2977,
+    -335,  -335,  2577,  1400,  3647,  -335,  2977,    37,  -335,  1594,
+    2657,   169,  3660,  2977,  2977,  -335,  3373,  -335,   171,  -335,
+    2977,  2737,  -335,  -335,  2817,   172,   179,  -335,  -335
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
-static const yytype_uint8 yydefact[] =
+static const yytype_int16 yydefact[] =
 {
        0,    24,    31,    37,    61,    72,    36,     0,    38,    77,
      100,     0,    39,    41,     0,    52,    53,    56,    59,   100,
@@ -867,64 +871,67 @@ static const yytype_uint8 yydefact[] =
        6,     7,     8,   100,     9,    81,    87,    88,    89,    82,
       83,    84,    85,    86,     0,    98,    53,    60,    63,    68,
       62,    79,     0,    78,   139,   140,   142,   141,    31,    37,
-      61,    72,    38,    52,    54,     0,    66,     0,     0,     0,
-     246,   151,     0,     0,   204,   146,   147,   148,   149,   160,
-     161,   162,   150,   205,   206,   101,   207,     0,     0,    77,
-       0,     0,   101,     0,     0,     0,   151,   154,     0,   155,
-       0,     0,     0,     0,     0,     0,     0,    77,    99,     1,
-       4,     0,   101,    97,   118,     0,   157,   156,   158,   159,
-     107,   108,   143,    25,    26,    27,    47,    64,    44,    55,
-     170,     0,   202,   203,   105,     0,   142,   141,     0,   151,
-       0,   197,   248,     0,   247,   246,    92,    93,    56,     0,
-       0,     0,     0,    29,    58,    51,     0,    34,    67,     0,
-       0,     0,     0,     0,     0,     0,     0,   225,   103,   226,
-       0,     0,     0,     0,     0,     0,     0,     0,    96,    91,
-      41,    28,    30,     0,     0,    55,   116,   117,     0,     0,
-      13,    94,    95,   120,     0,   133,   119,     0,    90,    80,
-      56,   111,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   188,   190,   191,   189,     0,     0,     0,     0,
-       0,     0,   145,     0,     0,   195,     0,     0,   196,   194,
-       0,     0,     0,   217,   218,   215,   216,   219,   220,   212,
-     222,   223,   224,   214,   213,   221,   208,   209,   210,   211,
-     102,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   133,
-     121,   133,   152,     0,   153,     0,     0,     0,   133,     0,
-       0,   132,     0,    17,    18,    11,    14,    15,   130,   137,
-     138,     0,   134,   135,   133,     0,   192,   193,     0,    33,
-      43,    46,    76,    48,    49,    50,    65,    66,   172,   165,
-     164,   171,   244,   245,     0,   201,   199,   200,     0,     0,
-       0,   198,   249,   144,   110,   236,   237,   234,   235,   238,
-     239,   231,   241,   242,   243,   233,   232,   240,   227,   228,
-     229,   230,   104,     0,     0,    10,   112,   113,   114,     0,
-       0,   115,    77,     0,     0,   136,    20,   109,   163,     0,
-       0,     0,     0,   169,     0,     0,   167,   168,   106,     0,
-       0,   133,   123,     0,     0,     0,     0,    16,   131,    21,
-     183,   185,   186,   184,     0,     0,   187,   133,   125,   122,
-       0,     0,     0,   127,   133,     0,    22,     0,     0,     0,
-       0,   133,    12,    19,     0,   166,     0,   124,   133,     0,
-      23,   126,     0,     0,     0,   128,   129
+      61,    72,    38,    52,    54,    32,    42,    45,    75,     0,
+      66,     0,     0,     0,   254,   151,     0,     0,   212,   146,
+     147,   148,   149,   168,   169,   170,   150,   213,   214,   101,
+     215,     0,     0,    77,     0,     0,   101,     0,     0,     0,
+     151,   154,     0,   155,     0,     0,     0,     0,     0,     0,
+       0,    77,    99,     1,     4,     0,   101,    97,   118,     0,
+     157,   156,   166,   167,   107,   108,   143,     0,     0,     0,
+       0,    25,    26,    27,    47,    64,    44,    55,   178,     0,
+     210,   211,   105,     0,   142,   141,     0,   151,     0,   205,
+     256,     0,   255,   254,    92,    93,    56,     0,     0,     0,
+       0,    29,    58,    51,     0,    34,    67,     0,     0,     0,
+       0,     0,     0,     0,     0,   233,   103,   234,     0,     0,
+       0,     0,     0,     0,     0,     0,    96,    91,    41,    28,
+      30,     0,     0,    55,   116,   117,     0,     0,    13,    94,
+      95,   120,     0,   133,   119,     0,    90,    80,    56,   111,
+       0,     0,     0,     0,     0,     0,     0,     0,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   196,   198,
+     199,   197,     0,     0,     0,     0,     0,     0,   145,     0,
+       0,   203,     0,     0,   204,   202,     0,     0,     0,   225,
+     226,   223,   224,   227,   228,   220,   230,   231,   232,   222,
+     221,   229,   216,   217,   218,   219,   102,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   133,   121,   133,   152,     0,
+     153,     0,     0,     0,   133,     0,     0,   132,     0,    17,
+      18,    11,    14,    15,   130,   137,   138,     0,   134,   135,
+     133,     0,   158,     0,   162,     0,   164,     0,   160,     0,
+     200,   201,     0,    33,    43,    46,    76,    48,    49,    50,
+      65,    66,   180,   173,   172,   179,   252,   253,     0,   209,
+     207,   208,     0,     0,     0,   206,   257,   144,   110,   244,
+     245,   242,   243,   246,   247,   239,   249,   250,   251,   241,
+     240,   248,   235,   236,   237,   238,   104,     0,     0,    10,
+     112,   113,   114,     0,     0,   115,    77,     0,     0,   136,
+      20,   109,     0,     0,     0,     0,   171,     0,     0,     0,
+       0,   177,     0,     0,   175,   176,   106,     0,     0,   133,
+     123,     0,     0,     0,     0,    16,   131,    21,   159,   163,
+     165,   161,   191,   193,   194,   192,     0,     0,   195,   133,
+     125,   122,     0,     0,     0,   127,   133,     0,    22,     0,
+       0,     0,     0,   133,    12,    19,     0,   174,     0,   124,
+     133,     0,    23,   126,     0,     0,     0,   128,   129
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -325,  -325,  -325,   114,  -325,  -325,  -325,  -325,  -325,  -221,
-    -325,  -325,     0,   -28,  -325,     3,   -63,  -325,    -6,   156,
-    -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -303,  -325,
-    -324,  -100,   -16,  -110,  -325,  -118,  -325,  -325,   -69,  -220,
-     169,  -325,  -325,  -325,  -255,  -325,  -325,   -76,  -325,   -57,
-     264,    32,   -43,     9,  -188
+    -335,  -335,  -335,   202,  -335,  -335,  -335,  -335,  -335,  -150,
+    -335,  -335,     0,   -28,  -335,     3,   -61,  -335,    -1,   249,
+    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -317,  -335,
+    -334,  -124,   -19,   -56,  -335,   -85,  -335,  -335,     5,  -155,
+     259,  -335,  -335,  -335,  -166,  -335,  -335,    -2,  -335,   292,
+      51,   118,   -26,    92,  -208
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    67,    68,    69,    70,    71,   324,   325,   326,   327,
-      72,   435,   111,    92,    93,   330,    75,    76,   112,   113,
-      77,   228,    78,    79,    80,    81,    82,    83,   331,   332,
-     333,   114,   115,   313,   138,   116,   117,   118,   348,   349,
-     119,   120,   121,   256,   338,   122,   180,   181,   123,   124,
-     182,   208,   126,   183,   184
+       0,    67,    68,    69,    70,    71,   340,   341,   342,   343,
+      72,   467,   115,    92,    93,   346,    75,    76,   116,   117,
+      77,   236,    78,    79,    80,    81,    82,    83,   347,   348,
+     349,   118,   119,   329,   142,   120,   121,   122,   372,   373,
+     123,   124,   125,   272,   362,   126,   188,   189,   127,   128,
+     190,   216,   130,   191,   192
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -932,501 +939,478 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      73,   144,   148,    74,    84,   137,   383,   395,   385,    91,
-     214,   322,   214,   131,   129,   390,   185,   226,   290,   130,
-     266,   136,   142,   140,   323,   207,   141,   227,   270,    91,
-     408,   396,   207,   242,   214,   146,   153,   196,   244,   246,
-     243,   156,   157,   158,   159,   245,   247,   162,   133,   134,
-     172,   173,   207,   202,   203,   204,   205,   204,   205,   395,
-     207,   395,   248,    91,   147,    73,   395,   151,    73,   249,
-      85,    74,   395,   354,   250,   149,   201,   202,   203,   204,
-     205,   251,   209,   336,   399,   400,   401,   402,   337,   209,
-     405,   252,   154,   253,   267,   254,   155,   255,   268,   443,
-     444,   217,   314,   314,   314,   170,   395,   185,   430,   209,
-     179,   315,   316,   186,   395,   187,   218,   209,   395,   237,
-     382,   219,   229,   230,   438,   395,   231,   232,   395,    91,
-     233,   442,   236,   223,   238,   170,   257,   258,   449,   272,
-     311,   263,   264,   265,   269,   452,   270,    91,   317,   413,
-     319,   334,   335,   363,   384,   239,   386,   424,   387,   388,
-     393,   266,   418,   425,   429,   431,   433,   434,   414,   437,
-     447,   328,   417,   451,   455,   456,   189,   190,   191,   192,
-     212,   213,   150,   214,   143,   426,   196,   215,   216,   351,
-     139,   361,   241,     0,   271,     0,     0,     0,     0,     0,
-     350,   350,   352,   353,   312,   312,   312,     0,     0,     0,
-       0,    73,     0,     0,   310,     0,     0,     0,     0,     0,
-     136,   136,   136,   199,   200,   201,   202,   203,   204,   205,
-       0,     0,     0,     0,    73,    73,     0,     0,   234,     0,
-       0,     0,     0,     0,     0,     0,   189,   190,   191,   192,
-     212,   213,     0,   214,     0,     0,   196,   215,   216,     0,
-       0,     0,   350,     0,     0,     0,     0,   360,     0,     0,
-       0,     0,     0,     0,   125,   128,     0,     0,     0,     0,
-       0,   398,     0,   132,     0,     0,   403,   404,     0,   406,
-     407,     0,   125,   199,   200,   201,   202,   203,   204,   205,
-       0,   235,     0,   189,   190,   191,   192,   212,   213,    73,
-     214,    73,     0,   196,   215,   216,     0,     0,    73,     0,
-       0,     0,   392,     0,     0,     0,   145,     0,     0,     0,
-       0,    73,     0,     0,    73,     0,     0,   152,     0,     0,
-       0,     0,   420,   421,   422,   423,     0,     0,     0,     0,
-     199,   200,   201,   202,   203,   204,   205,     0,     0,   261,
-       0,   262,     0,     0,   416,     0,   160,   161,   403,     0,
-     171,     0,     0,   175,     0,     0,     0,     0,     0,     0,
-     445,     0,     0,    73,    73,    73,     0,   412,     0,     0,
-      73,   210,    91,     0,     0,     0,    73,     0,   224,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
-       0,    73,   428,     0,     0,     0,     0,     0,     0,   436,
-       0,     0,     0,     0,     0,     0,     0,    73,     0,     0,
-      73,     0,     0,     0,    73,     0,     0,     0,    73,     0,
-       0,    73,    73,     0,   450,     0,     0,     0,    73,    73,
-       0,     0,    73,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-       0,     0,     0,     0,     0,     0,   277,   278,   279,   281,
-     282,     0,     0,     0,     0,   211,     0,     0,     0,     0,
-       0,     0,   320,   321,   189,   190,   191,   192,   212,   213,
-       0,   214,     0,     0,   196,   215,   216,     0,     0,     0,
+      73,   148,   141,    74,   152,   215,   306,   338,   407,    91,
+     409,    84,   215,   419,   133,   258,   134,   414,   135,   441,
+     339,   140,   259,   144,   193,   153,   145,   146,   282,    91,
+     260,   234,   215,   420,   157,   150,   262,   261,   442,   222,
+     215,   235,   204,   263,   222,   264,   197,   198,   199,   200,
+     220,   221,   265,   222,   360,   222,   204,   223,   224,   361,
+     266,   129,   132,    91,   151,    73,   158,   267,    73,   378,
+     136,    74,   155,   419,   193,   419,   286,    85,   436,   129,
+     419,   209,   210,   211,   212,   213,   419,   210,   211,   212,
+     213,   137,   138,   207,   208,   209,   210,   211,   212,   213,
+     212,   213,   268,   217,   269,   225,   270,   159,   271,   178,
+     217,   250,   252,   149,   187,   254,   406,   251,   253,   256,
+     194,   255,   462,   245,   156,   257,   237,   283,   419,   195,
+     217,   284,   226,    91,   475,   476,   419,   231,   217,   178,
+     419,   227,   470,   330,   330,   330,   238,   419,   273,   474,
+     419,    91,   274,   164,   165,   239,   481,   242,   240,   247,
+     241,   179,   244,   484,   183,   197,   198,   199,   200,   220,
+     221,   246,   222,   331,   332,   204,   223,   224,   279,   280,
+     281,   344,   218,   285,   197,   198,   199,   200,   286,   232,
+     288,   222,   327,   333,   204,   223,   224,   427,   428,   429,
+     430,   335,   350,   433,   351,   408,   387,   410,   411,   328,
+     328,   328,   207,   208,   209,   210,   211,   212,   213,    73,
+     243,   422,   326,   412,   417,   423,   424,   425,   140,   140,
+     140,   207,   208,   209,   210,   211,   212,   213,   282,   456,
+     446,   457,    73,    73,   461,   465,   463,   466,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   469,   479,   445,   483,   487,
+     154,   293,   294,   295,   297,   298,   488,   147,   458,   375,
+     143,   385,   249,   384,   219,   287,     0,   336,   337,     0,
+       0,     0,     0,   197,   198,   199,   200,   220,   221,     0,
+     222,     0,     0,   204,   223,   224,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   355,   356,     0,
-     357,     0,     0,     0,   362,     0,   364,     0,     0,     0,
-       0,   199,   200,   201,   202,   203,   204,   205,     0,     0,
-       0,     0,     0,     0,     0,   365,   366,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   389,     0,    94,    95,     1,   176,   177,     0,    98,
-      99,   100,   101,     6,     0,     0,     0,     8,     0,   397,
-       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
-      88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,    30,    31,   104,    33,    34,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   105,    57,    58,   106,    60,    61,    89,
-       0,     0,     0,     0,     0,     0,    90,     0,     0,     0,
-     107,   108,     0,     0,     0,     0,     0,   127,   432,   110,
-       0,   178,    94,    95,     1,    96,    97,     0,    98,    99,
-     100,   101,     6,     0,     0,   440,     8,     0,     0,     0,
-      12,    13,     0,    15,    86,   188,    18,     0,    87,    88,
-       0,    22,     0,    24,    25,     0,    27,     0,     0,   189,
-     190,   191,   192,   193,   194,   104,   195,    34,    35,   196,
-     197,   198,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,   105,    57,    58,   106,    60,    61,    89,     0,
-       0,     0,     0,     0,     0,    90,   199,   200,   201,   202,
-     203,   204,   205,     0,     0,   206,   127,     0,   110,    94,
-      95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,   220,     0,
-      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,   189,   190,   191,   192,
-     193,   194,   104,   195,   221,   222,   196,   197,   198,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   105,
-      57,    58,   106,    60,    61,    89,     0,     0,     0,     0,
-       0,     0,    90,   199,   200,   201,   202,   203,   204,   205,
-       0,     0,   206,   127,     0,   110,    94,    95,     1,    96,
-      97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    86,    17,
-      18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
-      27,     0,     0,   189,   190,   191,   192,   193,   194,   104,
-     195,    34,    35,   196,   197,   198,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   105,    57,    58,   106,
-      60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
-     199,   200,   201,   202,   203,   204,   205,     0,     0,   206,
-     127,     0,   110,    94,    95,     1,    96,    97,     0,    98,
+       0,     0,     0,     0,     0,    73,     0,    73,     0,     0,
+     379,   380,     0,   381,    73,     0,     0,   386,   416,   388,
+     207,   208,   209,   210,   211,   212,   213,    73,     0,     0,
+      73,     0,     0,     0,     0,     0,     0,     0,   389,   390,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+     401,   402,   403,   404,   405,   197,   198,   199,   200,   220,
+     221,     0,   222,     0,   413,   204,   223,   224,   444,     0,
+     160,   161,   162,   163,     0,     0,   166,   167,   168,   169,
+     170,     0,   421,   180,   181,     0,     0,    73,    73,    73,
+       0,   440,     0,     0,    73,     0,    91,     0,     0,     0,
+      73,     0,   207,   208,   209,   210,   211,   212,   213,     0,
+       0,   277,     0,   278,     0,     0,     0,    73,     0,    73,
+     460,     0,     0,     0,     0,     0,     0,   468,     0,     0,
+       0,     0,     0,   197,   198,   199,   200,   220,   221,    73,
+     222,     0,    73,   204,   223,   224,    73,     0,     0,     0,
+      73,     0,     0,    73,    73,     0,   482,     0,     0,     0,
+      73,    73,     0,     0,    73,   307,   308,   309,   310,   311,
+     312,     0,   313,   464,     0,   314,   315,   316,     0,     0,
+     207,   208,   209,   210,   211,   212,   213,     0,     0,     0,
+       0,   278,     0,     0,   472,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   317,   318,   319,   320,   321,   322,   323,     0,
+       0,   324,   352,   353,   354,   355,   356,   357,   358,   359,
+     197,   198,   199,   200,   220,   221,     0,   222,     0,     0,
+     204,   223,   224,     0,     0,   374,   374,   376,   377,   197,
+     198,   199,   200,   220,   221,     0,   222,     0,     0,   204,
+     223,   224,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   207,   208,   209,
+     210,   211,   212,   213,     0,   334,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   207,   208,   209,   210,
+     211,   212,   213,     0,   415,     0,     1,   374,     0,     0,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
+      87,    88,     0,    22,   426,    24,    25,     0,    27,   431,
+     432,     0,   434,   435,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,   139,    57,    58,    59,    60,    61,
+      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
+       0,     0,     0,     0,   448,   449,   450,   451,     0,   452,
+     453,   454,   455,     0,    94,    95,     1,   184,   185,     0,
+      98,    99,   100,   101,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    86,    17,    18,   431,
+      87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
+       0,   477,     0,     0,     0,    30,    31,   104,    33,    34,
+      35,     0,    36,    37,   105,    39,   106,    41,   107,    43,
+     108,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,   109,    57,    58,   110,    60,    61,
+      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
+       0,   111,   112,     0,     0,     0,     0,     0,   131,     0,
+     114,     0,   186,    94,    95,     1,    96,    97,     0,    98,
       99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    86,   240,    18,     0,    87,
+       0,    12,    13,     0,    15,    86,   196,    18,     0,    87,
       88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-     189,   190,   191,   192,   193,   194,   104,   195,    34,    35,
-     196,   197,   198,    38,    39,    40,    41,    42,    43,    44,
+     197,   198,   199,   200,   201,   202,   104,   203,    34,    35,
+     204,   205,   206,   105,    39,   106,    41,   107,    43,   108,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   105,    57,    58,   106,    60,    61,    89,
-       0,     0,     0,     0,     0,     0,    90,   199,   200,   201,
-     202,   203,   204,   205,     0,     0,     0,   127,     0,   110,
+      54,    55,    56,   109,    57,    58,   110,    60,    61,    89,
+       0,     0,     0,     0,     0,     0,    90,   207,   208,   209,
+     210,   211,   212,   213,     0,     0,   214,   131,     0,   114,
       94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,   228,
        0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,    30,    31,   104,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+       0,    24,    25,     0,    27,     0,     0,   197,   198,   199,
+     200,   201,   202,   104,   203,   229,   230,   204,   205,   206,
+     105,    39,   106,    41,   107,    43,   108,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     105,    57,    58,   106,    60,    61,    89,     0,     0,     0,
-       0,     0,     0,    90,     0,     0,     0,   107,   108,     0,
-       0,     0,     0,     0,   127,   174,   110,    94,    95,     1,
+     109,    57,    58,   110,    60,    61,    89,     0,     0,     0,
+       0,     0,     0,    90,   207,   208,   209,   210,   211,   212,
+     213,     0,     0,   214,   131,     0,   114,    94,    95,     1,
       96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
-       0,   102,     0,     0,     0,    12,    13,     0,   103,    86,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
       17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
-     104,    33,    34,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   105,    57,    58,
-     106,    60,    61,    89,     0,     0,     0,     0,     0,     0,
-      90,     0,     0,     0,   107,   108,     0,     0,     0,     0,
-       0,   109,     0,   110,    94,    95,     1,    96,    97,     0,
+       0,    27,     0,     0,   197,   198,   199,   200,   201,   202,
+     104,   203,    34,    35,   204,   205,   206,   105,    39,   106,
+      41,   107,    43,   108,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,   109,    57,    58,
+     110,    60,    61,    89,     0,     0,     0,     0,     0,     0,
+      90,   207,   208,   209,   210,   211,   212,   213,     0,     0,
+     214,   131,     0,   114,    94,    95,     1,    96,    97,     0,
       98,    99,   100,   101,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
+       0,     0,    12,    13,     0,    15,    86,   248,    18,     0,
       87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,    30,    31,   104,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   105,    57,    58,   106,    60,    61,
-      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
-       0,   107,   108,     0,     0,     0,     0,     0,   127,     0,
-     110,    94,    95,     1,    96,    97,     0,    98,    99,   100,
+       0,   197,   198,   199,   200,   201,   202,   104,   203,    34,
+      35,   204,   205,   206,   105,    39,   106,    41,   107,    43,
+     108,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,   109,    57,    58,   110,    60,    61,
+      89,     0,     0,     0,     0,     0,     0,    90,   207,   208,
+     209,   210,   211,   212,   213,     0,     0,     0,   131,     0,
+     114,    94,    95,     1,    96,    97,     0,    98,    99,   100,
      101,     6,     0,     0,     0,     8,     0,     0,     0,    12,
       13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
       22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
        0,     0,    30,    31,   104,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      37,   105,    39,   106,    41,   107,    43,   108,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,   105,    57,    58,   106,    60,    61,    89,     0,     0,
-       0,     0,     0,     0,    90,     0,     0,     0,   107,   108,
-       0,     0,     0,     0,     0,   109,     0,   110,    94,    95,
+      56,   109,    57,    58,   110,    60,    61,    89,     0,     0,
+       0,     0,     0,     0,    90,     0,     0,     0,   111,   112,
+       0,     0,     0,     0,     0,   131,   182,   114,    94,    95,
        1,    96,    97,     0,    98,    99,   100,   101,     6,     0,
-       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
+       0,     0,   102,     0,     0,     0,    12,    13,     0,   103,
       86,    17,    18,     0,    87,    88,     0,    22,     0,    24,
       25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
-      31,   104,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,   105,    57,
-      58,    59,    60,    61,    89,     0,     0,     0,     0,     0,
-       0,    90,     0,     0,     0,   107,   108,     0,     0,     0,
-       0,     0,   127,     0,   110,    94,    95,     1,    96,    97,
+      31,   104,    33,    34,    35,     0,    36,    37,   105,    39,
+     106,    41,   107,    43,   108,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,   109,    57,
+      58,   110,    60,    61,    89,     0,     0,     0,     0,     0,
+       0,    90,     0,     0,     0,   111,   112,     0,     0,     0,
+       0,     0,   113,     0,   114,    94,    95,     1,    96,    97,
        0,    98,    99,   100,   101,     6,     0,     0,     0,     8,
        0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
        0,    87,    88,     0,    22,     0,    24,    25,     0,    27,
        0,     0,     0,     0,     0,     0,    30,    31,   104,    33,
-      34,    35,     0,    36,    37,    38,   339,    40,   340,    42,
-     341,    44,   342,    46,    47,    48,    49,    50,     0,    51,
-      52,   343,   344,   345,    56,   105,    57,   346,   347,    60,
+      34,    35,     0,    36,    37,   105,    39,   106,    41,   107,
+      43,   108,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,   109,    57,    58,   110,    60,
       61,    89,     0,     0,     0,     0,     0,     0,    90,     0,
-       0,     0,   107,   108,     0,     0,     0,     0,     0,   127,
-       0,   110,    94,    95,     1,    96,    97,     0,    98,    99,
+       0,     0,   111,   112,     0,     0,     0,     0,     0,   131,
+       0,   114,    94,    95,     1,    96,    97,     0,    98,    99,
      100,   101,     6,     0,     0,     0,     8,     0,     0,     0,
       12,    13,     0,    15,    86,    17,    18,     0,    87,    88,
        0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
        0,     0,     0,    30,    31,   104,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,   343,   344,
-      55,    56,   105,    57,   346,   347,    60,    61,    89,     0,
-       0,     0,     0,     0,     0,    90,     0,     0,     0,   107,
-     108,     0,     0,     0,     0,     0,   127,     0,   110,    94,
+      36,    37,   105,    39,   106,    41,   107,    43,   108,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,   109,    57,    58,   110,    60,    61,    89,     0,
+       0,     0,     0,     0,     0,    90,     0,     0,     0,   111,
+     112,     0,     0,     0,     0,     0,   113,     0,   114,    94,
       95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
        0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
       15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
       24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
-       0,     0,   104,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   105,
-      57,    58,   106,    60,    61,    89,     0,     0,     0,     0,
-       0,     0,    90,     0,     0,     0,   107,   108,     0,     0,
-       0,     0,     0,   127,     0,   110,    94,    95,     1,    96,
+      30,    31,   104,    33,    34,    35,     0,    36,    37,   105,
+      39,   106,    41,   107,    43,   108,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   109,
+      57,    58,    59,    60,    61,    89,     0,     0,     0,     0,
+       0,     0,    90,     0,     0,     0,   111,   112,     0,     0,
+       0,     0,     0,   131,     0,   114,    94,    95,     1,    96,
       97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
        8,     0,     0,     0,    12,    13,     0,    15,    86,    17,
       18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,     0,     0,   104,
-      33,    34,    35,     0,     0,     0,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   105,    57,    58,   106,
+      27,     0,     0,     0,     0,     0,     0,    30,    31,   104,
+      33,    34,    35,     0,    36,    37,   105,   363,   106,   364,
+     107,   365,   108,   366,    46,    47,    48,    49,    50,     0,
+      51,    52,   367,   368,   369,    56,   109,    57,   370,   371,
       60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
-       0,     0,     0,   107,   108,     0,     0,     0,     0,     0,
-     127,     0,   110,    94,    95,     1,    96,    97,     0,    98,
+       0,     0,     0,   111,   112,     0,     0,     0,     0,     0,
+     131,     0,   114,    94,    95,     1,    96,    97,     0,    98,
       99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
        0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
       88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,     0,     0,   104,     0,    34,    35,
-       0,     0,     0,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   105,    57,    58,   106,    60,    61,    89,
+       0,     0,     0,     0,    30,    31,   104,    33,    34,    35,
+       0,    36,    37,   105,    39,   106,    41,   107,    43,   108,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,   367,
+     368,    55,    56,   109,    57,   370,   371,    60,    61,    89,
        0,     0,     0,     0,     0,     0,    90,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     1,   127,     0,   110,
-       2,     3,     4,     5,     6,     0,     0,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,    26,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,     0,    57,    58,    59,    60,    61,
-      62,    63,    64,     0,     0,     0,     1,    65,     0,     0,
-       2,     3,     4,     5,     6,   409,    66,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,     0,    57,    58,    59,    60,    61,
-      62,    63,     0,     0,   410,     0,     1,    65,     0,     0,
-       2,     3,     4,     5,     6,     0,   329,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,     0,    57,    58,    59,    60,    61,
-      62,    63,     0,     0,     0,     0,   394,    65,     0,     0,
-       0,     0,     0,     1,     0,     0,   329,     2,     3,     4,
-       5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,     0,   415,     1,    65,     0,   419,     2,     3,     4,
-       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,   439,     0,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,   446,     0,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,     0,   453,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,     0,   454,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   309,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   329,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   411,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    62,    63,     0,
-       0,     0,     0,     1,    65,     0,     0,     2,     3,     4,
-       5,     6,     0,   427,     7,     8,     9,    10,     0,    12,
-      13,     0,    15,    16,    17,    18,    19,    87,    21,     0,
-      22,     0,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    89,    63,     0,
-       0,     1,   358,   359,    65,     2,     3,     4,     5,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,     0,
-      57,    58,    59,    60,    61,    89,     0,     0,     0,     1,
-       0,     0,    90,     2,     3,     4,     5,     6,     0,     0,
+     111,   112,     0,     0,     0,     0,     0,   131,     0,   114,
+      94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,     0,     0,   104,    33,    34,    35,     0,    36,    37,
+     105,    39,   106,    41,   107,    43,   108,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+     109,    57,    58,   110,    60,    61,    89,     0,     0,     0,
+       0,     0,     0,    90,     0,     0,     0,   111,   112,     0,
+       0,     0,     0,     0,   131,     0,   114,    94,    95,     1,
+      96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
        0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
       17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   135,    57,    58,
-      59,    60,    61,    89,     0,     0,     0,     1,     0,     0,
-      90,     2,     3,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
-       0,    87,    88,     0,    22,     0,    24,    25,     0,    27,
-       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
+       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
+     104,    33,    34,    35,     0,     0,     0,   105,    39,   106,
+      41,   107,    43,   108,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,   109,    57,    58,
+     110,    60,    61,    89,     0,     0,     0,     0,     0,     0,
+      90,     0,     0,     0,   111,   112,     0,     0,     0,     0,
+       0,   131,     0,   114,    94,    95,     1,    96,    97,     0,
+      98,    99,   100,   101,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
+      87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,     0,     0,   104,     0,    34,
+      35,     0,     0,     0,   105,    39,   106,    41,   107,    43,
+     108,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,   109,    57,    58,   110,    60,    61,
+      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     1,   131,     0,
+     114,     2,     3,     4,     5,     6,     0,     0,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,    26,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    89,     0,     0,     0,     1,     0,     0,    90,     2,
-       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
-      88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,   163,   164,   165,   166,   167,     0,    51,   168,    53,
-      54,    55,   169,     0,    57,    58,    59,    60,    61,    89,
-       0,     0,     0,     1,     0,     0,    90,     2,     3,     4,
-       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
-      13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
-      22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-     225,     0,    57,    58,    59,    60,    61,    89,     0,     0,
-       0,     1,     0,     0,    90,    98,    99,     4,     5,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,     0,
-      57,    58,    59,    60,    61,    89,   189,   190,   191,   192,
-     212,   213,    90,   214,     0,     0,   196,   215,   216,   291,
-     292,   293,   294,   295,   296,     0,   297,     0,     0,   298,
-     299,   300,   189,   190,   191,   192,   212,   213,     0,   214,
-       0,     0,   196,   215,   216,     0,     0,     0,     0,     0,
-       0,     0,     0,   199,   200,   201,   202,   203,   204,   205,
-       0,     0,     0,     0,   262,     0,   301,   302,   303,   304,
-     305,   306,   307,     0,     0,   308,     0,     0,     0,   199,
-     200,   201,   202,   203,   204,   205,     0,   318,   189,   190,
-     191,   192,   212,   213,     0,   214,     0,     0,   196,   215,
-     216,   189,   190,   191,   192,   212,   213,     0,   214,     0,
-       0,   196,   215,   216,   189,   190,   191,   192,   212,   213,
-       0,   214,     0,     0,   196,   215,   216,     0,     0,     0,
-       0,     0,     0,     0,     0,   199,   200,   201,   202,   203,
-     204,   205,     0,   391,     0,     0,     0,     0,   199,   200,
-     201,   202,   203,   204,   205,     0,   441,     0,     0,     0,
-       0,   199,   200,   201,   202,   203,   204,   205,     0,   448,
-     189,   190,   191,   192,   212,   213,     0,   214,     0,     0,
-     196,   215,   216,   189,   190,   191,   192,   212,   213,     0,
-     214,     0,     0,   196,   215,   216,     0,     0,     0,   291,
-     292,   293,   294,   295,   296,     0,   297,   259,   260,   298,
-     299,   300,     0,     0,     0,     0,     0,   199,   200,   201,
-     202,   203,   204,   205,     0,     0,     0,     0,     0,     0,
-     199,   200,   201,   202,   203,   204,   205,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   301,   302,   303,   304,
-     305,   306,   307,   189,   190,   191,   192,     0,     0,     0,
-     214,     0,     0,   196,   215,   216,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      61,    62,    63,    64,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,   437,    66,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,   438,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   345,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,   418,    65,     0,
+       0,     0,     0,     0,     1,     0,     0,   345,     2,     3,
+       4,     5,     6,     0,     0,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,     0,   443,     1,    65,     0,   447,     2,     3,
+       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,   471,     0,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,   478,     0,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,     0,   485,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,     0,   486,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   325,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   439,     7,     8,     9,    10,    11,
+      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
+       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
+       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
+       4,     5,     6,     0,   459,     7,     8,     9,    10,     0,
+      12,    13,     0,    15,    16,    17,    18,    19,    87,    21,
+       0,    22,     0,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    89,    63,
+       0,     0,     1,   382,   383,    65,     2,     3,     4,     5,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
+       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+       0,    57,    58,    59,    60,    61,    89,     0,     0,     0,
+       1,     0,     0,    90,     2,     3,     4,     5,     6,     0,
+       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
+      86,    17,    18,     0,    87,    88,     0,    22,     0,    24,
+      25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
+      58,    59,    60,    61,    89,     0,     0,     0,     1,     0,
+       0,    90,     2,     3,     4,     5,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,    13,     0,    15,    86,    17,
+      18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
+      27,     0,     0,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,   171,   172,   173,   174,   175,     0,
+      51,   176,    53,    54,    55,   177,     0,    57,    58,    59,
+      60,    61,    89,     0,     0,     0,     1,     0,     0,    90,
+       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
+       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
+      87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
+       0,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,   233,     0,    57,    58,    59,    60,    61,
+      89,     0,     0,     0,     1,     0,     0,    90,    98,    99,
+       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
+      12,    13,     0,    15,    86,    17,    18,     0,    87,    88,
+       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,   105,    39,   106,    41,   107,    43,   108,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,     0,    57,    58,    59,    60,    61,    89,   197,
+     198,   199,   200,   220,   221,    90,   222,     0,     0,   204,
+     223,   224,   197,   198,   199,   200,   220,   221,     0,   222,
+       0,     0,   204,   223,   224,     0,     0,     0,     0,     0,
+       0,   197,   198,   199,   200,   220,   221,     0,   222,     0,
+       0,   204,   223,   224,     0,     0,   207,   208,   209,   210,
+     211,   212,   213,     0,   473,     0,     0,     0,     0,   207,
+     208,   209,   210,   211,   212,   213,     0,   480,   275,   276,
+       0,     0,     0,     0,     0,     0,     0,     0,   207,   208,
+     209,   210,   211,   212,   213,   197,   198,   199,   200,   220,
+     221,     0,   222,     0,     0,   204,   223,   224,   307,   308,
+     309,   310,   311,   312,     0,   313,     0,     0,   314,   315,
+     316,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     199,   200,   201,   202,   203,   204,   205
+       0,     0,   207,   208,   209,   210,   211,   212,   213,     0,
+       0,     0,     0,     0,     0,   317,   318,   319,   320,   321,
+     322,   323
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,    65,     0,    31,    21,   309,   331,   311,     9,
-      49,    84,    49,    19,    14,   318,    99,    34,   206,    31,
-     103,    21,    28,    23,    97,   125,    26,    44,    98,    29,
-     100,   334,   132,    69,    49,    63,    97,    52,    69,    69,
-      76,    98,    99,   100,   101,    76,    76,   104,    36,    37,
-     107,   108,   152,    92,    93,    94,    95,    94,    95,   383,
-     160,   385,    69,    63,    64,    65,   390,    73,    68,    76,
-      97,    68,   396,   261,    69,     0,    91,    92,    93,    94,
-      95,    76,   125,    23,   339,   340,   341,   342,    28,   132,
-     345,    55,    97,    57,    98,    59,    98,    61,   102,    97,
-      98,   129,   220,   221,   222,   105,   430,    99,   411,   152,
-     110,   221,   222,    97,   438,    97,    97,   160,   442,   147,
-     308,    97,    33,    97,   427,   449,    97,    97,   452,   129,
-      97,   434,    97,   133,    97,   135,    28,    28,   441,    26,
-      97,   103,   103,   102,   102,   448,    98,   147,    44,    15,
-      28,    97,    26,   100,    16,   155,    97,    28,    97,    97,
-      97,   103,    97,    71,    97,    34,    97,    97,    34,    71,
-      97,   234,   393,    97,    97,    97,    42,    43,    44,    45,
-      46,    47,    68,    49,    28,   405,    52,    53,    54,   258,
-      21,   267,   160,    -1,   185,    -1,    -1,    -1,    -1,    -1,
-     257,   258,   259,   260,   220,   221,   222,    -1,    -1,    -1,
-      -1,   211,    -1,    -1,   211,    -1,    -1,    -1,    -1,    -1,
-     220,   221,   222,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,   234,   235,    -1,    -1,    34,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
-      -1,    -1,   319,    -1,    -1,    -1,    -1,   267,    -1,    -1,
-      -1,    -1,    -1,    -1,    10,    11,    -1,    -1,    -1,    -1,
-      -1,   338,    -1,    19,    -1,    -1,   343,   344,    -1,   346,
-     347,    -1,    28,    89,    90,    91,    92,    93,    94,    95,
-      -1,    97,    -1,    42,    43,    44,    45,    46,    47,   309,
-      49,   311,    -1,    52,    53,    54,    -1,    -1,   318,    -1,
-      -1,    -1,   322,    -1,    -1,    -1,    62,    -1,    -1,    -1,
-      -1,   331,    -1,    -1,   334,    -1,    -1,    73,    -1,    -1,
-      -1,    -1,   399,   400,   401,   402,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
-      -1,   100,    -1,    -1,   392,    -1,   102,   103,   425,    -1,
-     106,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
-     437,    -1,    -1,   383,   384,   385,    -1,   384,    -1,    -1,
-     390,   127,   392,    -1,    -1,    -1,   396,    -1,   134,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   409,
-      -1,   411,   409,    -1,    -1,    -1,    -1,    -1,    -1,   419,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   427,    -1,    -1,
-     430,    -1,    -1,    -1,   434,    -1,    -1,    -1,   438,    -1,
-      -1,   441,   442,    -1,   444,    -1,    -1,    -1,   448,   449,
-      -1,    -1,   452,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-      -1,    -1,    -1,    -1,    -1,    -1,   212,   213,   214,   215,
-     216,    -1,    -1,    -1,    -1,    33,    -1,    -1,    -1,    -1,
-      -1,    -1,   228,   229,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+       0,    29,    21,     0,    65,   129,   214,    84,   325,     9,
+     327,    31,   136,   347,    14,    69,    31,   334,    19,    15,
+      97,    21,    76,    23,    99,     0,    26,    28,   103,    29,
+      69,    34,   156,   350,    97,    63,    69,    76,    34,    49,
+     164,    44,    52,    76,    49,    69,    42,    43,    44,    45,
+      46,    47,    76,    49,    23,    49,    52,    53,    54,    28,
+      69,    10,    11,    63,    64,    65,    97,    76,    68,   277,
+      19,    68,    73,   407,    99,   409,    98,    97,   100,    28,
+     414,    91,    92,    93,    94,    95,   420,    92,    93,    94,
+      95,    36,    37,    89,    90,    91,    92,    93,    94,    95,
+      94,    95,    55,   129,    57,   133,    59,    98,    61,   109,
+     136,    28,    28,    62,   114,    28,   324,    34,    34,    28,
+      97,    34,   439,   151,    73,    34,    33,    98,   462,    97,
+     156,   102,    97,   133,    97,    98,   470,   137,   164,   139,
+     474,    97,   459,   228,   229,   230,    97,   481,    28,   466,
+     484,   151,    28,   102,   103,    97,   473,    34,    97,   159,
+      97,   110,    97,   480,   113,    42,    43,    44,    45,    46,
+      47,    97,    49,   229,   230,    52,    53,    54,   103,   103,
+     102,   242,   131,   102,    42,    43,    44,    45,    98,   138,
+      26,    49,    97,    44,    52,    53,    54,   363,   364,   365,
+     366,    28,    97,   369,    26,    16,   100,    97,    97,   228,
+     229,   230,    89,    90,    91,    92,    93,    94,    95,   219,
+      97,    28,   219,    97,    97,    28,    28,    28,   228,   229,
+     230,    89,    90,    91,    92,    93,    94,    95,   103,    28,
+      97,    71,   242,   243,    97,    97,    34,    97,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,    71,    97,   417,    97,    97,
+      68,   220,   221,   222,   223,   224,    97,    28,   433,   274,
+      21,   283,   164,   283,    33,   193,    -1,   236,   237,    -1,
+      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   263,   264,    -1,
-     266,    -1,    -1,    -1,   270,    -1,   272,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   317,    -1,     5,     6,     7,     8,     9,    -1,    11,
-      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,   335,
-      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-      92,    93,    -1,    -1,    -1,    -1,    -1,    99,   414,   101,
-      -1,   103,     5,     6,     7,     8,     9,    -1,    11,    12,
-      13,    14,    15,    -1,    -1,   431,    19,    -1,    -1,    -1,
-      23,    24,    -1,    26,    27,    28,    29,    -1,    31,    32,
-      -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    -1,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    98,    99,    -1,   101,     5,
-       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
-      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
-      36,    37,    -1,    39,    -1,    -1,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    98,    99,    -1,   101,     5,     6,     7,     8,
-       9,    -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,
-      19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
-      29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
-      39,    -1,    -1,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
-      99,    -1,   101,     5,     6,     7,     8,     9,    -1,    11,
+      -1,    -1,    -1,    -1,    -1,   325,    -1,   327,    -1,    -1,
+     279,   280,    -1,   282,   334,    -1,    -1,   286,   338,   288,
+      89,    90,    91,    92,    93,    94,    95,   347,    -1,    -1,
+     350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,   333,    52,    53,    54,   416,    -1,
+      98,    99,   100,   101,    -1,    -1,   104,   105,   106,   107,
+     108,    -1,   351,   111,   112,    -1,    -1,   407,   408,   409,
+      -1,   408,    -1,    -1,   414,    -1,   416,    -1,    -1,    -1,
+     420,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    98,    -1,   100,    -1,    -1,    -1,   437,    -1,   439,
+     437,    -1,    -1,    -1,    -1,    -1,    -1,   447,    -1,    -1,
+      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,   459,
+      49,    -1,   462,    52,    53,    54,   466,    -1,    -1,    -1,
+     470,    -1,    -1,   473,   474,    -1,   476,    -1,    -1,    -1,
+     480,   481,    -1,    -1,   484,    42,    43,    44,    45,    46,
+      47,    -1,    49,   442,    -1,    52,    53,    54,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
+      -1,   100,    -1,    -1,   463,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    98,   250,   251,   252,   253,   254,   255,   256,   257,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,   273,   274,   275,   276,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    97,    -1,     7,   335,    -1,    -1,
+      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
+      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
+      31,    32,    -1,    34,   362,    36,    37,    -1,    39,   367,
+     368,    -1,   370,   371,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    -1,    -1,    -1,   422,   423,   424,   425,    -1,   427,
+     428,   429,   430,    -1,     5,     6,     7,     8,     9,    -1,
+      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
+      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,   457,
+      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
+      -1,   469,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
+     101,    -1,   103,     5,     6,     7,     8,     9,    -1,    11,
       12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
       -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
       32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
@@ -1435,36 +1419,36 @@ static const yytype_int16 yycheck[] =
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,   101,
+      92,    93,    94,    95,    -1,    -1,    98,    99,    -1,   101,
        5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
       15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
       -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      -1,    36,    37,    -1,    39,    -1,    -1,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,     7,
+      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    98,    99,    -1,   101,     5,     6,     7,
        8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
       -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
       28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      -1,    39,    -1,    -1,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
-      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    -1,
+      88,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      98,    99,    -1,   101,     5,     6,     7,     8,     9,    -1,
       11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
       -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
       31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      -1,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
+      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,
      101,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
       14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
       24,    -1,    26,    27,    28,    29,    -1,    31,    32,    -1,
@@ -1474,7 +1458,7 @@ static const yytype_int16 yycheck[] =
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
       -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
-      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,
        7,     8,     9,    -1,    11,    12,    13,    14,    15,    -1,
       -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,
       27,    28,    29,    -1,    31,    32,    -1,    34,    -1,    36,
@@ -1508,7 +1492,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
       26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
       36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    49,    50,    51,    -1,    53,    54,    55,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
@@ -1517,8 +1501,8 @@ static const yytype_int16 yycheck[] =
        9,    -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,
       19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
       29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,
-      49,    50,    51,    -1,    -1,    -1,    55,    56,    57,    58,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
@@ -1527,201 +1511,208 @@ static const yytype_int16 yycheck[] =
       12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
       -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
       32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    50,    51,
-      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    61,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     7,    99,    -1,   101,
-      11,    12,    13,    14,    15,    -1,    -1,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
-      81,    82,    83,    -1,    -1,    -1,     7,    88,    -1,    -1,
-      11,    12,    13,    14,    15,    16,    97,    18,    19,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,    -1,
-      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    -1,    -1,    87,    88,    -1,    -1,
-      -1,    -1,    -1,     7,    -1,    -1,    97,    11,    12,    13,
-      14,    15,    -1,    -1,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    86,     7,    88,    -1,    10,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    -1,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    -1,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,     7,     8,     9,    88,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
-      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
-      36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,     7,
-      -1,    -1,    88,    11,    12,    13,    14,    15,    -1,    -1,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
+      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
+      -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+       8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
       -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
       28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    49,    50,    51,    -1,    -1,    -1,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    -1,     7,    -1,    -1,
-      88,    11,    12,    13,    14,    15,    -1,    -1,    -1,    19,
-      -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,    29,
-      -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
+      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    -1,
+      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
+      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
+      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    50,
+      51,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,    99,    -1,
+     101,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    -1,     7,    -1,    -1,    88,    11,
-      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
-      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,     7,    -1,    -1,    88,    11,    12,    13,
-      14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
-      24,    -1,    26,    27,    28,    29,    -1,    31,    32,    -1,
-      34,    -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      -1,     7,    -1,    -1,    88,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
-      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
-      36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    42,    43,    44,    45,
-      46,    47,    88,    49,    -1,    -1,    52,    53,    54,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      80,    81,    82,    83,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    16,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,    87,    88,    -1,
+      -1,    -1,    -1,    -1,     7,    -1,    -1,    97,    11,    12,
+      13,    14,    15,    -1,    -1,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    86,     7,    88,    -1,    10,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
+      13,    14,    15,    -1,    97,    18,    19,    20,    21,    -1,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    -1,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,     7,     8,     9,    88,    11,    12,    13,    14,
+      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
+      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
+      -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
+       7,    -1,    -1,    88,    11,    12,    13,    14,    15,    -1,
+      -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,
+      27,    28,    29,    -1,    31,    32,    -1,    34,    -1,    36,
+      37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    -1,    -1,    -1,     7,    -1,
+      -1,    88,    11,    12,    13,    14,    15,    -1,    -1,    -1,
+      19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
+      29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
+      79,    80,    81,    -1,    -1,    -1,     7,    -1,    -1,    88,
+      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
+      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
+      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    -1,    -1,    -1,     7,    -1,    -1,    88,    11,    12,
+      13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,
+      23,    24,    -1,    26,    27,    28,    29,    -1,    31,    32,
+      -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    42,
+      43,    44,    45,    46,    47,    88,    49,    -1,    -1,    52,
       53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
       -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,   100,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    98,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    42,    43,
+      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    79,    80,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
       44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    42,
-      43,    44,    45,    46,    47,    -1,    49,    79,    80,    52,
-      53,    54,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1738,42 +1729,45 @@ static const yytype_uint8 yystos[] =
      108,   109,   114,   116,   119,   120,   121,   124,   126,   127,
      128,   129,   130,   131,    31,    97,    27,    31,    32,    81,
       88,   116,   117,   118,     5,     6,     8,     9,    11,    12,
-      13,    14,    19,    26,    48,    75,    78,    92,    93,    99,
-     101,   116,   122,   123,   135,   136,   139,   140,   141,   144,
-     145,   146,   149,   152,   153,   154,   156,    99,   154,   116,
-      31,   122,   154,    36,    37,    75,   116,   136,   138,   144,
-     116,   116,   122,   123,   117,   154,   117,   116,   120,     0,
-     107,   122,   154,    97,    97,    98,   153,   153,   153,   153,
-     154,   154,   153,    63,    64,    65,    66,    67,    70,    74,
-     116,   154,   153,   153,   100,   154,     8,     9,   103,   116,
-     150,   151,   154,   157,   158,    99,    97,    97,    28,    42,
-      43,    44,    45,    46,    47,    49,    52,    53,    54,    89,
-      90,    91,    92,    93,    94,    95,    98,   135,   155,   156,
-     154,    33,    46,    47,    49,    53,    54,   117,    97,    97,
-      24,    50,    51,   116,   154,    74,    34,    44,   125,    33,
-      97,    97,    97,    97,    34,    97,    97,   117,    97,   116,
-      28,   155,    69,    76,    69,    76,    69,    76,    69,    76,
-      69,    76,    55,    57,    59,    61,   147,    28,    28,    79,
-      80,    98,   100,   103,   103,   102,   103,    98,   102,   102,
-      98,   157,    26,   154,   154,   154,   154,   154,   154,   154,
+      13,    14,    19,    26,    48,    55,    57,    59,    61,    75,
+      78,    92,    93,    99,   101,   116,   122,   123,   135,   136,
+     139,   140,   141,   144,   145,   146,   149,   152,   153,   154,
+     156,    99,   154,   116,    31,   122,   154,    36,    37,    75,
+     116,   136,   138,   144,   116,   116,   122,   123,   117,   154,
+     117,   116,   120,     0,   107,   122,   154,    97,    97,    98,
+     153,   153,   153,   153,   154,   154,   153,   153,   153,   153,
+     153,    63,    64,    65,    66,    67,    70,    74,   116,   154,
+     153,   153,   100,   154,     8,     9,   103,   116,   150,   151,
+     154,   157,   158,    99,    97,    97,    28,    42,    43,    44,
+      45,    46,    47,    49,    52,    53,    54,    89,    90,    91,
+      92,    93,    94,    95,    98,   135,   155,   156,   154,    33,
+      46,    47,    49,    53,    54,   117,    97,    97,    24,    50,
+      51,   116,   154,    74,    34,    44,   125,    33,    97,    97,
+      97,    97,    34,    97,    97,   117,    97,   116,    28,   155,
+      28,    34,    28,    34,    28,    34,    28,    34,    69,    76,
+      69,    76,    69,    76,    69,    76,    69,    76,    55,    57,
+      59,    61,   147,    28,    28,    79,    80,    98,   100,   103,
+     103,   102,   103,    98,   102,   102,    98,   157,    26,   154,
      154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     158,    42,    43,    44,    45,    46,    47,    49,    52,    53,
-      54,    89,    90,    91,    92,    93,    94,    95,    98,    97,
-     119,    97,   136,   137,   139,   137,   137,    44,    97,    28,
-     154,   154,    84,    97,   110,   111,   112,   113,   120,    97,
-     119,   132,   133,   134,    97,    26,    23,    28,   148,    56,
-      58,    60,    62,    71,    72,    73,    77,    78,   142,   143,
-     153,   142,   153,   153,   158,   154,   154,   154,     8,     9,
-     116,   151,   154,   100,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   158,    42,    43,    44,
+      45,    46,    47,    49,    52,    53,    54,    89,    90,    91,
+      92,    93,    94,    95,    98,    97,   119,    97,   136,   137,
+     139,   137,   137,    44,    97,    28,   154,   154,    84,    97,
+     110,   111,   112,   113,   120,    97,   119,   132,   133,   134,
+      97,    26,   153,   153,   153,   153,   153,   153,   153,   153,
+      23,    28,   148,    56,    58,    60,    62,    71,    72,    73,
+      77,    78,   142,   143,   153,   142,   153,   153,   158,   154,
+     154,   154,     8,     9,   116,   151,   154,   100,   154,   154,
      154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   158,   132,    16,   132,    97,    97,    97,   154,
-     132,    97,   116,    97,    87,   134,   132,   154,   153,   148,
-     148,   148,   148,   153,   153,   148,   153,   153,   100,    16,
-      85,    97,   119,    15,    34,    86,   117,   113,    97,    10,
-     153,   153,   153,   153,    28,    71,   143,    97,   119,    97,
-     132,    34,   154,    97,    97,   115,   116,    71,   132,    85,
-     154,    97,   132,    97,    98,   153,    85,    97,    97,   132,
-     116,    97,   132,    86,    86,    97,    97
+     154,   154,   154,   154,   154,   154,   158,   132,    16,   132,
+      97,    97,    97,   154,   132,    97,   116,    97,    87,   134,
+     132,   154,    28,    28,    28,    28,   153,   148,   148,   148,
+     148,   153,   153,   148,   153,   153,   100,    16,    85,    97,
+     119,    15,    34,    86,   117,   113,    97,    10,   153,   153,
+     153,   153,   153,   153,   153,   153,    28,    71,   143,    97,
+     119,    97,   132,    34,   154,    97,    97,   115,   116,    71,
+     132,    85,   154,    97,   132,    97,    98,   153,    85,    97,
+      97,   132,   116,    97,   132,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1794,16 +1788,17 @@ static const yytype_uint8 yyr1[] =
      126,   127,   127,   128,   128,   128,   128,   129,   129,   129,
      130,   130,   131,   132,   132,   133,   133,   134,   134,   135,
      135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   136,   137,   137,   138,   138,   139,   139,   140,   140,
-     141,   141,   141,   141,   142,   142,   142,   142,   142,   143,
-     144,   144,   144,   145,   145,   145,   145,   145,   145,   145,
-     145,   145,   145,   146,   146,   146,   146,   146,   147,   147,
-     147,   147,   148,   148,   149,   149,   149,   150,   150,   151,
-     151,   151,   152,   152,   153,   153,   154,   154,   154,   154,
+     135,   136,   137,   137,   138,   138,   139,   139,   139,   139,
+     139,   139,   139,   139,   139,   139,   140,   140,   141,   141,
+     141,   141,   142,   142,   142,   142,   142,   143,   144,   144,
+     144,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   146,   146,   146,   146,   146,   147,   147,   147,   147,
+     148,   148,   149,   149,   149,   150,   150,   151,   151,   151,
+     152,   152,   153,   153,   154,   154,   154,   154,   154,   154,
      154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   155,   155,   155,   155,   155,
+     154,   154,   154,   155,   155,   155,   155,   155,   155,   155,
      155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-     155,   155,   155,   155,   156,   156,   157,   157,   158,   158
+     155,   155,   156,   156,   157,   157,   158,   158
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1824,16 +1819,17 @@ static const yytype_int8 yyr2[] =
        3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
        4,     6,     4,     0,     1,     1,     2,     1,     1,     1,
        1,     1,     1,     2,     4,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
-       1,     1,     1,     5,     1,     1,     5,     2,     2,     2,
-       2,     4,     4,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     6,     6,     6,     6,     6,     1,     1,
-       1,     1,     1,     1,     3,     3,     3,     1,     3,     3,
-       3,     3,     2,     2,     1,     1,     1,     1,     3,     3,
+       1,     1,     1,     1,     1,     1,     2,     2,     4,     6,
+       4,     6,     4,     6,     4,     6,     2,     2,     1,     1,
+       1,     5,     1,     1,     5,     2,     2,     2,     2,     4,
+       4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     6,     6,     6,     6,     6,     1,     1,     1,     1,
+       1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
+       2,     2,     1,     1,     1,     1,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     1,     1,     3,     3,     3,
+       3,     3,     3,     1,     1,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -2107,31 +2103,31 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2111 "engines/director/lingo/lingo-gr.cpp"
+#line 2107 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2117 "engines/director/lingo/lingo-gr.cpp"
+#line 2113 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2123 "engines/director/lingo/lingo-gr.cpp"
+#line 2119 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2129 "engines/director/lingo/lingo-gr.cpp"
+#line 2125 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2135 "engines/director/lingo/lingo-gr.cpp"
+#line 2131 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2399,7 +2395,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2403 "engines/director/lingo/lingo-gr.cpp"
+#line 2399 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2410,7 +2406,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2414 "engines/director/lingo/lingo-gr.cpp"
+#line 2410 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2420,37 +2416,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2424 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2430 "engines/director/lingo/lingo-gr.cpp"
+#line 2426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2436 "engines/director/lingo/lingo-gr.cpp"
+#line 2432 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2442 "engines/director/lingo/lingo-gr.cpp"
+#line 2438 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2448 "engines/director/lingo/lingo-gr.cpp"
+#line 2444 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2454 "engines/director/lingo/lingo-gr.cpp"
+#line 2450 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2461,7 +2457,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2465 "engines/director/lingo/lingo-gr.cpp"
+#line 2461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2471,13 +2467,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2475 "engines/director/lingo/lingo-gr.cpp"
+#line 2471 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2481 "engines/director/lingo/lingo-gr.cpp"
+#line 2477 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2486,344 +2482,344 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2490 "engines/director/lingo/lingo-gr.cpp"
+#line 2486 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2497 "engines/director/lingo/lingo-gr.cpp"
+#line 2493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2503 "engines/director/lingo/lingo-gr.cpp"
+#line 2499 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 2505 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tABBREVIATED  */
 #line 290 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2515 "engines/director/lingo/lingo-gr.cpp"
+#line 2511 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tABBREV  */
 #line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2521 "engines/director/lingo/lingo-gr.cpp"
+#line 2517 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tABBR  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2527 "engines/director/lingo/lingo-gr.cpp"
+#line 2523 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tAFTER  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2533 "engines/director/lingo/lingo-gr.cpp"
+#line 2529 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tAND  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2539 "engines/director/lingo/lingo-gr.cpp"
+#line 2535 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tBEFORE  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2545 "engines/director/lingo/lingo-gr.cpp"
+#line 2541 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tCAST  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2551 "engines/director/lingo/lingo-gr.cpp"
+#line 2547 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tCHAR  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2557 "engines/director/lingo/lingo-gr.cpp"
+#line 2553 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tCHARS  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2563 "engines/director/lingo/lingo-gr.cpp"
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tCONTAINS  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2569 "engines/director/lingo/lingo-gr.cpp"
+#line 2565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tDATE  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2575 "engines/director/lingo/lingo-gr.cpp"
+#line 2571 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tDOWN  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2581 "engines/director/lingo/lingo-gr.cpp"
+#line 2577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tFIELD  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2587 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tFRAME  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2593 "engines/director/lingo/lingo-gr.cpp"
+#line 2589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tIN  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2599 "engines/director/lingo/lingo-gr.cpp"
+#line 2595 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tINTERSECTS  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2601 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tINTO  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2611 "engines/director/lingo/lingo-gr.cpp"
+#line 2607 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tITEM  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2617 "engines/director/lingo/lingo-gr.cpp"
+#line 2613 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tITEMS  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2623 "engines/director/lingo/lingo-gr.cpp"
+#line 2619 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tLAST  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2629 "engines/director/lingo/lingo-gr.cpp"
+#line 2625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tLINE  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2635 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tLINES  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2641 "engines/director/lingo/lingo-gr.cpp"
+#line 2637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tLONG  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2647 "engines/director/lingo/lingo-gr.cpp"
+#line 2643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tMENU  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2653 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tMENUITEM  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2659 "engines/director/lingo/lingo-gr.cpp"
+#line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tMENUITEMS  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2665 "engines/director/lingo/lingo-gr.cpp"
+#line 2661 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tMOD  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 2667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tMOVIE  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2677 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tNEXT  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2683 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tNOT  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2689 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tNUMBER  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 2691 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tOF  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2701 "engines/director/lingo/lingo-gr.cpp"
+#line 2697 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* ID: tOPEN  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2707 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* ID: tOR  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2713 "engines/director/lingo/lingo-gr.cpp"
+#line 2709 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* ID: tPREVIOUS  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2719 "engines/director/lingo/lingo-gr.cpp"
+#line 2715 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* ID: tREPEAT  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2725 "engines/director/lingo/lingo-gr.cpp"
+#line 2721 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* ID: tSCRIPT  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2731 "engines/director/lingo/lingo-gr.cpp"
+#line 2727 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* ID: tASSERTERROR  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2737 "engines/director/lingo/lingo-gr.cpp"
+#line 2733 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* ID: tSET  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2743 "engines/director/lingo/lingo-gr.cpp"
+#line 2739 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* ID: tSHORT  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* ID: tSOUND  */
 #line 344 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2755 "engines/director/lingo/lingo-gr.cpp"
+#line 2751 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* ID: tSPRITE  */
 #line 345 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2761 "engines/director/lingo/lingo-gr.cpp"
+#line 2757 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* ID: tSTARTS  */
 #line 346 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2767 "engines/director/lingo/lingo-gr.cpp"
+#line 2763 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* ID: tTELL  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2773 "engines/director/lingo/lingo-gr.cpp"
+#line 2769 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* ID: tTIME  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2779 "engines/director/lingo/lingo-gr.cpp"
+#line 2775 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* ID: tTO  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2785 "engines/director/lingo/lingo-gr.cpp"
+#line 2781 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* ID: tWHILE  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2791 "engines/director/lingo/lingo-gr.cpp"
+#line 2787 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* ID: tWINDOW  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2797 "engines/director/lingo/lingo-gr.cpp"
+#line 2793 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* ID: tWITH  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2803 "engines/director/lingo/lingo-gr.cpp"
+#line 2799 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* ID: tWITHIN  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2809 "engines/director/lingo/lingo-gr.cpp"
+#line 2805 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* ID: tWORD  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2815 "engines/director/lingo/lingo-gr.cpp"
+#line 2811 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* ID: tWORDS  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2821 "engines/director/lingo/lingo-gr.cpp"
+#line 2817 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* idlist: %empty  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2827 "engines/director/lingo/lingo-gr.cpp"
+#line 2823 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* nonemptyidlist: ID  */
@@ -2832,7 +2828,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2836 "engines/director/lingo/lingo-gr.cpp"
+#line 2832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2840,67 +2836,67 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2844 "engines/director/lingo/lingo-gr.cpp"
+#line 2840 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* proc: ID cmdargs '\n'  */
 #line 392 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2850 "engines/director/lingo/lingo-gr.cpp"
+#line 2846 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* proc: tPUT cmdargs '\n'  */
 #line 393 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2856 "engines/director/lingo/lingo-gr.cpp"
+#line 2852 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* proc: tGO cmdargs '\n'  */
 #line 394 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2862 "engines/director/lingo/lingo-gr.cpp"
+#line 2858 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* proc: tGO frameargs '\n'  */
 #line 395 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2868 "engines/director/lingo/lingo-gr.cpp"
+#line 2864 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* proc: tPLAY cmdargs '\n'  */
 #line 396 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2874 "engines/director/lingo/lingo-gr.cpp"
+#line 2870 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* proc: tPLAY frameargs '\n'  */
 #line 397 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2880 "engines/director/lingo/lingo-gr.cpp"
+#line 2876 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* proc: tNEXT tREPEAT '\n'  */
 #line 398 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2886 "engines/director/lingo/lingo-gr.cpp"
+#line 2882 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* proc: tEXIT tREPEAT '\n'  */
 #line 399 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2892 "engines/director/lingo/lingo-gr.cpp"
+#line 2888 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* proc: tEXIT '\n'  */
 #line 400 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2898 "engines/director/lingo/lingo-gr.cpp"
+#line 2894 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* proc: tASSERTERROR stmtoneliner  */
 #line 401 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2904 "engines/director/lingo/lingo-gr.cpp"
+#line 2900 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100: /* cmdargs: %empty  */
@@ -2908,7 +2904,7 @@ yyreduce:
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2912 "engines/director/lingo/lingo-gr.cpp"
+#line 2908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* cmdargs: expr  */
@@ -2918,7 +2914,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2922 "engines/director/lingo/lingo-gr.cpp"
+#line 2918 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102: /* cmdargs: expr ',' nonemptyexprlist  */
@@ -2927,7 +2923,7 @@ yyreduce:
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2931 "engines/director/lingo/lingo-gr.cpp"
+#line 2927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* cmdargs: expr expr_nounarymath  */
@@ -2938,7 +2934,7 @@ yyreduce:
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+#line 2938 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
@@ -2948,7 +2944,7 @@ yyreduce:
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2952 "engines/director/lingo/lingo-gr.cpp"
+#line 2948 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* cmdargs: '(' ')'  */
@@ -2956,7 +2952,7 @@ yyreduce:
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 2956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
@@ -2965,7 +2961,7 @@ yyreduce:
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2969 "engines/director/lingo/lingo-gr.cpp"
+#line 2965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* frameargs: tFRAME expr  */
@@ -2975,7 +2971,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2979 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* frameargs: tMOVIE expr  */
@@ -2986,7 +2982,7 @@ yyreduce:
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2990 "engines/director/lingo/lingo-gr.cpp"
+#line 2986 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* frameargs: tFRAME expr tOF tMOVIE expr  */
@@ -2997,7 +2993,7 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3001 "engines/director/lingo/lingo-gr.cpp"
+#line 2997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* frameargs: expr tOF tMOVIE expr  */
@@ -3008,7 +3004,7 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3012 "engines/director/lingo/lingo-gr.cpp"
+#line 3008 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* frameargs: tFRAME expr expr_nounarymath  */
@@ -3019,49 +3015,49 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 3019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* asgn: tPUT expr tINTO varorchunk '\n'  */
 #line 471 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3029 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
 #line 472 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3035 "engines/director/lingo/lingo-gr.cpp"
+#line 3031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
 #line 473 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3041 "engines/director/lingo/lingo-gr.cpp"
+#line 3037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* asgn: tSET varorthe to expr '\n'  */
 #line 474 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3047 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* definevars: tGLOBAL idlist '\n'  */
 #line 479 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3053 "engines/director/lingo/lingo-gr.cpp"
+#line 3049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* definevars: tPROPERTY idlist '\n'  */
 #line 480 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3059 "engines/director/lingo/lingo-gr.cpp"
+#line 3055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* definevars: tINSTANCE idlist '\n'  */
 #line 481 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3065 "engines/director/lingo/lingo-gr.cpp"
+#line 3061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* ifstmt: tIF expr tTHEN stmt  */
@@ -3070,14 +3066,14 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3074 "engines/director/lingo/lingo-gr.cpp"
+#line 3070 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
 #line 488 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3081 "engines/director/lingo/lingo-gr.cpp"
+#line 3077 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
@@ -3088,7 +3084,7 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3092 "engines/director/lingo/lingo-gr.cpp"
+#line 3088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
@@ -3097,7 +3093,7 @@ yyreduce:
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3101 "engines/director/lingo/lingo-gr.cpp"
+#line 3097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
@@ -3106,35 +3102,35 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3110 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
 #line 506 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3117 "engines/director/lingo/lingo-gr.cpp"
+#line 3113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 510 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 3120 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 512 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3131 "engines/director/lingo/lingo-gr.cpp"
+#line 3127 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 514 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3138 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130: /* tell: tTELL expr tTO stmtoneliner  */
@@ -3143,26 +3139,26 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3147 "engines/director/lingo/lingo-gr.cpp"
+#line 3143 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
 #line 522 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+#line 3150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* when: tWHEN ID tTHEN expr  */
 #line 526 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3160 "engines/director/lingo/lingo-gr.cpp"
+#line 3156 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* stmtlist: %empty  */
 #line 528 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3166 "engines/director/lingo/lingo-gr.cpp"
+#line 3162 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* nonemptystmtlist: stmtlistline  */
@@ -3173,7 +3169,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3177 "engines/director/lingo/lingo-gr.cpp"
+#line 3173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* nonemptystmtlist: stmtlist stmtlistline  */
@@ -3183,61 +3179,61 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3187 "engines/director/lingo/lingo-gr.cpp"
+#line 3183 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* stmtlistline: '\n'  */
 #line 546 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3193 "engines/director/lingo/lingo-gr.cpp"
+#line 3189 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* simpleexpr_nounarymath: tINT  */
 #line 553 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3199 "engines/director/lingo/lingo-gr.cpp"
+#line 3195 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* simpleexpr_nounarymath: tFLOAT  */
 #line 554 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3205 "engines/director/lingo/lingo-gr.cpp"
+#line 3201 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141: /* simpleexpr_nounarymath: tSYMBOL  */
 #line 555 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3211 "engines/director/lingo/lingo-gr.cpp"
+#line 3207 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142: /* simpleexpr_nounarymath: tSTRING  */
 #line 556 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3217 "engines/director/lingo/lingo-gr.cpp"
+#line 3213 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* simpleexpr_nounarymath: tNOT simpleexpr  */
 #line 557 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3223 "engines/director/lingo/lingo-gr.cpp"
+#line 3219 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
 #line 558 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3229 "engines/director/lingo/lingo-gr.cpp"
+#line 3225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* simpleexpr_nounarymath: '(' expr ')'  */
 #line 559 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3235 "engines/director/lingo/lingo-gr.cpp"
+#line 3231 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151: /* var: ID  */
 #line 567 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3241 "engines/director/lingo/lingo-gr.cpp"
+#line 3237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156: /* chunk: tFIELD simpleexpr  */
@@ -3246,7 +3242,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157: /* chunk: tCAST simpleexpr  */
@@ -3255,495 +3251,551 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3259 "engines/director/lingo/lingo-gr.cpp"
+#line 3255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* object: tSCRIPT simpleexpr  */
+  case 158: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
+#line 585 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
+#line 3262 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 159: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
 #line 587 "engines/director/lingo/lingo-gr.y"
+                                                                                {
+		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 3269 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 160: /* chunk: tWORD simpleexpr tOF simpleexpr  */
+#line 589 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
+#line 3276 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 161: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 591 "engines/director/lingo/lingo-gr.y"
+                                                                                {
+		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 3283 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 162: /* chunk: tITEM simpleexpr tOF simpleexpr  */
+#line 593 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
+#line 3290 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 163: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 595 "engines/director/lingo/lingo-gr.y"
+                                                                                {
+		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 3297 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 164: /* chunk: tLINE simpleexpr tOF simpleexpr  */
+#line 597 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
+#line 3304 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 165: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 599 "engines/director/lingo/lingo-gr.y"
+                                                                                {
+		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 3311 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 166: /* object: tSCRIPT simpleexpr  */
+#line 603 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3268 "engines/director/lingo/lingo-gr.cpp"
+#line 3320 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* object: tWINDOW simpleexpr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 167: /* object: tWINDOW simpleexpr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3277 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 600 "engines/director/lingo/lingo-gr.y"
+  case 171: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3283 "engines/director/lingo/lingo-gr.cpp"
+#line 3335 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 174: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 621 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3289 "engines/director/lingo/lingo-gr.cpp"
+#line 3341 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* theobj: tSOUND simpleexpr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 175: /* theobj: tSOUND simpleexpr  */
+#line 622 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3295 "engines/director/lingo/lingo-gr.cpp"
+#line 3347 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* theobj: tSPRITE simpleexpr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 176: /* theobj: tSPRITE simpleexpr  */
+#line 623 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3301 "engines/director/lingo/lingo-gr.cpp"
+#line 3353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* menu: tMENU simpleexpr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 177: /* menu: tMENU simpleexpr  */
+#line 626 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3307 "engines/director/lingo/lingo-gr.cpp"
+#line 3359 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* writablethe: tTHE ID  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+  case 178: /* writablethe: tTHE ID  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3313 "engines/director/lingo/lingo-gr.cpp"
+#line 3365 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* writablethe: tTHE ID tOF theobj  */
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 179: /* writablethe: tTHE ID tOF theobj  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3319 "engines/director/lingo/lingo-gr.cpp"
+#line 3371 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 180: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 630 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3325 "engines/director/lingo/lingo-gr.cpp"
+#line 3377 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 617 "engines/director/lingo/lingo-gr.y"
+  case 181: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 633 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3331 "engines/director/lingo/lingo-gr.cpp"
+#line 3383 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 182: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3337 "engines/director/lingo/lingo-gr.cpp"
+#line 3389 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* thedatetime: tTHE tABBREV tDATE  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 183: /* thedatetime: tTHE tABBREV tDATE  */
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3343 "engines/director/lingo/lingo-gr.cpp"
+#line 3395 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* thedatetime: tTHE tABBREV tTIME  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 184: /* thedatetime: tTHE tABBREV tTIME  */
+#line 636 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3349 "engines/director/lingo/lingo-gr.cpp"
+#line 3401 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* thedatetime: tTHE tABBR tDATE  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 185: /* thedatetime: tTHE tABBR tDATE  */
+#line 637 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3355 "engines/director/lingo/lingo-gr.cpp"
+#line 3407 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* thedatetime: tTHE tABBR tTIME  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 186: /* thedatetime: tTHE tABBR tTIME  */
+#line 638 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3361 "engines/director/lingo/lingo-gr.cpp"
+#line 3413 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* thedatetime: tTHE tLONG tDATE  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 187: /* thedatetime: tTHE tLONG tDATE  */
+#line 639 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3367 "engines/director/lingo/lingo-gr.cpp"
+#line 3419 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* thedatetime: tTHE tLONG tTIME  */
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 188: /* thedatetime: tTHE tLONG tTIME  */
+#line 640 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3373 "engines/director/lingo/lingo-gr.cpp"
+#line 3425 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* thedatetime: tTHE tSHORT tDATE  */
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 189: /* thedatetime: tTHE tSHORT tDATE  */
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3379 "engines/director/lingo/lingo-gr.cpp"
+#line 3431 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* thedatetime: tTHE tSHORT tTIME  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+  case 190: /* thedatetime: tTHE tSHORT tTIME  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 191: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3391 "engines/director/lingo/lingo-gr.cpp"
+#line 3443 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 631 "engines/director/lingo/lingo-gr.y"
+  case 192: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3397 "engines/director/lingo/lingo-gr.cpp"
+#line 3449 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 193: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 648 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3403 "engines/director/lingo/lingo-gr.cpp"
+#line 3455 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 194: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 649 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3409 "engines/director/lingo/lingo-gr.cpp"
+#line 3461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 195: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 650 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3415 "engines/director/lingo/lingo-gr.cpp"
+#line 3467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* chunktype: tCHAR  */
-#line 637 "engines/director/lingo/lingo-gr.y"
+  case 196: /* chunktype: tCHAR  */
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3421 "engines/director/lingo/lingo-gr.cpp"
+#line 3473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* chunktype: tWORD  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+  case 197: /* chunktype: tWORD  */
+#line 654 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3427 "engines/director/lingo/lingo-gr.cpp"
+#line 3479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* chunktype: tITEM  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 198: /* chunktype: tITEM  */
+#line 655 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3433 "engines/director/lingo/lingo-gr.cpp"
+#line 3485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* chunktype: tLINE  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 199: /* chunktype: tLINE  */
+#line 656 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3439 "engines/director/lingo/lingo-gr.cpp"
+#line 3491 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* list: '[' exprlist ']'  */
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 202: /* list: '[' exprlist ']'  */
+#line 661 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3445 "engines/director/lingo/lingo-gr.cpp"
+#line 3497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* list: '[' ':' ']'  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 203: /* list: '[' ':' ']'  */
+#line 662 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3451 "engines/director/lingo/lingo-gr.cpp"
+#line 3503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* list: '[' proplist ']'  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 204: /* list: '[' proplist ']'  */
+#line 663 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3457 "engines/director/lingo/lingo-gr.cpp"
+#line 3509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* proplist: proppair  */
-#line 650 "engines/director/lingo/lingo-gr.y"
+  case 205: /* proplist: proppair  */
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3466 "engines/director/lingo/lingo-gr.cpp"
+#line 3518 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* proplist: proplist ',' proppair  */
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 206: /* proplist: proplist ',' proppair  */
+#line 670 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3474 "engines/director/lingo/lingo-gr.cpp"
+#line 3526 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* proppair: tSYMBOL ':' expr  */
-#line 659 "engines/director/lingo/lingo-gr.y"
+  case 207: /* proppair: tSYMBOL ':' expr  */
+#line 675 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3480 "engines/director/lingo/lingo-gr.cpp"
+#line 3532 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* proppair: ID ':' expr  */
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 208: /* proppair: ID ':' expr  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3486 "engines/director/lingo/lingo-gr.cpp"
+#line 3538 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 201: /* proppair: tSTRING ':' expr  */
-#line 661 "engines/director/lingo/lingo-gr.y"
+  case 209: /* proppair: tSTRING ':' expr  */
+#line 677 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3492 "engines/director/lingo/lingo-gr.cpp"
+#line 3544 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 202: /* unarymath: '+' simpleexpr  */
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 210: /* unarymath: '+' simpleexpr  */
+#line 680 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3498 "engines/director/lingo/lingo-gr.cpp"
+#line 3550 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* unarymath: '-' simpleexpr  */
-#line 665 "engines/director/lingo/lingo-gr.y"
+  case 211: /* unarymath: '-' simpleexpr  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3504 "engines/director/lingo/lingo-gr.cpp"
+#line 3556 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* expr: expr '+' expr  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 216: /* expr: expr '+' expr  */
+#line 691 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3510 "engines/director/lingo/lingo-gr.cpp"
+#line 3562 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* expr: expr '-' expr  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 217: /* expr: expr '-' expr  */
+#line 692 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3516 "engines/director/lingo/lingo-gr.cpp"
+#line 3568 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* expr: expr '*' expr  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+  case 218: /* expr: expr '*' expr  */
+#line 693 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3522 "engines/director/lingo/lingo-gr.cpp"
+#line 3574 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* expr: expr '/' expr  */
-#line 678 "engines/director/lingo/lingo-gr.y"
+  case 219: /* expr: expr '/' expr  */
+#line 694 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3528 "engines/director/lingo/lingo-gr.cpp"
+#line 3580 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* expr: expr tMOD expr  */
-#line 679 "engines/director/lingo/lingo-gr.y"
+  case 220: /* expr: expr tMOD expr  */
+#line 695 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3534 "engines/director/lingo/lingo-gr.cpp"
+#line 3586 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 213: /* expr: expr '>' expr  */
-#line 680 "engines/director/lingo/lingo-gr.y"
+  case 221: /* expr: expr '>' expr  */
+#line 696 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3540 "engines/director/lingo/lingo-gr.cpp"
+#line 3592 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* expr: expr '<' expr  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 222: /* expr: expr '<' expr  */
+#line 697 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3546 "engines/director/lingo/lingo-gr.cpp"
+#line 3598 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* expr: expr tEQ expr  */
-#line 682 "engines/director/lingo/lingo-gr.y"
+  case 223: /* expr: expr tEQ expr  */
+#line 698 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3552 "engines/director/lingo/lingo-gr.cpp"
+#line 3604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* expr: expr tNEQ expr  */
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 224: /* expr: expr tNEQ expr  */
+#line 699 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3558 "engines/director/lingo/lingo-gr.cpp"
+#line 3610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* expr: expr tGE expr  */
-#line 684 "engines/director/lingo/lingo-gr.y"
+  case 225: /* expr: expr tGE expr  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3564 "engines/director/lingo/lingo-gr.cpp"
+#line 3616 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* expr: expr tLE expr  */
-#line 685 "engines/director/lingo/lingo-gr.y"
+  case 226: /* expr: expr tLE expr  */
+#line 701 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3570 "engines/director/lingo/lingo-gr.cpp"
+#line 3622 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* expr: expr tAND expr  */
-#line 686 "engines/director/lingo/lingo-gr.y"
+  case 227: /* expr: expr tAND expr  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3576 "engines/director/lingo/lingo-gr.cpp"
+#line 3628 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* expr: expr tOR expr  */
-#line 687 "engines/director/lingo/lingo-gr.y"
+  case 228: /* expr: expr tOR expr  */
+#line 703 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3582 "engines/director/lingo/lingo-gr.cpp"
+#line 3634 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 221: /* expr: expr '&' expr  */
-#line 688 "engines/director/lingo/lingo-gr.y"
+  case 229: /* expr: expr '&' expr  */
+#line 704 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3588 "engines/director/lingo/lingo-gr.cpp"
+#line 3640 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* expr: expr tCONCAT expr  */
-#line 689 "engines/director/lingo/lingo-gr.y"
+  case 230: /* expr: expr tCONCAT expr  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3594 "engines/director/lingo/lingo-gr.cpp"
+#line 3646 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* expr: expr tCONTAINS expr  */
-#line 690 "engines/director/lingo/lingo-gr.y"
+  case 231: /* expr: expr tCONTAINS expr  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3600 "engines/director/lingo/lingo-gr.cpp"
+#line 3652 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* expr: expr tSTARTS expr  */
-#line 691 "engines/director/lingo/lingo-gr.y"
+  case 232: /* expr: expr tSTARTS expr  */
+#line 707 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3606 "engines/director/lingo/lingo-gr.cpp"
+#line 3658 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 235: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 716 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3612 "engines/director/lingo/lingo-gr.cpp"
+#line 3664 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 701 "engines/director/lingo/lingo-gr.y"
+  case 236: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 717 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3618 "engines/director/lingo/lingo-gr.cpp"
+#line 3670 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 702 "engines/director/lingo/lingo-gr.y"
+  case 237: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 718 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3624 "engines/director/lingo/lingo-gr.cpp"
+#line 3676 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 703 "engines/director/lingo/lingo-gr.y"
+  case 238: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 719 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3630 "engines/director/lingo/lingo-gr.cpp"
+#line 3682 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 704 "engines/director/lingo/lingo-gr.y"
+  case 239: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 720 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3636 "engines/director/lingo/lingo-gr.cpp"
+#line 3688 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 232: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 240: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 721 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3642 "engines/director/lingo/lingo-gr.cpp"
+#line 3694 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 233: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 706 "engines/director/lingo/lingo-gr.y"
+  case 241: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 722 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3648 "engines/director/lingo/lingo-gr.cpp"
+#line 3700 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 234: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 707 "engines/director/lingo/lingo-gr.y"
+  case 242: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 723 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3654 "engines/director/lingo/lingo-gr.cpp"
+#line 3706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 235: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 708 "engines/director/lingo/lingo-gr.y"
+  case 243: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 724 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3660 "engines/director/lingo/lingo-gr.cpp"
+#line 3712 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 236: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 709 "engines/director/lingo/lingo-gr.y"
+  case 244: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 725 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3666 "engines/director/lingo/lingo-gr.cpp"
+#line 3718 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 710 "engines/director/lingo/lingo-gr.y"
+  case 245: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 726 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3672 "engines/director/lingo/lingo-gr.cpp"
+#line 3724 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 711 "engines/director/lingo/lingo-gr.y"
+  case 246: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 727 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3678 "engines/director/lingo/lingo-gr.cpp"
+#line 3730 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 712 "engines/director/lingo/lingo-gr.y"
+  case 247: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 728 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3684 "engines/director/lingo/lingo-gr.cpp"
+#line 3736 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 713 "engines/director/lingo/lingo-gr.y"
+  case 248: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 729 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3690 "engines/director/lingo/lingo-gr.cpp"
+#line 3742 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 241: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 714 "engines/director/lingo/lingo-gr.y"
+  case 249: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 730 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3696 "engines/director/lingo/lingo-gr.cpp"
+#line 3748 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 715 "engines/director/lingo/lingo-gr.y"
+  case 250: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 731 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3702 "engines/director/lingo/lingo-gr.cpp"
+#line 3754 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 716 "engines/director/lingo/lingo-gr.y"
+  case 251: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 732 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3708 "engines/director/lingo/lingo-gr.cpp"
+#line 3760 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 244: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 252: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 735 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3714 "engines/director/lingo/lingo-gr.cpp"
+#line 3766 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 720 "engines/director/lingo/lingo-gr.y"
+  case 253: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 736 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3720 "engines/director/lingo/lingo-gr.cpp"
+#line 3772 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* exprlist: %empty  */
-#line 723 "engines/director/lingo/lingo-gr.y"
+  case 254: /* exprlist: %empty  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3726 "engines/director/lingo/lingo-gr.cpp"
+#line 3778 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* nonemptyexprlist: expr  */
-#line 727 "engines/director/lingo/lingo-gr.y"
+  case 256: /* nonemptyexprlist: expr  */
+#line 743 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3735 "engines/director/lingo/lingo-gr.cpp"
+#line 3787 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 249: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 731 "engines/director/lingo/lingo-gr.y"
+  case 257: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 747 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3743 "engines/director/lingo/lingo-gr.cpp"
+#line 3795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3747 "engines/director/lingo/lingo-gr.cpp"
+#line 3799 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3942,7 +3994,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 736 "engines/director/lingo/lingo-gr.y"
+#line 752 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index d95d9cf5e6..cafcb0fdd2 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -582,6 +582,22 @@ chunk: tFIELD simpleexpr[arg]	{
 		NodeList *args = new NodeList;
 		args->push_back($arg);
 		$$ = new FuncNode(new Common::String("cast"), args); }
+	| tCHAR simpleexpr[idx] tOF simpleexpr[src]	{
+		$$ = new ChunkExprNode(kChunkChar, $idx, nullptr, $src); }
+	| tCHAR simpleexpr[start] tTO simpleexpr[end] tOF simpleexpr[src]	{
+		$$ = new ChunkExprNode(kChunkChar, $start, $end, $src); }
+	| tWORD simpleexpr[idx] tOF simpleexpr[src]	{
+		$$ = new ChunkExprNode(kChunkWord, $idx, nullptr, $src); }
+	| tWORD simpleexpr[start] tTO simpleexpr[end] tOF simpleexpr[src]	{
+		$$ = new ChunkExprNode(kChunkWord, $start, $end, $src); }
+	| tITEM simpleexpr[idx] tOF simpleexpr[src]	{
+		$$ = new ChunkExprNode(kChunkItem, $idx, nullptr, $src); }
+	| tITEM simpleexpr[start] tTO simpleexpr[end] tOF simpleexpr[src]	{
+		$$ = new ChunkExprNode(kChunkItem, $start, $end, $src); }
+	| tLINE simpleexpr[idx] tOF simpleexpr[src]	{
+		$$ = new ChunkExprNode(kChunkLine, $idx, nullptr, $src); }
+	| tLINE simpleexpr[start] tTO simpleexpr[end] tOF simpleexpr[src]	{
+		$$ = new ChunkExprNode(kChunkLine, $start, $end, $src); }
 	;
 
 object: tSCRIPT simpleexpr[arg]		{


Commit: a825a68f554a294206fb2e4cf47ce67e42602e0c
    https://github.com/scummvm/scummvm/commit/a825a68f554a294206fb2e4cf47ce67e42602e0c
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement open

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index ec01f11b1d..adf1ad9e8b 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -631,18 +631,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  153
+#define YYFINAL  155
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3841
+#define YYLAST   4062
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  55
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  257
+#define YYNRULES  258
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  489
+#define YYNSTATES  495
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -705,27 +705,27 @@ static const yytype_int16 yyrline[] =
      278,   282,   283,   284,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   306,   307,   311,
      313,   314,   315,   316,   317,   318,   319,   320,   322,   323,
-     324,   326,   327,   328,   329,   330,   331,   333,   334,   336,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   350,
-     351,   353,   354,   355,   356,   357,   358,   361,   362,   365,
-     369,   379,   380,   381,   382,   383,   384,   387,   388,   389,
-     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
-     404,   407,   412,   416,   422,   427,   430,   440,   445,   451,
-     457,   463,   471,   472,   473,   474,   477,   477,   479,   480,
-     481,   484,   488,   492,   498,   502,   506,   510,   512,   514,
-     518,   522,   526,   528,   529,   533,   539,   546,   547,   553,
-     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
-     564,   567,   569,   570,   573,   574,   577,   581,   585,   587,
-     589,   591,   593,   595,   597,   599,   603,   607,   613,   614,
-     615,   616,   619,   620,   621,   622,   623,   626,   628,   629,
-     630,   633,   634,   635,   636,   637,   638,   639,   640,   641,
-     642,   646,   647,   648,   649,   650,   653,   654,   655,   656,
-     659,   659,   661,   662,   663,   666,   670,   675,   676,   677,
-     680,   681,   684,   685,   689,   690,   691,   692,   693,   694,
-     695,   696,   697,   698,   699,   700,   701,   702,   703,   704,
-     705,   706,   707,   714,   715,   716,   717,   718,   719,   720,
-     721,   722,   723,   724,   725,   726,   727,   728,   729,   730,
-     731,   732,   735,   736,   739,   740,   743,   747
+     324,   326,   327,   328,   329,   330,   331,   334,   336,   339,
+     340,   341,   342,   343,   344,   345,   346,   347,   350,   351,
+     353,   354,   355,   356,   357,   358,   361,   362,   365,   369,
+     379,   380,   381,   382,   383,   384,   387,   388,   389,   392,
+     393,   394,   395,   396,   397,   398,   399,   404,   405,   406,
+     407,   410,   413,   418,   422,   428,   433,   436,   446,   451,
+     457,   463,   469,   477,   478,   479,   480,   483,   483,   485,
+     486,   487,   490,   494,   498,   504,   508,   512,   516,   518,
+     520,   524,   528,   532,   534,   535,   539,   545,   552,   553,
+     559,   560,   561,   562,   563,   564,   565,   566,   567,   568,
+     569,   570,   573,   575,   576,   579,   580,   583,   587,   591,
+     593,   595,   597,   599,   601,   603,   605,   609,   613,   619,
+     620,   621,   622,   625,   626,   627,   628,   629,   632,   634,
+     635,   636,   639,   640,   641,   642,   643,   644,   645,   646,
+     647,   648,   652,   653,   654,   655,   656,   659,   660,   661,
+     662,   665,   665,   667,   668,   669,   672,   676,   681,   682,
+     683,   686,   687,   690,   691,   695,   696,   697,   698,   699,
+     700,   701,   702,   703,   704,   705,   706,   707,   708,   709,
+     710,   711,   712,   713,   720,   721,   722,   723,   724,   725,
+     726,   727,   728,   729,   730,   731,   732,   733,   734,   735,
+     736,   737,   738,   741,   742,   745,   746,   749,   753
 };
 #endif
 
@@ -791,7 +791,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-335)
+#define YYPACT_NINF (-331)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -805,55 +805,56 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2170,  -335,  -335,  -335,  -335,  -335,  -335,   -20,  -335,  3373,
-    1303,  1400,  -335,  -335,  3373,  -335,   -15,  -335,  -335,  1497,
-      55,   619,  -335,  3373,  -335,  -335,  3373,  -335,  1303,  3373,
-    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,
-    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,
-    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,
-    -335,  -335,  1400,  3373,  3373,  3217,  -335,    25,  2170,  -335,
-    -335,  -335,  -335,  1497,  -335,  -335,  -335,  -335,  -335,  -335,
-    -335,  -335,  -335,  -335,   -63,  -335,  -335,  -335,  -335,  -335,
-    -335,  -335,   -31,     9,  -335,  -335,  -335,  -335,  1594,  1594,
-    1594,  1594,  1400,  1400,  1594,  1594,  1594,  1594,  1594,  3451,
-    1400,  1594,  1594,  1206,   719,   -25,    23,    32,  -335,  -335,
-    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,   818,
-    -335,  1400,   251,  3373,    35,    44,   915,  3373,  1400,  3529,
-    -335,  -335,    -3,  -335,    93,    49,    58,    61,    63,   123,
-      65,  3373,  -335,  -335,  -335,    74,  1012,  -335,  -335,  3373,
-    -335,  -335,  -335,  -335,  1109,  3733,  -335,    83,    84,    87,
-      91,   -54,   -39,   -33,   -24,    -9,    47,   120,   124,  3679,
-    -335,  -335,  -335,   333,    75,    76,    78,   -75,    29,  -335,
-    3733,    81,    90,  1400,  -335,  -335,   164,  1400,  1400,  1400,
-    1400,  1885,  1885,  2079,  1400,  1982,  1982,  1400,  1400,  1400,
-    1400,  1400,  1400,  1400,  1400,  -335,   443,  -335,   411,  2897,
-    1400,  1400,  1400,  1400,  1400,    95,  -335,  -335,  3607,  3607,
-    3607,   149,   508,   173,  -335,  -335,  1400,  1400,   -77,  -335,
-    -335,  -335,  3217,  2977,  -335,   105,  -335,  -335,   178,  3746,
-    1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  -335,  -335,
-    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,
-    -335,  -335,    31,  1691,  1788,  1594,  1594,  1400,  -335,  1400,
-    1400,  -335,  1400,  3295,  -335,  -335,  1400,   106,  1400,   -10,
-     -10,   -10,   -10,   142,   142,  -335,    -5,   -10,   -10,   -10,
-     -10,    -5,     6,     6,  -335,  -335,    90,  1400,  1400,  1400,
-    1400,  1400,  1400,  1400,  1400,  1400,  1400,  1400,  1400,  1400,
-    1400,  1400,  1400,  1400,  1400,  2977,   189,  2977,  -335,   110,
-    -335,   111,   126,  1400,  2977,  1788,   527,  3733,  3373,  -335,
-    -335,   127,  -335,  -335,  -335,  -335,  -335,  2330,  -335,  -335,
-    2977,  1400,  -335,   193,  -335,   197,  -335,   198,  -335,   199,
-    -335,  -335,  1594,    31,    31,    31,    31,  1594,  1594,    31,
-    1594,  1594,  -335,  -335,  -335,  -335,  -335,  -335,   -22,  3733,
-    3733,  3733,    75,    76,   135,  -335,  3733,  -335,  3733,   -10,
-     -10,   -10,   -10,   142,   142,  -335,    -5,   -10,   -10,   -10,
-     -10,    -5,     6,     6,  -335,  -335,    90,  2250,  3057,  2977,
-    -335,  -335,  -335,     4,  2417,  -335,  3373,   -77,   143,  -335,
-    2497,  3733,  1594,  1594,  1594,  1594,  -335,  1594,  1594,  1594,
-    1594,  -335,   211,   170,  -335,  -335,  -335,  3137,   147,  2977,
-    -335,   212,  1400,   148,   150,  -335,  -335,  3373,  -335,  -335,
-    -335,  -335,  -335,  -335,  -335,  -335,   194,  1594,  -335,  2977,
-    -335,  -335,  2577,  1400,  3647,  -335,  2977,    37,  -335,  1594,
-    2657,   169,  3660,  2977,  2977,  -335,  3373,  -335,   171,  -335,
-    2977,  2737,  -335,  -335,  2817,   172,   179,  -335,  -335
+    2243,  -331,  -331,  -331,  -331,  -331,  -331,   -24,  -331,  3446,
+    1376,  1473,  -331,  -331,  3446,  -331,    25,  -331,  -331,  1570,
+      75,  3368,  -331,  3446,  -331,  -331,  3446,  1570,  1376,  3446,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  1473,  3446,  3446,  3290,  -331,    31,  2243,  -331,
+    -331,  -331,  -331,  1570,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,   -49,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,   -12,   -31,  -331,  -331,  -331,  -331,  1667,  1667,
+    1667,  1667,  1473,  1473,  1667,  1667,  1667,  1667,  1667,  3524,
+    1473,  1667,  1667,  1279,   695,   -11,    10,    21,  -331,  -331,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,   794,
+    -331,  1473,   405,  3446,    23,    37,   891,  3446,  1473,  3602,
+    -331,  -331,   -17,  -331,   103,    44,    47,   988,    48,    50,
+      51,     8,    54,  3446,  -331,  -331,  -331,    55,  1085,  -331,
+    -331,  3446,  -331,  -331,  -331,  -331,  1182,  3897,  -331,   -18,
+      38,    41,    76,   -41,   -33,   -32,   -30,     5,    64,   126,
+     127,  3884,  -331,  -331,  -331,   459,    56,    61,    63,   -16,
+     -22,  -331,  3897,    65,    60,  1473,  -331,  -331,   140,  1473,
+    1473,  1473,  1473,  1958,  1958,  2152,  1473,  2055,  2055,  1473,
+    1473,  1473,  1473,  1473,  1473,  1473,  1473,  -331,  3720,  -331,
+     207,  2970,  1473,  1473,  1473,  1473,  1473,    71,  -331,  -331,
+    3680,  3680,  3680,   128,  3733,   145,  -331,  -331,  1473,  1473,
+     -73,  -331,  1473,  -331,  -331,  -331,  3290,  3050,  -331,    78,
+    -331,  -331,   150,  3913,  1667,  1667,  1667,  1667,  1667,  1667,
+    1667,  1667,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,  -331,  -331,    17,  1764,  1861,  1667,
+    1667,  1473,  -331,  1473,  1473,  -331,  1473,   596,  -331,  -331,
+    1473,    79,  1473,   122,   122,   122,   122,  3967,  3967,  -331,
+      -2,   122,   122,   122,   122,    -2,   -36,   -36,  -331,  -331,
+      60,  1473,  1473,  1473,  1473,  1473,  1473,  1473,  1473,  1473,
+    1473,  1473,  1473,  1473,  1473,  1473,  1473,  1473,  1473,  3050,
+     162,  3050,  -331,    85,  -331,    87,    88,  1473,  3050,  1861,
+    3746,  3897,  3446,  -331,  -331,    89,  -331,  -331,  3802,  -331,
+    -331,  -331,  2403,  -331,  -331,  3050,  1473,  -331,   159,  -331,
+     160,  -331,   167,  -331,   169,  -331,  -331,  1667,    17,    17,
+      17,    17,  1667,  1667,    17,  1667,  1667,  -331,  -331,  -331,
+    -331,  -331,  -331,   -80,  3897,  3897,  3897,    56,    61,    99,
+    -331,  3897,  -331,  3897,   122,   122,   122,   122,  3967,  3967,
+    -331,    -2,   122,   122,   122,   122,    -2,   -36,   -36,  -331,
+    -331,    60,  2323,  3130,  3050,  -331,  -331,  -331,   147,  2490,
+    -331,  3446,   -73,  -331,   106,  -331,  2570,  3897,  1667,  1667,
+    1667,  1667,  -331,  1667,  1667,  1667,  1667,  -331,   176,   135,
+    -331,  -331,  -331,  3210,   110,  3050,  -331,   174,  1473,   112,
+     121,  -331,  -331,  3446,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,   148,  1667,  -331,  3050,  -331,  -331,  2650,  1473,
+    3815,  -331,  3050,    18,  -331,  1667,  2730,   123,  3828,  3050,
+    3050,  -331,  3446,  -331,   125,  -331,  3050,  2810,  -331,  -331,
+    2890,   129,   130,  -331,  -331
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -861,77 +862,78 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       0,    24,    31,    37,    61,    72,    36,     0,    38,    77,
-     100,     0,    39,    41,     0,    52,    53,    56,    59,   100,
-      60,    63,    70,     0,    73,    71,     0,    57,   100,    77,
-      29,    58,    54,    51,    28,    30,    34,    67,    32,    33,
-      42,    43,    45,    46,    75,    76,    25,    26,    27,    47,
-      64,    35,    44,    48,    49,    50,    55,    69,    65,    66,
-      40,    74,    68,    77,     0,    62,     5,     0,     2,     3,
-       6,     7,     8,   100,     9,    81,    87,    88,    89,    82,
-      83,    84,    85,    86,     0,    98,    53,    60,    63,    68,
-      62,    79,     0,    78,   139,   140,   142,   141,    31,    37,
-      61,    72,    38,    52,    54,    32,    42,    45,    75,     0,
-      66,     0,     0,     0,   254,   151,     0,     0,   212,   146,
-     147,   148,   149,   168,   169,   170,   150,   213,   214,   101,
-     215,     0,     0,    77,     0,     0,   101,     0,     0,     0,
-     151,   154,     0,   155,     0,     0,     0,     0,     0,     0,
-       0,    77,    99,     1,     4,     0,   101,    97,   118,     0,
-     157,   156,   166,   167,   107,   108,   143,     0,     0,     0,
-       0,    25,    26,    27,    47,    64,    44,    55,   178,     0,
-     210,   211,   105,     0,   142,   141,     0,   151,     0,   205,
-     256,     0,   255,   254,    92,    93,    56,     0,     0,     0,
-       0,    29,    58,    51,     0,    34,    67,     0,     0,     0,
-       0,     0,     0,     0,     0,   233,   103,   234,     0,     0,
-       0,     0,     0,     0,     0,     0,    96,    91,    41,    28,
-      30,     0,     0,    55,   116,   117,     0,     0,    13,    94,
-      95,   120,     0,   133,   119,     0,    90,    80,    56,   111,
-       0,     0,     0,     0,     0,     0,     0,     0,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   196,   198,
-     199,   197,     0,     0,     0,     0,     0,     0,   145,     0,
-       0,   203,     0,     0,   204,   202,     0,     0,     0,   225,
-     226,   223,   224,   227,   228,   220,   230,   231,   232,   222,
-     221,   229,   216,   217,   218,   219,   102,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   133,   121,   133,   152,     0,
-     153,     0,     0,     0,   133,     0,     0,   132,     0,    17,
-      18,    11,    14,    15,   130,   137,   138,     0,   134,   135,
-     133,     0,   158,     0,   162,     0,   164,     0,   160,     0,
-     200,   201,     0,    33,    43,    46,    76,    48,    49,    50,
-      65,    66,   180,   173,   172,   179,   252,   253,     0,   209,
-     207,   208,     0,     0,     0,   206,   257,   144,   110,   244,
-     245,   242,   243,   246,   247,   239,   249,   250,   251,   241,
-     240,   248,   235,   236,   237,   238,   104,     0,     0,    10,
-     112,   113,   114,     0,     0,   115,    77,     0,     0,   136,
-      20,   109,     0,     0,     0,     0,   171,     0,     0,     0,
-       0,   177,     0,     0,   175,   176,   106,     0,     0,   133,
-     123,     0,     0,     0,     0,    16,   131,    21,   159,   163,
-     165,   161,   191,   193,   194,   192,     0,     0,   195,   133,
-     125,   122,     0,     0,     0,   127,   133,     0,    22,     0,
-       0,     0,     0,   133,    12,    19,     0,   174,     0,   124,
-     133,     0,    23,   126,     0,     0,     0,   128,   129
+       0,    24,    31,    37,    60,    71,    36,     0,    38,    76,
+     101,     0,    39,    41,     0,    52,    53,    56,    58,   101,
+      59,    62,    69,     0,    72,    70,     0,   101,   101,    76,
+      29,    57,    54,    51,    28,    30,    34,    66,    32,    33,
+      42,    43,    45,    46,    74,    75,    25,    26,    27,    47,
+      63,    35,    44,    48,    49,    50,    55,    68,    64,    65,
+      40,    73,    67,    76,     0,    61,     5,     0,     2,     3,
+       6,     7,     8,   101,     9,    80,    86,    87,    88,    81,
+      82,    83,    84,    85,     0,    99,    53,    59,    62,    67,
+      61,    78,     0,    77,   140,   141,   143,   142,    31,    37,
+      60,    71,    38,    52,    54,    32,    42,    45,    74,     0,
+      65,     0,     0,     0,   255,   152,     0,     0,   213,   147,
+     148,   149,   150,   169,   170,   171,   151,   214,   215,   102,
+     216,     0,     0,    76,     0,     0,   102,     0,     0,     0,
+     152,   155,     0,   156,     0,     0,     0,   102,     0,     0,
+       0,     0,     0,    76,   100,     1,     4,     0,   102,    98,
+     119,     0,   158,   157,   167,   168,   108,   109,   144,     0,
+       0,     0,     0,    25,    26,    27,    47,    63,    44,    55,
+     179,     0,   211,   212,   106,     0,   143,   142,     0,   152,
+       0,   206,   257,     0,   256,   255,    91,    92,    56,     0,
+       0,     0,     0,    29,    57,    51,     0,    34,    66,     0,
+       0,     0,     0,     0,     0,     0,     0,   234,   104,   235,
+       0,     0,     0,     0,     0,     0,     0,     0,    97,    90,
+      41,    28,    30,     0,     0,    55,   117,   118,     0,     0,
+      13,    95,    72,    93,    94,   121,     0,   134,   120,     0,
+      89,    79,    56,   112,     0,     0,     0,     0,     0,     0,
+       0,     0,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   197,   199,   200,   198,     0,     0,     0,     0,
+       0,     0,   146,     0,     0,   204,     0,     0,   205,   203,
+       0,     0,     0,   226,   227,   224,   225,   228,   229,   221,
+     231,   232,   233,   223,   222,   230,   217,   218,   219,   220,
+     103,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   134,
+     122,   134,   153,     0,   154,     0,     0,     0,   134,     0,
+       0,   133,     0,    17,    18,    11,    14,    15,     0,   131,
+     138,   139,     0,   135,   136,   134,     0,   159,     0,   163,
+       0,   165,     0,   161,     0,   201,   202,     0,    33,    43,
+      46,    75,    48,    49,    50,    64,    65,   181,   174,   173,
+     180,   253,   254,     0,   210,   208,   209,     0,     0,     0,
+     207,   258,   145,   111,   245,   246,   243,   244,   247,   248,
+     240,   250,   251,   252,   242,   241,   249,   236,   237,   238,
+     239,   105,     0,     0,    10,   113,   114,   115,     0,     0,
+     116,    76,     0,    96,     0,   137,    20,   110,     0,     0,
+       0,     0,   172,     0,     0,     0,     0,   178,     0,     0,
+     176,   177,   107,     0,     0,   134,   124,     0,     0,     0,
+       0,    16,   132,    21,   160,   164,   166,   162,   192,   194,
+     195,   193,     0,     0,   196,   134,   126,   123,     0,     0,
+       0,   128,   134,     0,    22,     0,     0,     0,     0,   134,
+      12,    19,     0,   175,     0,   125,   134,     0,    23,   127,
+       0,     0,     0,   129,   130
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -335,  -335,  -335,   202,  -335,  -335,  -335,  -335,  -335,  -150,
-    -335,  -335,     0,   -28,  -335,     3,   -61,  -335,    -1,   249,
-    -335,  -335,  -335,  -335,  -335,  -335,  -335,  -335,  -317,  -335,
-    -334,  -124,   -19,   -56,  -335,   -85,  -335,  -335,     5,  -155,
-     259,  -335,  -335,  -335,  -166,  -335,  -335,    -2,  -335,   292,
-      51,   118,   -26,    92,  -208
+    -331,  -331,  -331,   155,  -331,  -331,  -331,  -331,  -331,  -197,
+    -331,  -331,     0,   -25,  -331,     3,   -63,  -331,     6,   200,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -323,  -331,
+    -330,  -117,   -20,  -105,  -331,  -100,  -331,  -331,   -45,  -210,
+     213,  -331,  -331,  -331,   -58,  -331,  -331,   -52,  -331,   262,
+      67,    77,   -23,    49,  -211
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    67,    68,    69,    70,    71,   340,   341,   342,   343,
-      72,   467,   115,    92,    93,   346,    75,    76,   116,   117,
-      77,   236,    78,    79,    80,    81,    82,    83,   347,   348,
-     349,   118,   119,   329,   142,   120,   121,   122,   372,   373,
-     123,   124,   125,   272,   362,   126,   188,   189,   127,   128,
-     190,   216,   130,   191,   192
+       0,    67,    68,    69,    70,    71,   344,   345,   346,   347,
+      72,   473,   115,    92,    93,   351,    75,    76,   116,   117,
+      77,   238,    78,    79,    80,    81,    82,    83,   352,   353,
+     354,   118,   119,   333,   142,   120,   121,   122,   377,   378,
+     123,   124,   125,   276,   367,   126,   190,   191,   127,   128,
+     192,   218,   130,   193,   194
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -939,200 +941,217 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      73,   148,   141,    74,   152,   215,   306,   338,   407,    91,
-     409,    84,   215,   419,   133,   258,   134,   414,   135,   441,
-     339,   140,   259,   144,   193,   153,   145,   146,   282,    91,
-     260,   234,   215,   420,   157,   150,   262,   261,   442,   222,
-     215,   235,   204,   263,   222,   264,   197,   198,   199,   200,
-     220,   221,   265,   222,   360,   222,   204,   223,   224,   361,
-     266,   129,   132,    91,   151,    73,   158,   267,    73,   378,
-     136,    74,   155,   419,   193,   419,   286,    85,   436,   129,
-     419,   209,   210,   211,   212,   213,   419,   210,   211,   212,
-     213,   137,   138,   207,   208,   209,   210,   211,   212,   213,
-     212,   213,   268,   217,   269,   225,   270,   159,   271,   178,
-     217,   250,   252,   149,   187,   254,   406,   251,   253,   256,
-     194,   255,   462,   245,   156,   257,   237,   283,   419,   195,
-     217,   284,   226,    91,   475,   476,   419,   231,   217,   178,
-     419,   227,   470,   330,   330,   330,   238,   419,   273,   474,
-     419,    91,   274,   164,   165,   239,   481,   242,   240,   247,
-     241,   179,   244,   484,   183,   197,   198,   199,   200,   220,
-     221,   246,   222,   331,   332,   204,   223,   224,   279,   280,
-     281,   344,   218,   285,   197,   198,   199,   200,   286,   232,
-     288,   222,   327,   333,   204,   223,   224,   427,   428,   429,
-     430,   335,   350,   433,   351,   408,   387,   410,   411,   328,
-     328,   328,   207,   208,   209,   210,   211,   212,   213,    73,
-     243,   422,   326,   412,   417,   423,   424,   425,   140,   140,
-     140,   207,   208,   209,   210,   211,   212,   213,   282,   456,
-     446,   457,    73,    73,   461,   465,   463,   466,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   469,   479,   445,   483,   487,
-     154,   293,   294,   295,   297,   298,   488,   147,   458,   375,
-     143,   385,   249,   384,   219,   287,     0,   336,   337,     0,
-       0,     0,     0,   197,   198,   199,   200,   220,   221,     0,
-     222,     0,     0,   204,   223,   224,     0,     0,     0,     0,
+      73,   141,   154,    74,   150,   310,   412,    84,   414,    91,
+     254,   342,   217,   224,   133,   419,   255,   236,   290,   217,
+     442,   140,   425,   144,   343,   135,   145,   237,   262,    91,
+     217,   155,   426,   146,   148,   263,   264,   266,   152,   268,
+     365,   217,   246,   265,   267,   366,   269,   224,   159,   217,
+     199,   200,   201,   202,   222,   223,   134,   224,   214,   215,
+     206,   225,   226,    91,   153,    73,   256,   161,    73,   258,
+     383,    74,   257,    85,   270,   259,   287,   129,   132,   157,
+     288,   271,   425,   195,   425,   160,   136,   286,   195,   425,
+     212,   213,   214,   215,   147,   129,   425,   209,   210,   211,
+     212,   213,   214,   215,   260,   247,   219,   196,   227,   180,
+     261,   137,   138,   219,   189,   481,   482,   411,   197,   272,
+     228,   273,   468,   274,   219,   275,   335,   336,   249,   151,
+     334,   334,   334,    91,   229,   219,   239,   233,   425,   180,
+     158,   240,   476,   219,   241,   243,   425,   244,   245,   480,
+     425,   248,   250,    91,   277,   278,   487,   425,   290,   283,
+     425,   251,   447,   490,   284,   285,   292,   289,   331,   166,
+     167,   224,   337,   339,   206,   355,   356,   181,   413,   392,
+     185,   448,   415,   349,   416,   417,   422,   428,   429,   199,
+     200,   201,   202,   222,   223,   430,   224,   431,   220,   206,
+     225,   226,   286,   452,   462,   234,   463,   467,   469,   471,
+     332,   332,   332,   211,   212,   213,   214,   215,   472,   475,
+     485,    73,   489,   156,   330,   451,   493,   494,   149,   464,
+     140,   140,   140,   380,   143,   390,   209,   210,   211,   212,
+     213,   214,   215,   253,   291,     0,    73,    73,     0,   199,
+     200,   201,   202,   222,   223,     0,   224,     0,     0,   206,
+     225,   226,     0,     0,     0,     0,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,     0,     0,     0,     0,   389,     0,   297,
+     298,   299,   301,   302,     0,     0,   209,   210,   211,   212,
+     213,   214,   215,     0,     0,   340,   341,   282,     0,   348,
+     433,   434,   435,   436,     0,     0,   439,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
+       0,    73,     0,     0,     0,     0,     0,     0,    73,     0,
+       0,     0,   421,     0,     0,     0,     0,     0,     0,     0,
+     384,   385,    73,   386,     0,    73,     0,   391,     0,   393,
+     162,   163,   164,   165,     0,     0,   168,   169,   170,   171,
+     172,     0,     0,   182,   183,     0,     0,     0,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,     0,   450,     0,     0,     0,
+       0,     0,     0,     0,   418,     0,     0,     0,     0,     0,
+       0,     0,    73,    73,    73,     0,   446,     0,     0,    73,
+       0,    91,     0,   427,     0,     0,    73,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   221,     0,
+       0,     0,     0,    73,     0,    73,   466,   199,   200,   201,
+     202,   222,   223,   474,   224,     0,     0,   206,   225,   226,
+       0,     0,     0,     0,     0,    73,     0,     0,    73,     0,
+       0,     0,    73,     0,     0,     0,    73,     0,     0,    73,
+      73,     0,   488,     0,     0,     0,    73,    73,     0,     0,
+      73,     0,     0,     0,   209,   210,   211,   212,   213,   214,
+     215,   199,   200,   201,   202,   222,   223,     0,   224,     0,
+       0,   206,   225,   226,     0,   470,   357,   358,   359,   360,
+     361,   362,   363,   364,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   478,     0,     0,   379,
+     379,   381,   382,     0,     0,     0,     0,     0,   209,   210,
+     211,   212,   213,   214,   215,     0,     0,   281,     0,   282,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    73,     0,    73,     0,     0,
-     379,   380,     0,   381,    73,     0,     0,   386,   416,   388,
-     207,   208,   209,   210,   211,   212,   213,    73,     0,     0,
-      73,     0,     0,     0,     0,     0,     0,     0,   389,   390,
-     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
-     401,   402,   403,   404,   405,   197,   198,   199,   200,   220,
-     221,     0,   222,     0,   413,   204,   223,   224,   444,     0,
-     160,   161,   162,   163,     0,     0,   166,   167,   168,   169,
-     170,     0,   421,   180,   181,     0,     0,    73,    73,    73,
-       0,   440,     0,     0,    73,     0,    91,     0,     0,     0,
-      73,     0,   207,   208,   209,   210,   211,   212,   213,     0,
-       0,   277,     0,   278,     0,     0,     0,    73,     0,    73,
-     460,     0,     0,     0,     0,     0,     0,   468,     0,     0,
-       0,     0,     0,   197,   198,   199,   200,   220,   221,    73,
-     222,     0,    73,   204,   223,   224,    73,     0,     0,     0,
-      73,     0,     0,    73,    73,     0,   482,     0,     0,     0,
-      73,    73,     0,     0,    73,   307,   308,   309,   310,   311,
-     312,     0,   313,   464,     0,   314,   315,   316,     0,     0,
-     207,   208,   209,   210,   211,   212,   213,     0,     0,     0,
-       0,   278,     0,     0,   472,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   317,   318,   319,   320,   321,   322,   323,     0,
-       0,   324,   352,   353,   354,   355,   356,   357,   358,   359,
-     197,   198,   199,   200,   220,   221,     0,   222,     0,     0,
-     204,   223,   224,     0,     0,   374,   374,   376,   377,   197,
-     198,   199,   200,   220,   221,     0,   222,     0,     0,   204,
-     223,   224,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   207,   208,   209,
-     210,   211,   212,   213,     0,   334,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   207,   208,   209,   210,
-     211,   212,   213,     0,   415,     0,     1,   374,     0,     0,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
-      87,    88,     0,    22,   426,    24,    25,     0,    27,   431,
-     432,     0,   434,   435,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   139,    57,    58,    59,    60,    61,
-      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
-       0,     0,     0,     0,   448,   449,   450,   451,     0,   452,
-     453,   454,   455,     0,    94,    95,     1,   184,   185,     0,
-      98,    99,   100,   101,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    86,    17,    18,   431,
-      87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
-       0,   477,     0,     0,     0,    30,    31,   104,    33,    34,
-      35,     0,    36,    37,   105,    39,   106,    41,   107,    43,
-     108,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   109,    57,    58,   110,    60,    61,
-      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
-       0,   111,   112,     0,     0,     0,     0,     0,   131,     0,
-     114,     0,   186,    94,    95,     1,    96,    97,     0,    98,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   379,     0,     1,   387,   388,     0,     2,     3,     4,
+       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
+      13,     0,    15,    86,    17,    18,     0,    87,    88,   432,
+      22,     0,    24,    25,   437,   438,     0,   440,   441,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    89,     0,     0,
+       0,     0,     0,     0,    90,     0,     0,     0,     0,     0,
+     454,   455,   456,   457,     0,   458,   459,   460,   461,     0,
+      94,    95,     1,   186,   187,     0,    98,    99,   100,   101,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
+       0,    15,    86,    17,    18,   437,    87,    88,     0,    22,
+       0,    24,    25,     0,     0,     0,     0,   483,     0,     0,
+       0,    30,    31,   104,    33,    34,    35,     0,    36,    37,
+     105,    39,   106,    41,   107,    43,   108,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+     109,    57,    58,   110,    60,    61,    89,     0,     0,     0,
+       0,     0,     0,    90,     0,     0,     0,   111,   112,     0,
+       0,     0,     0,     0,   131,     0,   114,     0,   188,    94,
+      95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    86,   198,    18,     0,    87,    88,     0,    22,     0,
+      24,    25,     0,     0,     0,     0,   199,   200,   201,   202,
+     203,   204,   104,   205,    34,    35,   206,   207,   208,   105,
+      39,   106,    41,   107,    43,   108,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   109,
+      57,    58,   110,    60,    61,    89,     0,     0,     0,     0,
+       0,     0,    90,   209,   210,   211,   212,   213,   214,   215,
+       0,     0,   216,   131,     0,   114,    94,    95,     1,    96,
+      97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
+       8,     0,     0,     0,    12,   230,     0,    15,    86,    17,
+      18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
+       0,     0,     0,   199,   200,   201,   202,   203,   204,   104,
+     205,   231,   232,   206,   207,   208,   105,    39,   106,    41,
+     107,    43,   108,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,   109,    57,    58,   110,
+      60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
+     209,   210,   211,   212,   213,   214,   215,     0,     0,   216,
+     131,     0,   114,    94,    95,     1,    96,    97,     0,    98,
       99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    86,   196,    18,     0,    87,
-      88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-     197,   198,   199,   200,   201,   202,   104,   203,    34,    35,
-     204,   205,   206,   105,    39,   106,    41,   107,    43,   108,
+       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
+      88,     0,    22,     0,   242,    25,     0,     0,     0,     0,
+     199,   200,   201,   202,   203,   204,   104,   205,    34,    35,
+     206,   207,   208,   105,    39,   106,    41,   107,    43,   108,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
       54,    55,    56,   109,    57,    58,   110,    60,    61,    89,
-       0,     0,     0,     0,     0,     0,    90,   207,   208,   209,
-     210,   211,   212,   213,     0,     0,   214,   131,     0,   114,
+       0,     0,     0,     0,     0,     0,    90,   209,   210,   211,
+     212,   213,   214,   215,     0,     0,   216,   131,     0,   114,
       94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,   228,
+       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
        0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,   197,   198,   199,
-     200,   201,   202,   104,   203,   229,   230,   204,   205,   206,
+       0,    24,    25,     0,     0,     0,     0,   199,   200,   201,
+     202,   203,   204,   104,   205,    34,    35,   206,   207,   208,
      105,    39,   106,    41,   107,    43,   108,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
      109,    57,    58,   110,    60,    61,    89,     0,     0,     0,
-       0,     0,     0,    90,   207,   208,   209,   210,   211,   212,
-     213,     0,     0,   214,   131,     0,   114,    94,    95,     1,
+       0,     0,     0,    90,   209,   210,   211,   212,   213,   214,
+     215,     0,     0,   216,   131,     0,   114,    94,    95,     1,
       96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
        0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
-      17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
-       0,    27,     0,     0,   197,   198,   199,   200,   201,   202,
-     104,   203,    34,    35,   204,   205,   206,   105,    39,   106,
+     252,    18,     0,    87,    88,     0,    22,     0,    24,    25,
+       0,     0,     0,     0,   199,   200,   201,   202,   203,   204,
+     104,   205,    34,    35,   206,   207,   208,   105,    39,   106,
       41,   107,    43,   108,    45,    46,    47,    48,    49,    50,
        0,    51,    52,    53,    54,    55,    56,   109,    57,    58,
      110,    60,    61,    89,     0,     0,     0,     0,     0,     0,
-      90,   207,   208,   209,   210,   211,   212,   213,     0,     0,
-     214,   131,     0,   114,    94,    95,     1,    96,    97,     0,
+      90,   209,   210,   211,   212,   213,   214,   215,     0,     0,
+       0,   131,     0,   114,    94,    95,     1,    96,    97,     0,
       98,    99,   100,   101,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    86,   248,    18,     0,
-      87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
-       0,   197,   198,   199,   200,   201,   202,   104,   203,    34,
-      35,   204,   205,   206,   105,    39,   106,    41,   107,    43,
+       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
+      87,    88,     0,    22,     0,    24,    25,     0,     0,     0,
+       0,     0,     0,     0,     0,    30,    31,   104,    33,    34,
+      35,     0,    36,    37,   105,    39,   106,    41,   107,    43,
      108,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,   109,    57,    58,   110,    60,    61,
-      89,     0,     0,     0,     0,     0,     0,    90,   207,   208,
-     209,   210,   211,   212,   213,     0,     0,     0,   131,     0,
+      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
+       0,   111,   112,     0,     0,     0,     0,     0,   131,   184,
      114,    94,    95,     1,    96,    97,     0,    98,    99,   100,
-     101,     6,     0,     0,     0,     8,     0,     0,     0,    12,
-      13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
-      22,     0,    24,    25,     0,    27,     0,     0,     0,     0,
+     101,     6,     0,     0,     0,   102,     0,     0,     0,    12,
+      13,     0,   103,    86,    17,    18,     0,    87,    88,     0,
+      22,     0,    24,    25,     0,     0,     0,     0,     0,     0,
        0,     0,    30,    31,   104,    33,    34,    35,     0,    36,
       37,   105,    39,   106,    41,   107,    43,   108,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
       56,   109,    57,    58,   110,    60,    61,    89,     0,     0,
        0,     0,     0,     0,    90,     0,     0,     0,   111,   112,
-       0,     0,     0,     0,     0,   131,   182,   114,    94,    95,
+       0,     0,     0,     0,     0,   113,     0,   114,    94,    95,
        1,    96,    97,     0,    98,    99,   100,   101,     6,     0,
-       0,     0,   102,     0,     0,     0,    12,    13,     0,   103,
+       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
       86,    17,    18,     0,    87,    88,     0,    22,     0,    24,
-      25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
+      25,     0,     0,     0,     0,     0,     0,     0,     0,    30,
       31,   104,    33,    34,    35,     0,    36,    37,   105,    39,
      106,    41,   107,    43,   108,    45,    46,    47,    48,    49,
       50,     0,    51,    52,    53,    54,    55,    56,   109,    57,
       58,   110,    60,    61,    89,     0,     0,     0,     0,     0,
        0,    90,     0,     0,     0,   111,   112,     0,     0,     0,
-       0,     0,   113,     0,   114,    94,    95,     1,    96,    97,
+       0,     0,   131,     0,   114,    94,    95,     1,    96,    97,
        0,    98,    99,   100,   101,     6,     0,     0,     0,     8,
        0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
-       0,    87,    88,     0,    22,     0,    24,    25,     0,    27,
+       0,    87,    88,     0,    22,     0,    24,    25,     0,     0,
        0,     0,     0,     0,     0,     0,    30,    31,   104,    33,
       34,    35,     0,    36,    37,   105,    39,   106,    41,   107,
       43,   108,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,   109,    57,    58,   110,    60,
       61,    89,     0,     0,     0,     0,     0,     0,    90,     0,
-       0,     0,   111,   112,     0,     0,     0,     0,     0,   131,
+       0,     0,   111,   112,     0,     0,     0,     0,     0,   113,
        0,   114,    94,    95,     1,    96,    97,     0,    98,    99,
      100,   101,     6,     0,     0,     0,     8,     0,     0,     0,
       12,    13,     0,    15,    86,    17,    18,     0,    87,    88,
-       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
+       0,    22,     0,    24,    25,     0,     0,     0,     0,     0,
        0,     0,     0,    30,    31,   104,    33,    34,    35,     0,
       36,    37,   105,    39,   106,    41,   107,    43,   108,    45,
       46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,   109,    57,    58,   110,    60,    61,    89,     0,
+      55,    56,   109,    57,    58,    59,    60,    61,    89,     0,
        0,     0,     0,     0,     0,    90,     0,     0,     0,   111,
-     112,     0,     0,     0,     0,     0,   113,     0,   114,    94,
+     112,     0,     0,     0,     0,     0,   131,     0,   114,    94,
       95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
        0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
       15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
-      24,    25,     0,    27,     0,     0,     0,     0,     0,     0,
+      24,    25,     0,     0,     0,     0,     0,     0,     0,     0,
       30,    31,   104,    33,    34,    35,     0,    36,    37,   105,
-      39,   106,    41,   107,    43,   108,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   109,
-      57,    58,    59,    60,    61,    89,     0,     0,     0,     0,
+     368,   106,   369,   107,   370,   108,   371,    46,    47,    48,
+      49,    50,     0,    51,    52,   372,   373,   374,    56,   109,
+      57,   375,   376,    60,    61,    89,     0,     0,     0,     0,
        0,     0,    90,     0,     0,     0,   111,   112,     0,     0,
        0,     0,     0,   131,     0,   114,    94,    95,     1,    96,
       97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
        8,     0,     0,     0,    12,    13,     0,    15,    86,    17,
       18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,    30,    31,   104,
-      33,    34,    35,     0,    36,    37,   105,   363,   106,   364,
-     107,   365,   108,   366,    46,    47,    48,    49,    50,     0,
-      51,    52,   367,   368,   369,    56,   109,    57,   370,   371,
+       0,     0,     0,     0,     0,     0,     0,    30,    31,   104,
+      33,    34,    35,     0,    36,    37,   105,    39,   106,    41,
+     107,    43,   108,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,   372,   373,    55,    56,   109,    57,   375,   376,
       60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
        0,     0,     0,   111,   112,     0,     0,     0,     0,     0,
      131,     0,   114,    94,    95,     1,    96,    97,     0,    98,
       99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
        0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
-      88,     0,    22,     0,    24,    25,     0,    27,     0,     0,
-       0,     0,     0,     0,    30,    31,   104,    33,    34,    35,
+      88,     0,    22,     0,    24,    25,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   104,    33,    34,    35,
        0,    36,    37,   105,    39,   106,    41,   107,    43,   108,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,   367,
-     368,    55,    56,   109,    57,   370,   371,    60,    61,    89,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,   109,    57,    58,   110,    60,    61,    89,
        0,     0,     0,     0,     0,     0,    90,     0,     0,     0,
      111,   112,     0,     0,     0,     0,     0,   131,     0,   114,
       94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
        6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
        0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,     0,     0,   104,    33,    34,    35,     0,    36,    37,
+       0,    24,    25,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   104,    33,    34,    35,     0,     0,     0,
      105,    39,   106,    41,   107,    43,   108,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
      109,    57,    58,   110,    60,    61,    89,     0,     0,     0,
@@ -1141,279 +1160,301 @@ static const yytype_int16 yytable[] =
       96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
        0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
       17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
-       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
-     104,    33,    34,    35,     0,     0,     0,   105,    39,   106,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     104,     0,    34,    35,     0,     0,     0,   105,    39,   106,
       41,   107,    43,   108,    45,    46,    47,    48,    49,    50,
        0,    51,    52,    53,    54,    55,    56,   109,    57,    58,
      110,    60,    61,    89,     0,     0,     0,     0,     0,     0,
-      90,     0,     0,     0,   111,   112,     0,     0,     0,     0,
-       0,   131,     0,   114,    94,    95,     1,    96,    97,     0,
-      98,    99,   100,   101,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
-      87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,     0,     0,   104,     0,    34,
-      35,     0,     0,     0,   105,    39,   106,    41,   107,    43,
-     108,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   109,    57,    58,   110,    60,    61,
-      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     1,   131,     0,
-     114,     2,     3,     4,     5,     6,     0,     0,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,    26,    27,
+      90,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       1,   131,     0,   114,     2,     3,     4,     5,     6,     0,
+       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
+       1,    65,     0,     0,     2,     3,     4,     5,     6,   443,
+      66,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
+      58,    59,    60,    61,    62,    63,     0,     0,   444,     0,
+       1,    65,     0,     0,     2,     3,     4,     5,     6,     0,
+     350,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
+      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
+     424,    65,     0,     0,     0,     0,     0,     1,     0,     0,
+     350,     2,     3,     4,     5,     6,     0,     0,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,    64,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,   437,    66,     7,     8,
+      61,    62,    63,     0,     0,     0,   449,     1,    65,     0,
+     453,     2,     3,     4,     5,     6,     0,   350,     7,     8,
        9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
       19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,   438,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   345,     7,     8,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
        9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
       19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
       28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,   418,    65,     0,
-       0,     0,     0,     0,     1,     0,     0,   345,     2,     3,
-       4,     5,     6,     0,     0,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,   443,     1,    65,     0,   447,     2,     3,
-       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,   471,     0,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,   478,     0,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,   485,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,   486,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   325,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   345,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   439,     7,     8,     9,    10,    11,
-      12,    13,     0,    15,    16,    17,    18,    19,    20,    21,
-       0,    22,    23,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     1,    65,     0,     0,     2,     3,
-       4,     5,     6,     0,   459,     7,     8,     9,    10,     0,
-      12,    13,     0,    15,    16,    17,    18,    19,    87,    21,
-       0,    22,     0,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    89,    63,
-       0,     0,     1,   382,   383,    65,     2,     3,     4,     5,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,    27,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-       0,    57,    58,    59,    60,    61,    89,     0,     0,     0,
-       1,     0,     0,    90,     2,     3,     4,     5,     6,     0,
-       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
-      86,    17,    18,     0,    87,    88,     0,    22,     0,    24,
-      25,     0,    27,     0,     0,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
-      58,    59,    60,    61,    89,     0,     0,     0,     1,     0,
-       0,    90,     2,     3,     4,     5,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    86,    17,
-      18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
-      27,     0,     0,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,   171,   172,   173,   174,   175,     0,
-      51,   176,    53,    54,    55,   177,     0,    57,    58,    59,
-      60,    61,    89,     0,     0,     0,     1,     0,     0,    90,
-       2,     3,     4,     5,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
-      87,    88,     0,    22,     0,    24,    25,     0,    27,     0,
-       0,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,   233,     0,    57,    58,    59,    60,    61,
-      89,     0,     0,     0,     1,     0,     0,    90,    98,    99,
-       4,     5,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    86,    17,    18,     0,    87,    88,
-       0,    22,     0,    24,    25,     0,    27,     0,     0,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,   105,    39,   106,    41,   107,    43,   108,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,     0,    57,    58,    59,    60,    61,    89,   197,
-     198,   199,   200,   220,   221,    90,   222,     0,     0,   204,
-     223,   224,   197,   198,   199,   200,   220,   221,     0,   222,
-       0,     0,   204,   223,   224,     0,     0,     0,     0,     0,
-       0,   197,   198,   199,   200,   220,   221,     0,   222,     0,
-       0,   204,   223,   224,     0,     0,   207,   208,   209,   210,
-     211,   212,   213,     0,   473,     0,     0,     0,     0,   207,
-     208,   209,   210,   211,   212,   213,     0,   480,   275,   276,
-       0,     0,     0,     0,     0,     0,     0,     0,   207,   208,
-     209,   210,   211,   212,   213,   197,   198,   199,   200,   220,
-     221,     0,   222,     0,     0,   204,   223,   224,   307,   308,
-     309,   310,   311,   312,     0,   313,     0,     0,   314,   315,
-     316,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      61,    62,    63,     0,     0,   477,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,   484,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,   491,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,   492,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   329,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   445,     7,     8,
+       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
+       0,     2,     3,     4,     5,     6,     0,   465,     7,     8,
+       9,    10,     0,    12,    13,     0,    15,    16,    17,    18,
+      19,    87,    21,     0,    22,     0,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    89,    63,     0,     0,     1,     0,     0,    65,     2,
+       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
+       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
+      88,     0,    22,     0,    24,    25,     0,     0,     0,     0,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,   139,    57,    58,    59,    60,    61,    89,
+       0,     0,     0,     1,     0,     0,    90,     2,     3,     4,
+       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
+      13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
+      22,     0,    24,    25,     0,     0,     0,     0,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,     0,    57,    58,    59,    60,    61,    89,     0,     0,
+       0,     1,     0,     0,    90,     2,     3,     4,     5,     6,
+       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
+      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
+      24,    25,     0,     0,     0,     0,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,   173,   174,   175,
+     176,   177,     0,    51,   178,    53,    54,    55,   179,     0,
+      57,    58,    59,    60,    61,    89,     0,     0,     0,     1,
+       0,     0,    90,     2,     3,     4,     5,     6,     0,     0,
+       0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
+      17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
+       0,     0,     0,     0,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,   235,     0,    57,    58,
+      59,    60,    61,    89,     0,     0,     0,     1,     0,     0,
+      90,    98,    99,     4,     5,     6,     0,     0,     0,     8,
+       0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
+       0,    87,    88,     0,    22,     0,    24,    25,     0,     0,
+       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,   105,    39,   106,    41,   107,
+      43,   108,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
+      61,    89,   311,   312,   313,   314,   315,   316,    90,   317,
+       0,     0,   318,   319,   320,   199,   200,   201,   202,   222,
+     223,     0,   224,     0,     0,   206,   225,   226,   199,   200,
+     201,   202,   222,   223,     0,   224,     0,     0,   206,   225,
+     226,     0,     0,     0,     0,     0,     0,     0,     0,   321,
+     322,   323,   324,   325,   326,   327,     0,     0,   328,     0,
+       0,     0,   209,   210,   211,   212,   213,   214,   215,     0,
+     338,     0,     0,     0,     0,   209,   210,   211,   212,   213,
+     214,   215,     0,   420,   199,   200,   201,   202,   222,   223,
+       0,   224,     0,     0,   206,   225,   226,   199,   200,   201,
+     202,   222,   223,     0,   224,     0,     0,   206,   225,   226,
+     199,   200,   201,   202,   222,   223,     0,   224,     0,     0,
+     206,   225,   226,     0,     0,     0,     0,     0,     0,     0,
+       0,   209,   210,   211,   212,   213,   214,   215,     0,   423,
+       0,     0,     0,     0,   209,   210,   211,   212,   213,   214,
+     215,     0,   479,     0,     0,     0,     0,   209,   210,   211,
+     212,   213,   214,   215,     0,   486,   199,   200,   201,   202,
+     222,   223,     0,   224,     0,     0,   206,   225,   226,   199,
+     200,   201,   202,   222,   223,     0,   224,     0,     0,   206,
+     225,   226,     0,     0,     0,   311,   312,   313,   314,   315,
+     316,     0,   317,   279,   280,   318,   319,   320,     0,     0,
+       0,     0,     0,   209,   210,   211,   212,   213,   214,   215,
+       0,     0,     0,     0,     0,     0,   209,   210,   211,   212,
+     213,   214,   215,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   321,   322,   323,   324,   325,   326,   327,   199,
+     200,   201,   202,     0,     0,     0,   224,     0,     0,   206,
+     225,   226,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   207,   208,   209,   210,   211,   212,   213,     0,
-       0,     0,     0,     0,     0,   317,   318,   319,   320,   321,
-     322,   323
+       0,     0,     0,     0,     0,     0,   209,   210,   211,   212,
+     213,   214,   215
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,    21,     0,    65,   129,   214,    84,   325,     9,
-     327,    31,   136,   347,    14,    69,    31,   334,    19,    15,
-      97,    21,    76,    23,    99,     0,    26,    28,   103,    29,
-      69,    34,   156,   350,    97,    63,    69,    76,    34,    49,
-     164,    44,    52,    76,    49,    69,    42,    43,    44,    45,
-      46,    47,    76,    49,    23,    49,    52,    53,    54,    28,
-      69,    10,    11,    63,    64,    65,    97,    76,    68,   277,
-      19,    68,    73,   407,    99,   409,    98,    97,   100,    28,
-     414,    91,    92,    93,    94,    95,   420,    92,    93,    94,
-      95,    36,    37,    89,    90,    91,    92,    93,    94,    95,
-      94,    95,    55,   129,    57,   133,    59,    98,    61,   109,
-     136,    28,    28,    62,   114,    28,   324,    34,    34,    28,
-      97,    34,   439,   151,    73,    34,    33,    98,   462,    97,
-     156,   102,    97,   133,    97,    98,   470,   137,   164,   139,
-     474,    97,   459,   228,   229,   230,    97,   481,    28,   466,
-     484,   151,    28,   102,   103,    97,   473,    34,    97,   159,
-      97,   110,    97,   480,   113,    42,    43,    44,    45,    46,
-      47,    97,    49,   229,   230,    52,    53,    54,   103,   103,
-     102,   242,   131,   102,    42,    43,    44,    45,    98,   138,
-      26,    49,    97,    44,    52,    53,    54,   363,   364,   365,
-     366,    28,    97,   369,    26,    16,   100,    97,    97,   228,
-     229,   230,    89,    90,    91,    92,    93,    94,    95,   219,
-      97,    28,   219,    97,    97,    28,    28,    28,   228,   229,
-     230,    89,    90,    91,    92,    93,    94,    95,   103,    28,
-      97,    71,   242,   243,    97,    97,    34,    97,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,    71,    97,   417,    97,    97,
-      68,   220,   221,   222,   223,   224,    97,    28,   433,   274,
-      21,   283,   164,   283,    33,   193,    -1,   236,   237,    -1,
-      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   325,    -1,   327,    -1,    -1,
-     279,   280,    -1,   282,   334,    -1,    -1,   286,   338,   288,
-      89,    90,    91,    92,    93,    94,    95,   347,    -1,    -1,
-     350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,   333,    52,    53,    54,   416,    -1,
+       0,    21,    65,     0,    29,   216,   329,    31,   331,     9,
+      28,    84,   129,    49,    14,   338,    34,    34,    98,   136,
+     100,    21,   352,    23,    97,    19,    26,    44,    69,    29,
+     147,     0,   355,    27,    28,    76,    69,    69,    63,    69,
+      23,   158,    34,    76,    76,    28,    76,    49,    97,   166,
+      42,    43,    44,    45,    46,    47,    31,    49,    94,    95,
+      52,    53,    54,    63,    64,    65,    28,    98,    68,    28,
+     281,    68,    34,    97,    69,    34,    98,    10,    11,    73,
+     102,    76,   412,    99,   414,    97,    19,   103,    99,   419,
+      92,    93,    94,    95,    27,    28,   426,    89,    90,    91,
+      92,    93,    94,    95,    28,    97,   129,    97,   133,   109,
+      34,    36,    37,   136,   114,    97,    98,   328,    97,    55,
+      97,    57,   445,    59,   147,    61,   231,   232,   153,    62,
+     230,   231,   232,   133,    97,   158,    33,   137,   468,   139,
+      73,    97,   465,   166,    97,    97,   476,    97,    97,   472,
+     480,    97,    97,   153,    28,    28,   479,   487,    98,   103,
+     490,   161,    15,   486,   103,   102,    26,   102,    97,   102,
+     103,    49,    44,    28,    52,    97,    26,   110,    16,   100,
+     113,    34,    97,   246,    97,    97,    97,    28,    28,    42,
+      43,    44,    45,    46,    47,    28,    49,    28,   131,    52,
+      53,    54,   103,    97,    28,   138,    71,    97,    34,    97,
+     230,   231,   232,    91,    92,    93,    94,    95,    97,    71,
+      97,   221,    97,    68,   221,   422,    97,    97,    28,   439,
+     230,   231,   232,   278,    21,   287,    89,    90,    91,    92,
+      93,    94,    95,   166,   195,    -1,   246,   247,    -1,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    -1,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,    -1,    -1,    -1,    -1,   287,    -1,   222,
+     223,   224,   225,   226,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,   238,   239,   100,    -1,   242,
+     368,   369,   370,   371,    -1,    -1,   374,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   329,
+      -1,   331,    -1,    -1,    -1,    -1,    -1,    -1,   338,    -1,
+      -1,    -1,   342,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     283,   284,   352,   286,    -1,   355,    -1,   290,    -1,   292,
       98,    99,   100,   101,    -1,    -1,   104,   105,   106,   107,
-     108,    -1,   351,   111,   112,    -1,    -1,   407,   408,   409,
-      -1,   408,    -1,    -1,   414,    -1,   416,    -1,    -1,    -1,
-     420,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    98,    -1,   100,    -1,    -1,    -1,   437,    -1,   439,
-     437,    -1,    -1,    -1,    -1,    -1,    -1,   447,    -1,    -1,
-      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,   459,
-      49,    -1,   462,    52,    53,    54,   466,    -1,    -1,    -1,
-     470,    -1,    -1,   473,   474,    -1,   476,    -1,    -1,    -1,
-     480,   481,    -1,    -1,   484,    42,    43,    44,    45,    46,
-      47,    -1,    49,   442,    -1,    52,    53,    54,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
-      -1,   100,    -1,    -1,   463,    -1,    -1,    -1,    -1,    -1,
+     108,    -1,    -1,   111,   112,    -1,    -1,    -1,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,    -1,   421,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   337,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   412,   413,   414,    -1,   413,    -1,    -1,   419,
+      -1,   421,    -1,   356,    -1,    -1,   426,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    -1,
+      -1,    -1,    -1,   443,    -1,   445,   443,    42,    43,    44,
+      45,    46,    47,   453,    49,    -1,    -1,    52,    53,    54,
+      -1,    -1,    -1,    -1,    -1,   465,    -1,    -1,   468,    -1,
+      -1,    -1,   472,    -1,    -1,    -1,   476,    -1,    -1,   479,
+     480,    -1,   482,    -1,    -1,    -1,   486,   487,    -1,    -1,
+     490,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,   448,   254,   255,   256,   257,
+     258,   259,   260,   261,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   469,    -1,    -1,   277,
+     278,   279,   280,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    98,    -1,   100,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    98,   250,   251,   252,   253,   254,   255,   256,   257,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,   273,   274,   275,   276,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    97,    -1,     7,   335,    -1,    -1,
-      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
-      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
-      31,    32,    -1,    34,   362,    36,    37,    -1,    39,   367,
-     368,    -1,   370,   371,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    -1,    -1,    -1,   422,   423,   424,   425,    -1,   427,
-     428,   429,   430,    -1,     5,     6,     7,     8,     9,    -1,
-      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
-      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,   457,
-      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
-      -1,   469,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
-     101,    -1,   103,     5,     6,     7,     8,     9,    -1,    11,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   339,    -1,     7,     8,     9,    -1,    11,    12,    13,
+      14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
+      24,    -1,    26,    27,    28,    29,    -1,    31,    32,   367,
+      34,    -1,    36,    37,   372,   373,    -1,   375,   376,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
+     428,   429,   430,   431,    -1,   433,   434,   435,   436,    -1,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
+      -1,    26,    27,    28,    29,   463,    31,    32,    -1,    34,
+      -1,    36,    37,    -1,    -1,    -1,    -1,   475,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,    -1,   101,    -1,   103,     5,
+       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
+      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
+      36,    37,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
+      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    98,    99,    -1,   101,     5,     6,     7,     8,
+       9,    -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,
+      19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
+      29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
+      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
+      99,    -1,   101,     5,     6,     7,     8,     9,    -1,    11,
       12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
       -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
+      32,    -1,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
@@ -1423,7 +1464,7 @@ static const yytype_int16 yycheck[] =
        5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
       15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
       -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    39,    -1,    -1,    42,    43,    44,
+      -1,    36,    37,    -1,    -1,    -1,    -1,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
@@ -1433,36 +1474,36 @@ static const yytype_int16 yycheck[] =
        8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
       -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
       28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
-      -1,    39,    -1,    -1,    42,    43,    44,    45,    46,    47,
+      -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
       88,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      98,    99,    -1,   101,     5,     6,     7,     8,     9,    -1,
+      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    -1,
       11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
       -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
-      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
-      -1,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      31,    32,    -1,    34,    -1,    36,    37,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,
+      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,   100,
      101,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
       14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
       24,    -1,    26,    27,    28,    29,    -1,    31,    32,    -1,
-      34,    -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,
+      34,    -1,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
       -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
-      -1,    -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
        7,     8,     9,    -1,    11,    12,    13,    14,    15,    -1,
       -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,
       27,    28,    29,    -1,    31,    32,    -1,    34,    -1,    36,
-      37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+      37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
@@ -1471,7 +1512,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    99,    -1,   101,     5,     6,     7,     8,     9,
       -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,    19,
       -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,    29,
-      -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
+      -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
@@ -1481,7 +1522,7 @@ static const yytype_int16 yycheck[] =
       -1,   101,     5,     6,     7,     8,     9,    -1,    11,    12,
       13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,
       23,    24,    -1,    26,    27,    28,    29,    -1,    31,    32,
-      -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,    -1,
+      -1,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
@@ -1491,7 +1532,7 @@ static const yytype_int16 yycheck[] =
        6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
       -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
       26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
-      36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
@@ -1501,7 +1542,7 @@ static const yytype_int16 yycheck[] =
        9,    -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,
       19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
       29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
       49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
@@ -1510,8 +1551,8 @@ static const yytype_int16 yycheck[] =
       99,    -1,   101,     5,     6,     7,     8,     9,    -1,    11,
       12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
       -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      32,    -1,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
       -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
@@ -1520,8 +1561,8 @@ static const yytype_int16 yycheck[] =
        5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
       15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
       -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    50,    51,    -1,    53,    54,
+      -1,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,    -1,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
@@ -1530,31 +1571,62 @@ static const yytype_int16 yycheck[] =
        8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
       -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
       28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      48,    49,    50,    51,    -1,    -1,    -1,    55,    56,    57,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
-      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    -1,
-      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
-      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
-      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    50,
-      51,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,    99,    -1,
-     101,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    38,    39,
+      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       7,    99,    -1,   101,    11,    12,    13,    14,    15,    -1,
+      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    83,    -1,    -1,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    16,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+      87,    88,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
+      97,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
+      10,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
       40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    83,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    16,    97,    18,    19,
+      80,    81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
       20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
       30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
       40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
@@ -1569,150 +1641,124 @@ static const yytype_int16 yycheck[] =
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,    87,    88,    -1,
-      -1,    -1,    -1,    -1,     7,    -1,    -1,    97,    11,    12,
-      13,    14,    15,    -1,    -1,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    86,     7,    88,    -1,    10,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,
-      13,    14,    15,    -1,    97,    18,    19,    20,    21,    -1,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    -1,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,     7,     8,     9,    88,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
-      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-       7,    -1,    -1,    88,    11,    12,    13,    14,    15,    -1,
-      -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,
-      27,    28,    29,    -1,    31,    32,    -1,    34,    -1,    36,
-      37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
-      77,    78,    79,    80,    81,    -1,    -1,    -1,     7,    -1,
-      -1,    88,    11,    12,    13,    14,    15,    -1,    -1,    -1,
-      19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
-      29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
-      79,    80,    81,    -1,    -1,    -1,     7,    -1,    -1,    88,
-      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
-      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
-      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,     7,    -1,    -1,    88,    11,    12,
-      13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,
-      23,    24,    -1,    26,    27,    28,    29,    -1,    31,    32,
-      -1,    34,    -1,    36,    37,    -1,    39,    -1,    -1,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    42,
-      43,    44,    45,    46,    47,    88,    49,    -1,    -1,    52,
-      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    42,    43,    44,    45,    46,
+      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
+      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
+      20,    21,    -1,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,     7,    -1,    -1,    88,    11,
+      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
+      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
+      32,    -1,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      -1,    -1,    -1,     7,    -1,    -1,    88,    11,    12,    13,
+      14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
+      24,    -1,    26,    27,    28,    29,    -1,    31,    32,    -1,
+      34,    -1,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      -1,     7,    -1,    -1,    88,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
+      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
+      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,     7,
+      -1,    -1,    88,    11,    12,    13,    14,    15,    -1,    -1,
+      -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
+      28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
+      78,    79,    80,    81,    -1,    -1,    -1,     7,    -1,    -1,
+      88,    11,    12,    13,    14,    15,    -1,    -1,    -1,    19,
+      -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,    29,
+      -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    42,    43,    44,    45,    46,    47,    88,    49,
+      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
       47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
       44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    98,    -1,
       -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95
+      97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    97,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    97,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    42,    43,    44,    45,    46,
+      47,    -1,    49,    79,    80,    52,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    42,
+      43,    44,    45,    -1,    -1,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1733,41 +1779,42 @@ static const yytype_uint8 yystos[] =
       78,    92,    93,    99,   101,   116,   122,   123,   135,   136,
      139,   140,   141,   144,   145,   146,   149,   152,   153,   154,
      156,    99,   154,   116,    31,   122,   154,    36,    37,    75,
-     116,   136,   138,   144,   116,   116,   122,   123,   117,   154,
-     117,   116,   120,     0,   107,   122,   154,    97,    97,    98,
-     153,   153,   153,   153,   154,   154,   153,   153,   153,   153,
-     153,    63,    64,    65,    66,    67,    70,    74,   116,   154,
-     153,   153,   100,   154,     8,     9,   103,   116,   150,   151,
-     154,   157,   158,    99,    97,    97,    28,    42,    43,    44,
-      45,    46,    47,    49,    52,    53,    54,    89,    90,    91,
-      92,    93,    94,    95,    98,   135,   155,   156,   154,    33,
-      46,    47,    49,    53,    54,   117,    97,    97,    24,    50,
-      51,   116,   154,    74,    34,    44,   125,    33,    97,    97,
-      97,    97,    34,    97,    97,   117,    97,   116,    28,   155,
-      28,    34,    28,    34,    28,    34,    28,    34,    69,    76,
-      69,    76,    69,    76,    69,    76,    69,    76,    55,    57,
-      59,    61,   147,    28,    28,    79,    80,    98,   100,   103,
-     103,   102,   103,    98,   102,   102,    98,   157,    26,   154,
+     116,   136,   138,   144,   116,   116,   122,   154,   122,   123,
+     117,   154,   117,   116,   120,     0,   107,   122,   154,    97,
+      97,    98,   153,   153,   153,   153,   154,   154,   153,   153,
+     153,   153,   153,    63,    64,    65,    66,    67,    70,    74,
+     116,   154,   153,   153,   100,   154,     8,     9,   103,   116,
+     150,   151,   154,   157,   158,    99,    97,    97,    28,    42,
+      43,    44,    45,    46,    47,    49,    52,    53,    54,    89,
+      90,    91,    92,    93,    94,    95,    98,   135,   155,   156,
+     154,    33,    46,    47,    49,    53,    54,   117,    97,    97,
+      24,    50,    51,   116,   154,    74,    34,    44,   125,    33,
+      97,    97,    36,    97,    97,    97,    34,    97,    97,   117,
+      97,   116,    28,   155,    28,    34,    28,    34,    28,    34,
+      28,    34,    69,    76,    69,    76,    69,    76,    69,    76,
+      69,    76,    55,    57,    59,    61,   147,    28,    28,    79,
+      80,    98,   100,   103,   103,   102,   103,    98,   102,   102,
+      98,   157,    26,   154,   154,   154,   154,   154,   154,   154,
      154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   154,   158,    42,    43,    44,
-      45,    46,    47,    49,    52,    53,    54,    89,    90,    91,
-      92,    93,    94,    95,    98,    97,   119,    97,   136,   137,
-     139,   137,   137,    44,    97,    28,   154,   154,    84,    97,
-     110,   111,   112,   113,   120,    97,   119,   132,   133,   134,
-      97,    26,   153,   153,   153,   153,   153,   153,   153,   153,
-      23,    28,   148,    56,    58,    60,    62,    71,    72,    73,
-      77,    78,   142,   143,   153,   142,   153,   153,   158,   154,
-     154,   154,     8,     9,   116,   151,   154,   100,   154,   154,
+     158,    42,    43,    44,    45,    46,    47,    49,    52,    53,
+      54,    89,    90,    91,    92,    93,    94,    95,    98,    97,
+     119,    97,   136,   137,   139,   137,   137,    44,    97,    28,
+     154,   154,    84,    97,   110,   111,   112,   113,   154,   120,
+      97,   119,   132,   133,   134,    97,    26,   153,   153,   153,
+     153,   153,   153,   153,   153,    23,    28,   148,    56,    58,
+      60,    62,    71,    72,    73,    77,    78,   142,   143,   153,
+     142,   153,   153,   158,   154,   154,   154,     8,     9,   116,
+     151,   154,   100,   154,   154,   154,   154,   154,   154,   154,
      154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   154,   158,   132,    16,   132,
-      97,    97,    97,   154,   132,    97,   116,    97,    87,   134,
-     132,   154,    28,    28,    28,    28,   153,   148,   148,   148,
-     148,   153,   153,   148,   153,   153,   100,    16,    85,    97,
-     119,    15,    34,    86,   117,   113,    97,    10,   153,   153,
-     153,   153,   153,   153,   153,   153,    28,    71,   143,    97,
-     119,    97,   132,    34,   154,    97,    97,   115,   116,    71,
-     132,    85,   154,    97,   132,    97,    98,   153,    85,    97,
-      97,   132,   116,    97,   132,    86,    86,    97,    97
+     154,   158,   132,    16,   132,    97,    97,    97,   154,   132,
+      97,   116,    97,    97,    87,   134,   132,   154,    28,    28,
+      28,    28,   153,   148,   148,   148,   148,   153,   153,   148,
+     153,   153,   100,    16,    85,    97,   119,    15,    34,    86,
+     117,   113,    97,    10,   153,   153,   153,   153,   153,   153,
+     153,   153,    28,    71,   143,    97,   119,    97,   132,    34,
+     154,    97,    97,   115,   116,    71,   132,    85,   154,    97,
+     132,    97,    98,   153,    85,    97,    97,   132,   116,    97,
+     132,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1780,25 +1827,25 @@ static const yytype_uint8 yyr1[] =
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,   116,   116,   116,   116,   117,   117,   118,
-     118,   119,   119,   119,   119,   119,   119,   120,   120,   120,
+     116,   116,   116,   116,   116,   116,   117,   117,   118,   118,
+     119,   119,   119,   119,   119,   119,   120,   120,   120,   121,
      121,   121,   121,   121,   121,   121,   121,   121,   121,   121,
-     122,   122,   122,   122,   122,   122,   122,   123,   123,   123,
-     123,   123,   124,   124,   124,   124,   125,   125,   126,   126,
-     126,   127,   127,   128,   128,   128,   128,   129,   129,   129,
-     130,   130,   131,   132,   132,   133,   133,   134,   134,   135,
+     121,   122,   122,   122,   122,   122,   122,   122,   123,   123,
+     123,   123,   123,   124,   124,   124,   124,   125,   125,   126,
+     126,   126,   127,   127,   128,   128,   128,   128,   129,   129,
+     129,   130,   130,   131,   132,   132,   133,   133,   134,   134,
      135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   136,   137,   137,   138,   138,   139,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   140,   140,   141,   141,
-     141,   141,   142,   142,   142,   142,   142,   143,   144,   144,
-     144,   145,   145,   145,   145,   145,   145,   145,   145,   145,
-     145,   146,   146,   146,   146,   146,   147,   147,   147,   147,
-     148,   148,   149,   149,   149,   150,   150,   151,   151,   151,
-     152,   152,   153,   153,   154,   154,   154,   154,   154,   154,
+     135,   135,   136,   137,   137,   138,   138,   139,   139,   139,
+     139,   139,   139,   139,   139,   139,   139,   140,   140,   141,
+     141,   141,   141,   142,   142,   142,   142,   142,   143,   144,
+     144,   144,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   146,   146,   146,   146,   146,   147,   147,   147,
+     147,   148,   148,   149,   149,   149,   150,   150,   151,   151,
+     151,   152,   152,   153,   153,   154,   154,   154,   154,   154,
      154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   155,   155,   155,   155,   155,   155,   155,
+     154,   154,   154,   154,   155,   155,   155,   155,   155,   155,
      155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-     155,   155,   156,   156,   157,   157,   158,   158
+     155,   155,   155,   156,   156,   157,   157,   158,   158
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1811,25 +1858,25 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     1,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     3,     3,     3,     3,     3,     3,     3,     2,     2,
-       0,     1,     3,     2,     4,     2,     5,     2,     2,     5,
-       4,     3,     5,     5,     5,     5,     1,     1,     3,     3,
-       3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
-       4,     6,     4,     0,     1,     1,     2,     1,     1,     1,
-       1,     1,     1,     2,     4,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     4,     6,
-       4,     6,     4,     6,     4,     6,     2,     2,     1,     1,
-       1,     5,     1,     1,     5,     2,     2,     2,     2,     4,
-       4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     6,     6,     6,     6,     6,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
-       2,     2,     1,     1,     1,     1,     3,     3,     3,     3,
+       1,     1,     1,     1,     1,     1,     0,     1,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
+       3,     3,     3,     3,     3,     3,     5,     3,     3,     2,
+       2,     0,     1,     3,     2,     4,     2,     5,     2,     2,
+       5,     4,     3,     5,     5,     5,     5,     1,     1,     3,
+       3,     3,     4,     7,     6,     9,     7,    10,     7,    11,
+      12,     4,     6,     4,     0,     1,     1,     2,     1,     1,
+       1,     1,     1,     1,     2,     4,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     2,     4,
+       6,     4,     6,     4,     6,     4,     6,     2,     2,     1,
+       1,     1,     5,     1,     1,     5,     2,     2,     2,     2,
+       4,     4,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     6,     6,     6,     6,     6,     1,     1,     1,
+       1,     1,     1,     3,     3,     3,     1,     3,     3,     3,
+       3,     2,     2,     1,     1,     1,     1,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     1,     1,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     1,     1,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -2103,31 +2150,31 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2107 "engines/director/lingo/lingo-gr.cpp"
+#line 2154 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2113 "engines/director/lingo/lingo-gr.cpp"
+#line 2160 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2119 "engines/director/lingo/lingo-gr.cpp"
+#line 2166 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2125 "engines/director/lingo/lingo-gr.cpp"
+#line 2172 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2131 "engines/director/lingo/lingo-gr.cpp"
+#line 2178 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2395,7 +2442,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2399 "engines/director/lingo/lingo-gr.cpp"
+#line 2446 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2406,7 +2453,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2410 "engines/director/lingo/lingo-gr.cpp"
+#line 2457 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2416,37 +2463,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2420 "engines/director/lingo/lingo-gr.cpp"
+#line 2467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2426 "engines/director/lingo/lingo-gr.cpp"
+#line 2473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2432 "engines/director/lingo/lingo-gr.cpp"
+#line 2479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2438 "engines/director/lingo/lingo-gr.cpp"
+#line 2485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2444 "engines/director/lingo/lingo-gr.cpp"
+#line 2491 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2450 "engines/director/lingo/lingo-gr.cpp"
+#line 2497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2457,7 +2504,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2461 "engines/director/lingo/lingo-gr.cpp"
+#line 2508 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2467,13 +2514,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2518 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2477 "engines/director/lingo/lingo-gr.cpp"
+#line 2524 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2482,1320 +2529,1330 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2486 "engines/director/lingo/lingo-gr.cpp"
+#line 2533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2493 "engines/director/lingo/lingo-gr.cpp"
+#line 2540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2499 "engines/director/lingo/lingo-gr.cpp"
+#line 2546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2505 "engines/director/lingo/lingo-gr.cpp"
+#line 2552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* ID: tABBREVIATED  */
 #line 290 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2511 "engines/director/lingo/lingo-gr.cpp"
+#line 2558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* ID: tABBREV  */
 #line 291 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2517 "engines/director/lingo/lingo-gr.cpp"
+#line 2564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* ID: tABBR  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2523 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* ID: tAFTER  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2529 "engines/director/lingo/lingo-gr.cpp"
+#line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* ID: tAND  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2535 "engines/director/lingo/lingo-gr.cpp"
+#line 2582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* ID: tBEFORE  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2541 "engines/director/lingo/lingo-gr.cpp"
+#line 2588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* ID: tCAST  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2547 "engines/director/lingo/lingo-gr.cpp"
+#line 2594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* ID: tCHAR  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2553 "engines/director/lingo/lingo-gr.cpp"
+#line 2600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* ID: tCHARS  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2559 "engines/director/lingo/lingo-gr.cpp"
+#line 2606 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* ID: tCONTAINS  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2565 "engines/director/lingo/lingo-gr.cpp"
+#line 2612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* ID: tDATE  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2571 "engines/director/lingo/lingo-gr.cpp"
+#line 2618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* ID: tDOWN  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2577 "engines/director/lingo/lingo-gr.cpp"
+#line 2624 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* ID: tFIELD  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2583 "engines/director/lingo/lingo-gr.cpp"
+#line 2630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* ID: tFRAME  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2589 "engines/director/lingo/lingo-gr.cpp"
+#line 2636 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* ID: tIN  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2595 "engines/director/lingo/lingo-gr.cpp"
+#line 2642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* ID: tINTERSECTS  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2601 "engines/director/lingo/lingo-gr.cpp"
+#line 2648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* ID: tINTO  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2607 "engines/director/lingo/lingo-gr.cpp"
+#line 2654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* ID: tITEM  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2613 "engines/director/lingo/lingo-gr.cpp"
+#line 2660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* ID: tITEMS  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2619 "engines/director/lingo/lingo-gr.cpp"
+#line 2666 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* ID: tLAST  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2625 "engines/director/lingo/lingo-gr.cpp"
+#line 2672 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* ID: tLINE  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* ID: tLINES  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2637 "engines/director/lingo/lingo-gr.cpp"
+#line 2684 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* ID: tLONG  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2643 "engines/director/lingo/lingo-gr.cpp"
+#line 2690 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* ID: tMENU  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2696 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* ID: tMENUITEM  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2655 "engines/director/lingo/lingo-gr.cpp"
+#line 2702 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* ID: tMENUITEMS  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2708 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* ID: tMOD  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2667 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* ID: tMOVIE  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2673 "engines/director/lingo/lingo-gr.cpp"
+#line 2720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ID: tNEXT  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ID: tNOT  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2685 "engines/director/lingo/lingo-gr.cpp"
+#line 2732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ID: tNUMBER  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2691 "engines/director/lingo/lingo-gr.cpp"
+#line 2738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ID: tOF  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2697 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 57: /* ID: tOPEN  */
-#line 333 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("open"); }
-#line 2703 "engines/director/lingo/lingo-gr.cpp"
+#line 2744 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58: /* ID: tOR  */
+  case 57: /* ID: tOR  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2709 "engines/director/lingo/lingo-gr.cpp"
+#line 2750 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* ID: tPREVIOUS  */
+  case 58: /* ID: tPREVIOUS  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2715 "engines/director/lingo/lingo-gr.cpp"
+#line 2756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 60: /* ID: tREPEAT  */
+  case 59: /* ID: tREPEAT  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2721 "engines/director/lingo/lingo-gr.cpp"
+#line 2762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61: /* ID: tSCRIPT  */
+  case 60: /* ID: tSCRIPT  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2727 "engines/director/lingo/lingo-gr.cpp"
+#line 2768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62: /* ID: tASSERTERROR  */
+  case 61: /* ID: tASSERTERROR  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2733 "engines/director/lingo/lingo-gr.cpp"
+#line 2774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63: /* ID: tSET  */
+  case 62: /* ID: tSET  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2739 "engines/director/lingo/lingo-gr.cpp"
+#line 2780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 64: /* ID: tSHORT  */
+  case 63: /* ID: tSHORT  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2745 "engines/director/lingo/lingo-gr.cpp"
+#line 2786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 65: /* ID: tSOUND  */
+  case 64: /* ID: tSOUND  */
 #line 344 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2751 "engines/director/lingo/lingo-gr.cpp"
+#line 2792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 66: /* ID: tSPRITE  */
+  case 65: /* ID: tSPRITE  */
 #line 345 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2757 "engines/director/lingo/lingo-gr.cpp"
+#line 2798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 67: /* ID: tSTARTS  */
+  case 66: /* ID: tSTARTS  */
 #line 346 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2763 "engines/director/lingo/lingo-gr.cpp"
+#line 2804 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 68: /* ID: tTELL  */
+  case 67: /* ID: tTELL  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2769 "engines/director/lingo/lingo-gr.cpp"
+#line 2810 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 69: /* ID: tTIME  */
+  case 68: /* ID: tTIME  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2775 "engines/director/lingo/lingo-gr.cpp"
+#line 2816 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 70: /* ID: tTO  */
+  case 69: /* ID: tTO  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2781 "engines/director/lingo/lingo-gr.cpp"
+#line 2822 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71: /* ID: tWHILE  */
+  case 70: /* ID: tWHILE  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2787 "engines/director/lingo/lingo-gr.cpp"
+#line 2828 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* ID: tWINDOW  */
+  case 71: /* ID: tWINDOW  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2793 "engines/director/lingo/lingo-gr.cpp"
+#line 2834 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* ID: tWITH  */
+  case 72: /* ID: tWITH  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2799 "engines/director/lingo/lingo-gr.cpp"
+#line 2840 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* ID: tWITHIN  */
+  case 73: /* ID: tWITHIN  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2805 "engines/director/lingo/lingo-gr.cpp"
+#line 2846 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* ID: tWORD  */
+  case 74: /* ID: tWORD  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2811 "engines/director/lingo/lingo-gr.cpp"
+#line 2852 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* ID: tWORDS  */
+  case 75: /* ID: tWORDS  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2817 "engines/director/lingo/lingo-gr.cpp"
+#line 2858 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* idlist: %empty  */
+  case 76: /* idlist: %empty  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2823 "engines/director/lingo/lingo-gr.cpp"
+#line 2864 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* nonemptyidlist: ID  */
+  case 78: /* nonemptyidlist: ID  */
 #line 365 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2832 "engines/director/lingo/lingo-gr.cpp"
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* nonemptyidlist: nonemptyidlist ',' ID  */
+  case 79: /* nonemptyidlist: nonemptyidlist ',' ID  */
 #line 369 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2840 "engines/director/lingo/lingo-gr.cpp"
+#line 2881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* proc: ID cmdargs '\n'  */
+  case 89: /* proc: ID cmdargs '\n'  */
 #line 392 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2846 "engines/director/lingo/lingo-gr.cpp"
+#line 2887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* proc: tPUT cmdargs '\n'  */
+  case 90: /* proc: tPUT cmdargs '\n'  */
 #line 393 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2852 "engines/director/lingo/lingo-gr.cpp"
+#line 2893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* proc: tGO cmdargs '\n'  */
+  case 91: /* proc: tGO cmdargs '\n'  */
 #line 394 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2858 "engines/director/lingo/lingo-gr.cpp"
+#line 2899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* proc: tGO frameargs '\n'  */
+  case 92: /* proc: tGO frameargs '\n'  */
 #line 395 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2864 "engines/director/lingo/lingo-gr.cpp"
+#line 2905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* proc: tPLAY cmdargs '\n'  */
+  case 93: /* proc: tPLAY cmdargs '\n'  */
 #line 396 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2870 "engines/director/lingo/lingo-gr.cpp"
+#line 2911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* proc: tPLAY frameargs '\n'  */
+  case 94: /* proc: tPLAY frameargs '\n'  */
 #line 397 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2876 "engines/director/lingo/lingo-gr.cpp"
+#line 2917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* proc: tNEXT tREPEAT '\n'  */
+  case 95: /* proc: tOPEN cmdargs '\n'  */
 #line 398 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new NextRepeatNode(); }
-#line 2882 "engines/director/lingo/lingo-gr.cpp"
+                                                        { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
+#line 2923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* proc: tEXIT tREPEAT '\n'  */
+  case 96: /* proc: tOPEN expr tWITH expr '\n'  */
 #line 399 "engines/director/lingo/lingo-gr.y"
+                                                 {
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[-3].node));
+		args->push_back((yyvsp[-1].node));
+		(yyval.node) = new CmdNode(new Common::String("open"), args); }
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 97: /* proc: tNEXT tREPEAT '\n'  */
+#line 404 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new NextRepeatNode(); }
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 98: /* proc: tEXIT tREPEAT '\n'  */
+#line 405 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2888 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* proc: tEXIT '\n'  */
-#line 400 "engines/director/lingo/lingo-gr.y"
+  case 99: /* proc: tEXIT '\n'  */
+#line 406 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2894 "engines/director/lingo/lingo-gr.cpp"
+#line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* proc: tASSERTERROR stmtoneliner  */
-#line 401 "engines/director/lingo/lingo-gr.y"
+  case 100: /* proc: tASSERTERROR stmtoneliner  */
+#line 407 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2900 "engines/director/lingo/lingo-gr.cpp"
+#line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* cmdargs: %empty  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 101: /* cmdargs: %empty  */
+#line 410 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2908 "engines/director/lingo/lingo-gr.cpp"
+#line 2965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* cmdargs: expr  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+  case 102: /* cmdargs: expr  */
+#line 413 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2918 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 103: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 418 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2927 "engines/director/lingo/lingo-gr.cpp"
+#line 2984 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* cmdargs: expr expr_nounarymath  */
-#line 416 "engines/director/lingo/lingo-gr.y"
+  case 104: /* cmdargs: expr expr_nounarymath  */
+#line 422 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2938 "engines/director/lingo/lingo-gr.cpp"
+#line 2995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 422 "engines/director/lingo/lingo-gr.y"
+  case 105: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 428 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2948 "engines/director/lingo/lingo-gr.cpp"
+#line 3005 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* cmdargs: '(' ')'  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 106: /* cmdargs: '(' ')'  */
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 2956 "engines/director/lingo/lingo-gr.cpp"
+#line 3013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 430 "engines/director/lingo/lingo-gr.y"
+  case 107: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 436 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2965 "engines/director/lingo/lingo-gr.cpp"
+#line 3022 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* frameargs: tFRAME expr  */
-#line 440 "engines/director/lingo/lingo-gr.y"
+  case 108: /* frameargs: tFRAME expr  */
+#line 446 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* frameargs: tMOVIE expr  */
-#line 445 "engines/director/lingo/lingo-gr.y"
+  case 109: /* frameargs: tMOVIE expr  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2986 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 110: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 457 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 2997 "engines/director/lingo/lingo-gr.cpp"
+#line 3054 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* frameargs: expr tOF tMOVIE expr  */
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 111: /* frameargs: expr tOF tMOVIE expr  */
+#line 463 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3008 "engines/director/lingo/lingo-gr.cpp"
+#line 3065 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 112: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 469 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3019 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 471 "engines/director/lingo/lingo-gr.y"
+  case 113: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 477 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3025 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 114: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 478 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3031 "engines/director/lingo/lingo-gr.cpp"
+#line 3088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 473 "engines/director/lingo/lingo-gr.y"
+  case 115: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 479 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3037 "engines/director/lingo/lingo-gr.cpp"
+#line 3094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* asgn: tSET varorthe to expr '\n'  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+  case 116: /* asgn: tSET varorthe to expr '\n'  */
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3043 "engines/director/lingo/lingo-gr.cpp"
+#line 3100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* definevars: tGLOBAL idlist '\n'  */
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 119: /* definevars: tGLOBAL idlist '\n'  */
+#line 485 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3049 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* definevars: tPROPERTY idlist '\n'  */
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 120: /* definevars: tPROPERTY idlist '\n'  */
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3055 "engines/director/lingo/lingo-gr.cpp"
+#line 3112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* definevars: tINSTANCE idlist '\n'  */
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 121: /* definevars: tINSTANCE idlist '\n'  */
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3061 "engines/director/lingo/lingo-gr.cpp"
+#line 3118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* ifstmt: tIF expr tTHEN stmt  */
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 122: /* ifstmt: tIF expr tTHEN stmt  */
+#line 490 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3070 "engines/director/lingo/lingo-gr.cpp"
+#line 3127 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 123: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3077 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 124: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 498 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3145 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 498 "engines/director/lingo/lingo-gr.y"
+  case 125: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 504 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3097 "engines/director/lingo/lingo-gr.cpp"
+#line 3154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 126: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 508 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 127: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 512 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3113 "engines/director/lingo/lingo-gr.cpp"
+#line 3170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 128: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 516 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3120 "engines/director/lingo/lingo-gr.cpp"
+#line 3177 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 512 "engines/director/lingo/lingo-gr.y"
+  case 129: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 518 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3127 "engines/director/lingo/lingo-gr.cpp"
+#line 3184 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 514 "engines/director/lingo/lingo-gr.y"
+  case 130: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3134 "engines/director/lingo/lingo-gr.cpp"
+#line 3191 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* tell: tTELL expr tTO stmtoneliner  */
-#line 518 "engines/director/lingo/lingo-gr.y"
+  case 131: /* tell: tTELL expr tTO stmtoneliner  */
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3143 "engines/director/lingo/lingo-gr.cpp"
+#line 3200 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 132: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
+#line 528 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3150 "engines/director/lingo/lingo-gr.cpp"
+#line 3207 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* when: tWHEN ID tTHEN expr  */
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 133: /* when: tWHEN ID tTHEN expr  */
+#line 532 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3156 "engines/director/lingo/lingo-gr.cpp"
+#line 3213 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* stmtlist: %empty  */
-#line 528 "engines/director/lingo/lingo-gr.y"
+  case 134: /* stmtlist: %empty  */
+#line 534 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3162 "engines/director/lingo/lingo-gr.cpp"
+#line 3219 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* nonemptystmtlist: stmtlistline  */
-#line 533 "engines/director/lingo/lingo-gr.y"
+  case 136: /* nonemptystmtlist: stmtlistline  */
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3173 "engines/director/lingo/lingo-gr.cpp"
+#line 3230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 137: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 545 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3183 "engines/director/lingo/lingo-gr.cpp"
+#line 3240 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* stmtlistline: '\n'  */
-#line 546 "engines/director/lingo/lingo-gr.y"
+  case 138: /* stmtlistline: '\n'  */
+#line 552 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3189 "engines/director/lingo/lingo-gr.cpp"
+#line 3246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* simpleexpr_nounarymath: tINT  */
-#line 553 "engines/director/lingo/lingo-gr.y"
+  case 140: /* simpleexpr_nounarymath: tINT  */
+#line 559 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3195 "engines/director/lingo/lingo-gr.cpp"
+#line 3252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* simpleexpr_nounarymath: tFLOAT  */
-#line 554 "engines/director/lingo/lingo-gr.y"
+  case 141: /* simpleexpr_nounarymath: tFLOAT  */
+#line 560 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3201 "engines/director/lingo/lingo-gr.cpp"
+#line 3258 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 142: /* simpleexpr_nounarymath: tSYMBOL  */
+#line 561 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3207 "engines/director/lingo/lingo-gr.cpp"
+#line 3264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* simpleexpr_nounarymath: tSTRING  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 143: /* simpleexpr_nounarymath: tSTRING  */
+#line 562 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3213 "engines/director/lingo/lingo-gr.cpp"
+#line 3270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 144: /* simpleexpr_nounarymath: tNOT simpleexpr  */
+#line 563 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3219 "engines/director/lingo/lingo-gr.cpp"
+#line 3276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 145: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
+#line 564 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3225 "engines/director/lingo/lingo-gr.cpp"
+#line 3282 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 146: /* simpleexpr_nounarymath: '(' expr ')'  */
+#line 565 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3231 "engines/director/lingo/lingo-gr.cpp"
+#line 3288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* var: ID  */
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 152: /* var: ID  */
+#line 573 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3237 "engines/director/lingo/lingo-gr.cpp"
+#line 3294 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* chunk: tFIELD simpleexpr  */
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 157: /* chunk: tFIELD simpleexpr  */
+#line 583 "engines/director/lingo/lingo-gr.y"
                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3246 "engines/director/lingo/lingo-gr.cpp"
+#line 3303 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* chunk: tCAST simpleexpr  */
-#line 581 "engines/director/lingo/lingo-gr.y"
+  case 158: /* chunk: tCAST simpleexpr  */
+#line 587 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3255 "engines/director/lingo/lingo-gr.cpp"
+#line 3312 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
-#line 585 "engines/director/lingo/lingo-gr.y"
+  case 159: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
+#line 591 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3262 "engines/director/lingo/lingo-gr.cpp"
+#line 3319 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 587 "engines/director/lingo/lingo-gr.y"
+  case 160: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 593 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3269 "engines/director/lingo/lingo-gr.cpp"
+#line 3326 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* chunk: tWORD simpleexpr tOF simpleexpr  */
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 161: /* chunk: tWORD simpleexpr tOF simpleexpr  */
+#line 595 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3276 "engines/director/lingo/lingo-gr.cpp"
+#line 3333 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 162: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3283 "engines/director/lingo/lingo-gr.cpp"
+#line 3340 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* chunk: tITEM simpleexpr tOF simpleexpr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 163: /* chunk: tITEM simpleexpr tOF simpleexpr  */
+#line 599 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3290 "engines/director/lingo/lingo-gr.cpp"
+#line 3347 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 164: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 601 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3297 "engines/director/lingo/lingo-gr.cpp"
+#line 3354 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* chunk: tLINE simpleexpr tOF simpleexpr  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 165: /* chunk: tLINE simpleexpr tOF simpleexpr  */
+#line 603 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3304 "engines/director/lingo/lingo-gr.cpp"
+#line 3361 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 166: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 605 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3311 "engines/director/lingo/lingo-gr.cpp"
+#line 3368 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* object: tSCRIPT simpleexpr  */
-#line 603 "engines/director/lingo/lingo-gr.y"
+  case 167: /* object: tSCRIPT simpleexpr  */
+#line 609 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3320 "engines/director/lingo/lingo-gr.cpp"
+#line 3377 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* object: tWINDOW simpleexpr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 168: /* object: tWINDOW simpleexpr  */
+#line 613 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3329 "engines/director/lingo/lingo-gr.cpp"
+#line 3386 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
+  case 172: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 622 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3335 "engines/director/lingo/lingo-gr.cpp"
+#line 3392 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 175: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 627 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3341 "engines/director/lingo/lingo-gr.cpp"
+#line 3398 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* theobj: tSOUND simpleexpr  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 176: /* theobj: tSOUND simpleexpr  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3347 "engines/director/lingo/lingo-gr.cpp"
+#line 3404 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* theobj: tSPRITE simpleexpr  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 177: /* theobj: tSPRITE simpleexpr  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3353 "engines/director/lingo/lingo-gr.cpp"
+#line 3410 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* menu: tMENU simpleexpr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+  case 178: /* menu: tMENU simpleexpr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3359 "engines/director/lingo/lingo-gr.cpp"
+#line 3416 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* writablethe: tTHE ID  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 179: /* writablethe: tTHE ID  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3365 "engines/director/lingo/lingo-gr.cpp"
+#line 3422 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* writablethe: tTHE ID tOF theobj  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+  case 180: /* writablethe: tTHE ID tOF theobj  */
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3371 "engines/director/lingo/lingo-gr.cpp"
+#line 3428 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 181: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 636 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3377 "engines/director/lingo/lingo-gr.cpp"
+#line 3434 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 182: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 639 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3383 "engines/director/lingo/lingo-gr.cpp"
+#line 3440 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 183: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 640 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3389 "engines/director/lingo/lingo-gr.cpp"
+#line 3446 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* thedatetime: tTHE tABBREV tDATE  */
-#line 635 "engines/director/lingo/lingo-gr.y"
+  case 184: /* thedatetime: tTHE tABBREV tDATE  */
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3395 "engines/director/lingo/lingo-gr.cpp"
+#line 3452 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* thedatetime: tTHE tABBREV tTIME  */
-#line 636 "engines/director/lingo/lingo-gr.y"
+  case 185: /* thedatetime: tTHE tABBREV tTIME  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3401 "engines/director/lingo/lingo-gr.cpp"
+#line 3458 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* thedatetime: tTHE tABBR tDATE  */
-#line 637 "engines/director/lingo/lingo-gr.y"
+  case 186: /* thedatetime: tTHE tABBR tDATE  */
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3407 "engines/director/lingo/lingo-gr.cpp"
+#line 3464 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* thedatetime: tTHE tABBR tTIME  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+  case 187: /* thedatetime: tTHE tABBR tTIME  */
+#line 644 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3413 "engines/director/lingo/lingo-gr.cpp"
+#line 3470 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* thedatetime: tTHE tLONG tDATE  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 188: /* thedatetime: tTHE tLONG tDATE  */
+#line 645 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3419 "engines/director/lingo/lingo-gr.cpp"
+#line 3476 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* thedatetime: tTHE tLONG tTIME  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 189: /* thedatetime: tTHE tLONG tTIME  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3425 "engines/director/lingo/lingo-gr.cpp"
+#line 3482 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* thedatetime: tTHE tSHORT tDATE  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 190: /* thedatetime: tTHE tSHORT tDATE  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3431 "engines/director/lingo/lingo-gr.cpp"
+#line 3488 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* thedatetime: tTHE tSHORT tTIME  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 191: /* thedatetime: tTHE tSHORT tTIME  */
+#line 648 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3437 "engines/director/lingo/lingo-gr.cpp"
+#line 3494 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 192: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 652 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3443 "engines/director/lingo/lingo-gr.cpp"
+#line 3500 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 193: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3449 "engines/director/lingo/lingo-gr.cpp"
+#line 3506 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+  case 194: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 654 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3455 "engines/director/lingo/lingo-gr.cpp"
+#line 3512 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 649 "engines/director/lingo/lingo-gr.y"
+  case 195: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 655 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3461 "engines/director/lingo/lingo-gr.cpp"
+#line 3518 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 650 "engines/director/lingo/lingo-gr.y"
+  case 196: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 656 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3467 "engines/director/lingo/lingo-gr.cpp"
+#line 3524 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* chunktype: tCHAR  */
-#line 653 "engines/director/lingo/lingo-gr.y"
+  case 197: /* chunktype: tCHAR  */
+#line 659 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3473 "engines/director/lingo/lingo-gr.cpp"
+#line 3530 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* chunktype: tWORD  */
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 198: /* chunktype: tWORD  */
+#line 660 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3479 "engines/director/lingo/lingo-gr.cpp"
+#line 3536 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* chunktype: tITEM  */
-#line 655 "engines/director/lingo/lingo-gr.y"
+  case 199: /* chunktype: tITEM  */
+#line 661 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3485 "engines/director/lingo/lingo-gr.cpp"
+#line 3542 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* chunktype: tLINE  */
-#line 656 "engines/director/lingo/lingo-gr.y"
+  case 200: /* chunktype: tLINE  */
+#line 662 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3491 "engines/director/lingo/lingo-gr.cpp"
+#line 3548 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 202: /* list: '[' exprlist ']'  */
-#line 661 "engines/director/lingo/lingo-gr.y"
+  case 203: /* list: '[' exprlist ']'  */
+#line 667 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3497 "engines/director/lingo/lingo-gr.cpp"
+#line 3554 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* list: '[' ':' ']'  */
-#line 662 "engines/director/lingo/lingo-gr.y"
+  case 204: /* list: '[' ':' ']'  */
+#line 668 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3503 "engines/director/lingo/lingo-gr.cpp"
+#line 3560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 204: /* list: '[' proplist ']'  */
-#line 663 "engines/director/lingo/lingo-gr.y"
+  case 205: /* list: '[' proplist ']'  */
+#line 669 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3509 "engines/director/lingo/lingo-gr.cpp"
+#line 3566 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 205: /* proplist: proppair  */
-#line 666 "engines/director/lingo/lingo-gr.y"
+  case 206: /* proplist: proppair  */
+#line 672 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3518 "engines/director/lingo/lingo-gr.cpp"
+#line 3575 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 206: /* proplist: proplist ',' proppair  */
-#line 670 "engines/director/lingo/lingo-gr.y"
+  case 207: /* proplist: proplist ',' proppair  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3526 "engines/director/lingo/lingo-gr.cpp"
+#line 3583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 207: /* proppair: tSYMBOL ':' expr  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 208: /* proppair: tSYMBOL ':' expr  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3532 "engines/director/lingo/lingo-gr.cpp"
+#line 3589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* proppair: ID ':' expr  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 209: /* proppair: ID ':' expr  */
+#line 682 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3538 "engines/director/lingo/lingo-gr.cpp"
+#line 3595 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* proppair: tSTRING ':' expr  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+  case 210: /* proppair: tSTRING ':' expr  */
+#line 683 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3544 "engines/director/lingo/lingo-gr.cpp"
+#line 3601 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* unarymath: '+' simpleexpr  */
-#line 680 "engines/director/lingo/lingo-gr.y"
+  case 211: /* unarymath: '+' simpleexpr  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3550 "engines/director/lingo/lingo-gr.cpp"
+#line 3607 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* unarymath: '-' simpleexpr  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 212: /* unarymath: '-' simpleexpr  */
+#line 687 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3556 "engines/director/lingo/lingo-gr.cpp"
+#line 3613 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* expr: expr '+' expr  */
-#line 691 "engines/director/lingo/lingo-gr.y"
+  case 217: /* expr: expr '+' expr  */
+#line 697 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3562 "engines/director/lingo/lingo-gr.cpp"
+#line 3619 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* expr: expr '-' expr  */
-#line 692 "engines/director/lingo/lingo-gr.y"
+  case 218: /* expr: expr '-' expr  */
+#line 698 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3568 "engines/director/lingo/lingo-gr.cpp"
+#line 3625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* expr: expr '*' expr  */
-#line 693 "engines/director/lingo/lingo-gr.y"
+  case 219: /* expr: expr '*' expr  */
+#line 699 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3574 "engines/director/lingo/lingo-gr.cpp"
+#line 3631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* expr: expr '/' expr  */
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 220: /* expr: expr '/' expr  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3580 "engines/director/lingo/lingo-gr.cpp"
+#line 3637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* expr: expr tMOD expr  */
-#line 695 "engines/director/lingo/lingo-gr.y"
+  case 221: /* expr: expr tMOD expr  */
+#line 701 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3586 "engines/director/lingo/lingo-gr.cpp"
+#line 3643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 221: /* expr: expr '>' expr  */
-#line 696 "engines/director/lingo/lingo-gr.y"
+  case 222: /* expr: expr '>' expr  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3592 "engines/director/lingo/lingo-gr.cpp"
+#line 3649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* expr: expr '<' expr  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+  case 223: /* expr: expr '<' expr  */
+#line 703 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3598 "engines/director/lingo/lingo-gr.cpp"
+#line 3655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* expr: expr tEQ expr  */
-#line 698 "engines/director/lingo/lingo-gr.y"
+  case 224: /* expr: expr tEQ expr  */
+#line 704 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3604 "engines/director/lingo/lingo-gr.cpp"
+#line 3661 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* expr: expr tNEQ expr  */
-#line 699 "engines/director/lingo/lingo-gr.y"
+  case 225: /* expr: expr tNEQ expr  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3610 "engines/director/lingo/lingo-gr.cpp"
+#line 3667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* expr: expr tGE expr  */
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 226: /* expr: expr tGE expr  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3616 "engines/director/lingo/lingo-gr.cpp"
+#line 3673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* expr: expr tLE expr  */
-#line 701 "engines/director/lingo/lingo-gr.y"
+  case 227: /* expr: expr tLE expr  */
+#line 707 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3622 "engines/director/lingo/lingo-gr.cpp"
+#line 3679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* expr: expr tAND expr  */
-#line 702 "engines/director/lingo/lingo-gr.y"
+  case 228: /* expr: expr tAND expr  */
+#line 708 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3628 "engines/director/lingo/lingo-gr.cpp"
+#line 3685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* expr: expr tOR expr  */
-#line 703 "engines/director/lingo/lingo-gr.y"
+  case 229: /* expr: expr tOR expr  */
+#line 709 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3634 "engines/director/lingo/lingo-gr.cpp"
+#line 3691 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* expr: expr '&' expr  */
-#line 704 "engines/director/lingo/lingo-gr.y"
+  case 230: /* expr: expr '&' expr  */
+#line 710 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3640 "engines/director/lingo/lingo-gr.cpp"
+#line 3697 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* expr: expr tCONCAT expr  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 231: /* expr: expr tCONCAT expr  */
+#line 711 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3646 "engines/director/lingo/lingo-gr.cpp"
+#line 3703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* expr: expr tCONTAINS expr  */
-#line 706 "engines/director/lingo/lingo-gr.y"
+  case 232: /* expr: expr tCONTAINS expr  */
+#line 712 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3652 "engines/director/lingo/lingo-gr.cpp"
+#line 3709 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 232: /* expr: expr tSTARTS expr  */
-#line 707 "engines/director/lingo/lingo-gr.y"
+  case 233: /* expr: expr tSTARTS expr  */
+#line 713 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3658 "engines/director/lingo/lingo-gr.cpp"
+#line 3715 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 235: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 716 "engines/director/lingo/lingo-gr.y"
+  case 236: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 722 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3664 "engines/director/lingo/lingo-gr.cpp"
+#line 3721 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 236: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 717 "engines/director/lingo/lingo-gr.y"
+  case 237: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 723 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3670 "engines/director/lingo/lingo-gr.cpp"
+#line 3727 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 718 "engines/director/lingo/lingo-gr.y"
+  case 238: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 724 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3676 "engines/director/lingo/lingo-gr.cpp"
+#line 3733 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 239: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 725 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3682 "engines/director/lingo/lingo-gr.cpp"
+#line 3739 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 720 "engines/director/lingo/lingo-gr.y"
+  case 240: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 726 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3688 "engines/director/lingo/lingo-gr.cpp"
+#line 3745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 721 "engines/director/lingo/lingo-gr.y"
+  case 241: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 727 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3694 "engines/director/lingo/lingo-gr.cpp"
+#line 3751 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 241: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 722 "engines/director/lingo/lingo-gr.y"
+  case 242: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 728 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3700 "engines/director/lingo/lingo-gr.cpp"
+#line 3757 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 723 "engines/director/lingo/lingo-gr.y"
+  case 243: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 729 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3706 "engines/director/lingo/lingo-gr.cpp"
+#line 3763 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 724 "engines/director/lingo/lingo-gr.y"
+  case 244: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 730 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3712 "engines/director/lingo/lingo-gr.cpp"
+#line 3769 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 244: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 725 "engines/director/lingo/lingo-gr.y"
+  case 245: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 731 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3718 "engines/director/lingo/lingo-gr.cpp"
+#line 3775 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 726 "engines/director/lingo/lingo-gr.y"
+  case 246: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 732 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3724 "engines/director/lingo/lingo-gr.cpp"
+#line 3781 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 727 "engines/director/lingo/lingo-gr.y"
+  case 247: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 733 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3730 "engines/director/lingo/lingo-gr.cpp"
+#line 3787 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 247: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 728 "engines/director/lingo/lingo-gr.y"
+  case 248: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 734 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3736 "engines/director/lingo/lingo-gr.cpp"
+#line 3793 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 729 "engines/director/lingo/lingo-gr.y"
+  case 249: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 735 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3742 "engines/director/lingo/lingo-gr.cpp"
+#line 3799 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 249: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 730 "engines/director/lingo/lingo-gr.y"
+  case 250: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 736 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3748 "engines/director/lingo/lingo-gr.cpp"
+#line 3805 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 250: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 731 "engines/director/lingo/lingo-gr.y"
+  case 251: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 737 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3754 "engines/director/lingo/lingo-gr.cpp"
+#line 3811 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 251: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 732 "engines/director/lingo/lingo-gr.y"
+  case 252: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 738 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3760 "engines/director/lingo/lingo-gr.cpp"
+#line 3817 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 252: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 253: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 741 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3766 "engines/director/lingo/lingo-gr.cpp"
+#line 3823 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 253: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 736 "engines/director/lingo/lingo-gr.y"
+  case 254: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 742 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3772 "engines/director/lingo/lingo-gr.cpp"
+#line 3829 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 254: /* exprlist: %empty  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+  case 255: /* exprlist: %empty  */
+#line 745 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3778 "engines/director/lingo/lingo-gr.cpp"
+#line 3835 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 256: /* nonemptyexprlist: expr  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 257: /* nonemptyexprlist: expr  */
+#line 749 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3787 "engines/director/lingo/lingo-gr.cpp"
+#line 3844 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 747 "engines/director/lingo/lingo-gr.y"
+  case 258: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 753 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3795 "engines/director/lingo/lingo-gr.cpp"
+#line 3852 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3799 "engines/director/lingo/lingo-gr.cpp"
+#line 3856 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3994,7 +4051,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 752 "engines/director/lingo/lingo-gr.y"
+#line 758 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index cafcb0fdd2..8d99e6a403 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -330,7 +330,7 @@ ID: tVARID
 	| tNUMBER		{ $$ = new Common::String("number"); }
 	| tOF			{ $$ = new Common::String("of"); }
 	// | tON			{ $$ = new Common::String("on"); }
-	| tOPEN			{ $$ = new Common::String("open"); }
+	// | tOPEN			{ $$ = new Common::String("open"); }
 	| tOR			{ $$ = new Common::String("or"); }
 	// | tPLAY			{ $$ = new Common::String("play"); }
 	| tPREVIOUS		{ $$ = new Common::String("previous"); }
@@ -395,6 +395,12 @@ proc: ID cmdargs '\n'					{ $$ = new CmdNode($ID, $cmdargs); }
 	| tGO frameargs '\n'				{ $$ = new CmdNode(new Common::String("go"), $frameargs); }
 	| tPLAY cmdargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $cmdargs); }
 	| tPLAY frameargs '\n'				{ $$ = new CmdNode(new Common::String("play"), $frameargs); }
+	| tOPEN cmdargs '\n'				{ $$ = new CmdNode(new Common::String("open"), $cmdargs); }
+	| tOPEN expr[arg1] tWITH expr[arg2] '\n' {
+		NodeList *args = new NodeList;
+		args->push_back($arg1);
+		args->push_back($arg2);
+		$$ = new CmdNode(new Common::String("open"), args); }
 	| tNEXT tREPEAT '\n'				{ $$ = new NextRepeatNode(); }
 	| tEXIT tREPEAT '\n'				{ $$ = new ExitRepeatNode(); }
 	| tEXIT '\n'						{ $$ = new ExitNode(); }


Commit: ac5dbe3492dfab26f4f8fcffa5e953c9bdb3cda3
    https://github.com/scummvm/scummvm/commit/ac5dbe3492dfab26f4f8fcffa5e953c9bdb3cda3
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Create CMDID symbol

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index adf1ad9e8b..2c644dd91a 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -269,49 +269,50 @@ enum yysymbol_kind_t
   YYSYMBOL_methodlistline = 113,           /* methodlistline  */
   YYSYMBOL_handler = 114,                  /* handler  */
   YYSYMBOL_endargdef = 115,                /* endargdef  */
-  YYSYMBOL_ID = 116,                       /* ID  */
-  YYSYMBOL_idlist = 117,                   /* idlist  */
-  YYSYMBOL_nonemptyidlist = 118,           /* nonemptyidlist  */
-  YYSYMBOL_stmt = 119,                     /* stmt  */
-  YYSYMBOL_stmtoneliner = 120,             /* stmtoneliner  */
-  YYSYMBOL_proc = 121,                     /* proc  */
-  YYSYMBOL_cmdargs = 122,                  /* cmdargs  */
-  YYSYMBOL_frameargs = 123,                /* frameargs  */
-  YYSYMBOL_asgn = 124,                     /* asgn  */
-  YYSYMBOL_to = 125,                       /* to  */
-  YYSYMBOL_definevars = 126,               /* definevars  */
-  YYSYMBOL_ifstmt = 127,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 128,               /* ifelsestmt  */
-  YYSYMBOL_loop = 129,                     /* loop  */
-  YYSYMBOL_tell = 130,                     /* tell  */
-  YYSYMBOL_when = 131,                     /* when  */
-  YYSYMBOL_stmtlist = 132,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 133,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 134,             /* stmtlistline  */
-  YYSYMBOL_simpleexpr_nounarymath = 135,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_var = 136,                      /* var  */
-  YYSYMBOL_varorchunk = 137,               /* varorchunk  */
-  YYSYMBOL_varorthe = 138,                 /* varorthe  */
-  YYSYMBOL_chunk = 139,                    /* chunk  */
-  YYSYMBOL_object = 140,                   /* object  */
-  YYSYMBOL_the = 141,                      /* the  */
-  YYSYMBOL_theobj = 142,                   /* theobj  */
-  YYSYMBOL_menu = 143,                     /* menu  */
-  YYSYMBOL_writablethe = 144,              /* writablethe  */
-  YYSYMBOL_thedatetime = 145,              /* thedatetime  */
-  YYSYMBOL_thenumberof = 146,              /* thenumberof  */
-  YYSYMBOL_chunktype = 147,                /* chunktype  */
-  YYSYMBOL_inof = 148,                     /* inof  */
-  YYSYMBOL_list = 149,                     /* list  */
-  YYSYMBOL_proplist = 150,                 /* proplist  */
-  YYSYMBOL_proppair = 151,                 /* proppair  */
-  YYSYMBOL_unarymath = 152,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 153,               /* simpleexpr  */
-  YYSYMBOL_expr = 154,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 155,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 156,                   /* sprite  */
-  YYSYMBOL_exprlist = 157,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 158          /* nonemptyexprlist  */
+  YYSYMBOL_CMDID = 116,                    /* CMDID  */
+  YYSYMBOL_ID = 117,                       /* ID  */
+  YYSYMBOL_idlist = 118,                   /* idlist  */
+  YYSYMBOL_nonemptyidlist = 119,           /* nonemptyidlist  */
+  YYSYMBOL_stmt = 120,                     /* stmt  */
+  YYSYMBOL_stmtoneliner = 121,             /* stmtoneliner  */
+  YYSYMBOL_proc = 122,                     /* proc  */
+  YYSYMBOL_cmdargs = 123,                  /* cmdargs  */
+  YYSYMBOL_frameargs = 124,                /* frameargs  */
+  YYSYMBOL_asgn = 125,                     /* asgn  */
+  YYSYMBOL_to = 126,                       /* to  */
+  YYSYMBOL_definevars = 127,               /* definevars  */
+  YYSYMBOL_ifstmt = 128,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 129,               /* ifelsestmt  */
+  YYSYMBOL_loop = 130,                     /* loop  */
+  YYSYMBOL_tell = 131,                     /* tell  */
+  YYSYMBOL_when = 132,                     /* when  */
+  YYSYMBOL_stmtlist = 133,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 134,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 135,             /* stmtlistline  */
+  YYSYMBOL_simpleexpr_nounarymath = 136,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_var = 137,                      /* var  */
+  YYSYMBOL_varorchunk = 138,               /* varorchunk  */
+  YYSYMBOL_varorthe = 139,                 /* varorthe  */
+  YYSYMBOL_chunk = 140,                    /* chunk  */
+  YYSYMBOL_object = 141,                   /* object  */
+  YYSYMBOL_the = 142,                      /* the  */
+  YYSYMBOL_theobj = 143,                   /* theobj  */
+  YYSYMBOL_menu = 144,                     /* menu  */
+  YYSYMBOL_writablethe = 145,              /* writablethe  */
+  YYSYMBOL_thedatetime = 146,              /* thedatetime  */
+  YYSYMBOL_thenumberof = 147,              /* thenumberof  */
+  YYSYMBOL_chunktype = 148,                /* chunktype  */
+  YYSYMBOL_inof = 149,                     /* inof  */
+  YYSYMBOL_list = 150,                     /* list  */
+  YYSYMBOL_proplist = 151,                 /* proplist  */
+  YYSYMBOL_proppair = 152,                 /* proppair  */
+  YYSYMBOL_unarymath = 153,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 154,               /* simpleexpr  */
+  YYSYMBOL_expr = 155,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 156,         /* expr_nounarymath  */
+  YYSYMBOL_sprite = 157,                   /* sprite  */
+  YYSYMBOL_exprlist = 158,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 159          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -631,18 +632,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  155
+#define YYFINAL  174
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4062
+#define YYLAST   4150
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  55
+#define YYNNTS  56
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  258
+#define YYNRULES  277
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  495
+#define YYNSTATES  514
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -702,30 +703,32 @@ static const yytype_int16 yyrline[] =
 {
        0,   195,   195,   197,   203,   210,   211,   212,   213,   214,
      243,   247,   249,   251,   252,   255,   261,   268,   269,   274,
-     278,   282,   283,   284,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   306,   307,   311,
-     313,   314,   315,   316,   317,   318,   319,   320,   322,   323,
-     324,   326,   327,   328,   329,   330,   331,   334,   336,   339,
-     340,   341,   342,   343,   344,   345,   346,   347,   350,   351,
-     353,   354,   355,   356,   357,   358,   361,   362,   365,   369,
-     379,   380,   381,   382,   383,   384,   387,   388,   389,   392,
-     393,   394,   395,   396,   397,   398,   399,   404,   405,   406,
-     407,   410,   413,   418,   422,   428,   433,   436,   446,   451,
-     457,   463,   469,   477,   478,   479,   480,   483,   483,   485,
-     486,   487,   490,   494,   498,   504,   508,   512,   516,   518,
-     520,   524,   528,   532,   534,   535,   539,   545,   552,   553,
-     559,   560,   561,   562,   563,   564,   565,   566,   567,   568,
-     569,   570,   573,   575,   576,   579,   580,   583,   587,   591,
-     593,   595,   597,   599,   601,   603,   605,   609,   613,   619,
-     620,   621,   622,   625,   626,   627,   628,   629,   632,   634,
-     635,   636,   639,   640,   641,   642,   643,   644,   645,   646,
-     647,   648,   652,   653,   654,   655,   656,   659,   660,   661,
-     662,   665,   665,   667,   668,   669,   672,   676,   681,   682,
-     683,   686,   687,   690,   691,   695,   696,   697,   698,   699,
-     700,   701,   702,   703,   704,   705,   706,   707,   708,   709,
-     710,   711,   712,   713,   720,   721,   722,   723,   724,   725,
-     726,   727,   728,   729,   730,   731,   732,   733,   734,   735,
-     736,   737,   738,   741,   742,   745,   746,   749,   753
+     278,   282,   283,   284,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   338,   339,   340,   341,   342,   343,   346,   347,   348,
+     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   361,   362,   363,   366,   367,   370,   374,   384,
+     385,   386,   387,   388,   389,   392,   393,   394,   397,   398,
+     399,   400,   401,   402,   403,   404,   409,   410,   411,   412,
+     415,   418,   423,   427,   433,   438,   441,   451,   456,   462,
+     468,   474,   482,   483,   484,   485,   488,   488,   490,   491,
+     492,   495,   499,   503,   509,   513,   517,   521,   523,   525,
+     529,   533,   537,   539,   540,   544,   550,   557,   558,   564,
+     565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
+     575,   578,   580,   581,   584,   585,   588,   592,   596,   598,
+     600,   602,   604,   606,   608,   610,   614,   618,   624,   625,
+     626,   627,   630,   631,   632,   633,   634,   637,   639,   640,
+     641,   644,   645,   646,   647,   648,   649,   650,   651,   652,
+     653,   657,   658,   659,   660,   661,   664,   665,   666,   667,
+     670,   670,   672,   673,   674,   677,   681,   686,   687,   688,
+     691,   692,   695,   696,   700,   701,   702,   703,   704,   705,
+     706,   707,   708,   709,   710,   711,   712,   713,   714,   715,
+     716,   717,   718,   725,   726,   727,   728,   729,   730,   731,
+     732,   733,   734,   735,   736,   737,   738,   739,   740,   741,
+     742,   743,   746,   747,   750,   751,   754,   758
 };
 #endif
 
@@ -758,15 +761,15 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "'>'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "','", "'('",
   "')'", "'['", "']'", "':'", "$accept", "script", "scriptpartlist",
   "scriptpart", "macro", "factory", "method", "methodlist",
-  "nonemptymethodlist", "methodlistline", "handler", "endargdef", "ID",
-  "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc", "cmdargs",
-  "frameargs", "asgn", "to", "definevars", "ifstmt", "ifelsestmt", "loop",
-  "tell", "when", "stmtlist", "nonemptystmtlist", "stmtlistline",
-  "simpleexpr_nounarymath", "var", "varorchunk", "varorthe", "chunk",
-  "object", "the", "theobj", "menu", "writablethe", "thedatetime",
-  "thenumberof", "chunktype", "inof", "list", "proplist", "proppair",
-  "unarymath", "simpleexpr", "expr", "expr_nounarymath", "sprite",
-  "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "nonemptymethodlist", "methodlistline", "handler", "endargdef", "CMDID",
+  "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc",
+  "cmdargs", "frameargs", "asgn", "to", "definevars", "ifstmt",
+  "ifelsestmt", "loop", "tell", "when", "stmtlist", "nonemptystmtlist",
+  "stmtlistline", "simpleexpr_nounarymath", "var", "varorchunk",
+  "varorthe", "chunk", "object", "the", "theobj", "menu", "writablethe",
+  "thedatetime", "thenumberof", "chunktype", "inof", "list", "proplist",
+  "proppair", "unarymath", "simpleexpr", "expr", "expr_nounarymath",
+  "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -791,7 +794,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-331)
+#define YYPACT_NINF (-343)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -805,56 +808,58 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2243,  -331,  -331,  -331,  -331,  -331,  -331,   -24,  -331,  3446,
-    1376,  1473,  -331,  -331,  3446,  -331,    25,  -331,  -331,  1570,
-      75,  3368,  -331,  3446,  -331,  -331,  3446,  1570,  1376,  3446,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  1473,  3446,  3446,  3290,  -331,    31,  2243,  -331,
-    -331,  -331,  -331,  1570,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  -331,   -49,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,   -12,   -31,  -331,  -331,  -331,  -331,  1667,  1667,
-    1667,  1667,  1473,  1473,  1667,  1667,  1667,  1667,  1667,  3524,
-    1473,  1667,  1667,  1279,   695,   -11,    10,    21,  -331,  -331,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,   794,
-    -331,  1473,   405,  3446,    23,    37,   891,  3446,  1473,  3602,
-    -331,  -331,   -17,  -331,   103,    44,    47,   988,    48,    50,
-      51,     8,    54,  3446,  -331,  -331,  -331,    55,  1085,  -331,
-    -331,  3446,  -331,  -331,  -331,  -331,  1182,  3897,  -331,   -18,
-      38,    41,    76,   -41,   -33,   -32,   -30,     5,    64,   126,
-     127,  3884,  -331,  -331,  -331,   459,    56,    61,    63,   -16,
-     -22,  -331,  3897,    65,    60,  1473,  -331,  -331,   140,  1473,
-    1473,  1473,  1473,  1958,  1958,  2152,  1473,  2055,  2055,  1473,
-    1473,  1473,  1473,  1473,  1473,  1473,  1473,  -331,  3720,  -331,
-     207,  2970,  1473,  1473,  1473,  1473,  1473,    71,  -331,  -331,
-    3680,  3680,  3680,   128,  3733,   145,  -331,  -331,  1473,  1473,
-     -73,  -331,  1473,  -331,  -331,  -331,  3290,  3050,  -331,    78,
-    -331,  -331,   150,  3913,  1667,  1667,  1667,  1667,  1667,  1667,
-    1667,  1667,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  -331,  -331,  -331,    17,  1764,  1861,  1667,
-    1667,  1473,  -331,  1473,  1473,  -331,  1473,   596,  -331,  -331,
-    1473,    79,  1473,   122,   122,   122,   122,  3967,  3967,  -331,
-      -2,   122,   122,   122,   122,    -2,   -36,   -36,  -331,  -331,
-      60,  1473,  1473,  1473,  1473,  1473,  1473,  1473,  1473,  1473,
-    1473,  1473,  1473,  1473,  1473,  1473,  1473,  1473,  1473,  3050,
-     162,  3050,  -331,    85,  -331,    87,    88,  1473,  3050,  1861,
-    3746,  3897,  3446,  -331,  -331,    89,  -331,  -331,  3802,  -331,
-    -331,  -331,  2403,  -331,  -331,  3050,  1473,  -331,   159,  -331,
-     160,  -331,   167,  -331,   169,  -331,  -331,  1667,    17,    17,
-      17,    17,  1667,  1667,    17,  1667,  1667,  -331,  -331,  -331,
-    -331,  -331,  -331,   -80,  3897,  3897,  3897,    56,    61,    99,
-    -331,  3897,  -331,  3897,   122,   122,   122,   122,  3967,  3967,
-    -331,    -2,   122,   122,   122,   122,    -2,   -36,   -36,  -331,
-    -331,    60,  2323,  3130,  3050,  -331,  -331,  -331,   147,  2490,
-    -331,  3446,   -73,  -331,   106,  -331,  2570,  3897,  1667,  1667,
-    1667,  1667,  -331,  1667,  1667,  1667,  1667,  -331,   176,   135,
-    -331,  -331,  -331,  3210,   110,  3050,  -331,   174,  1473,   112,
-     121,  -331,  -331,  3446,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,   148,  1667,  -331,  3050,  -331,  -331,  2650,  1473,
-    3815,  -331,  3050,    18,  -331,  1667,  2730,   123,  3828,  3050,
-    3050,  -331,  3446,  -331,   125,  -331,  3050,  2810,  -331,  -331,
-    2890,   129,   130,  -331,  -331
+    2296,  -343,  -343,  -343,  -343,  -343,  -343,   -19,  -343,  3433,
+    1429,  1526,  -343,  -343,  3433,  -343,    -6,  -343,  -343,  1623,
+      37,  3512,  -343,  3433,  -343,  -343,  3433,  1623,  1429,  3433,
+    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
+    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
+    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
+    -343,  -343,  -343,  1526,  3433,  3433,  3827,  -343,    58,  2296,
+    -343,  -343,  -343,  -343,  1623,  -343,  -343,  -343,  -343,  -343,
+    -343,  -343,  -343,  -343,  -343,   -14,  -343,  -343,  -343,  -343,
+    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
+    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
+    -343,   -12,    -2,  -343,  -343,  -343,  -343,  1720,  1720,  1720,
+    1720,  1526,  1526,  1720,  1720,  1720,  1720,  1720,  3591,  1526,
+    1720,  1720,  1332,   748,     4,    13,    24,  -343,  -343,  -343,
+    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,   847,  -343,
+    1526,   517,  3433,    32,    34,   944,  3433,  1526,  3670,  -343,
+    -343,   -11,  -343,    60,    35,    36,  1041,    39,    40,    41,
+     429,    42,  3433,  -343,  -343,  -343,    43,  1138,  -343,  -343,
+    3433,  -343,  -343,  -343,  -343,  1235,  4042,  -343,   -17,    11,
+      15,    33,   -38,   -35,   -34,   -29,   -25,    52,    80,    84,
+    3988,  -343,  -343,  -343,   499,    27,    31,    46,   -77,    -4,
+    -343,  4042,    48,    45,  1526,  -343,  -343,   115,  1526,  1526,
+    1526,  1526,  2011,  2011,  2205,  1526,  2108,  2108,  1526,  1526,
+    1526,  1526,  1526,  1526,  1526,  1526,  -343,   589,  -343,   530,
+    3023,  1526,  1526,  1526,  1526,  1526,    47,  -343,  -343,  3749,
+    3749,  3749,   108,  3874,   127,  -343,  -343,  1526,  1526,   -70,
+    -343,  1526,  -343,  -343,  -343,  3827,  3103,  -343,    62,  -343,
+    -343,   131,  4055,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+    1720,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
+    -343,  -343,  -343,  -343,  -343,    63,  1817,  1914,  1720,  1720,
+    1526,  -343,  1526,  1526,  -343,  1526,  3354,  -343,  -343,  1526,
+      64,  1526,   -39,   -39,   -39,   -39,   183,   183,  -343,   -30,
+     -39,   -39,   -39,   -39,   -30,   -13,   -13,  -343,  -343,    45,
+    1526,  1526,  1526,  1526,  1526,  1526,  1526,  1526,  1526,  1526,
+    1526,  1526,  1526,  1526,  1526,  1526,  1526,  1526,  3103,   144,
+    3103,  -343,    65,  -343,    69,    72,  1526,  3103,  1914,  3887,
+    4042,  3433,  -343,  -343,    73,  -343,  -343,  3900,  -343,  -343,
+    -343,  2456,  -343,  -343,  3103,  1526,  -343,   133,  -343,   143,
+    -343,   145,  -343,   146,  -343,  -343,  1720,    63,    63,    63,
+      63,  1720,  1720,    63,  1720,  1720,  -343,  -343,  -343,  -343,
+    -343,  -343,   -52,  4042,  4042,  4042,    27,    31,    74,  -343,
+    4042,  -343,  4042,   -39,   -39,   -39,   -39,   183,   183,  -343,
+     -30,   -39,   -39,   -39,   -39,   -30,   -13,   -13,  -343,  -343,
+      45,  2376,  3183,  3103,  -343,  -343,  -343,   161,  2543,  -343,
+    3433,   -70,  -343,    75,  -343,  2623,  4042,  1720,  1720,  1720,
+    1720,  -343,  1720,  1720,  1720,  1720,  -343,   150,   109,  -343,
+    -343,  -343,  3263,    82,  3103,  -343,   147,  1526,    87,    88,
+    -343,  -343,  3433,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
+    -343,   116,  1720,  -343,  3103,  -343,  -343,  2703,  1526,  3956,
+    -343,  3103,    18,  -343,  1720,  2783,    89,  3969,  3103,  3103,
+    -343,  3433,  -343,    91,  -343,  3103,  2863,  -343,  -343,  2943,
+      92,    94,  -343,  -343
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -862,78 +867,80 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       0,    24,    31,    37,    60,    71,    36,     0,    38,    76,
-     101,     0,    39,    41,     0,    52,    53,    56,    58,   101,
-      59,    62,    69,     0,    72,    70,     0,   101,   101,    76,
+       0,    24,    31,    37,    60,    72,    36,     0,    38,    95,
+     120,     0,    39,    41,     0,    52,    53,    56,    58,   120,
+      59,    62,    70,     0,    73,    71,     0,   120,   120,    95,
       29,    57,    54,    51,    28,    30,    34,    66,    32,    33,
-      42,    43,    45,    46,    74,    75,    25,    26,    27,    47,
-      63,    35,    44,    48,    49,    50,    55,    68,    64,    65,
-      40,    73,    67,    76,     0,    61,     5,     0,     2,     3,
-       6,     7,     8,   101,     9,    80,    86,    87,    88,    81,
-      82,    83,    84,    85,     0,    99,    53,    59,    62,    67,
-      61,    78,     0,    77,   140,   141,   143,   142,    31,    37,
-      60,    71,    38,    52,    54,    32,    42,    45,    74,     0,
-      65,     0,     0,     0,   255,   152,     0,     0,   213,   147,
-     148,   149,   150,   169,   170,   171,   151,   214,   215,   102,
-     216,     0,     0,    76,     0,     0,   102,     0,     0,     0,
-     152,   155,     0,   156,     0,     0,     0,   102,     0,     0,
-       0,     0,     0,    76,   100,     1,     4,     0,   102,    98,
-     119,     0,   158,   157,   167,   168,   108,   109,   144,     0,
-       0,     0,     0,    25,    26,    27,    47,    63,    44,    55,
-     179,     0,   211,   212,   106,     0,   143,   142,     0,   152,
-       0,   206,   257,     0,   256,   255,    91,    92,    56,     0,
-       0,     0,     0,    29,    57,    51,     0,    34,    66,     0,
-       0,     0,     0,     0,     0,     0,     0,   234,   104,   235,
-       0,     0,     0,     0,     0,     0,     0,     0,    97,    90,
-      41,    28,    30,     0,     0,    55,   117,   118,     0,     0,
-      13,    95,    72,    93,    94,   121,     0,   134,   120,     0,
-      89,    79,    56,   112,     0,     0,     0,     0,     0,     0,
-       0,     0,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   197,   199,   200,   198,     0,     0,     0,     0,
-       0,     0,   146,     0,     0,   204,     0,     0,   205,   203,
-       0,     0,     0,   226,   227,   224,   225,   228,   229,   221,
-     231,   232,   233,   223,   222,   230,   217,   218,   219,   220,
-     103,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   134,
-     122,   134,   153,     0,   154,     0,     0,     0,   134,     0,
-       0,   133,     0,    17,    18,    11,    14,    15,     0,   131,
-     138,   139,     0,   135,   136,   134,     0,   159,     0,   163,
-       0,   165,     0,   161,     0,   201,   202,     0,    33,    43,
-      46,    75,    48,    49,    50,    64,    65,   181,   174,   173,
-     180,   253,   254,     0,   210,   208,   209,     0,     0,     0,
-     207,   258,   145,   111,   245,   246,   243,   244,   247,   248,
-     240,   250,   251,   252,   242,   241,   249,   236,   237,   238,
-     239,   105,     0,     0,    10,   113,   114,   115,     0,     0,
-     116,    76,     0,    96,     0,   137,    20,   110,     0,     0,
-       0,     0,   172,     0,     0,     0,     0,   178,     0,     0,
-     176,   177,   107,     0,     0,   134,   124,     0,     0,     0,
-       0,    16,   132,    21,   160,   164,   166,   162,   192,   194,
-     195,   193,     0,     0,   196,   134,   126,   123,     0,     0,
-       0,   128,   134,     0,    22,     0,     0,     0,     0,   134,
-      12,    19,     0,   175,     0,   125,   134,     0,    23,   127,
-       0,     0,     0,   129,   130
+      42,    43,    45,    46,    75,    76,    25,    26,    27,    47,
+      63,    35,    44,    48,    49,    50,    55,    68,    69,    64,
+      65,    40,    74,    67,    95,     0,    61,     5,     0,     2,
+       3,     6,     7,     8,   120,     9,    99,   105,   106,   107,
+     100,   101,   102,   103,   104,     0,   118,    79,    78,    80,
+      82,    83,    84,    86,    53,    92,    59,    62,    93,    94,
+      81,    89,    90,    85,    67,    91,    88,    87,    61,    77,
+      97,     0,    96,   159,   160,   162,   161,    31,    37,    60,
+      72,    38,    52,    54,    32,    42,    45,    75,    68,    65,
+       0,     0,     0,   274,   171,     0,     0,   232,   166,   167,
+     168,   169,   188,   189,   190,   170,   233,   234,   121,   235,
+       0,     0,    95,     0,     0,   121,     0,     0,    68,   171,
+     174,     0,   175,     0,     0,     0,   121,     0,     0,     0,
+       0,     0,    95,   119,     1,     4,     0,   121,   117,   138,
+       0,   177,   176,   186,   187,   127,   128,   163,     0,     0,
+       0,     0,    25,    26,    27,    47,    63,    44,    55,   198,
+       0,   230,   231,   125,     0,   162,   161,     0,   171,     0,
+     225,   276,     0,   275,   274,   110,   111,    56,     0,     0,
+       0,     0,    29,    57,    51,     0,    34,    66,     0,     0,
+       0,     0,     0,     0,     0,     0,   253,   123,   254,     0,
+       0,     0,     0,     0,     0,     0,     0,   116,   109,    41,
+      28,    30,     0,     0,    55,   136,   137,     0,     0,    13,
+     114,    73,   112,   113,   140,     0,   153,   139,     0,   108,
+      98,    56,   131,     0,     0,     0,     0,     0,     0,     0,
+       0,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   216,   218,   219,   217,     0,     0,     0,     0,     0,
+       0,   165,     0,     0,   223,     0,     0,   224,   222,     0,
+       0,     0,   245,   246,   243,   244,   247,   248,   240,   250,
+     251,   252,   242,   241,   249,   236,   237,   238,   239,   122,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   153,   141,
+     153,   172,     0,   173,     0,     0,     0,   153,     0,     0,
+     152,     0,    17,    18,    11,    14,    15,     0,   150,   157,
+     158,     0,   154,   155,   153,     0,   178,     0,   182,     0,
+     184,     0,   180,     0,   220,   221,     0,    33,    43,    46,
+      76,    48,    49,    50,    64,    65,   200,   193,   192,   199,
+     272,   273,     0,   229,   227,   228,     0,     0,     0,   226,
+     277,   164,   130,   264,   265,   262,   263,   266,   267,   259,
+     269,   270,   271,   261,   260,   268,   255,   256,   257,   258,
+     124,     0,     0,    10,   132,   133,   134,     0,     0,   135,
+      95,     0,   115,     0,   156,    20,   129,     0,     0,     0,
+       0,   191,     0,     0,     0,     0,   197,     0,     0,   195,
+     196,   126,     0,     0,   153,   143,     0,     0,     0,     0,
+      16,   151,    21,   179,   183,   185,   181,   211,   213,   214,
+     212,     0,     0,   215,   153,   145,   142,     0,     0,     0,
+     147,   153,     0,    22,     0,     0,     0,     0,   153,    12,
+      19,     0,   194,     0,   144,   153,     0,    23,   146,     0,
+       0,     0,   148,   149
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -331,  -331,  -331,   155,  -331,  -331,  -331,  -331,  -331,  -197,
-    -331,  -331,     0,   -25,  -331,     3,   -63,  -331,     6,   200,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -323,  -331,
-    -330,  -117,   -20,  -105,  -331,  -100,  -331,  -331,   -45,  -210,
-     213,  -331,  -331,  -331,   -58,  -331,  -331,   -52,  -331,   262,
-      67,    77,   -23,    49,  -211
+    -343,  -343,  -343,   123,  -343,  -343,  -343,  -343,  -343,  -247,
+    -343,  -343,     0,    -5,   -27,  -343,     7,   -63,  -343,     1,
+     168,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -342,
+    -343,  -341,   -98,   -20,  -124,  -343,  -131,  -343,  -343,  -100,
+    -260,   178,  -343,  -343,  -343,  -288,  -343,  -343,  -106,  -343,
+     258,    61,    16,   -71,     2,  -230
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    67,    68,    69,    70,    71,   344,   345,   346,   347,
-      72,   473,   115,    92,    93,   351,    75,    76,   116,   117,
-      77,   238,    78,    79,    80,    81,    82,    83,   352,   353,
-     354,   118,   119,   333,   142,   120,   121,   122,   377,   378,
-     123,   124,   125,   276,   367,   126,   190,   191,   127,   128,
-     192,   218,   130,   193,   194
+       0,    68,    69,    70,    71,    72,   363,   364,   365,   366,
+      73,   492,   109,   134,   111,   112,   370,    76,    77,   135,
+     136,    78,   257,    79,    80,    81,    82,    83,    84,   371,
+     372,   373,   137,   138,   352,   161,   139,   140,   141,   396,
+     397,   142,   143,   144,   295,   386,   145,   209,   210,   146,
+     147,   211,   237,   149,   212,   213
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -941,657 +948,704 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      73,   141,   154,    74,   150,   310,   412,    84,   414,    91,
-     254,   342,   217,   224,   133,   419,   255,   236,   290,   217,
-     442,   140,   425,   144,   343,   135,   145,   237,   262,    91,
-     217,   155,   426,   146,   148,   263,   264,   266,   152,   268,
-     365,   217,   246,   265,   267,   366,   269,   224,   159,   217,
-     199,   200,   201,   202,   222,   223,   134,   224,   214,   215,
-     206,   225,   226,    91,   153,    73,   256,   161,    73,   258,
-     383,    74,   257,    85,   270,   259,   287,   129,   132,   157,
-     288,   271,   425,   195,   425,   160,   136,   286,   195,   425,
-     212,   213,   214,   215,   147,   129,   425,   209,   210,   211,
-     212,   213,   214,   215,   260,   247,   219,   196,   227,   180,
-     261,   137,   138,   219,   189,   481,   482,   411,   197,   272,
-     228,   273,   468,   274,   219,   275,   335,   336,   249,   151,
-     334,   334,   334,    91,   229,   219,   239,   233,   425,   180,
-     158,   240,   476,   219,   241,   243,   425,   244,   245,   480,
-     425,   248,   250,    91,   277,   278,   487,   425,   290,   283,
-     425,   251,   447,   490,   284,   285,   292,   289,   331,   166,
-     167,   224,   337,   339,   206,   355,   356,   181,   413,   392,
-     185,   448,   415,   349,   416,   417,   422,   428,   429,   199,
-     200,   201,   202,   222,   223,   430,   224,   431,   220,   206,
-     225,   226,   286,   452,   462,   234,   463,   467,   469,   471,
-     332,   332,   332,   211,   212,   213,   214,   215,   472,   475,
-     485,    73,   489,   156,   330,   451,   493,   494,   149,   464,
-     140,   140,   140,   380,   143,   390,   209,   210,   211,   212,
-     213,   214,   215,   253,   291,     0,    73,    73,     0,   199,
-     200,   201,   202,   222,   223,     0,   224,     0,     0,   206,
-     225,   226,     0,     0,     0,     0,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,     0,     0,     0,     0,   389,     0,   297,
-     298,   299,   301,   302,     0,     0,   209,   210,   211,   212,
-     213,   214,   215,     0,     0,   340,   341,   282,     0,   348,
-     433,   434,   435,   436,     0,     0,   439,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
-       0,    73,     0,     0,     0,     0,     0,     0,    73,     0,
-       0,     0,   421,     0,     0,     0,     0,     0,     0,     0,
-     384,   385,    73,   386,     0,    73,     0,   391,     0,   393,
-     162,   163,   164,   165,     0,     0,   168,   169,   170,   171,
-     172,     0,     0,   182,   183,     0,     0,     0,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
-     406,   407,   408,   409,   410,     0,   450,     0,     0,     0,
-       0,     0,     0,     0,   418,     0,     0,     0,     0,     0,
-       0,     0,    73,    73,    73,     0,   446,     0,     0,    73,
-       0,    91,     0,   427,     0,     0,    73,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   221,     0,
-       0,     0,     0,    73,     0,    73,   466,   199,   200,   201,
-     202,   222,   223,   474,   224,     0,     0,   206,   225,   226,
-       0,     0,     0,     0,     0,    73,     0,     0,    73,     0,
-       0,     0,    73,     0,     0,     0,    73,     0,     0,    73,
-      73,     0,   488,     0,     0,     0,    73,    73,     0,     0,
-      73,     0,     0,     0,   209,   210,   211,   212,   213,   214,
-     215,   199,   200,   201,   202,   222,   223,     0,   224,     0,
-       0,   206,   225,   226,     0,   470,   357,   358,   359,   360,
-     361,   362,   363,   364,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   478,     0,     0,   379,
-     379,   381,   382,     0,     0,     0,     0,     0,   209,   210,
-     211,   212,   213,   214,   215,     0,     0,   281,     0,   282,
+      74,   160,   169,   173,   110,   329,   431,    75,   433,   152,
+     243,   273,    85,   225,   361,   438,   159,   274,   163,   243,
+     154,   164,   214,   255,   110,   153,   305,   362,   165,   167,
+     444,   281,   445,   256,   283,   285,   243,   171,   282,   275,
+     287,   284,   286,   277,   289,   276,   309,   288,   461,   278,
+     236,   290,   230,   231,   232,   233,   234,   236,   174,   110,
+     172,   279,   231,   232,   233,   234,    74,   280,   236,    74,
+     402,   148,   151,   156,   157,   176,    75,   238,    86,   236,
+     155,   233,   234,   178,   238,   179,   384,   236,   166,   148,
+     444,   385,   444,   258,   306,   238,   180,   444,   307,   452,
+     453,   454,   455,   214,   444,   458,   238,   291,   296,   292,
+     215,   293,   297,   294,   238,   500,   501,   430,   353,   353,
+     353,   216,   487,   199,   170,   246,   354,   355,   208,   247,
+     302,   248,   259,   260,   303,   177,   262,   263,   264,   267,
+     269,   311,   495,   309,   350,   268,   444,   110,   304,   499,
+     308,   252,   356,   199,   444,   358,   506,   375,   444,   374,
+     432,   447,   434,   509,   411,   444,   435,   110,   444,   436,
+     441,   448,   471,   449,   450,   270,   466,   305,   481,   486,
+     482,   488,   185,   186,   490,   491,   504,   494,   508,   512,
+     200,   513,   175,   204,   470,   467,   168,   399,   483,   162,
+     409,   272,   368,   218,   219,   220,   221,   241,   242,     0,
+     243,   239,     0,   225,   244,   245,   310,     0,   253,     0,
+       0,     0,     0,     0,     0,   218,   219,   220,   221,   351,
+     351,   351,   243,     0,     0,   225,   244,   245,     0,     0,
+      74,     0,     0,     0,   159,   159,   159,   349,     0,     0,
+     228,   229,   230,   231,   232,   233,   234,     0,     0,     0,
+       0,     0,     0,     0,     0,    74,    74,     0,     0,     0,
+       0,     0,   228,   229,   230,   231,   232,   233,   234,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,     0,     0,     0,     0,
+       0,   408,   316,   317,   318,   320,   321,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   359,   360,
+       0,     0,   367,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    74,     0,
+      74,     0,     0,     0,     0,     0,   440,    74,     0,     0,
+       0,     0,     0,   403,   404,     0,   405,     0,     0,     0,
+     410,    74,   412,     0,    74,   181,   182,   183,   184,     0,
+       0,   187,   188,   189,   190,   191,     0,     0,   201,   202,
+       0,   413,   414,   415,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   425,   426,   427,   428,   429,     0,     0,
+       0,     0,     0,   469,     0,     0,     0,   437,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    74,    74,    74,     0,   110,   446,     0,    74,   465,
+       0,     0,     0,     0,     0,    74,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    74,   265,    74,     0,     0,   493,     0,   485,
+       0,   218,   219,   220,   221,   241,   242,     0,   243,     0,
+       0,   225,   244,   245,    74,     0,     0,    74,     0,     0,
+       0,    74,     0,     0,     0,    74,   507,     0,    74,    74,
+       0,     0,     0,     0,     0,    74,    74,     0,     0,    74,
+       0,     0,     0,     0,     0,     0,     0,     0,   228,   229,
+     230,   231,   232,   233,   234,     0,   266,     0,   489,     0,
+       0,   376,   377,   378,   379,   380,   381,   382,   383,     0,
+       0,   218,   219,   220,   221,   241,   242,     0,   243,   497,
+     240,   225,   244,   245,   398,   398,   400,   401,     0,   218,
+     219,   220,   221,   241,   242,     0,   243,     0,     0,   225,
+     244,   245,   218,   219,   220,   221,   241,   242,     0,   243,
+       0,     0,   225,   244,   245,     0,     0,     0,   228,   229,
+     230,   231,   232,   233,   234,     0,     0,   300,     0,   301,
+       0,     0,     0,     0,     0,     0,   228,   229,   230,   231,
+     232,   233,   234,     0,     0,     0,   398,     0,     0,   228,
+     229,   230,   231,   232,   233,   234,     0,     0,     0,     0,
+     301,   330,   331,   332,   333,   334,   335,     0,   336,     0,
+       0,   337,   338,   339,   451,     0,     0,     0,     0,   456,
+     457,     0,   459,   460,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   379,     0,     1,   387,   388,     0,     2,     3,     4,
-       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
-      13,     0,    15,    86,    17,    18,     0,    87,    88,   432,
-      22,     0,    24,    25,   437,   438,     0,   440,   441,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    89,     0,     0,
-       0,     0,     0,     0,    90,     0,     0,     0,     0,     0,
-     454,   455,   456,   457,     0,   458,   459,   460,   461,     0,
-      94,    95,     1,   186,   187,     0,    98,    99,   100,   101,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    86,    17,    18,   437,    87,    88,     0,    22,
-       0,    24,    25,     0,     0,     0,     0,   483,     0,     0,
-       0,    30,    31,   104,    33,    34,    35,     0,    36,    37,
-     105,    39,   106,    41,   107,    43,   108,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     109,    57,    58,   110,    60,    61,    89,     0,     0,     0,
-       0,     0,     0,    90,     0,     0,     0,   111,   112,     0,
-       0,     0,     0,     0,   131,     0,   114,     0,   188,    94,
-      95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    86,   198,    18,     0,    87,    88,     0,    22,     0,
-      24,    25,     0,     0,     0,     0,   199,   200,   201,   202,
-     203,   204,   104,   205,    34,    35,   206,   207,   208,   105,
-      39,   106,    41,   107,    43,   108,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   109,
-      57,    58,   110,    60,    61,    89,     0,     0,     0,     0,
-       0,     0,    90,   209,   210,   211,   212,   213,   214,   215,
-       0,     0,   216,   131,     0,   114,    94,    95,     1,    96,
-      97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,   230,     0,    15,    86,    17,
-      18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
-       0,     0,     0,   199,   200,   201,   202,   203,   204,   104,
-     205,   231,   232,   206,   207,   208,   105,    39,   106,    41,
-     107,    43,   108,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   109,    57,    58,   110,
-      60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
-     209,   210,   211,   212,   213,   214,   215,     0,     0,   216,
-     131,     0,   114,    94,    95,     1,    96,    97,     0,    98,
-      99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
-      88,     0,    22,     0,   242,    25,     0,     0,     0,     0,
-     199,   200,   201,   202,   203,   204,   104,   205,    34,    35,
-     206,   207,   208,   105,    39,   106,    41,   107,    43,   108,
+       0,     0,     0,     0,     0,     0,     0,     0,   340,   341,
+     342,   343,   344,   345,   346,     0,     0,   347,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   473,   474,   475,   476,     0,
+     477,   478,   479,   480,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     456,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   502,   113,   114,     1,   205,   206,    87,   117,
+     118,   119,   120,     6,    88,     0,    89,     8,    90,    91,
+      92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
+      97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
+       0,     0,     0,     0,    30,    31,   123,    33,    34,    35,
+       0,    36,    37,   124,    39,   125,    41,   126,    43,   127,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,   128,    58,    59,   129,    61,    62,   104,
+     105,   106,   107,     0,     0,     0,   108,     0,     0,     0,
+     130,   131,     0,     0,     0,     0,     0,   150,     0,   133,
+       0,   207,   113,   114,     1,   115,   116,    87,   117,   118,
+     119,   120,     6,    88,     0,    89,     8,    90,    91,    92,
+      12,    13,    93,    15,    94,   217,    18,    95,    96,    97,
+      98,    22,    99,    24,    25,   100,   101,   102,   103,   218,
+     219,   220,   221,   222,   223,   123,   224,    34,    35,   225,
+     226,   227,   124,    39,   125,    41,   126,    43,   127,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,   128,    58,    59,   129,    61,    62,   104,   105,
+     106,   107,     0,     0,     0,   108,   228,   229,   230,   231,
+     232,   233,   234,     0,     0,   235,   150,     0,   133,   113,
+     114,     1,   115,   116,    87,   117,   118,   119,   120,     6,
+      88,     0,    89,     8,    90,    91,    92,    12,   249,    93,
+      15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
+      24,    25,   100,   101,   102,   103,   218,   219,   220,   221,
+     222,   223,   123,   224,   250,   251,   225,   226,   227,   124,
+      39,   125,    41,   126,    43,   127,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   128,
+      58,    59,   129,    61,    62,   104,   105,   106,   107,     0,
+       0,     0,   108,   228,   229,   230,   231,   232,   233,   234,
+       0,     0,   235,   150,     0,   133,   113,   114,     1,   115,
+     116,    87,   117,   118,   119,   120,     6,    88,     0,    89,
+       8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
+      18,    95,    96,    97,    98,    22,    99,   261,    25,   100,
+     101,   102,   103,   218,   219,   220,   221,   222,   223,   123,
+     224,    34,    35,   225,   226,   227,   124,    39,   125,    41,
+     126,    43,   127,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,   128,    58,    59,   129,
+      61,    62,   104,   105,   106,   107,     0,     0,     0,   108,
+     228,   229,   230,   231,   232,   233,   234,     0,     0,   235,
+     150,     0,   133,   113,   114,     1,   115,   116,    87,   117,
+     118,   119,   120,     6,    88,     0,    89,     8,    90,    91,
+      92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
+      97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
+     218,   219,   220,   221,   222,   223,   123,   224,    34,    35,
+     225,   226,   227,   124,    39,   125,    41,   126,    43,   127,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   109,    57,    58,   110,    60,    61,    89,
-       0,     0,     0,     0,     0,     0,    90,   209,   210,   211,
-     212,   213,   214,   215,     0,     0,   216,   131,     0,   114,
-      94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,     0,     0,     0,   199,   200,   201,
-     202,   203,   204,   104,   205,    34,    35,   206,   207,   208,
-     105,    39,   106,    41,   107,    43,   108,    45,    46,    47,
+      54,    55,    56,   128,    58,    59,   129,    61,    62,   104,
+     105,   106,   107,     0,     0,     0,   108,   228,   229,   230,
+     231,   232,   233,   234,     0,     0,   235,   150,     0,   133,
+     113,   114,     1,   115,   116,    87,   117,   118,   119,   120,
+       6,    88,     0,    89,     8,    90,    91,    92,    12,    13,
+      93,    15,    94,   271,    18,    95,    96,    97,    98,    22,
+      99,    24,    25,   100,   101,   102,   103,   218,   219,   220,
+     221,   222,   223,   123,   224,    34,    35,   225,   226,   227,
+     124,    39,   125,    41,   126,    43,   127,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     109,    57,    58,   110,    60,    61,    89,     0,     0,     0,
-       0,     0,     0,    90,   209,   210,   211,   212,   213,   214,
-     215,     0,     0,   216,   131,     0,   114,    94,    95,     1,
-      96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
-     252,    18,     0,    87,    88,     0,    22,     0,    24,    25,
-       0,     0,     0,     0,   199,   200,   201,   202,   203,   204,
-     104,   205,    34,    35,   206,   207,   208,   105,    39,   106,
-      41,   107,    43,   108,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   109,    57,    58,
-     110,    60,    61,    89,     0,     0,     0,     0,     0,     0,
-      90,   209,   210,   211,   212,   213,   214,   215,     0,     0,
-       0,   131,     0,   114,    94,    95,     1,    96,    97,     0,
-      98,    99,   100,   101,     6,     0,     0,     0,     8,     0,
-       0,     0,    12,    13,     0,    15,    86,    17,    18,     0,
-      87,    88,     0,    22,     0,    24,    25,     0,     0,     0,
-       0,     0,     0,     0,     0,    30,    31,   104,    33,    34,
-      35,     0,    36,    37,   105,    39,   106,    41,   107,    43,
-     108,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   109,    57,    58,   110,    60,    61,
-      89,     0,     0,     0,     0,     0,     0,    90,     0,     0,
-       0,   111,   112,     0,     0,     0,     0,     0,   131,   184,
-     114,    94,    95,     1,    96,    97,     0,    98,    99,   100,
-     101,     6,     0,     0,     0,   102,     0,     0,     0,    12,
-      13,     0,   103,    86,    17,    18,     0,    87,    88,     0,
-      22,     0,    24,    25,     0,     0,     0,     0,     0,     0,
-       0,     0,    30,    31,   104,    33,    34,    35,     0,    36,
-      37,   105,    39,   106,    41,   107,    43,   108,    45,    46,
+     128,    58,    59,   129,    61,    62,   104,   105,   106,   107,
+       0,     0,     0,   108,   228,   229,   230,   231,   232,   233,
+     234,     0,     0,     0,   150,     0,   133,   113,   114,     1,
+     115,   116,    87,   117,   118,   119,   120,     6,    88,     0,
+      89,     8,    90,    91,    92,    12,    13,    93,    15,    94,
+      17,    18,    95,    96,    97,    98,    22,    99,    24,    25,
+     100,   101,   102,   103,     0,     0,     0,     0,    30,    31,
+     123,    33,    34,    35,     0,    36,    37,   124,    39,   125,
+      41,   126,    43,   127,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,   128,    58,    59,
+     129,    61,    62,   104,   105,   106,   107,     0,     0,     0,
+     108,     0,     0,     0,   130,   131,     0,     0,     0,     0,
+       0,   150,   203,   133,   113,   114,     1,   115,   116,    87,
+     117,   118,   119,   120,     6,    88,     0,    89,   121,    90,
+      91,    92,    12,    13,    93,   122,    94,    17,    18,    95,
+      96,    97,    98,    22,    99,    24,    25,   100,   101,   102,
+     103,     0,     0,     0,     0,    30,    31,   123,    33,    34,
+      35,     0,    36,    37,   124,    39,   125,    41,   126,    43,
+     127,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,   128,    58,    59,   129,    61,    62,
+     104,   105,   106,   107,     0,     0,     0,   108,     0,     0,
+       0,   130,   131,     0,     0,     0,     0,     0,   132,     0,
+     133,   113,   114,     1,   115,   116,    87,   117,   118,   119,
+     120,     6,    88,     0,    89,     8,    90,    91,    92,    12,
+      13,    93,    15,    94,    17,    18,    95,    96,    97,    98,
+      22,    99,    24,    25,   100,   101,   102,   103,     0,     0,
+       0,     0,    30,    31,   123,    33,    34,    35,     0,    36,
+      37,   124,    39,   125,    41,   126,    43,   127,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,   109,    57,    58,   110,    60,    61,    89,     0,     0,
-       0,     0,     0,     0,    90,     0,     0,     0,   111,   112,
-       0,     0,     0,     0,     0,   113,     0,   114,    94,    95,
-       1,    96,    97,     0,    98,    99,   100,   101,     6,     0,
-       0,     0,     8,     0,     0,     0,    12,    13,     0,    15,
-      86,    17,    18,     0,    87,    88,     0,    22,     0,    24,
-      25,     0,     0,     0,     0,     0,     0,     0,     0,    30,
-      31,   104,    33,    34,    35,     0,    36,    37,   105,    39,
-     106,    41,   107,    43,   108,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,   109,    57,
-      58,   110,    60,    61,    89,     0,     0,     0,     0,     0,
-       0,    90,     0,     0,     0,   111,   112,     0,     0,     0,
-       0,     0,   131,     0,   114,    94,    95,     1,    96,    97,
-       0,    98,    99,   100,   101,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
-       0,    87,    88,     0,    22,     0,    24,    25,     0,     0,
-       0,     0,     0,     0,     0,     0,    30,    31,   104,    33,
-      34,    35,     0,    36,    37,   105,    39,   106,    41,   107,
-      43,   108,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,   109,    57,    58,   110,    60,
-      61,    89,     0,     0,     0,     0,     0,     0,    90,     0,
-       0,     0,   111,   112,     0,     0,     0,     0,     0,   113,
-       0,   114,    94,    95,     1,    96,    97,     0,    98,    99,
-     100,   101,     6,     0,     0,     0,     8,     0,     0,     0,
-      12,    13,     0,    15,    86,    17,    18,     0,    87,    88,
-       0,    22,     0,    24,    25,     0,     0,     0,     0,     0,
-       0,     0,     0,    30,    31,   104,    33,    34,    35,     0,
-      36,    37,   105,    39,   106,    41,   107,    43,   108,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,   109,    57,    58,    59,    60,    61,    89,     0,
-       0,     0,     0,     0,     0,    90,     0,     0,     0,   111,
-     112,     0,     0,     0,     0,     0,   131,     0,   114,    94,
-      95,     1,    96,    97,     0,    98,    99,   100,   101,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
-      24,    25,     0,     0,     0,     0,     0,     0,     0,     0,
-      30,    31,   104,    33,    34,    35,     0,    36,    37,   105,
-     368,   106,   369,   107,   370,   108,   371,    46,    47,    48,
-      49,    50,     0,    51,    52,   372,   373,   374,    56,   109,
-      57,   375,   376,    60,    61,    89,     0,     0,     0,     0,
-       0,     0,    90,     0,     0,     0,   111,   112,     0,     0,
-       0,     0,     0,   131,     0,   114,    94,    95,     1,    96,
-      97,     0,    98,    99,   100,   101,     6,     0,     0,     0,
-       8,     0,     0,     0,    12,    13,     0,    15,    86,    17,
-      18,     0,    87,    88,     0,    22,     0,    24,    25,     0,
-       0,     0,     0,     0,     0,     0,     0,    30,    31,   104,
-      33,    34,    35,     0,    36,    37,   105,    39,   106,    41,
-     107,    43,   108,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,   372,   373,    55,    56,   109,    57,   375,   376,
-      60,    61,    89,     0,     0,     0,     0,     0,     0,    90,
-       0,     0,     0,   111,   112,     0,     0,     0,     0,     0,
-     131,     0,   114,    94,    95,     1,    96,    97,     0,    98,
-      99,   100,   101,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
-      88,     0,    22,     0,    24,    25,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   104,    33,    34,    35,
-       0,    36,    37,   105,    39,   106,    41,   107,    43,   108,
+      56,   128,    58,    59,   129,    61,    62,   104,   105,   106,
+     107,     0,     0,     0,   108,     0,     0,     0,   130,   131,
+       0,     0,     0,     0,     0,   150,     0,   133,   113,   114,
+       1,   115,   116,    87,   117,   118,   119,   120,     6,    88,
+       0,    89,     8,    90,    91,    92,    12,    13,    93,    15,
+      94,    17,    18,    95,    96,    97,    98,    22,    99,    24,
+      25,   100,   101,   102,   103,     0,     0,     0,     0,    30,
+      31,   123,    33,    34,    35,     0,    36,    37,   124,    39,
+     125,    41,   126,    43,   127,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,   128,    58,
+      59,   129,    61,    62,   104,   105,   106,   107,     0,     0,
+       0,   108,     0,     0,     0,   130,   131,     0,     0,     0,
+       0,     0,   132,     0,   133,   113,   114,     1,   115,   116,
+      87,   117,   118,   119,   120,     6,    88,     0,    89,     8,
+      90,    91,    92,    12,    13,    93,    15,    94,    17,    18,
+      95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
+     102,   103,     0,     0,     0,     0,    30,    31,   123,    33,
+      34,    35,     0,    36,    37,   124,    39,   125,    41,   126,
+      43,   127,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,   128,    58,    59,    60,    61,
+      62,   104,   105,   106,   107,     0,     0,     0,   108,     0,
+       0,     0,   130,   131,     0,     0,     0,     0,     0,   150,
+       0,   133,   113,   114,     1,   115,   116,    87,   117,   118,
+     119,   120,     6,    88,     0,    89,     8,    90,    91,    92,
+      12,    13,    93,    15,    94,    17,    18,    95,    96,    97,
+      98,    22,    99,    24,    25,   100,   101,   102,   103,     0,
+       0,     0,     0,    30,    31,   123,    33,    34,    35,     0,
+      36,    37,   124,   387,   125,   388,   126,   389,   127,   390,
+      46,    47,    48,    49,    50,     0,    51,    52,   391,   392,
+     393,    56,   128,    58,   394,   395,    61,    62,   104,   105,
+     106,   107,     0,     0,     0,   108,     0,     0,     0,   130,
+     131,     0,     0,     0,     0,     0,   150,     0,   133,   113,
+     114,     1,   115,   116,    87,   117,   118,   119,   120,     6,
+      88,     0,    89,     8,    90,    91,    92,    12,    13,    93,
+      15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
+      24,    25,   100,   101,   102,   103,     0,     0,     0,     0,
+      30,    31,   123,    33,    34,    35,     0,    36,    37,   124,
+      39,   125,    41,   126,    43,   127,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,   391,   392,    55,    56,   128,
+      58,   394,   395,    61,    62,   104,   105,   106,   107,     0,
+       0,     0,   108,     0,     0,     0,   130,   131,     0,     0,
+       0,     0,     0,   150,     0,   133,   113,   114,     1,   115,
+     116,    87,   117,   118,   119,   120,     6,    88,     0,    89,
+       8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
+      18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
+     101,   102,   103,     0,     0,     0,     0,     0,     0,   123,
+      33,    34,    35,     0,    36,    37,   124,    39,   125,    41,
+     126,    43,   127,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,   128,    58,    59,   129,
+      61,    62,   104,   105,   106,   107,     0,     0,     0,   108,
+       0,     0,     0,   130,   131,     0,     0,     0,     0,     0,
+     150,     0,   133,   113,   114,     1,   115,   116,    87,   117,
+     118,   119,   120,     6,    88,     0,    89,     8,    90,    91,
+      92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
+      97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
+       0,     0,     0,     0,     0,     0,   123,    33,    34,    35,
+       0,     0,     0,   124,    39,   125,    41,   126,    43,   127,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   109,    57,    58,   110,    60,    61,    89,
-       0,     0,     0,     0,     0,     0,    90,     0,     0,     0,
-     111,   112,     0,     0,     0,     0,     0,   131,     0,   114,
-      94,    95,     1,    96,    97,     0,    98,    99,   100,   101,
-       6,     0,     0,     0,     8,     0,     0,     0,    12,    13,
-       0,    15,    86,    17,    18,     0,    87,    88,     0,    22,
-       0,    24,    25,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   104,    33,    34,    35,     0,     0,     0,
-     105,    39,   106,    41,   107,    43,   108,    45,    46,    47,
+      54,    55,    56,   128,    58,    59,   129,    61,    62,   104,
+     105,   106,   107,     0,     0,     0,   108,     0,     0,     0,
+     130,   131,     0,     0,     0,     0,     0,   150,     0,   133,
+     113,   114,     1,   115,   116,    87,   117,   118,   119,   120,
+       6,    88,     0,    89,     8,    90,    91,    92,    12,    13,
+      93,    15,    94,    17,    18,    95,    96,    97,    98,    22,
+      99,    24,    25,   100,   101,   102,   103,     0,     0,     0,
+       0,     0,     0,   123,     0,    34,    35,     0,     0,     0,
+     124,    39,   125,    41,   126,    43,   127,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     109,    57,    58,   110,    60,    61,    89,     0,     0,     0,
-       0,     0,     0,    90,     0,     0,     0,   111,   112,     0,
-       0,     0,     0,     0,   131,     0,   114,    94,    95,     1,
-      96,    97,     0,    98,    99,   100,   101,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
-      17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     104,     0,    34,    35,     0,     0,     0,   105,    39,   106,
-      41,   107,    43,   108,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   109,    57,    58,
-     110,    60,    61,    89,     0,     0,     0,     0,     0,     0,
-      90,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       1,   131,     0,   114,     2,     3,     4,     5,     6,     0,
-       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+     128,    58,    59,   129,    61,    62,   104,   105,   106,   107,
+       0,     0,     0,   108,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     1,   150,     0,   133,     2,     3,     4,
+       5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,   462,    67,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,   463,     0,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   369,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,     0,   443,    66,     0,     0,     0,     0,     0,
+       1,     0,     0,   369,     2,     3,     4,     5,     6,     0,
+       0,     7,     8,     9,    10,    11,    12,    13,     0,    15,
       16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
-       1,    65,     0,     0,     2,     3,     4,     5,     6,   443,
-      66,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,   468,
+       1,    66,     0,   472,     2,     3,     4,     5,     6,     0,
+     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
       16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
       25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,   444,     0,
-       1,    65,     0,     0,     2,     3,     4,     5,     6,     0,
-     350,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
+       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
+     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
       16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
       25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,     0,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
-     424,    65,     0,     0,     0,     0,     0,     1,     0,     0,
-     350,     2,     3,     4,     5,     6,     0,     0,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,   449,     1,    65,     0,
-     453,     2,     3,     4,     5,     6,     0,   350,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,   477,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,   484,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,   491,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,   492,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   329,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   350,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   445,     7,     8,
-       9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
-      19,    20,    21,     0,    22,    23,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    62,    63,     0,     0,     0,     0,     1,    65,     0,
-       0,     2,     3,     4,     5,     6,     0,   465,     7,     8,
-       9,    10,     0,    12,    13,     0,    15,    16,    17,    18,
-      19,    87,    21,     0,    22,     0,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    89,    63,     0,     0,     1,     0,     0,    65,     2,
-       3,     4,     5,     6,     0,     0,     0,     8,     0,     0,
-       0,    12,    13,     0,    15,    86,    17,    18,     0,    87,
-      88,     0,    22,     0,    24,    25,     0,     0,     0,     0,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   139,    57,    58,    59,    60,    61,    89,
-       0,     0,     0,     1,     0,     0,    90,     2,     3,     4,
-       5,     6,     0,     0,     0,     8,     0,     0,     0,    12,
-      13,     0,    15,    86,    17,    18,     0,    87,    88,     0,
-      22,     0,    24,    25,     0,     0,     0,     0,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,     0,    57,    58,    59,    60,    61,    89,     0,     0,
-       0,     1,     0,     0,    90,     2,     3,     4,     5,     6,
-       0,     0,     0,     8,     0,     0,     0,    12,    13,     0,
-      15,    86,    17,    18,     0,    87,    88,     0,    22,     0,
-      24,    25,     0,     0,     0,     0,     0,     0,     0,     0,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,   496,     0,
+       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
+     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,   503,     0,
+       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
+     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,   510,
+       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
+     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,   511,
+       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
+     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
+       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
+     348,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
+       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
+     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
+       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
+     464,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
+       0,    66,     0,     0,     0,     0,     0,     0,     0,     0,
+     484,     1,   406,   407,    87,     2,     3,     4,     5,     6,
+      88,     0,    89,     8,    90,    91,    92,    12,    13,    93,
+      15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
+      24,    25,   100,   101,   102,   103,     0,     0,     0,     0,
       30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,   173,   174,   175,
-     176,   177,     0,    51,   178,    53,    54,    55,   179,     0,
-      57,    58,    59,    60,    61,    89,     0,     0,     0,     1,
-       0,     0,    90,     2,     3,     4,     5,     6,     0,     0,
-       0,     8,     0,     0,     0,    12,    13,     0,    15,    86,
-      17,    18,     0,    87,    88,     0,    22,     0,    24,    25,
-       0,     0,     0,     0,     0,     0,     0,     0,    30,    31,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,   104,   105,   106,   107,     0,
+       1,     0,   108,    87,     2,     3,     4,     5,     6,    88,
+       0,    89,     8,    90,    91,    92,    12,    13,    93,    15,
+      94,    17,    18,    95,    96,    97,    98,    22,    99,    24,
+      25,   100,   101,   102,   103,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,   104,   105,   106,   107,     0,     1,
+       0,   108,    87,     2,     3,     4,     5,     6,    88,     0,
+      89,     8,    90,    91,    92,    12,    13,    93,    15,    94,
+      17,    18,    95,    96,    97,    98,    22,    99,    24,    25,
+     100,   101,   102,   103,     0,     0,     0,     0,    30,    31,
       32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,   235,     0,    57,    58,
-      59,    60,    61,    89,     0,     0,     0,     1,     0,     0,
-      90,    98,    99,     4,     5,     6,     0,     0,     0,     8,
-       0,     0,     0,    12,    13,     0,    15,    86,    17,    18,
-       0,    87,    88,     0,    22,     0,    24,    25,     0,     0,
-       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,   105,    39,   106,    41,   107,
-      43,   108,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,     0,    57,    58,    59,    60,
-      61,    89,   311,   312,   313,   314,   315,   316,    90,   317,
-       0,     0,   318,   319,   320,   199,   200,   201,   202,   222,
-     223,     0,   224,     0,     0,   206,   225,   226,   199,   200,
-     201,   202,   222,   223,     0,   224,     0,     0,   206,   225,
-     226,     0,     0,     0,     0,     0,     0,     0,     0,   321,
-     322,   323,   324,   325,   326,   327,     0,     0,   328,     0,
-       0,     0,   209,   210,   211,   212,   213,   214,   215,     0,
-     338,     0,     0,     0,     0,   209,   210,   211,   212,   213,
-     214,   215,     0,   420,   199,   200,   201,   202,   222,   223,
-       0,   224,     0,     0,   206,   225,   226,   199,   200,   201,
-     202,   222,   223,     0,   224,     0,     0,   206,   225,   226,
-     199,   200,   201,   202,   222,   223,     0,   224,     0,     0,
-     206,   225,   226,     0,     0,     0,     0,     0,     0,     0,
-       0,   209,   210,   211,   212,   213,   214,   215,     0,   423,
-       0,     0,     0,     0,   209,   210,   211,   212,   213,   214,
-     215,     0,   479,     0,     0,     0,     0,   209,   210,   211,
-     212,   213,   214,   215,     0,   486,   199,   200,   201,   202,
-     222,   223,     0,   224,     0,     0,   206,   225,   226,   199,
-     200,   201,   202,   222,   223,     0,   224,     0,     0,   206,
-     225,   226,     0,     0,     0,   311,   312,   313,   314,   315,
-     316,     0,   317,   279,   280,   318,   319,   320,     0,     0,
-       0,     0,     0,   209,   210,   211,   212,   213,   214,   215,
-       0,     0,     0,     0,     0,     0,   209,   210,   211,   212,
-     213,   214,   215,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   321,   322,   323,   324,   325,   326,   327,   199,
-     200,   201,   202,     0,     0,     0,   224,     0,     0,   206,
-     225,   226,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    51,    52,    53,    54,    55,    56,   158,    58,    59,
+      60,    61,    62,   104,   105,   106,   107,     0,     1,     0,
+     108,    87,     2,     3,     4,     5,     6,    88,     0,    89,
+       8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
+      18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
+     101,   102,   103,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,   192,   193,   194,   195,   196,     0,
+      51,   197,    53,    54,    55,   198,    57,    58,    59,    60,
+      61,    62,   104,   105,   106,   107,     0,     1,     0,   108,
+      87,     2,     3,     4,     5,     6,    88,     0,    89,     8,
+      90,    91,    92,    12,    13,    93,    15,    94,    17,    18,
+      95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
+     102,   103,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,   254,    57,    58,    59,    60,    61,
+      62,   104,   105,   106,   107,     0,     1,     0,   108,    87,
+     117,   118,     4,     5,     6,    88,     0,    89,     8,    90,
+      91,    92,    12,    13,    93,    15,    94,    17,    18,    95,
+      96,    97,    98,    22,    99,    24,    25,   100,   101,   102,
+     103,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,   124,    39,   125,    41,   126,    43,
+     127,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+     104,   105,   106,   107,     1,     0,     0,   108,     2,     3,
+       4,     5,     6,     0,     0,     7,     8,     9,    10,     0,
+      12,    13,     0,    15,    16,    17,    18,    19,    96,    21,
+       0,    22,     0,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,   104,    64,
+       0,     0,     0,     0,     0,    66,   218,   219,   220,   221,
+     241,   242,     0,   243,     0,     0,   225,   244,   245,   218,
+     219,   220,   221,   241,   242,     0,   243,     0,     0,   225,
+     244,   245,   218,   219,   220,   221,   241,   242,     0,   243,
+       0,     0,   225,   244,   245,     0,     0,     0,     0,     0,
+       0,     0,     0,   228,   229,   230,   231,   232,   233,   234,
+       0,   357,     0,     0,     0,     0,   228,   229,   230,   231,
+     232,   233,   234,     0,   439,     0,     0,     0,     0,   228,
+     229,   230,   231,   232,   233,   234,     0,   442,   218,   219,
+     220,   221,   241,   242,     0,   243,     0,     0,   225,   244,
+     245,   218,   219,   220,   221,   241,   242,     0,   243,     0,
+       0,   225,   244,   245,     0,     0,     0,     0,     0,     0,
+     218,   219,   220,   221,   241,   242,     0,   243,     0,     0,
+     225,   244,   245,     0,     0,   228,   229,   230,   231,   232,
+     233,   234,     0,   498,     0,     0,     0,     0,   228,   229,
+     230,   231,   232,   233,   234,     0,   505,   298,   299,     0,
+       0,     0,     0,     0,     0,     0,     0,   228,   229,   230,
+     231,   232,   233,   234,   218,   219,   220,   221,   241,   242,
+       0,   243,     0,     0,   225,   244,   245,   330,   331,   332,
+     333,   334,   335,     0,   336,     0,     0,   337,   338,   339,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   209,   210,   211,   212,
-     213,   214,   215
+       0,   228,   229,   230,   231,   232,   233,   234,     0,     0,
+       0,     0,     0,     0,   340,   341,   342,   343,   344,   345,
+     346
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    21,    65,     0,    29,   216,   329,    31,   331,     9,
-      28,    84,   129,    49,    14,   338,    34,    34,    98,   136,
-     100,    21,   352,    23,    97,    19,    26,    44,    69,    29,
-     147,     0,   355,    27,    28,    76,    69,    69,    63,    69,
-      23,   158,    34,    76,    76,    28,    76,    49,    97,   166,
-      42,    43,    44,    45,    46,    47,    31,    49,    94,    95,
-      52,    53,    54,    63,    64,    65,    28,    98,    68,    28,
-     281,    68,    34,    97,    69,    34,    98,    10,    11,    73,
-     102,    76,   412,    99,   414,    97,    19,   103,    99,   419,
-      92,    93,    94,    95,    27,    28,   426,    89,    90,    91,
-      92,    93,    94,    95,    28,    97,   129,    97,   133,   109,
-      34,    36,    37,   136,   114,    97,    98,   328,    97,    55,
-      97,    57,   445,    59,   147,    61,   231,   232,   153,    62,
-     230,   231,   232,   133,    97,   158,    33,   137,   468,   139,
-      73,    97,   465,   166,    97,    97,   476,    97,    97,   472,
-     480,    97,    97,   153,    28,    28,   479,   487,    98,   103,
-     490,   161,    15,   486,   103,   102,    26,   102,    97,   102,
-     103,    49,    44,    28,    52,    97,    26,   110,    16,   100,
-     113,    34,    97,   246,    97,    97,    97,    28,    28,    42,
-      43,    44,    45,    46,    47,    28,    49,    28,   131,    52,
-      53,    54,   103,    97,    28,   138,    71,    97,    34,    97,
-     230,   231,   232,    91,    92,    93,    94,    95,    97,    71,
-      97,   221,    97,    68,   221,   422,    97,    97,    28,   439,
-     230,   231,   232,   278,    21,   287,    89,    90,    91,    92,
-      93,    94,    95,   166,   195,    -1,   246,   247,    -1,    42,
+       0,    21,    29,    66,     9,   235,   348,     0,   350,    14,
+      49,    28,    31,    52,    84,   357,    21,    34,    23,    49,
+      19,    26,    99,    34,    29,    31,   103,    97,    27,    28,
+     371,    69,   374,    44,    69,    69,    49,    64,    76,    28,
+      69,    76,    76,    28,    69,    34,    98,    76,   100,    34,
+     148,    76,    91,    92,    93,    94,    95,   155,     0,    64,
+      65,    28,    92,    93,    94,    95,    66,    34,   166,    69,
+     300,    10,    11,    36,    37,    74,    69,   148,    97,   177,
+      19,    94,    95,    97,   155,    97,    23,   185,    27,    28,
+     431,    28,   433,    33,    98,   166,    98,   438,   102,   387,
+     388,   389,   390,    99,   445,   393,   177,    55,    28,    57,
+      97,    59,    28,    61,   185,    97,    98,   347,   249,   250,
+     251,    97,   464,   128,    63,   152,   250,   251,   133,    97,
+     103,    97,    97,    97,   103,    74,    97,    97,    97,    97,
+      97,    26,   484,    98,    97,   172,   487,   152,   102,   491,
+     102,   156,    44,   158,   495,    28,   498,    26,   499,    97,
+      16,    28,    97,   505,   100,   506,    97,   172,   509,    97,
+      97,    28,    97,    28,    28,   180,    15,   103,    28,    97,
+      71,    34,   121,   122,    97,    97,    97,    71,    97,    97,
+     129,    97,    69,   132,   441,    34,    28,   297,   458,    21,
+     306,   185,   265,    42,    43,    44,    45,    46,    47,    -1,
+      49,   150,    -1,    52,    53,    54,   214,    -1,   157,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,   249,
+     250,   251,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
+     240,    -1,    -1,    -1,   249,   250,   251,   240,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   265,   266,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,    -1,    -1,    -1,    -1,
+      -1,   306,   241,   242,   243,   244,   245,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   257,   258,
+      -1,    -1,   261,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,    -1,
+     350,    -1,    -1,    -1,    -1,    -1,   361,   357,    -1,    -1,
+      -1,    -1,    -1,   302,   303,    -1,   305,    -1,    -1,    -1,
+     309,   371,   311,    -1,   374,   117,   118,   119,   120,    -1,
+      -1,   123,   124,   125,   126,   127,    -1,    -1,   130,   131,
+      -1,   330,   331,   332,   333,   334,   335,   336,   337,   338,
+     339,   340,   341,   342,   343,   344,   345,   346,    -1,    -1,
+      -1,    -1,    -1,   440,    -1,    -1,    -1,   356,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   431,   432,   433,    -1,   440,   375,    -1,   438,   432,
+      -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   462,    34,   464,    -1,    -1,   472,    -1,   462,
+      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,   484,    -1,    -1,   487,    -1,    -1,
+      -1,   491,    -1,    -1,    -1,   495,   501,    -1,   498,   499,
+      -1,    -1,    -1,    -1,    -1,   505,   506,    -1,    -1,   509,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    97,    -1,   467,    -1,
+      -1,   273,   274,   275,   276,   277,   278,   279,   280,    -1,
+      -1,    42,    43,    44,    45,    46,    47,    -1,    49,   488,
+      33,    52,    53,    54,   296,   297,   298,   299,    -1,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    -1,    -1,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,    -1,    -1,    -1,    -1,   287,    -1,   222,
-     223,   224,   225,   226,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,   238,   239,   100,    -1,   242,
-     368,   369,   370,   371,    -1,    -1,   374,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   329,
-      -1,   331,    -1,    -1,    -1,    -1,    -1,    -1,   338,    -1,
-      -1,    -1,   342,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     283,   284,   352,   286,    -1,   355,    -1,   290,    -1,   292,
-      98,    99,   100,   101,    -1,    -1,   104,   105,   106,   107,
-     108,    -1,    -1,   111,   112,    -1,    -1,    -1,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,    -1,   421,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   337,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   412,   413,   414,    -1,   413,    -1,    -1,   419,
-      -1,   421,    -1,   356,    -1,    -1,   426,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    -1,
-      -1,    -1,    -1,   443,    -1,   445,   443,    42,    43,    44,
-      45,    46,    47,   453,    49,    -1,    -1,    52,    53,    54,
-      -1,    -1,    -1,    -1,    -1,   465,    -1,    -1,   468,    -1,
-      -1,    -1,   472,    -1,    -1,    -1,   476,    -1,    -1,   479,
-     480,    -1,   482,    -1,    -1,    -1,   486,   487,    -1,    -1,
-     490,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,   448,   254,   255,   256,   257,
-     258,   259,   260,   261,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   469,    -1,    -1,   277,
-     278,   279,   280,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    89,    90,
       91,    92,    93,    94,    95,    -1,    -1,    98,    -1,   100,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,   358,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
+     100,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,   386,    -1,    -1,    -1,    -1,   391,
+     392,    -1,   394,   395,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    98,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   447,   448,   449,   450,    -1,
+     452,   453,   454,   455,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   339,    -1,     7,     8,     9,    -1,    11,    12,    13,
-      14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
-      24,    -1,    26,    27,    28,    29,    -1,    31,    32,   367,
-      34,    -1,    36,    37,   372,   373,    -1,   375,   376,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
-     428,   429,   430,   431,    -1,   433,   434,   435,   436,    -1,
-       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
-      -1,    26,    27,    28,    29,   463,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    -1,    -1,    -1,   475,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    99,    -1,   101,    -1,   103,     5,
-       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
-      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
-      36,    37,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
+     482,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   494,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
+      -1,   103,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    98,    99,    -1,   101,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
       -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
       -1,    -1,    98,    99,    -1,   101,     5,     6,     7,     8,
-       9,    -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,
-      19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
-      29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
-      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,    48,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
       89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
-      99,    -1,   101,     5,     6,     7,     8,     9,    -1,    11,
-      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
-      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,
+      99,    -1,   101,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
+      82,    83,    84,    -1,    -1,    -1,    88,    89,    90,    91,
       92,    93,    94,    95,    -1,    -1,    98,    99,    -1,   101,
-       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
-      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    -1,    -1,    -1,    42,    43,    44,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    98,    99,    -1,   101,     5,     6,     7,
-       8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
-      -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
-      28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
-      -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      95,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    -1,
-      11,    12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,
-      -1,    -1,    23,    24,    -1,    26,    27,    28,    29,    -1,
-      31,    32,    -1,    34,    -1,    36,    37,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
+      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
+      -1,    99,   100,   101,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
       51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,   100,
-     101,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
-      14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
-      24,    -1,    26,    27,    28,    29,    -1,    31,    32,    -1,
-      34,    -1,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,
+      81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
+     101,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
       -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
       -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
-       7,     8,     9,    -1,    11,    12,    13,    14,    15,    -1,
-      -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,
-      27,    28,    29,    -1,    31,    32,    -1,    34,    -1,    36,
-      37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
       -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
       -1,    -1,    99,    -1,   101,     5,     6,     7,     8,     9,
-      -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,    19,
-      -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,    29,
-      -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
+      80,    81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,
       -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,
-      -1,   101,     5,     6,     7,     8,     9,    -1,    11,    12,
-      13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,
-      23,    24,    -1,    26,    27,    28,    29,    -1,    31,    32,
-      -1,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,    -1,
+      -1,   101,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
       -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    -1,
-      -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,
       93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,
-       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
-      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
-      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
       46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
       -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,
       -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,     8,
-       9,    -1,    11,    12,    13,    14,    15,    -1,    -1,    -1,
-      19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,
-      29,    -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,
       49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
       -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,
-      99,    -1,   101,     5,     6,     7,     8,     9,    -1,    11,
-      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
-      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,
+      99,    -1,   101,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+      82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,
       92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
-       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,
-      -1,    26,    27,    28,    29,    -1,    31,    32,    -1,    34,
-      -1,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,    -1,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
+      -1,    -1,    -1,    48,    -1,    50,    51,    -1,    -1,    -1,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
-       8,     9,    -1,    11,    12,    13,    14,    15,    -1,    -1,
-      -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
-      28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       7,    99,    -1,   101,    11,    12,    13,    14,    15,    -1,
-      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     7,    99,    -1,   101,    11,    12,    13,
+      14,    15,    -1,    -1,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    16,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
+       7,    -1,    -1,    97,    11,    12,    13,    14,    15,    -1,
+      -1,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
       27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    86,
+       7,    88,    -1,    10,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
-      77,    78,    79,    80,    81,    82,    83,    -1,    -1,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    16,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
       97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
       27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
       37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
        7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
       97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
@@ -1599,166 +1653,137 @@ static const yytype_int16 yycheck[] =
       37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    -1,    76,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    86,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    86,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-      87,    88,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
-      97,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
-      10,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    86,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,
-      -1,    11,    12,    13,    14,    15,    -1,    97,    18,    19,
-      20,    21,    -1,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,     7,    -1,    -1,    88,    11,
-      12,    13,    14,    15,    -1,    -1,    -1,    19,    -1,    -1,
-      -1,    23,    24,    -1,    26,    27,    28,    29,    -1,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,     7,    -1,    -1,    88,    11,    12,    13,
-      14,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,
-      24,    -1,    26,    27,    28,    29,    -1,    31,    32,    -1,
-      34,    -1,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      -1,     7,    -1,    -1,    88,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,
-      26,    27,    28,    29,    -1,    31,    32,    -1,    34,    -1,
-      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+      -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      97,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
       46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,     7,
-      -1,    -1,    88,    11,    12,    13,    14,    15,    -1,    -1,
-      -1,    19,    -1,    -1,    -1,    23,    24,    -1,    26,    27,
-      28,    29,    -1,    31,    32,    -1,    34,    -1,    36,    37,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
+       7,    -1,    88,    10,    11,    12,    13,    14,    15,    16,
+      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,     7,
+      -1,    88,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
       48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      -1,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    -1,     7,    -1,    -1,
-      88,    11,    12,    13,    14,    15,    -1,    -1,    -1,    19,
-      -1,    -1,    -1,    23,    24,    -1,    26,    27,    28,    29,
-      -1,    31,    32,    -1,    34,    -1,    36,    37,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    -1,     7,    -1,
+      88,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,     7,    -1,    88,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    42,    43,    44,    45,    46,    47,    88,    49,
-      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    98,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    97,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    97,    42,    43,    44,    45,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    -1,     7,    -1,    88,    10,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,     7,    -1,    -1,    88,    11,    12,
+      13,    14,    15,    -1,    -1,    18,    19,    20,    21,    -1,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    -1,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,    -1,    88,    42,    43,    44,    45,
       46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    -1,    42,    43,    44,    45,    46,
-      47,    -1,    49,    79,    80,    52,    53,    54,    -1,    -1,
+      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    42,
-      43,    44,    45,    -1,    -1,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    97,    79,    80,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1770,51 +1795,53 @@ static const yytype_uint8 yystos[] =
       31,    32,    34,    35,    36,    37,    38,    39,    40,    41,
       46,    47,    48,    49,    50,    51,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    69,    70,    71,    72,    73,    74,    76,    77,    78,
-      79,    80,    81,    82,    83,    88,    97,   105,   106,   107,
-     108,   109,   114,   116,   119,   120,   121,   124,   126,   127,
-     128,   129,   130,   131,    31,    97,    27,    31,    32,    81,
-      88,   116,   117,   118,     5,     6,     8,     9,    11,    12,
-      13,    14,    19,    26,    48,    55,    57,    59,    61,    75,
-      78,    92,    93,    99,   101,   116,   122,   123,   135,   136,
-     139,   140,   141,   144,   145,   146,   149,   152,   153,   154,
-     156,    99,   154,   116,    31,   122,   154,    36,    37,    75,
-     116,   136,   138,   144,   116,   116,   122,   154,   122,   123,
-     117,   154,   117,   116,   120,     0,   107,   122,   154,    97,
-      97,    98,   153,   153,   153,   153,   154,   154,   153,   153,
-     153,   153,   153,    63,    64,    65,    66,    67,    70,    74,
-     116,   154,   153,   153,   100,   154,     8,     9,   103,   116,
-     150,   151,   154,   157,   158,    99,    97,    97,    28,    42,
-      43,    44,    45,    46,    47,    49,    52,    53,    54,    89,
-      90,    91,    92,    93,    94,    95,    98,   135,   155,   156,
-     154,    33,    46,    47,    49,    53,    54,   117,    97,    97,
-      24,    50,    51,   116,   154,    74,    34,    44,   125,    33,
-      97,    97,    36,    97,    97,    97,    34,    97,    97,   117,
-      97,   116,    28,   155,    28,    34,    28,    34,    28,    34,
-      28,    34,    69,    76,    69,    76,    69,    76,    69,    76,
-      69,    76,    55,    57,    59,    61,   147,    28,    28,    79,
-      80,    98,   100,   103,   103,   102,   103,    98,   102,   102,
-      98,   157,    26,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     158,    42,    43,    44,    45,    46,    47,    49,    52,    53,
-      54,    89,    90,    91,    92,    93,    94,    95,    98,    97,
-     119,    97,   136,   137,   139,   137,   137,    44,    97,    28,
-     154,   154,    84,    97,   110,   111,   112,   113,   154,   120,
-      97,   119,   132,   133,   134,    97,    26,   153,   153,   153,
-     153,   153,   153,   153,   153,    23,    28,   148,    56,    58,
-      60,    62,    71,    72,    73,    77,    78,   142,   143,   153,
-     142,   153,   153,   158,   154,   154,   154,     8,     9,   116,
-     151,   154,   100,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   158,   132,    16,   132,    97,    97,    97,   154,   132,
-      97,   116,    97,    97,    87,   134,   132,   154,    28,    28,
-      28,    28,   153,   148,   148,   148,   148,   153,   153,   148,
-     153,   153,   100,    16,    85,    97,   119,    15,    34,    86,
-     117,   113,    97,    10,   153,   153,   153,   153,   153,   153,
-     153,   153,    28,    71,   143,    97,   119,    97,   132,    34,
-     154,    97,    97,   115,   116,    71,   132,    85,   154,    97,
-     132,    97,    98,   153,    85,    97,    97,   132,   116,    97,
-     132,    86,    86,    97,    97
+      67,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    88,    97,   105,   106,
+     107,   108,   109,   114,   116,   120,   121,   122,   125,   127,
+     128,   129,   130,   131,   132,    31,    97,    10,    16,    18,
+      20,    21,    22,    25,    27,    30,    31,    32,    33,    35,
+      38,    39,    40,    41,    81,    82,    83,    84,    88,   116,
+     117,   118,   119,     5,     6,     8,     9,    11,    12,    13,
+      14,    19,    26,    48,    55,    57,    59,    61,    75,    78,
+      92,    93,    99,   101,   117,   123,   124,   136,   137,   140,
+     141,   142,   145,   146,   147,   150,   153,   154,   155,   157,
+      99,   155,   117,    31,   123,   155,    36,    37,    75,   117,
+     137,   139,   145,   117,   117,   123,   155,   123,   124,   118,
+     155,   118,   117,   121,     0,   107,   123,   155,    97,    97,
+      98,   154,   154,   154,   154,   155,   155,   154,   154,   154,
+     154,   154,    63,    64,    65,    66,    67,    70,    74,   117,
+     155,   154,   154,   100,   155,     8,     9,   103,   117,   151,
+     152,   155,   158,   159,    99,    97,    97,    28,    42,    43,
+      44,    45,    46,    47,    49,    52,    53,    54,    89,    90,
+      91,    92,    93,    94,    95,    98,   136,   156,   157,   155,
+      33,    46,    47,    49,    53,    54,   118,    97,    97,    24,
+      50,    51,   117,   155,    74,    34,    44,   126,    33,    97,
+      97,    36,    97,    97,    97,    34,    97,    97,   118,    97,
+     117,    28,   156,    28,    34,    28,    34,    28,    34,    28,
+      34,    69,    76,    69,    76,    69,    76,    69,    76,    69,
+      76,    55,    57,    59,    61,   148,    28,    28,    79,    80,
+      98,   100,   103,   103,   102,   103,    98,   102,   102,    98,
+     158,    26,   155,   155,   155,   155,   155,   155,   155,   155,
+     155,   155,   155,   155,   155,   155,   155,   155,   155,   159,
+      42,    43,    44,    45,    46,    47,    49,    52,    53,    54,
+      89,    90,    91,    92,    93,    94,    95,    98,    97,   120,
+      97,   137,   138,   140,   138,   138,    44,    97,    28,   155,
+     155,    84,    97,   110,   111,   112,   113,   155,   121,    97,
+     120,   133,   134,   135,    97,    26,   154,   154,   154,   154,
+     154,   154,   154,   154,    23,    28,   149,    56,    58,    60,
+      62,    71,    72,    73,    77,    78,   143,   144,   154,   143,
+     154,   154,   159,   155,   155,   155,     8,     9,   117,   152,
+     155,   100,   155,   155,   155,   155,   155,   155,   155,   155,
+     155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
+     159,   133,    16,   133,    97,    97,    97,   155,   133,    97,
+     117,    97,    97,    87,   135,   133,   155,    28,    28,    28,
+      28,   154,   149,   149,   149,   149,   154,   154,   149,   154,
+     154,   100,    16,    85,    97,   120,    15,    34,    86,   118,
+     113,    97,    10,   154,   154,   154,   154,   154,   154,   154,
+     154,    28,    71,   144,    97,   120,    97,   133,    34,   155,
+      97,    97,   115,   117,    71,   133,    85,   155,    97,   133,
+      97,    98,   154,    85,    97,    97,   133,   117,    97,   133,
+      86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1827,25 +1854,27 @@ static const yytype_uint8 yyr1[] =
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,   116,   116,   116,   117,   117,   118,   118,
-     119,   119,   119,   119,   119,   119,   120,   120,   120,   121,
-     121,   121,   121,   121,   121,   121,   121,   121,   121,   121,
-     121,   122,   122,   122,   122,   122,   122,   122,   123,   123,
-     123,   123,   123,   124,   124,   124,   124,   125,   125,   126,
-     126,   126,   127,   127,   128,   128,   128,   128,   129,   129,
-     129,   130,   130,   131,   132,   132,   133,   133,   134,   134,
-     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   136,   137,   137,   138,   138,   139,   139,   139,
-     139,   139,   139,   139,   139,   139,   139,   140,   140,   141,
-     141,   141,   141,   142,   142,   142,   142,   142,   143,   144,
-     144,   144,   145,   145,   145,   145,   145,   145,   145,   145,
-     145,   145,   146,   146,   146,   146,   146,   147,   147,   147,
-     147,   148,   148,   149,   149,   149,   150,   150,   151,   151,
-     151,   152,   152,   153,   153,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   155,   155,   155,   155,   155,   155,
+     116,   116,   116,   116,   116,   116,   116,   117,   117,   117,
+     117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
+     117,   117,   117,   117,   117,   118,   118,   119,   119,   120,
+     120,   120,   120,   120,   120,   121,   121,   121,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     123,   123,   123,   123,   123,   123,   123,   124,   124,   124,
+     124,   124,   125,   125,   125,   125,   126,   126,   127,   127,
+     127,   128,   128,   129,   129,   129,   129,   130,   130,   130,
+     131,   131,   132,   133,   133,   134,   134,   135,   135,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   137,   138,   138,   139,   139,   140,   140,   140,   140,
+     140,   140,   140,   140,   140,   140,   141,   141,   142,   142,
+     142,   142,   143,   143,   143,   143,   143,   144,   145,   145,
+     145,   146,   146,   146,   146,   146,   146,   146,   146,   146,
+     146,   147,   147,   147,   147,   147,   148,   148,   148,   148,
+     149,   149,   150,   150,   150,   151,   151,   152,   152,   152,
+     153,   153,   154,   154,   155,   155,   155,   155,   155,   155,
      155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-     155,   155,   155,   156,   156,   157,   157,   158,   158
+     155,   155,   155,   156,   156,   156,   156,   156,   156,   156,
+     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
+     156,   156,   157,   157,   158,   158,   159,   159
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1858,25 +1887,27 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     1,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       3,     3,     3,     3,     3,     3,     5,     3,     3,     2,
-       2,     0,     1,     3,     2,     4,     2,     5,     2,     2,
-       5,     4,     3,     5,     5,     5,     5,     1,     1,     3,
-       3,     3,     4,     7,     6,     9,     7,    10,     7,    11,
-      12,     4,     6,     4,     0,     1,     1,     2,     1,     1,
-       1,     1,     1,     1,     2,     4,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     2,     4,
-       6,     4,     6,     4,     6,     4,     6,     2,     2,     1,
-       1,     1,     5,     1,     1,     5,     2,     2,     2,     2,
-       4,     4,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     6,     6,     6,     6,     6,     1,     1,     1,
-       1,     1,     1,     3,     3,     3,     1,     3,     3,     3,
-       3,     2,     2,     1,     1,     1,     1,     3,     3,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     0,     1,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     3,
+       3,     3,     3,     3,     3,     5,     3,     3,     2,     2,
+       0,     1,     3,     2,     4,     2,     5,     2,     2,     5,
+       4,     3,     5,     5,     5,     5,     1,     1,     3,     3,
+       3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
+       4,     6,     4,     0,     1,     1,     2,     1,     1,     1,
+       1,     1,     1,     2,     4,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     4,     6,
+       4,     6,     4,     6,     4,     6,     2,     2,     1,     1,
+       1,     5,     1,     1,     5,     2,     2,     2,     2,     4,
+       4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     6,     6,     6,     6,     6,     1,     1,     1,     1,
+       1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
+       2,     2,     1,     1,     1,     1,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     1,     1,     3,     3,     3,     3,
+       3,     3,     3,     1,     1,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -2150,31 +2181,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2154 "engines/director/lingo/lingo-gr.cpp"
+#line 2185 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2160 "engines/director/lingo/lingo-gr.cpp"
+#line 2191 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2166 "engines/director/lingo/lingo-gr.cpp"
+#line 2197 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2172 "engines/director/lingo/lingo-gr.cpp"
+#line 2203 "engines/director/lingo/lingo-gr.cpp"
+        break;
+
+    case YYSYMBOL_CMDID: /* CMDID  */
+#line 189 "engines/director/lingo/lingo-gr.y"
+            { delete ((*yyvaluep).s); }
+#line 2209 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2178 "engines/director/lingo/lingo-gr.cpp"
+#line 2215 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2442,7 +2479,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2446 "engines/director/lingo/lingo-gr.cpp"
+#line 2483 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2453,7 +2490,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2457 "engines/director/lingo/lingo-gr.cpp"
+#line 2494 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2463,37 +2500,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2467 "engines/director/lingo/lingo-gr.cpp"
+#line 2504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2473 "engines/director/lingo/lingo-gr.cpp"
+#line 2510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2479 "engines/director/lingo/lingo-gr.cpp"
+#line 2516 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2485 "engines/director/lingo/lingo-gr.cpp"
+#line 2522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2491 "engines/director/lingo/lingo-gr.cpp"
+#line 2528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2497 "engines/director/lingo/lingo-gr.cpp"
+#line 2534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2504,7 +2541,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2508 "engines/director/lingo/lingo-gr.cpp"
+#line 2545 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2514,13 +2551,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2518 "engines/director/lingo/lingo-gr.cpp"
+#line 2555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2524 "engines/director/lingo/lingo-gr.cpp"
+#line 2561 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2529,1330 +2566,1438 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2533 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2540 "engines/director/lingo/lingo-gr.cpp"
+#line 2577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2546 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2552 "engines/director/lingo/lingo-gr.cpp"
+#line 2589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 25: /* ID: tABBREVIATED  */
-#line 290 "engines/director/lingo/lingo-gr.y"
+  case 25: /* CMDID: tABBREVIATED  */
+#line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2558 "engines/director/lingo/lingo-gr.cpp"
+#line 2595 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 26: /* ID: tABBREV  */
-#line 291 "engines/director/lingo/lingo-gr.y"
+  case 26: /* CMDID: tABBREV  */
+#line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2564 "engines/director/lingo/lingo-gr.cpp"
+#line 2601 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 27: /* ID: tABBR  */
-#line 292 "engines/director/lingo/lingo-gr.y"
+  case 27: /* CMDID: tABBR  */
+#line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2570 "engines/director/lingo/lingo-gr.cpp"
+#line 2607 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 28: /* ID: tAFTER  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+  case 28: /* CMDID: tAFTER  */
+#line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2576 "engines/director/lingo/lingo-gr.cpp"
+#line 2613 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 29: /* ID: tAND  */
-#line 294 "engines/director/lingo/lingo-gr.y"
+  case 29: /* CMDID: tAND  */
+#line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2582 "engines/director/lingo/lingo-gr.cpp"
+#line 2619 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 30: /* ID: tBEFORE  */
-#line 295 "engines/director/lingo/lingo-gr.y"
+  case 30: /* CMDID: tBEFORE  */
+#line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2588 "engines/director/lingo/lingo-gr.cpp"
+#line 2625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 31: /* ID: tCAST  */
-#line 296 "engines/director/lingo/lingo-gr.y"
+  case 31: /* CMDID: tCAST  */
+#line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2594 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 32: /* ID: tCHAR  */
-#line 297 "engines/director/lingo/lingo-gr.y"
+  case 32: /* CMDID: tCHAR  */
+#line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2600 "engines/director/lingo/lingo-gr.cpp"
+#line 2637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 33: /* ID: tCHARS  */
-#line 298 "engines/director/lingo/lingo-gr.y"
+  case 33: /* CMDID: tCHARS  */
+#line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2606 "engines/director/lingo/lingo-gr.cpp"
+#line 2643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 34: /* ID: tCONTAINS  */
-#line 299 "engines/director/lingo/lingo-gr.y"
+  case 34: /* CMDID: tCONTAINS  */
+#line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2612 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 35: /* ID: tDATE  */
-#line 300 "engines/director/lingo/lingo-gr.y"
+  case 35: /* CMDID: tDATE  */
+#line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2618 "engines/director/lingo/lingo-gr.cpp"
+#line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 36: /* ID: tDOWN  */
-#line 301 "engines/director/lingo/lingo-gr.y"
+  case 36: /* CMDID: tDOWN  */
+#line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2624 "engines/director/lingo/lingo-gr.cpp"
+#line 2661 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 37: /* ID: tFIELD  */
-#line 306 "engines/director/lingo/lingo-gr.y"
+  case 37: /* CMDID: tFIELD  */
+#line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2630 "engines/director/lingo/lingo-gr.cpp"
+#line 2667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 38: /* ID: tFRAME  */
-#line 307 "engines/director/lingo/lingo-gr.y"
+  case 38: /* CMDID: tFRAME  */
+#line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2636 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 39: /* ID: tIN  */
-#line 311 "engines/director/lingo/lingo-gr.y"
+  case 39: /* CMDID: tIN  */
+#line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2642 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 40: /* ID: tINTERSECTS  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+  case 40: /* CMDID: tINTERSECTS  */
+#line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2648 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 41: /* ID: tINTO  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+  case 41: /* CMDID: tINTO  */
+#line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2654 "engines/director/lingo/lingo-gr.cpp"
+#line 2691 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 42: /* ID: tITEM  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+  case 42: /* CMDID: tITEM  */
+#line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2660 "engines/director/lingo/lingo-gr.cpp"
+#line 2697 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 43: /* ID: tITEMS  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+  case 43: /* CMDID: tITEMS  */
+#line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2666 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 44: /* ID: tLAST  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+  case 44: /* CMDID: tLAST  */
+#line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2672 "engines/director/lingo/lingo-gr.cpp"
+#line 2709 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 45: /* ID: tLINE  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+  case 45: /* CMDID: tLINE  */
+#line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2678 "engines/director/lingo/lingo-gr.cpp"
+#line 2715 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 46: /* ID: tLINES  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+  case 46: /* CMDID: tLINES  */
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2684 "engines/director/lingo/lingo-gr.cpp"
+#line 2721 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 47: /* ID: tLONG  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+  case 47: /* CMDID: tLONG  */
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2690 "engines/director/lingo/lingo-gr.cpp"
+#line 2727 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 48: /* ID: tMENU  */
-#line 322 "engines/director/lingo/lingo-gr.y"
+  case 48: /* CMDID: tMENU  */
+#line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2696 "engines/director/lingo/lingo-gr.cpp"
+#line 2733 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 49: /* ID: tMENUITEM  */
-#line 323 "engines/director/lingo/lingo-gr.y"
+  case 49: /* CMDID: tMENUITEM  */
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2702 "engines/director/lingo/lingo-gr.cpp"
+#line 2739 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50: /* ID: tMENUITEMS  */
-#line 324 "engines/director/lingo/lingo-gr.y"
+  case 50: /* CMDID: tMENUITEMS  */
+#line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2708 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51: /* ID: tMOD  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+  case 51: /* CMDID: tMOD  */
+#line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2751 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 52: /* ID: tMOVIE  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+  case 52: /* CMDID: tMOVIE  */
+#line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2720 "engines/director/lingo/lingo-gr.cpp"
+#line 2757 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 53: /* ID: tNEXT  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+  case 53: /* CMDID: tNEXT  */
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2726 "engines/director/lingo/lingo-gr.cpp"
+#line 2763 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 54: /* ID: tNOT  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+  case 54: /* CMDID: tNOT  */
+#line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2732 "engines/director/lingo/lingo-gr.cpp"
+#line 2769 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 55: /* ID: tNUMBER  */
-#line 330 "engines/director/lingo/lingo-gr.y"
+  case 55: /* CMDID: tNUMBER  */
+#line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2738 "engines/director/lingo/lingo-gr.cpp"
+#line 2775 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56: /* ID: tOF  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+  case 56: /* CMDID: tOF  */
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2744 "engines/director/lingo/lingo-gr.cpp"
+#line 2781 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57: /* ID: tOR  */
-#line 334 "engines/director/lingo/lingo-gr.y"
+  case 57: /* CMDID: tOR  */
+#line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2750 "engines/director/lingo/lingo-gr.cpp"
+#line 2787 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58: /* ID: tPREVIOUS  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+  case 58: /* CMDID: tPREVIOUS  */
+#line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2756 "engines/director/lingo/lingo-gr.cpp"
+#line 2793 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* ID: tREPEAT  */
-#line 339 "engines/director/lingo/lingo-gr.y"
+  case 59: /* CMDID: tREPEAT  */
+#line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2762 "engines/director/lingo/lingo-gr.cpp"
+#line 2799 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 60: /* ID: tSCRIPT  */
-#line 340 "engines/director/lingo/lingo-gr.y"
+  case 60: /* CMDID: tSCRIPT  */
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2768 "engines/director/lingo/lingo-gr.cpp"
+#line 2805 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61: /* ID: tASSERTERROR  */
-#line 341 "engines/director/lingo/lingo-gr.y"
+  case 61: /* CMDID: tASSERTERROR  */
+#line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2774 "engines/director/lingo/lingo-gr.cpp"
+#line 2811 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62: /* ID: tSET  */
-#line 342 "engines/director/lingo/lingo-gr.y"
+  case 62: /* CMDID: tSET  */
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2780 "engines/director/lingo/lingo-gr.cpp"
+#line 2817 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63: /* ID: tSHORT  */
-#line 343 "engines/director/lingo/lingo-gr.y"
+  case 63: /* CMDID: tSHORT  */
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2786 "engines/director/lingo/lingo-gr.cpp"
+#line 2823 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 64: /* ID: tSOUND  */
-#line 344 "engines/director/lingo/lingo-gr.y"
+  case 64: /* CMDID: tSOUND  */
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2792 "engines/director/lingo/lingo-gr.cpp"
+#line 2829 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 65: /* ID: tSPRITE  */
-#line 345 "engines/director/lingo/lingo-gr.y"
+  case 65: /* CMDID: tSPRITE  */
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2798 "engines/director/lingo/lingo-gr.cpp"
+#line 2835 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 66: /* ID: tSTARTS  */
-#line 346 "engines/director/lingo/lingo-gr.y"
+  case 66: /* CMDID: tSTARTS  */
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2804 "engines/director/lingo/lingo-gr.cpp"
+#line 2841 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 67: /* ID: tTELL  */
-#line 347 "engines/director/lingo/lingo-gr.y"
+  case 67: /* CMDID: tTELL  */
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2810 "engines/director/lingo/lingo-gr.cpp"
+#line 2847 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 68: /* ID: tTIME  */
-#line 350 "engines/director/lingo/lingo-gr.y"
+  case 68: /* CMDID: tTHE  */
+#line 335 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("the"); }
+#line 2853 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 69: /* CMDID: tTIME  */
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2816 "engines/director/lingo/lingo-gr.cpp"
+#line 2859 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 69: /* ID: tTO  */
-#line 351 "engines/director/lingo/lingo-gr.y"
+  case 70: /* CMDID: tTO  */
+#line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2822 "engines/director/lingo/lingo-gr.cpp"
+#line 2865 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 70: /* ID: tWHILE  */
-#line 353 "engines/director/lingo/lingo-gr.y"
+  case 71: /* CMDID: tWHILE  */
+#line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2828 "engines/director/lingo/lingo-gr.cpp"
+#line 2871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71: /* ID: tWINDOW  */
-#line 354 "engines/director/lingo/lingo-gr.y"
+  case 72: /* CMDID: tWINDOW  */
+#line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2834 "engines/director/lingo/lingo-gr.cpp"
+#line 2877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* ID: tWITH  */
-#line 355 "engines/director/lingo/lingo-gr.y"
+  case 73: /* CMDID: tWITH  */
+#line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2840 "engines/director/lingo/lingo-gr.cpp"
+#line 2883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* ID: tWITHIN  */
-#line 356 "engines/director/lingo/lingo-gr.y"
+  case 74: /* CMDID: tWITHIN  */
+#line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2846 "engines/director/lingo/lingo-gr.cpp"
+#line 2889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* ID: tWORD  */
-#line 357 "engines/director/lingo/lingo-gr.y"
+  case 75: /* CMDID: tWORD  */
+#line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2852 "engines/director/lingo/lingo-gr.cpp"
+#line 2895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* ID: tWORDS  */
-#line 358 "engines/director/lingo/lingo-gr.y"
+  case 76: /* CMDID: tWORDS  */
+#line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2858 "engines/director/lingo/lingo-gr.cpp"
+#line 2901 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 78: /* ID: tELSE  */
+#line 347 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("else"); }
+#line 2907 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 79: /* ID: tENDCLAUSE  */
+#line 348 "engines/director/lingo/lingo-gr.y"
+                        { (yyval.s) = new Common::String("end"); }
+#line 2913 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 80: /* ID: tEXIT  */
+#line 349 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("exit"); }
+#line 2919 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 81: /* ID: tFACTORY  */
+#line 350 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("factory"); }
+#line 2925 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 82: /* ID: tGLOBAL  */
+#line 351 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("global"); }
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* idlist: %empty  */
+  case 83: /* ID: tGO  */
+#line 352 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("go"); }
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 84: /* ID: tIF  */
+#line 353 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("if"); }
+#line 2943 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 85: /* ID: tINSTANCE  */
+#line 354 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("instance"); }
+#line 2949 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 86: /* ID: tMACRO  */
+#line 355 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("macro"); }
+#line 2955 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 87: /* ID: tMETHOD  */
+#line 356 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("method"); }
+#line 2961 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 88: /* ID: tON  */
+#line 357 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("on"); }
+#line 2967 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 89: /* ID: tOPEN  */
+#line 358 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("open"); }
+#line 2973 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 90: /* ID: tPLAY  */
+#line 359 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("play"); }
+#line 2979 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 91: /* ID: tPROPERTY  */
+#line 360 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("property"); }
+#line 2985 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("put"); }
+#line 2991 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 93: /* ID: tTHEN  */
+#line 362 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("then"); }
+#line 2997 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 94: /* ID: tWHEN  */
+#line 363 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("when"); }
+#line 3003 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 95: /* idlist: %empty  */
+#line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2864 "engines/director/lingo/lingo-gr.cpp"
+#line 3009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* nonemptyidlist: ID  */
-#line 365 "engines/director/lingo/lingo-gr.y"
+  case 97: /* nonemptyidlist: ID  */
+#line 370 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 3018 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 369 "engines/director/lingo/lingo-gr.y"
+  case 98: /* nonemptyidlist: nonemptyidlist ',' ID  */
+#line 374 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2881 "engines/director/lingo/lingo-gr.cpp"
+#line 3026 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* proc: ID cmdargs '\n'  */
-#line 392 "engines/director/lingo/lingo-gr.y"
+  case 108: /* proc: CMDID cmdargs '\n'  */
+#line 397 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2887 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* proc: tPUT cmdargs '\n'  */
-#line 393 "engines/director/lingo/lingo-gr.y"
+  case 109: /* proc: tPUT cmdargs '\n'  */
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2893 "engines/director/lingo/lingo-gr.cpp"
+#line 3038 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* proc: tGO cmdargs '\n'  */
-#line 394 "engines/director/lingo/lingo-gr.y"
+  case 110: /* proc: tGO cmdargs '\n'  */
+#line 399 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2899 "engines/director/lingo/lingo-gr.cpp"
+#line 3044 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* proc: tGO frameargs '\n'  */
-#line 395 "engines/director/lingo/lingo-gr.y"
+  case 111: /* proc: tGO frameargs '\n'  */
+#line 400 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2905 "engines/director/lingo/lingo-gr.cpp"
+#line 3050 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* proc: tPLAY cmdargs '\n'  */
-#line 396 "engines/director/lingo/lingo-gr.y"
+  case 112: /* proc: tPLAY cmdargs '\n'  */
+#line 401 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2911 "engines/director/lingo/lingo-gr.cpp"
+#line 3056 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* proc: tPLAY frameargs '\n'  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+  case 113: /* proc: tPLAY frameargs '\n'  */
+#line 402 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2917 "engines/director/lingo/lingo-gr.cpp"
+#line 3062 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* proc: tOPEN cmdargs '\n'  */
-#line 398 "engines/director/lingo/lingo-gr.y"
+  case 114: /* proc: tOPEN cmdargs '\n'  */
+#line 403 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 2923 "engines/director/lingo/lingo-gr.cpp"
+#line 3068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* proc: tOPEN expr tWITH expr '\n'  */
-#line 399 "engines/director/lingo/lingo-gr.y"
+  case 115: /* proc: tOPEN expr tWITH expr '\n'  */
+#line 404 "engines/director/lingo/lingo-gr.y"
                                                  {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 2933 "engines/director/lingo/lingo-gr.cpp"
+#line 3078 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* proc: tNEXT tREPEAT '\n'  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 116: /* proc: tNEXT tREPEAT '\n'  */
+#line 409 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 3084 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* proc: tEXIT tREPEAT '\n'  */
-#line 405 "engines/director/lingo/lingo-gr.y"
+  case 117: /* proc: tEXIT tREPEAT '\n'  */
+#line 410 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 3090 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* proc: tEXIT '\n'  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+  case 118: /* proc: tEXIT '\n'  */
+#line 411 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2951 "engines/director/lingo/lingo-gr.cpp"
+#line 3096 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* proc: tASSERTERROR stmtoneliner  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+  case 119: /* proc: tASSERTERROR stmtoneliner  */
+#line 412 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2957 "engines/director/lingo/lingo-gr.cpp"
+#line 3102 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* cmdargs: %empty  */
-#line 410 "engines/director/lingo/lingo-gr.y"
+  case 120: /* cmdargs: %empty  */
+#line 415 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2965 "engines/director/lingo/lingo-gr.cpp"
+#line 3110 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* cmdargs: expr  */
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 121: /* cmdargs: expr  */
+#line 418 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 3120 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+  case 122: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 423 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2984 "engines/director/lingo/lingo-gr.cpp"
+#line 3129 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* cmdargs: expr expr_nounarymath  */
-#line 422 "engines/director/lingo/lingo-gr.y"
+  case 123: /* cmdargs: expr expr_nounarymath  */
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2995 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 428 "engines/director/lingo/lingo-gr.y"
+  case 124: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 3005 "engines/director/lingo/lingo-gr.cpp"
+#line 3150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* cmdargs: '(' ')'  */
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 125: /* cmdargs: '(' ')'  */
+#line 438 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3013 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 126: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 441 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3022 "engines/director/lingo/lingo-gr.cpp"
+#line 3167 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* frameargs: tFRAME expr  */
-#line 446 "engines/director/lingo/lingo-gr.y"
+  case 127: /* frameargs: tFRAME expr  */
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3177 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* frameargs: tMOVIE expr  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 128: /* frameargs: tMOVIE expr  */
+#line 456 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3043 "engines/director/lingo/lingo-gr.cpp"
+#line 3188 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 129: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 462 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3054 "engines/director/lingo/lingo-gr.cpp"
+#line 3199 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* frameargs: expr tOF tMOVIE expr  */
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 130: /* frameargs: expr tOF tMOVIE expr  */
+#line 468 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3065 "engines/director/lingo/lingo-gr.cpp"
+#line 3210 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 469 "engines/director/lingo/lingo-gr.y"
+  case 131: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 474 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 3221 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 132: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 482 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3227 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 133: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3233 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 134: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3239 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* asgn: tSET varorthe to expr '\n'  */
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 135: /* asgn: tSET varorthe to expr '\n'  */
+#line 485 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3100 "engines/director/lingo/lingo-gr.cpp"
+#line 3245 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* definevars: tGLOBAL idlist '\n'  */
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 138: /* definevars: tGLOBAL idlist '\n'  */
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3251 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* definevars: tPROPERTY idlist '\n'  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+  case 139: /* definevars: tPROPERTY idlist '\n'  */
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3112 "engines/director/lingo/lingo-gr.cpp"
+#line 3257 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* definevars: tINSTANCE idlist '\n'  */
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 140: /* definevars: tINSTANCE idlist '\n'  */
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3118 "engines/director/lingo/lingo-gr.cpp"
+#line 3263 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* ifstmt: tIF expr tTHEN stmt  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 141: /* ifstmt: tIF expr tTHEN stmt  */
+#line 495 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3127 "engines/director/lingo/lingo-gr.cpp"
+#line 3272 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+  case 142: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3134 "engines/director/lingo/lingo-gr.cpp"
+#line 3279 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 498 "engines/director/lingo/lingo-gr.y"
+  case 143: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3145 "engines/director/lingo/lingo-gr.cpp"
+#line 3290 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 504 "engines/director/lingo/lingo-gr.y"
+  case 144: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
+#line 509 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+#line 3299 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 145: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
+#line 513 "engines/director/lingo/lingo-gr.y"
                                                                     {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3163 "engines/director/lingo/lingo-gr.cpp"
+#line 3308 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 512 "engines/director/lingo/lingo-gr.y"
+  case 146: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
+#line 517 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3170 "engines/director/lingo/lingo-gr.cpp"
+#line 3315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 516 "engines/director/lingo/lingo-gr.y"
+  case 147: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3177 "engines/director/lingo/lingo-gr.cpp"
+#line 3322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 518 "engines/director/lingo/lingo-gr.y"
+  case 148: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 523 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3184 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 520 "engines/director/lingo/lingo-gr.y"
+  case 149: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 525 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3191 "engines/director/lingo/lingo-gr.cpp"
+#line 3336 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* tell: tTELL expr tTO stmtoneliner  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 150: /* tell: tTELL expr tTO stmtoneliner  */
+#line 529 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3200 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 528 "engines/director/lingo/lingo-gr.y"
+  case 151: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
+#line 533 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3207 "engines/director/lingo/lingo-gr.cpp"
+#line 3352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* when: tWHEN ID tTHEN expr  */
-#line 532 "engines/director/lingo/lingo-gr.y"
+  case 152: /* when: tWHEN ID tTHEN expr  */
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3213 "engines/director/lingo/lingo-gr.cpp"
+#line 3358 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* stmtlist: %empty  */
-#line 534 "engines/director/lingo/lingo-gr.y"
+  case 153: /* stmtlist: %empty  */
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3219 "engines/director/lingo/lingo-gr.cpp"
+#line 3364 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* nonemptystmtlist: stmtlistline  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 155: /* nonemptystmtlist: stmtlistline  */
+#line 544 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3230 "engines/director/lingo/lingo-gr.cpp"
+#line 3375 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 545 "engines/director/lingo/lingo-gr.y"
+  case 156: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 550 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3240 "engines/director/lingo/lingo-gr.cpp"
+#line 3385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* stmtlistline: '\n'  */
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 157: /* stmtlistline: '\n'  */
+#line 557 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3246 "engines/director/lingo/lingo-gr.cpp"
+#line 3391 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* simpleexpr_nounarymath: tINT  */
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 159: /* simpleexpr_nounarymath: tINT  */
+#line 564 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3252 "engines/director/lingo/lingo-gr.cpp"
+#line 3397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* simpleexpr_nounarymath: tFLOAT  */
-#line 560 "engines/director/lingo/lingo-gr.y"
+  case 160: /* simpleexpr_nounarymath: tFLOAT  */
+#line 565 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3258 "engines/director/lingo/lingo-gr.cpp"
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 561 "engines/director/lingo/lingo-gr.y"
+  case 161: /* simpleexpr_nounarymath: tSYMBOL  */
+#line 566 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3264 "engines/director/lingo/lingo-gr.cpp"
+#line 3409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* simpleexpr_nounarymath: tSTRING  */
-#line 562 "engines/director/lingo/lingo-gr.y"
+  case 162: /* simpleexpr_nounarymath: tSTRING  */
+#line 567 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3270 "engines/director/lingo/lingo-gr.cpp"
+#line 3415 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 563 "engines/director/lingo/lingo-gr.y"
+  case 163: /* simpleexpr_nounarymath: tNOT simpleexpr  */
+#line 568 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3276 "engines/director/lingo/lingo-gr.cpp"
+#line 3421 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
-#line 564 "engines/director/lingo/lingo-gr.y"
+  case 164: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
+#line 569 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3282 "engines/director/lingo/lingo-gr.cpp"
+#line 3427 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 565 "engines/director/lingo/lingo-gr.y"
+  case 165: /* simpleexpr_nounarymath: '(' expr ')'  */
+#line 570 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3288 "engines/director/lingo/lingo-gr.cpp"
+#line 3433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* var: ID  */
-#line 573 "engines/director/lingo/lingo-gr.y"
+  case 171: /* var: ID  */
+#line 578 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3294 "engines/director/lingo/lingo-gr.cpp"
+#line 3439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* chunk: tFIELD simpleexpr  */
-#line 583 "engines/director/lingo/lingo-gr.y"
+  case 176: /* chunk: tFIELD simpleexpr  */
+#line 588 "engines/director/lingo/lingo-gr.y"
                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3303 "engines/director/lingo/lingo-gr.cpp"
+#line 3448 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* chunk: tCAST simpleexpr  */
-#line 587 "engines/director/lingo/lingo-gr.y"
+  case 177: /* chunk: tCAST simpleexpr  */
+#line 592 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3312 "engines/director/lingo/lingo-gr.cpp"
+#line 3457 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 178: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3319 "engines/director/lingo/lingo-gr.cpp"
+#line 3464 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 179: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3326 "engines/director/lingo/lingo-gr.cpp"
+#line 3471 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* chunk: tWORD simpleexpr tOF simpleexpr  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 180: /* chunk: tWORD simpleexpr tOF simpleexpr  */
+#line 600 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3333 "engines/director/lingo/lingo-gr.cpp"
+#line 3478 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 181: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 602 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3340 "engines/director/lingo/lingo-gr.cpp"
+#line 3485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* chunk: tITEM simpleexpr tOF simpleexpr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 182: /* chunk: tITEM simpleexpr tOF simpleexpr  */
+#line 604 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3347 "engines/director/lingo/lingo-gr.cpp"
+#line 3492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 601 "engines/director/lingo/lingo-gr.y"
+  case 183: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3354 "engines/director/lingo/lingo-gr.cpp"
+#line 3499 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* chunk: tLINE simpleexpr tOF simpleexpr  */
-#line 603 "engines/director/lingo/lingo-gr.y"
+  case 184: /* chunk: tLINE simpleexpr tOF simpleexpr  */
+#line 608 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3361 "engines/director/lingo/lingo-gr.cpp"
+#line 3506 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 185: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3368 "engines/director/lingo/lingo-gr.cpp"
+#line 3513 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* object: tSCRIPT simpleexpr  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+  case 186: /* object: tSCRIPT simpleexpr  */
+#line 614 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3377 "engines/director/lingo/lingo-gr.cpp"
+#line 3522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* object: tWINDOW simpleexpr  */
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 187: /* object: tWINDOW simpleexpr  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3386 "engines/director/lingo/lingo-gr.cpp"
+#line 3531 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 191: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 627 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3392 "engines/director/lingo/lingo-gr.cpp"
+#line 3537 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 194: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3398 "engines/director/lingo/lingo-gr.cpp"
+#line 3543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* theobj: tSOUND simpleexpr  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 195: /* theobj: tSOUND simpleexpr  */
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3404 "engines/director/lingo/lingo-gr.cpp"
+#line 3549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* theobj: tSPRITE simpleexpr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+  case 196: /* theobj: tSPRITE simpleexpr  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3410 "engines/director/lingo/lingo-gr.cpp"
+#line 3555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* menu: tMENU simpleexpr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 197: /* menu: tMENU simpleexpr  */
+#line 637 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3416 "engines/director/lingo/lingo-gr.cpp"
+#line 3561 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* writablethe: tTHE ID  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 198: /* writablethe: tTHE ID  */
+#line 639 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3422 "engines/director/lingo/lingo-gr.cpp"
+#line 3567 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* writablethe: tTHE ID tOF theobj  */
-#line 635 "engines/director/lingo/lingo-gr.y"
+  case 199: /* writablethe: tTHE ID tOF theobj  */
+#line 640 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3428 "engines/director/lingo/lingo-gr.cpp"
+#line 3573 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 636 "engines/director/lingo/lingo-gr.y"
+  case 200: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3434 "engines/director/lingo/lingo-gr.cpp"
+#line 3579 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 201: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 644 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3440 "engines/director/lingo/lingo-gr.cpp"
+#line 3585 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 202: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 645 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3446 "engines/director/lingo/lingo-gr.cpp"
+#line 3591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* thedatetime: tTHE tABBREV tDATE  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 203: /* thedatetime: tTHE tABBREV tDATE  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3452 "engines/director/lingo/lingo-gr.cpp"
+#line 3597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* thedatetime: tTHE tABBREV tTIME  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 204: /* thedatetime: tTHE tABBREV tTIME  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3458 "engines/director/lingo/lingo-gr.cpp"
+#line 3603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* thedatetime: tTHE tABBR tDATE  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 205: /* thedatetime: tTHE tABBR tDATE  */
+#line 648 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3464 "engines/director/lingo/lingo-gr.cpp"
+#line 3609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* thedatetime: tTHE tABBR tTIME  */
-#line 644 "engines/director/lingo/lingo-gr.y"
+  case 206: /* thedatetime: tTHE tABBR tTIME  */
+#line 649 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3470 "engines/director/lingo/lingo-gr.cpp"
+#line 3615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* thedatetime: tTHE tLONG tDATE  */
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 207: /* thedatetime: tTHE tLONG tDATE  */
+#line 650 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3476 "engines/director/lingo/lingo-gr.cpp"
+#line 3621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* thedatetime: tTHE tLONG tTIME  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 208: /* thedatetime: tTHE tLONG tTIME  */
+#line 651 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3482 "engines/director/lingo/lingo-gr.cpp"
+#line 3627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* thedatetime: tTHE tSHORT tDATE  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 209: /* thedatetime: tTHE tSHORT tDATE  */
+#line 652 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3488 "engines/director/lingo/lingo-gr.cpp"
+#line 3633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* thedatetime: tTHE tSHORT tTIME  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+  case 210: /* thedatetime: tTHE tSHORT tTIME  */
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3494 "engines/director/lingo/lingo-gr.cpp"
+#line 3639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 211: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 657 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3500 "engines/director/lingo/lingo-gr.cpp"
+#line 3645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 653 "engines/director/lingo/lingo-gr.y"
+  case 212: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 658 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3506 "engines/director/lingo/lingo-gr.cpp"
+#line 3651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 213: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 659 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3512 "engines/director/lingo/lingo-gr.cpp"
+#line 3657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 655 "engines/director/lingo/lingo-gr.y"
+  case 214: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 660 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3518 "engines/director/lingo/lingo-gr.cpp"
+#line 3663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 656 "engines/director/lingo/lingo-gr.y"
+  case 215: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 661 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3524 "engines/director/lingo/lingo-gr.cpp"
+#line 3669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* chunktype: tCHAR  */
-#line 659 "engines/director/lingo/lingo-gr.y"
+  case 216: /* chunktype: tCHAR  */
+#line 664 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3530 "engines/director/lingo/lingo-gr.cpp"
+#line 3675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* chunktype: tWORD  */
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 217: /* chunktype: tWORD  */
+#line 665 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3536 "engines/director/lingo/lingo-gr.cpp"
+#line 3681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* chunktype: tITEM  */
-#line 661 "engines/director/lingo/lingo-gr.y"
+  case 218: /* chunktype: tITEM  */
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3542 "engines/director/lingo/lingo-gr.cpp"
+#line 3687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* chunktype: tLINE  */
-#line 662 "engines/director/lingo/lingo-gr.y"
+  case 219: /* chunktype: tLINE  */
+#line 667 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3548 "engines/director/lingo/lingo-gr.cpp"
+#line 3693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* list: '[' exprlist ']'  */
-#line 667 "engines/director/lingo/lingo-gr.y"
+  case 222: /* list: '[' exprlist ']'  */
+#line 672 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3554 "engines/director/lingo/lingo-gr.cpp"
+#line 3699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 204: /* list: '[' ':' ']'  */
-#line 668 "engines/director/lingo/lingo-gr.y"
+  case 223: /* list: '[' ':' ']'  */
+#line 673 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3560 "engines/director/lingo/lingo-gr.cpp"
+#line 3705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 205: /* list: '[' proplist ']'  */
-#line 669 "engines/director/lingo/lingo-gr.y"
+  case 224: /* list: '[' proplist ']'  */
+#line 674 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3566 "engines/director/lingo/lingo-gr.cpp"
+#line 3711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 206: /* proplist: proppair  */
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 225: /* proplist: proppair  */
+#line 677 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3575 "engines/director/lingo/lingo-gr.cpp"
+#line 3720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 207: /* proplist: proplist ',' proppair  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 226: /* proplist: proplist ',' proppair  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3583 "engines/director/lingo/lingo-gr.cpp"
+#line 3728 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* proppair: tSYMBOL ':' expr  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 227: /* proppair: tSYMBOL ':' expr  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3589 "engines/director/lingo/lingo-gr.cpp"
+#line 3734 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* proppair: ID ':' expr  */
-#line 682 "engines/director/lingo/lingo-gr.y"
+  case 228: /* proppair: ID ':' expr  */
+#line 687 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3595 "engines/director/lingo/lingo-gr.cpp"
+#line 3740 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* proppair: tSTRING ':' expr  */
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 229: /* proppair: tSTRING ':' expr  */
+#line 688 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3601 "engines/director/lingo/lingo-gr.cpp"
+#line 3746 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* unarymath: '+' simpleexpr  */
-#line 686 "engines/director/lingo/lingo-gr.y"
+  case 230: /* unarymath: '+' simpleexpr  */
+#line 691 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3607 "engines/director/lingo/lingo-gr.cpp"
+#line 3752 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* unarymath: '-' simpleexpr  */
-#line 687 "engines/director/lingo/lingo-gr.y"
+  case 231: /* unarymath: '-' simpleexpr  */
+#line 692 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3613 "engines/director/lingo/lingo-gr.cpp"
+#line 3758 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* expr: expr '+' expr  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+  case 236: /* expr: expr '+' expr  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3619 "engines/director/lingo/lingo-gr.cpp"
+#line 3764 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* expr: expr '-' expr  */
-#line 698 "engines/director/lingo/lingo-gr.y"
+  case 237: /* expr: expr '-' expr  */
+#line 703 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3625 "engines/director/lingo/lingo-gr.cpp"
+#line 3770 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* expr: expr '*' expr  */
-#line 699 "engines/director/lingo/lingo-gr.y"
+  case 238: /* expr: expr '*' expr  */
+#line 704 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3631 "engines/director/lingo/lingo-gr.cpp"
+#line 3776 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* expr: expr '/' expr  */
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 239: /* expr: expr '/' expr  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3637 "engines/director/lingo/lingo-gr.cpp"
+#line 3782 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 221: /* expr: expr tMOD expr  */
-#line 701 "engines/director/lingo/lingo-gr.y"
+  case 240: /* expr: expr tMOD expr  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3643 "engines/director/lingo/lingo-gr.cpp"
+#line 3788 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* expr: expr '>' expr  */
-#line 702 "engines/director/lingo/lingo-gr.y"
+  case 241: /* expr: expr '>' expr  */
+#line 707 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3649 "engines/director/lingo/lingo-gr.cpp"
+#line 3794 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* expr: expr '<' expr  */
-#line 703 "engines/director/lingo/lingo-gr.y"
+  case 242: /* expr: expr '<' expr  */
+#line 708 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3655 "engines/director/lingo/lingo-gr.cpp"
+#line 3800 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* expr: expr tEQ expr  */
-#line 704 "engines/director/lingo/lingo-gr.y"
+  case 243: /* expr: expr tEQ expr  */
+#line 709 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3661 "engines/director/lingo/lingo-gr.cpp"
+#line 3806 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* expr: expr tNEQ expr  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 244: /* expr: expr tNEQ expr  */
+#line 710 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3667 "engines/director/lingo/lingo-gr.cpp"
+#line 3812 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* expr: expr tGE expr  */
-#line 706 "engines/director/lingo/lingo-gr.y"
+  case 245: /* expr: expr tGE expr  */
+#line 711 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3673 "engines/director/lingo/lingo-gr.cpp"
+#line 3818 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* expr: expr tLE expr  */
-#line 707 "engines/director/lingo/lingo-gr.y"
+  case 246: /* expr: expr tLE expr  */
+#line 712 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3679 "engines/director/lingo/lingo-gr.cpp"
+#line 3824 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* expr: expr tAND expr  */
-#line 708 "engines/director/lingo/lingo-gr.y"
+  case 247: /* expr: expr tAND expr  */
+#line 713 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3685 "engines/director/lingo/lingo-gr.cpp"
+#line 3830 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* expr: expr tOR expr  */
-#line 709 "engines/director/lingo/lingo-gr.y"
+  case 248: /* expr: expr tOR expr  */
+#line 714 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3691 "engines/director/lingo/lingo-gr.cpp"
+#line 3836 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* expr: expr '&' expr  */
-#line 710 "engines/director/lingo/lingo-gr.y"
+  case 249: /* expr: expr '&' expr  */
+#line 715 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3697 "engines/director/lingo/lingo-gr.cpp"
+#line 3842 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* expr: expr tCONCAT expr  */
-#line 711 "engines/director/lingo/lingo-gr.y"
+  case 250: /* expr: expr tCONCAT expr  */
+#line 716 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3703 "engines/director/lingo/lingo-gr.cpp"
+#line 3848 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 232: /* expr: expr tCONTAINS expr  */
-#line 712 "engines/director/lingo/lingo-gr.y"
+  case 251: /* expr: expr tCONTAINS expr  */
+#line 717 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3709 "engines/director/lingo/lingo-gr.cpp"
+#line 3854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 233: /* expr: expr tSTARTS expr  */
-#line 713 "engines/director/lingo/lingo-gr.y"
+  case 252: /* expr: expr tSTARTS expr  */
+#line 718 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3715 "engines/director/lingo/lingo-gr.cpp"
+#line 3860 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 236: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 722 "engines/director/lingo/lingo-gr.y"
+  case 255: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 727 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3721 "engines/director/lingo/lingo-gr.cpp"
+#line 3866 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 723 "engines/director/lingo/lingo-gr.y"
+  case 256: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 728 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3727 "engines/director/lingo/lingo-gr.cpp"
+#line 3872 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 724 "engines/director/lingo/lingo-gr.y"
+  case 257: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 729 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3733 "engines/director/lingo/lingo-gr.cpp"
+#line 3878 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 725 "engines/director/lingo/lingo-gr.y"
+  case 258: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 730 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3739 "engines/director/lingo/lingo-gr.cpp"
+#line 3884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 726 "engines/director/lingo/lingo-gr.y"
+  case 259: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 731 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3745 "engines/director/lingo/lingo-gr.cpp"
+#line 3890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 241: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 727 "engines/director/lingo/lingo-gr.y"
+  case 260: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 732 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3751 "engines/director/lingo/lingo-gr.cpp"
+#line 3896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 728 "engines/director/lingo/lingo-gr.y"
+  case 261: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 733 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3757 "engines/director/lingo/lingo-gr.cpp"
+#line 3902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 729 "engines/director/lingo/lingo-gr.y"
+  case 262: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 734 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3763 "engines/director/lingo/lingo-gr.cpp"
+#line 3908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 244: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 730 "engines/director/lingo/lingo-gr.y"
+  case 263: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 735 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3769 "engines/director/lingo/lingo-gr.cpp"
+#line 3914 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 731 "engines/director/lingo/lingo-gr.y"
+  case 264: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 736 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3775 "engines/director/lingo/lingo-gr.cpp"
+#line 3920 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 732 "engines/director/lingo/lingo-gr.y"
+  case 265: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 737 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3781 "engines/director/lingo/lingo-gr.cpp"
+#line 3926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 247: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 733 "engines/director/lingo/lingo-gr.y"
+  case 266: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 738 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3787 "engines/director/lingo/lingo-gr.cpp"
+#line 3932 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 734 "engines/director/lingo/lingo-gr.y"
+  case 267: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3793 "engines/director/lingo/lingo-gr.cpp"
+#line 3938 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 249: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 268: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 740 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3799 "engines/director/lingo/lingo-gr.cpp"
+#line 3944 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 250: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 736 "engines/director/lingo/lingo-gr.y"
+  case 269: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 741 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3805 "engines/director/lingo/lingo-gr.cpp"
+#line 3950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 251: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 737 "engines/director/lingo/lingo-gr.y"
+  case 270: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 742 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3811 "engines/director/lingo/lingo-gr.cpp"
+#line 3956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 252: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 738 "engines/director/lingo/lingo-gr.y"
+  case 271: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 743 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3817 "engines/director/lingo/lingo-gr.cpp"
+#line 3962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 253: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 741 "engines/director/lingo/lingo-gr.y"
+  case 272: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 746 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3823 "engines/director/lingo/lingo-gr.cpp"
+#line 3968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 254: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+  case 273: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 747 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3829 "engines/director/lingo/lingo-gr.cpp"
+#line 3974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 255: /* exprlist: %empty  */
-#line 745 "engines/director/lingo/lingo-gr.y"
+  case 274: /* exprlist: %empty  */
+#line 750 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3835 "engines/director/lingo/lingo-gr.cpp"
+#line 3980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* nonemptyexprlist: expr  */
-#line 749 "engines/director/lingo/lingo-gr.y"
+  case 276: /* nonemptyexprlist: expr  */
+#line 754 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3844 "engines/director/lingo/lingo-gr.cpp"
+#line 3989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 753 "engines/director/lingo/lingo-gr.y"
+  case 277: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 758 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3852 "engines/director/lingo/lingo-gr.cpp"
+#line 3997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3856 "engines/director/lingo/lingo-gr.cpp"
+#line 4001 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4051,7 +4196,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 758 "engines/director/lingo/lingo-gr.y"
+#line 763 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 8d99e6a403..3b8369f79a 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -156,7 +156,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<node> handler
 
 // GENERIC VAR STUFF
-%type<s> ID
+%type<s> CMDID ID
 %type<idlist> idlist nonemptyidlist
 
 // STATEMENT
@@ -286,7 +286,9 @@ endargdef:	/* nothing */
 
 // GENERIC VAR STUFF
 
-ID: tVARID
+// This is only the identifiers that can appaear at the start of a line
+// and will not conflict with other statement types.
+CMDID: tVARID
 	| tABBREVIATED	{ $$ = new Common::String("abbreviated"); }
 	| tABBREV		{ $$ = new Common::String("abbrev"); }
 	| tABBR			{ $$ = new Common::String("abbr"); }
@@ -299,17 +301,9 @@ ID: tVARID
 	| tCONTAINS		{ $$ = new Common::String("contains"); }
 	| tDATE			{ $$ = new Common::String("date"); }
 	| tDOWN			{ $$ = new Common::String("down"); }
-	// tELSE
-	// tENDCLAUSE
-	// | tEXIT			{ $$ = new Common::String("exit"); }
-	// tFACTORY
 	| tFIELD		{ $$ = new Common::String("field"); }
 	| tFRAME		{ $$ = new Common::String("frame"); }
-	// | tGLOBAL		{ $$ = new Common::String("global"); }
-	// tGO
-	// tIF
 	| tIN			{ $$ = new Common::String("in"); }
-	// | tINSTANCE		{ $$ = new Common::String("instance"); }
 	| tINTERSECTS	{ $$ = new Common::String("intersects"); }
 	| tINTO			{ $$ = new Common::String("into"); }
 	| tITEM			{ $$ = new Common::String("item"); }
@@ -318,24 +312,17 @@ ID: tVARID
 	| tLINE			{ $$ = new Common::String("line"); }
 	| tLINES		{ $$ = new Common::String("lines"); }
 	| tLONG			{ $$ = new Common::String("long"); }
-	// | tMACRO		{ $$ = new Common::String("macro"); }
 	| tMENU			{ $$ = new Common::String("menu"); }
 	| tMENUITEM		{ $$ = new Common::String("menuItem"); }
 	| tMENUITEMS	{ $$ = new Common::String("menuItems"); }
-	// | tMETHOD		{ $$ = new Common::String("method"); }
 	| tMOD			{ $$ = new Common::String("mod"); }
 	| tMOVIE		{ $$ = new Common::String("movie"); }
 	| tNEXT			{ $$ = new Common::String("next"); }
 	| tNOT			{ $$ = new Common::String("not"); }
 	| tNUMBER		{ $$ = new Common::String("number"); }
 	| tOF			{ $$ = new Common::String("of"); }
-	// | tON			{ $$ = new Common::String("on"); }
-	// | tOPEN			{ $$ = new Common::String("open"); }
 	| tOR			{ $$ = new Common::String("or"); }
-	// | tPLAY			{ $$ = new Common::String("play"); }
 	| tPREVIOUS		{ $$ = new Common::String("previous"); }
-	// | tPROPERTY		{ $$ = new Common::String("property"); }
-	// | tPUT			{ $$ = new Common::String("put"); }
 	| tREPEAT		{ $$ = new Common::String("repeat"); }
 	| tSCRIPT		{ $$ = new Common::String("script"); }
 	| tASSERTERROR	{ $$ = new Common::String("scummvmAssertError"); }
@@ -345,11 +332,9 @@ ID: tVARID
 	| tSPRITE		{ $$ = new Common::String("sprite"); }
 	| tSTARTS		{ $$ = new Common::String("starts"); }
 	| tTELL			{ $$ = new Common::String("tell"); }
-	// tTHE
-	// tTHEN
+	| tTHE			{ $$ = new Common::String("the"); }
 	| tTIME			{ $$ = new Common::String("time"); }
 	| tTO			{ $$ = new Common::String("to"); }
-	// | tWHEN			{ $$ = new Common::String("when"); }
 	| tWHILE		{ $$ = new Common::String("while"); }
 	| tWINDOW		{ $$ = new Common::String("window"); }
 	| tWITH			{ $$ = new Common::String("with"); }
@@ -358,6 +343,26 @@ ID: tVARID
 	| tWORDS		{ $$ = new Common::String("words"); }
 	;
 
+ID: CMDID
+	| tELSE			{ $$ = new Common::String("else"); }
+	| tENDCLAUSE	{ $$ = new Common::String("end"); }
+	| tEXIT			{ $$ = new Common::String("exit"); }
+	| tFACTORY		{ $$ = new Common::String("factory"); }
+	| tGLOBAL		{ $$ = new Common::String("global"); }
+	| tGO			{ $$ = new Common::String("go"); }
+	| tIF			{ $$ = new Common::String("if"); }
+	| tINSTANCE		{ $$ = new Common::String("instance"); }
+	| tMACRO		{ $$ = new Common::String("macro"); }
+	| tMETHOD		{ $$ = new Common::String("method"); }
+	| tON			{ $$ = new Common::String("on"); }
+	| tOPEN			{ $$ = new Common::String("open"); }
+	| tPLAY			{ $$ = new Common::String("play"); }
+	| tPROPERTY		{ $$ = new Common::String("property"); }
+	| tPUT			{ $$ = new Common::String("put"); }
+	| tTHEN			{ $$ = new Common::String("then"); }
+	| tWHEN			{ $$ = new Common::String("when"); }
+	;
+
 idlist: /* empty */					{ $$ = new IDList; }
 	| nonemptyidlist
 	;
@@ -389,7 +394,7 @@ stmtoneliner: proc
 	| definevars
 	;
 
-proc: ID cmdargs '\n'					{ $$ = new CmdNode($ID, $cmdargs); }
+proc: CMDID cmdargs '\n'				{ $$ = new CmdNode($CMDID, $cmdargs); }
 	| tPUT cmdargs '\n'					{ $$ = new CmdNode(new Common::String("put"), $cmdargs); }
 	| tGO cmdargs '\n'					{ $$ = new CmdNode(new Common::String("go"), $cmdargs); }
 	| tGO frameargs '\n'				{ $$ = new CmdNode(new Common::String("go"), $frameargs); }


Commit: c7e8003ccb0ee755ef906a901c9dbd5b248926c8
    https://github.com/scummvm/scummvm/commit/c7e8003ccb0ee755ef906a901c9dbd5b248926c8
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Lower b_go version

Changed paths:
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index f228fe8c22..97232830a8 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -159,7 +159,7 @@ static struct BuiltinProto {
 	{ "dontPassEvent",	LB::b_dontPassEvent,0, 0, false, 200, CBLTIN },	// D2 c
 	{ "delay",	 		LB::b_delay,		1, 1, false, 200, CBLTIN },	// D2 c
 	{ "do",		 		LB::b_do,			1, 1, false, 200, CBLTIN },	// D2 c
-	{ "go",		 		LB::b_go,			1, 2, false, 400, CBLTIN },	// 			D4 c
+	{ "go",		 		LB::b_go,			1, 2, false, 200, CBLTIN },	// D2 c
 	{ "halt",	 		LB::b_halt,			0, 0, false, 400, CBLTIN },	//			D4 c
 	{ "nothing",		LB::b_nothing,		0, 0, false, 200, CBLTIN },	// D2 c
 	{ "pass",			LB::b_pass,			0, 0, false, 400, CBLTIN },	//			D4 c


Commit: c66377b5e8b6f523ba64c05708ee4253c7da7416
    https://github.com/scummvm/scummvm/commit/c66377b5e8b6f523ba64c05708ee4253c7da7416
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement repeat with in

Changed paths:
    engines/director/lingo/lingo-ast.h
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-codegen.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h
index 987b9ba2e8..e3626e4b44 100644
--- a/engines/director/lingo/lingo-ast.h
+++ b/engines/director/lingo/lingo-ast.h
@@ -41,6 +41,7 @@ struct IfStmtNode;
 struct IfElseStmtNode;
 struct RepeatWhileNode;
 struct RepeatWithToNode;
+struct RepeatWithInNode;
 struct NextRepeatNode;
 struct ExitRepeatNode;
 struct ExitNode;
@@ -103,6 +104,7 @@ enum NodeType {
 	kIfElseStmtNode,
 	kRepeatWhileNode,
 	kRepeatWithToNode,
+	kRepeatWithInNode,
 	kNextRepeatNode,
 	kExitRepeatNode,
 	kExitNode,
@@ -167,6 +169,7 @@ public:
 	virtual bool visitIfElseStmtNode(IfElseStmtNode *node) = 0;
 	virtual bool visitRepeatWhileNode(RepeatWhileNode *node) = 0;
 	virtual bool visitRepeatWithToNode(RepeatWithToNode *node) = 0;
+	virtual bool visitRepeatWithInNode(RepeatWithInNode *node) = 0;
 	virtual bool visitNextRepeatNode(NextRepeatNode *node) = 0;
 	virtual bool visitExitRepeatNode(ExitRepeatNode *node) = 0;
 	virtual bool visitExitNode(ExitNode *node) = 0;
@@ -496,6 +499,25 @@ struct RepeatWithToNode : LoopNode {
 	}
 };
 
+/* RepeatWithInNode */
+
+struct RepeatWithInNode : LoopNode {
+	Common::String *var;
+	Node *list;
+	NodeList *stmts;
+
+	RepeatWithInNode(Common::String *varIn, Node *listIn, NodeList *stmtsIn)
+		: LoopNode(kRepeatWithInNode), var(varIn), list(listIn), stmts(stmtsIn) {}
+	virtual ~RepeatWithInNode() {
+		delete var;
+		delete list;
+		deleteList(stmts);
+	}
+	virtual bool accept(NodeVisitor *visitor) {
+		return visitor->visitRepeatWithInNode(this);
+	}
+};
+
 /* NextRepeatNode */
 
 struct NextRepeatNode : StmtNode {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 35f340c9b5..52c8cae709 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -836,6 +836,61 @@ bool LingoCompiler::visitRepeatWithToNode(RepeatWithToNode *node) {
 	return true;
 }
 
+/* RepeatWithInNode */
+
+bool LingoCompiler::visitRepeatWithInNode(RepeatWithInNode *node) {
+	LoopNode *prevLoop = _currentLoop;
+	_currentLoop = node;
+
+	COMPILE(node->list);
+	code1(LC::c_stackpeek);
+	codeInt(0);
+	codeFunc("count", 1);
+	code1(LC::c_intpush);	// start counter
+	codeInt(1);
+
+	uint startPos = _currentAssembly->size();
+	code1(LC::c_stackpeek);	// get counter
+	codeInt(0);
+	code1(LC::c_stackpeek);	// get array size
+	codeInt(2);
+	code1(LC::c_le); 
+	uint jzPos = _currentAssembly->size();
+	code2(LC::c_jumpifz, 0);
+
+	code1(LC::c_stackpeek);	// get list
+	codeInt(2);
+	code1(LC::c_stackpeek);	// get counter
+	codeInt(1);
+	codeFunc("getAt", 2);
+	codeVarSet(*node->var);
+	COMPILE_LIST(node->stmts);
+
+	uint incrementPos = _currentAssembly->size();
+	code1(LC::c_intpush);
+	codeInt(1);
+	code1(LC::c_add);	// Increment counter
+
+	uint jmpPos = _currentAssembly->size();
+	code2(LC::c_jump, 0);
+	uint endPos = _currentAssembly->size();
+	code1(LC::c_stackdrop);	// remove list, size, counter
+	codeInt(3);
+
+	inst jzOffset = 0;
+	WRITE_UINT32(&jzOffset, endPos - jzPos);
+	(*_currentAssembly)[jzPos + 1] = jzOffset;
+
+	inst jmpOffset = 0;
+	WRITE_UINT32(&jmpOffset, startPos - jmpPos);
+	(*_currentAssembly)[jmpPos + 1] = jmpOffset;
+
+	updateLoopJumps(incrementPos, endPos);
+	_currentLoop = prevLoop;
+
+	return true;
+}
+
 /* NextRepeatNode */
 
 bool LingoCompiler::visitNextRepeatNode(NextRepeatNode *node) {
diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h
index 7b4aef032e..ace393c312 100644
--- a/engines/director/lingo/lingo-codegen.h
+++ b/engines/director/lingo/lingo-codegen.h
@@ -90,6 +90,7 @@ public:
 	virtual bool visitIfElseStmtNode(IfElseStmtNode *node);
 	virtual bool visitRepeatWhileNode(RepeatWhileNode *node);
 	virtual bool visitRepeatWithToNode(RepeatWithToNode *node);
+	virtual bool visitRepeatWithInNode(RepeatWithInNode *node);
 	virtual bool visitNextRepeatNode(NextRepeatNode *node);
 	virtual bool visitExitRepeatNode(ExitRepeatNode *node);
 	virtual bool visitExitNode(ExitNode *node);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 2c644dd91a..2a930a8ee1 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -634,16 +634,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  174
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4150
+#define YYLAST   4223
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  56
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  277
+#define YYNRULES  278
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  514
+#define YYNSTATES  520
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -716,19 +716,19 @@ static const yytype_int16 yyrline[] =
      415,   418,   423,   427,   433,   438,   441,   451,   456,   462,
      468,   474,   482,   483,   484,   485,   488,   488,   490,   491,
      492,   495,   499,   503,   509,   513,   517,   521,   523,   525,
-     529,   533,   537,   539,   540,   544,   550,   557,   558,   564,
-     565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
-     575,   578,   580,   581,   584,   585,   588,   592,   596,   598,
-     600,   602,   604,   606,   608,   610,   614,   618,   624,   625,
-     626,   627,   630,   631,   632,   633,   634,   637,   639,   640,
-     641,   644,   645,   646,   647,   648,   649,   650,   651,   652,
-     653,   657,   658,   659,   660,   661,   664,   665,   666,   667,
-     670,   670,   672,   673,   674,   677,   681,   686,   687,   688,
-     691,   692,   695,   696,   700,   701,   702,   703,   704,   705,
-     706,   707,   708,   709,   710,   711,   712,   713,   714,   715,
-     716,   717,   718,   725,   726,   727,   728,   729,   730,   731,
-     732,   733,   734,   735,   736,   737,   738,   739,   740,   741,
-     742,   743,   746,   747,   750,   751,   754,   758
+     527,   531,   535,   539,   541,   542,   546,   552,   559,   560,
+     566,   567,   568,   569,   570,   571,   572,   573,   574,   575,
+     576,   577,   580,   582,   583,   586,   587,   590,   594,   598,
+     600,   602,   604,   606,   608,   610,   612,   616,   620,   626,
+     627,   628,   629,   632,   633,   634,   635,   636,   639,   641,
+     642,   643,   646,   647,   648,   649,   650,   651,   652,   653,
+     654,   655,   659,   660,   661,   662,   663,   666,   667,   668,
+     669,   672,   672,   674,   675,   676,   679,   683,   688,   689,
+     690,   693,   694,   697,   698,   702,   703,   704,   705,   706,
+     707,   708,   709,   710,   711,   712,   713,   714,   715,   716,
+     717,   718,   719,   720,   727,   728,   729,   730,   731,   732,
+     733,   734,   735,   736,   737,   738,   739,   740,   741,   742,
+     743,   744,   745,   748,   749,   752,   753,   756,   760
 };
 #endif
 
@@ -794,7 +794,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-343)
+#define YYPACT_NINF (-347)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -808,58 +808,58 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2296,  -343,  -343,  -343,  -343,  -343,  -343,   -19,  -343,  3433,
-    1429,  1526,  -343,  -343,  3433,  -343,    -6,  -343,  -343,  1623,
-      37,  3512,  -343,  3433,  -343,  -343,  3433,  1623,  1429,  3433,
-    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
-    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
-    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
-    -343,  -343,  -343,  1526,  3433,  3433,  3827,  -343,    58,  2296,
-    -343,  -343,  -343,  -343,  1623,  -343,  -343,  -343,  -343,  -343,
-    -343,  -343,  -343,  -343,  -343,   -14,  -343,  -343,  -343,  -343,
-    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
-    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
-    -343,   -12,    -2,  -343,  -343,  -343,  -343,  1720,  1720,  1720,
-    1720,  1526,  1526,  1720,  1720,  1720,  1720,  1720,  3591,  1526,
-    1720,  1720,  1332,   748,     4,    13,    24,  -343,  -343,  -343,
-    -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,   847,  -343,
-    1526,   517,  3433,    32,    34,   944,  3433,  1526,  3670,  -343,
-    -343,   -11,  -343,    60,    35,    36,  1041,    39,    40,    41,
-     429,    42,  3433,  -343,  -343,  -343,    43,  1138,  -343,  -343,
-    3433,  -343,  -343,  -343,  -343,  1235,  4042,  -343,   -17,    11,
-      15,    33,   -38,   -35,   -34,   -29,   -25,    52,    80,    84,
-    3988,  -343,  -343,  -343,   499,    27,    31,    46,   -77,    -4,
-    -343,  4042,    48,    45,  1526,  -343,  -343,   115,  1526,  1526,
-    1526,  1526,  2011,  2011,  2205,  1526,  2108,  2108,  1526,  1526,
-    1526,  1526,  1526,  1526,  1526,  1526,  -343,   589,  -343,   530,
-    3023,  1526,  1526,  1526,  1526,  1526,    47,  -343,  -343,  3749,
-    3749,  3749,   108,  3874,   127,  -343,  -343,  1526,  1526,   -70,
-    -343,  1526,  -343,  -343,  -343,  3827,  3103,  -343,    62,  -343,
-    -343,   131,  4055,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
-    1720,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
-    -343,  -343,  -343,  -343,  -343,    63,  1817,  1914,  1720,  1720,
-    1526,  -343,  1526,  1526,  -343,  1526,  3354,  -343,  -343,  1526,
-      64,  1526,   -39,   -39,   -39,   -39,   183,   183,  -343,   -30,
-     -39,   -39,   -39,   -39,   -30,   -13,   -13,  -343,  -343,    45,
-    1526,  1526,  1526,  1526,  1526,  1526,  1526,  1526,  1526,  1526,
-    1526,  1526,  1526,  1526,  1526,  1526,  1526,  1526,  3103,   144,
-    3103,  -343,    65,  -343,    69,    72,  1526,  3103,  1914,  3887,
-    4042,  3433,  -343,  -343,    73,  -343,  -343,  3900,  -343,  -343,
-    -343,  2456,  -343,  -343,  3103,  1526,  -343,   133,  -343,   143,
-    -343,   145,  -343,   146,  -343,  -343,  1720,    63,    63,    63,
-      63,  1720,  1720,    63,  1720,  1720,  -343,  -343,  -343,  -343,
-    -343,  -343,   -52,  4042,  4042,  4042,    27,    31,    74,  -343,
-    4042,  -343,  4042,   -39,   -39,   -39,   -39,   183,   183,  -343,
-     -30,   -39,   -39,   -39,   -39,   -30,   -13,   -13,  -343,  -343,
-      45,  2376,  3183,  3103,  -343,  -343,  -343,   161,  2543,  -343,
-    3433,   -70,  -343,    75,  -343,  2623,  4042,  1720,  1720,  1720,
-    1720,  -343,  1720,  1720,  1720,  1720,  -343,   150,   109,  -343,
-    -343,  -343,  3263,    82,  3103,  -343,   147,  1526,    87,    88,
-    -343,  -343,  3433,  -343,  -343,  -343,  -343,  -343,  -343,  -343,
-    -343,   116,  1720,  -343,  3103,  -343,  -343,  2703,  1526,  3956,
-    -343,  3103,    18,  -343,  1720,  2783,    89,  3969,  3103,  3103,
-    -343,  3433,  -343,    91,  -343,  3103,  2863,  -343,  -343,  2943,
-      92,    94,  -343,  -343
+    2289,  -347,  -347,  -347,  -347,  -347,  -347,   -21,  -347,  3506,
+    1422,  1519,  -347,  -347,  3506,  -347,    -4,  -347,  -347,  1616,
+      72,  3585,  -347,  3506,  -347,  -347,  3506,  1616,  1422,  3506,
+    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
+    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
+    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
+    -347,  -347,  -347,  1519,  3506,  3506,  3900,  -347,    30,  2289,
+    -347,  -347,  -347,  -347,  1616,  -347,  -347,  -347,  -347,  -347,
+    -347,  -347,  -347,  -347,  -347,   -50,  -347,  -347,  -347,  -347,
+    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
+    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
+    -347,   -14,     5,  -347,  -347,  -347,  -347,  1713,  1713,  1713,
+    1713,  1519,  1519,  1713,  1713,  1713,  1713,  1713,  3664,  1519,
+    1713,  1713,  1325,   741,     7,    14,    16,  -347,  -347,  -347,
+    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,   840,  -347,
+    1519,   518,  3506,    24,    26,   937,  3506,  1519,  3743,  -347,
+    -347,   -15,  -347,    93,    34,    36,  1034,    38,    41,    42,
+     429,    43,  3506,  -347,  -347,  -347,    44,  1131,  -347,  -347,
+    3506,  -347,  -347,  -347,  -347,  1228,  4115,  -347,    40,    51,
+      54,    67,   -38,   -36,   -35,     8,    11,    37,   106,   109,
+    4061,  -347,  -347,  -347,   531,    39,    45,    47,     1,    12,
+    -347,  4115,    52,    49,  1519,  -347,  -347,   117,  1519,  1519,
+    1519,  1519,  2004,  2004,  2198,  1519,  2101,  2101,  1519,  1519,
+    1519,  1519,  1519,  1519,  1519,  1519,  -347,   629,  -347,   544,
+    3096,  1519,  1519,  1519,  1519,  1519,    48,  -347,  -347,  3822,
+    3822,  3822,   -12,   642,   125,  -347,  -347,  1519,  1519,   -71,
+    -347,  1519,  -347,  -347,  -347,  3900,  3176,  -347,    60,  -347,
+    -347,   132,  4128,  1713,  1713,  1713,  1713,  1713,  1713,  1713,
+    1713,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
+    -347,  -347,  -347,  -347,  -347,    79,  1810,  1907,  1713,  1713,
+    1519,  -347,  1519,  1519,  -347,  1519,  3427,  -347,  -347,  1519,
+      61,  1519,   -31,   -31,   -31,   -31,   184,   184,  -347,   -42,
+     -31,   -31,   -31,   -31,   -42,   -40,   -40,  -347,  -347,    49,
+    1519,  1519,  1519,  1519,  1519,  1519,  1519,  1519,  1519,  1519,
+    1519,  1519,  1519,  1519,  1519,  1519,  1519,  1519,  3176,   144,
+    3176,  -347,    65,  -347,    66,    68,  1519,  1519,  3176,  1907,
+    3947,  4115,  3506,  -347,  -347,    71,  -347,  -347,  3960,  -347,
+    -347,  -347,  2449,  -347,  -347,  3176,  1519,  -347,   142,  -347,
+     143,  -347,   145,  -347,   148,  -347,  -347,  1713,    79,    79,
+      79,    79,  1713,  1713,    79,  1713,  1713,  -347,  -347,  -347,
+    -347,  -347,  -347,    -7,  4115,  4115,  4115,    39,    45,    69,
+    -347,  4115,  -347,  4115,   -31,   -31,   -31,   -31,   184,   184,
+    -347,   -42,   -31,   -31,   -31,   -31,   -42,   -40,   -40,  -347,
+    -347,    49,  2369,  3256,  3176,  -347,  -347,  -347,  3973,   164,
+    2536,  -347,  3506,   -71,  -347,    81,  -347,  2616,  4115,  1713,
+    1713,  1713,  1713,  -347,  1713,  1713,  1713,  1713,  -347,   153,
+     111,  -347,  -347,  -347,  3336,    88,  3176,  -347,  3176,   152,
+    1519,    90,    91,  -347,  -347,  3506,  -347,  -347,  -347,  -347,
+    -347,  -347,  -347,  -347,   118,  1713,  -347,  3176,  -347,  -347,
+    2696,  2776,  1519,  4029,  -347,  3176,    18,  -347,  1713,  2856,
+      95,    96,  4042,  3176,  3176,  -347,  3506,  -347,    98,  -347,
+    -347,  3176,  2936,  -347,  -347,  3016,    99,   100,  -347,  -347
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -878,68 +878,68 @@ static const yytype_int16 yydefact[] =
      100,   101,   102,   103,   104,     0,   118,    79,    78,    80,
       82,    83,    84,    86,    53,    92,    59,    62,    93,    94,
       81,    89,    90,    85,    67,    91,    88,    87,    61,    77,
-      97,     0,    96,   159,   160,   162,   161,    31,    37,    60,
+      97,     0,    96,   160,   161,   163,   162,    31,    37,    60,
       72,    38,    52,    54,    32,    42,    45,    75,    68,    65,
-       0,     0,     0,   274,   171,     0,     0,   232,   166,   167,
-     168,   169,   188,   189,   190,   170,   233,   234,   121,   235,
-       0,     0,    95,     0,     0,   121,     0,     0,    68,   171,
-     174,     0,   175,     0,     0,     0,   121,     0,     0,     0,
+       0,     0,     0,   275,   172,     0,     0,   233,   167,   168,
+     169,   170,   189,   190,   191,   171,   234,   235,   121,   236,
+       0,     0,    95,     0,     0,   121,     0,     0,    68,   172,
+     175,     0,   176,     0,     0,     0,   121,     0,     0,     0,
        0,     0,    95,   119,     1,     4,     0,   121,   117,   138,
-       0,   177,   176,   186,   187,   127,   128,   163,     0,     0,
-       0,     0,    25,    26,    27,    47,    63,    44,    55,   198,
-       0,   230,   231,   125,     0,   162,   161,     0,   171,     0,
-     225,   276,     0,   275,   274,   110,   111,    56,     0,     0,
+       0,   178,   177,   187,   188,   127,   128,   164,     0,     0,
+       0,     0,    25,    26,    27,    47,    63,    44,    55,   199,
+       0,   231,   232,   125,     0,   163,   162,     0,   172,     0,
+     226,   277,     0,   276,   275,   110,   111,    56,     0,     0,
        0,     0,    29,    57,    51,     0,    34,    66,     0,     0,
-       0,     0,     0,     0,     0,     0,   253,   123,   254,     0,
+       0,     0,     0,     0,     0,     0,   254,   123,   255,     0,
        0,     0,     0,     0,     0,     0,     0,   116,   109,    41,
       28,    30,     0,     0,    55,   136,   137,     0,     0,    13,
-     114,    73,   112,   113,   140,     0,   153,   139,     0,   108,
+     114,    73,   112,   113,   140,     0,   154,   139,     0,   108,
       98,    56,   131,     0,     0,     0,     0,     0,     0,     0,
-       0,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   216,   218,   219,   217,     0,     0,     0,     0,     0,
-       0,   165,     0,     0,   223,     0,     0,   224,   222,     0,
-       0,     0,   245,   246,   243,   244,   247,   248,   240,   250,
-     251,   252,   242,   241,   249,   236,   237,   238,   239,   122,
+       0,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   217,   219,   220,   218,     0,     0,     0,     0,     0,
+       0,   166,     0,     0,   224,     0,     0,   225,   223,     0,
+       0,     0,   246,   247,   244,   245,   248,   249,   241,   251,
+     252,   253,   243,   242,   250,   237,   238,   239,   240,   122,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   153,   141,
-     153,   172,     0,   173,     0,     0,     0,   153,     0,     0,
-     152,     0,    17,    18,    11,    14,    15,     0,   150,   157,
-     158,     0,   154,   155,   153,     0,   178,     0,   182,     0,
-     184,     0,   180,     0,   220,   221,     0,    33,    43,    46,
-      76,    48,    49,    50,    64,    65,   200,   193,   192,   199,
-     272,   273,     0,   229,   227,   228,     0,     0,     0,   226,
-     277,   164,   130,   264,   265,   262,   263,   266,   267,   259,
-     269,   270,   271,   261,   260,   268,   255,   256,   257,   258,
-     124,     0,     0,    10,   132,   133,   134,     0,     0,   135,
-      95,     0,   115,     0,   156,    20,   129,     0,     0,     0,
-       0,   191,     0,     0,     0,     0,   197,     0,     0,   195,
-     196,   126,     0,     0,   153,   143,     0,     0,     0,     0,
-      16,   151,    21,   179,   183,   185,   181,   211,   213,   214,
-     212,     0,     0,   215,   153,   145,   142,     0,     0,     0,
-     147,   153,     0,    22,     0,     0,     0,     0,   153,    12,
-      19,     0,   194,     0,   144,   153,     0,    23,   146,     0,
-       0,     0,   148,   149
+       0,     0,     0,     0,     0,     0,     0,     0,   154,   141,
+     154,   173,     0,   174,     0,     0,     0,     0,   154,     0,
+       0,   153,     0,    17,    18,    11,    14,    15,     0,   151,
+     158,   159,     0,   155,   156,   154,     0,   179,     0,   183,
+       0,   185,     0,   181,     0,   221,   222,     0,    33,    43,
+      46,    76,    48,    49,    50,    64,    65,   201,   194,   193,
+     200,   273,   274,     0,   230,   228,   229,     0,     0,     0,
+     227,   278,   165,   130,   265,   266,   263,   264,   267,   268,
+     260,   270,   271,   272,   262,   261,   269,   256,   257,   258,
+     259,   124,     0,     0,    10,   132,   133,   134,     0,     0,
+       0,   135,    95,     0,   115,     0,   157,    20,   129,     0,
+       0,     0,     0,   192,     0,     0,     0,     0,   198,     0,
+       0,   196,   197,   126,     0,     0,   154,   143,   154,     0,
+       0,     0,     0,    16,   152,    21,   180,   184,   186,   182,
+     212,   214,   215,   213,     0,     0,   216,   154,   145,   142,
+       0,     0,     0,     0,   147,   154,     0,    22,     0,     0,
+       0,     0,     0,   154,    12,    19,     0,   195,     0,   144,
+     150,   154,     0,    23,   146,     0,     0,     0,   148,   149
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -343,  -343,  -343,   123,  -343,  -343,  -343,  -343,  -343,  -247,
-    -343,  -343,     0,    -5,   -27,  -343,     7,   -63,  -343,     1,
-     168,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -343,  -342,
-    -343,  -341,   -98,   -20,  -124,  -343,  -131,  -343,  -343,  -100,
-    -260,   178,  -343,  -343,  -343,  -288,  -343,  -343,  -106,  -343,
-     258,    61,    16,   -71,     2,  -230
+    -347,  -347,  -347,   121,  -347,  -347,  -347,  -347,  -347,  -244,
+    -347,  -347,     0,    -6,   -28,  -347,     6,   -62,  -347,    -3,
+     172,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -336,
+    -347,  -335,  -120,   -19,  -122,  -347,  -131,  -347,  -347,   -96,
+    -258,   183,  -347,  -347,  -347,  -346,  -347,  -347,  -101,  -347,
+     260,    62,    29,   -99,     9,  -230
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    68,    69,    70,    71,    72,   363,   364,   365,   366,
-      73,   492,   109,   134,   111,   112,   370,    76,    77,   135,
-     136,    78,   257,    79,    80,    81,    82,    83,    84,   371,
-     372,   373,   137,   138,   352,   161,   139,   140,   141,   396,
-     397,   142,   143,   144,   295,   386,   145,   209,   210,   146,
+       0,    68,    69,    70,    71,    72,   364,   365,   366,   367,
+      73,   496,   109,   134,   111,   112,   371,    76,    77,   135,
+     136,    78,   257,    79,    80,    81,    82,    83,    84,   372,
+     373,   374,   137,   138,   352,   161,   139,   140,   141,   397,
+     398,   142,   143,   144,   295,   387,   145,   209,   210,   146,
      147,   211,   237,   149,   212,   213
 };
 
@@ -948,106 +948,115 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      74,   160,   169,   173,   110,   329,   431,    75,   433,   152,
-     243,   273,    85,   225,   361,   438,   159,   274,   163,   243,
-     154,   164,   214,   255,   110,   153,   305,   362,   165,   167,
-     444,   281,   445,   256,   283,   285,   243,   171,   282,   275,
-     287,   284,   286,   277,   289,   276,   309,   288,   461,   278,
-     236,   290,   230,   231,   232,   233,   234,   236,   174,   110,
-     172,   279,   231,   232,   233,   234,    74,   280,   236,    74,
-     402,   148,   151,   156,   157,   176,    75,   238,    86,   236,
-     155,   233,   234,   178,   238,   179,   384,   236,   166,   148,
-     444,   385,   444,   258,   306,   238,   180,   444,   307,   452,
-     453,   454,   455,   214,   444,   458,   238,   291,   296,   292,
-     215,   293,   297,   294,   238,   500,   501,   430,   353,   353,
-     353,   216,   487,   199,   170,   246,   354,   355,   208,   247,
-     302,   248,   259,   260,   303,   177,   262,   263,   264,   267,
-     269,   311,   495,   309,   350,   268,   444,   110,   304,   499,
-     308,   252,   356,   199,   444,   358,   506,   375,   444,   374,
-     432,   447,   434,   509,   411,   444,   435,   110,   444,   436,
-     441,   448,   471,   449,   450,   270,   466,   305,   481,   486,
-     482,   488,   185,   186,   490,   491,   504,   494,   508,   512,
-     200,   513,   175,   204,   470,   467,   168,   399,   483,   162,
-     409,   272,   368,   218,   219,   220,   221,   241,   242,     0,
-     243,   239,     0,   225,   244,   245,   310,     0,   253,     0,
-       0,     0,     0,     0,     0,   218,   219,   220,   221,   351,
-     351,   351,   243,     0,     0,   225,   244,   245,     0,     0,
-      74,     0,     0,     0,   159,   159,   159,   349,     0,     0,
-     228,   229,   230,   231,   232,   233,   234,     0,     0,     0,
+      74,   169,   160,   110,   173,   329,    75,   243,   152,   243,
+      85,   356,   432,   362,   434,   159,   154,   163,   243,   255,
+     164,   225,   440,   110,   165,   167,   363,   153,   236,   256,
+     174,   281,   357,   283,   285,   236,   171,   446,   282,   447,
+     284,   286,   454,   455,   456,   457,   236,   178,   460,   238,
+     231,   232,   233,   234,   233,   234,   238,   236,   110,   172,
+     230,   231,   232,   233,   234,   236,    74,   238,   273,    74,
+     403,   176,   148,   151,   274,    75,    86,   287,   238,   275,
+     289,   155,   277,   179,   288,   276,   238,   290,   278,   166,
+     148,   309,   291,   463,   292,   279,   293,   446,   294,   446,
+     214,   280,   385,   180,   305,   446,   214,   386,   156,   157,
+     306,   215,   446,   216,   307,   505,   506,   431,   353,   353,
+     353,   247,   199,   248,   246,   170,   258,   208,   354,   355,
+     490,   259,   491,   260,   296,   262,   177,   297,   263,   264,
+     267,   269,   302,   311,   268,   350,   110,   309,   303,   304,
+     252,   499,   199,   359,   308,   446,   446,   375,   376,   504,
+     433,   412,   435,   436,   446,   437,   110,   512,   443,   446,
+     449,   450,   305,   451,   270,   515,   452,   446,   474,   469,
+     446,   484,   485,   185,   186,   489,   492,   494,   495,   498,
+     175,   200,   509,   510,   204,   514,   518,   519,   470,   473,
+     168,   400,   486,   369,   162,   410,   218,   219,   220,   221,
+     241,   242,   239,   243,   272,     0,   225,   244,   245,   253,
+       0,     0,     0,   310,     0,     0,   218,   219,   220,   221,
+     351,   351,   351,   243,     0,     0,   225,   244,   245,     0,
+      74,     0,     0,   159,   159,   159,   349,     0,     0,     0,
+       0,     0,     0,   228,   229,   230,   231,   232,   233,   234,
        0,     0,     0,     0,     0,    74,    74,     0,     0,     0,
-       0,     0,   228,   229,   230,   231,   232,   233,   234,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,     0,     0,     0,     0,
-       0,   408,   316,   317,   318,   320,   321,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   359,   360,
-       0,     0,   367,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   228,   229,   230,   231,   232,   233,   234,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,     0,     0,     0,
+     409,     0,     0,   316,   317,   318,   320,   321,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   360,
+     361,     0,     0,   368,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    74,     0,
-      74,     0,     0,     0,     0,     0,   440,    74,     0,     0,
-       0,     0,     0,   403,   404,     0,   405,     0,     0,     0,
-     410,    74,   412,     0,    74,   181,   182,   183,   184,     0,
-       0,   187,   188,   189,   190,   191,     0,     0,   201,   202,
-       0,   413,   414,   415,   416,   417,   418,   419,   420,   421,
-     422,   423,   424,   425,   426,   427,   428,   429,     0,     0,
-       0,     0,     0,   469,     0,     0,     0,   437,     0,     0,
+      74,     0,     0,     0,     0,     0,   442,     0,    74,     0,
+       0,     0,     0,     0,   404,   405,     0,   406,     0,     0,
+       0,   411,    74,   413,     0,    74,     0,   181,   182,   183,
+     184,     0,     0,   187,   188,   189,   190,   191,     0,     0,
+     201,   202,   414,   415,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   425,   426,   427,   428,   429,   430,     0,
+       0,     0,     0,     0,   472,     0,     0,     0,   438,   439,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    74,    74,    74,     0,   110,   446,     0,    74,   465,
-       0,     0,     0,     0,     0,    74,     0,     0,     0,     0,
+       0,     0,    74,    74,    74,     0,   110,     0,   448,   467,
+      74,     0,     0,     0,     0,     0,     0,    74,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,   265,    74,     0,     0,   493,     0,   485,
-       0,   218,   219,   220,   221,   241,   242,     0,   243,     0,
-       0,   225,   244,   245,    74,     0,     0,    74,     0,     0,
-       0,    74,     0,     0,     0,    74,   507,     0,    74,    74,
-       0,     0,     0,     0,     0,    74,    74,     0,     0,    74,
-       0,     0,     0,     0,     0,     0,     0,     0,   228,   229,
-     230,   231,   232,   233,   234,     0,   266,     0,   489,     0,
-       0,   376,   377,   378,   379,   380,   381,   382,   383,     0,
-       0,   218,   219,   220,   221,   241,   242,     0,   243,   497,
-     240,   225,   244,   245,   398,   398,   400,   401,     0,   218,
-     219,   220,   221,   241,   242,     0,   243,     0,     0,   225,
-     244,   245,   218,   219,   220,   221,   241,   242,     0,   243,
-       0,     0,   225,   244,   245,     0,     0,     0,   228,   229,
-     230,   231,   232,   233,   234,     0,     0,   300,     0,   301,
-       0,     0,     0,     0,     0,     0,   228,   229,   230,   231,
-     232,   233,   234,     0,     0,     0,   398,     0,     0,   228,
-     229,   230,   231,   232,   233,   234,     0,     0,     0,     0,
-     301,   330,   331,   332,   333,   334,   335,     0,   336,     0,
-       0,   337,   338,   339,   451,     0,     0,     0,     0,   456,
-     457,     0,   459,   460,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   265,    74,     0,    74,     0,    74,   497,
+     488,   218,   219,   220,   221,   241,   242,     0,   243,     0,
+       0,   225,   244,   245,     0,     0,     0,    74,     0,     0,
+      74,    74,     0,     0,     0,    74,     0,     0,     0,    74,
+     513,     0,     0,    74,    74,     0,     0,     0,     0,     0,
+       0,    74,    74,     0,     0,    74,     0,     0,   228,   229,
+     230,   231,   232,   233,   234,     0,   266,     0,     0,     0,
+       0,     0,   493,   377,   378,   379,   380,   381,   382,   383,
+     384,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   240,     0,     0,   502,     0,   399,   399,   401,   402,
+     218,   219,   220,   221,   241,   242,     0,   243,     0,     0,
+     225,   244,   245,   218,   219,   220,   221,   241,   242,     0,
+     243,     0,     0,   225,   244,   245,   218,   219,   220,   221,
+     241,   242,     0,   243,     0,     0,   225,   244,   245,     0,
+       0,     0,     0,     0,     0,     0,     0,   228,   229,   230,
+     231,   232,   233,   234,     0,     0,     0,     0,     0,   399,
+     228,   229,   230,   231,   232,   233,   234,     0,     0,   300,
+       0,   301,     0,   228,   229,   230,   231,   232,   233,   234,
+       0,     0,     0,     0,   301,     0,     0,   453,     0,     0,
+       0,     0,   458,   459,     0,   461,   462,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   340,   341,
+       0,   330,   331,   332,   333,   334,   335,     0,   336,     0,
+       0,   337,   338,   339,   218,   219,   220,   221,   241,   242,
+       0,   243,     0,     0,   225,   244,   245,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   476,
+     477,   478,   479,     0,   480,   481,   482,   483,   340,   341,
      342,   343,   344,   345,   346,     0,     0,   347,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   473,   474,   475,   476,     0,
-     477,   478,   479,   480,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     456,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   502,   113,   114,     1,   205,   206,    87,   117,
-     118,   119,   120,     6,    88,     0,    89,     8,    90,    91,
-      92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
-      97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
-       0,     0,     0,     0,    30,    31,   123,    33,    34,    35,
-       0,    36,    37,   124,    39,   125,    41,   126,    43,   127,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   128,    58,    59,   129,    61,    62,   104,
-     105,   106,   107,     0,     0,     0,   108,     0,     0,     0,
-     130,   131,     0,     0,     0,     0,     0,   150,     0,   133,
-       0,   207,   113,   114,     1,   115,   116,    87,   117,   118,
+       0,   228,   229,   230,   231,   232,   233,   234,     0,   358,
+       0,     0,     0,     0,     0,   458,   113,   114,     1,   205,
+     206,    87,   117,   118,   119,   120,     6,    88,   507,    89,
+       8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
+      18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
+     101,   102,   103,     0,     0,     0,     0,    30,    31,   123,
+      33,    34,    35,     0,    36,    37,   124,    39,   125,    41,
+     126,    43,   127,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,   128,    58,    59,   129,
+      61,    62,   104,   105,   106,   107,     0,     0,     0,   108,
+       0,     0,     0,   130,   131,     0,     0,     0,     0,     0,
+     150,     0,   133,     0,   207,   113,   114,     1,   115,   116,
+      87,   117,   118,   119,   120,     6,    88,     0,    89,     8,
+      90,    91,    92,    12,    13,    93,    15,    94,   217,    18,
+      95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
+     102,   103,   218,   219,   220,   221,   222,   223,   123,   224,
+      34,    35,   225,   226,   227,   124,    39,   125,    41,   126,
+      43,   127,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,   128,    58,    59,   129,    61,
+      62,   104,   105,   106,   107,     0,     0,     0,   108,   228,
+     229,   230,   231,   232,   233,   234,     0,     0,   235,   150,
+       0,   133,   113,   114,     1,   115,   116,    87,   117,   118,
      119,   120,     6,    88,     0,    89,     8,    90,    91,    92,
-      12,    13,    93,    15,    94,   217,    18,    95,    96,    97,
+      12,   249,    93,    15,    94,    17,    18,    95,    96,    97,
       98,    22,    99,    24,    25,   100,   101,   102,   103,   218,
-     219,   220,   221,   222,   223,   123,   224,    34,    35,   225,
+     219,   220,   221,   222,   223,   123,   224,   250,   251,   225,
      226,   227,   124,    39,   125,    41,   126,    43,   127,    45,
       46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
       55,    56,   128,    58,    59,   129,    61,    62,   104,   105,
      106,   107,     0,     0,     0,   108,   228,   229,   230,   231,
      232,   233,   234,     0,     0,   235,   150,     0,   133,   113,
      114,     1,   115,   116,    87,   117,   118,   119,   120,     6,
-      88,     0,    89,     8,    90,    91,    92,    12,   249,    93,
+      88,     0,    89,     8,    90,    91,    92,    12,    13,    93,
       15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
-      24,    25,   100,   101,   102,   103,   218,   219,   220,   221,
-     222,   223,   123,   224,   250,   251,   225,   226,   227,   124,
+     261,    25,   100,   101,   102,   103,   218,   219,   220,   221,
+     222,   223,   123,   224,    34,    35,   225,   226,   227,   124,
       39,   125,    41,   126,    43,   127,    45,    46,    47,    48,
       49,    50,     0,    51,    52,    53,    54,    55,    56,   128,
       58,    59,   129,    61,    62,   104,   105,   106,   107,     0,
@@ -1055,7 +1064,7 @@ static const yytype_int16 yytable[] =
        0,     0,   235,   150,     0,   133,   113,   114,     1,   115,
      116,    87,   117,   118,   119,   120,     6,    88,     0,    89,
        8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
-      18,    95,    96,    97,    98,    22,    99,   261,    25,   100,
+      18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
      101,   102,   103,   218,   219,   220,   221,   222,   223,   123,
      224,    34,    35,   225,   226,   227,   124,    39,   125,    41,
      126,    43,   127,    45,    46,    47,    48,    49,    50,     0,
@@ -1064,26 +1073,26 @@ static const yytype_int16 yytable[] =
      228,   229,   230,   231,   232,   233,   234,     0,     0,   235,
      150,     0,   133,   113,   114,     1,   115,   116,    87,   117,
      118,   119,   120,     6,    88,     0,    89,     8,    90,    91,
-      92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
+      92,    12,    13,    93,    15,    94,   271,    18,    95,    96,
       97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
      218,   219,   220,   221,   222,   223,   123,   224,    34,    35,
      225,   226,   227,   124,    39,   125,    41,   126,    43,   127,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
       54,    55,    56,   128,    58,    59,   129,    61,    62,   104,
      105,   106,   107,     0,     0,     0,   108,   228,   229,   230,
-     231,   232,   233,   234,     0,     0,   235,   150,     0,   133,
+     231,   232,   233,   234,     0,     0,     0,   150,     0,   133,
      113,   114,     1,   115,   116,    87,   117,   118,   119,   120,
        6,    88,     0,    89,     8,    90,    91,    92,    12,    13,
-      93,    15,    94,   271,    18,    95,    96,    97,    98,    22,
-      99,    24,    25,   100,   101,   102,   103,   218,   219,   220,
-     221,   222,   223,   123,   224,    34,    35,   225,   226,   227,
+      93,    15,    94,    17,    18,    95,    96,    97,    98,    22,
+      99,    24,    25,   100,   101,   102,   103,     0,     0,     0,
+       0,    30,    31,   123,    33,    34,    35,     0,    36,    37,
      124,    39,   125,    41,   126,    43,   127,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
      128,    58,    59,   129,    61,    62,   104,   105,   106,   107,
-       0,     0,     0,   108,   228,   229,   230,   231,   232,   233,
-     234,     0,     0,     0,   150,     0,   133,   113,   114,     1,
+       0,     0,     0,   108,     0,     0,     0,   130,   131,     0,
+       0,     0,     0,     0,   150,   203,   133,   113,   114,     1,
      115,   116,    87,   117,   118,   119,   120,     6,    88,     0,
-      89,     8,    90,    91,    92,    12,    13,    93,    15,    94,
+      89,   121,    90,    91,    92,    12,    13,    93,   122,    94,
       17,    18,    95,    96,    97,    98,    22,    99,    24,    25,
      100,   101,   102,   103,     0,     0,     0,     0,    30,    31,
      123,    33,    34,    35,     0,    36,    37,   124,    39,   125,
@@ -1091,16 +1100,16 @@ static const yytype_int16 yytable[] =
        0,    51,    52,    53,    54,    55,    56,   128,    58,    59,
      129,    61,    62,   104,   105,   106,   107,     0,     0,     0,
      108,     0,     0,     0,   130,   131,     0,     0,     0,     0,
-       0,   150,   203,   133,   113,   114,     1,   115,   116,    87,
-     117,   118,   119,   120,     6,    88,     0,    89,   121,    90,
-      91,    92,    12,    13,    93,   122,    94,    17,    18,    95,
+       0,   132,     0,   133,   113,   114,     1,   115,   116,    87,
+     117,   118,   119,   120,     6,    88,     0,    89,     8,    90,
+      91,    92,    12,    13,    93,    15,    94,    17,    18,    95,
       96,    97,    98,    22,    99,    24,    25,   100,   101,   102,
      103,     0,     0,     0,     0,    30,    31,   123,    33,    34,
       35,     0,    36,    37,   124,    39,   125,    41,   126,    43,
      127,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,   128,    58,    59,   129,    61,    62,
      104,   105,   106,   107,     0,     0,     0,   108,     0,     0,
-       0,   130,   131,     0,     0,     0,     0,     0,   132,     0,
+       0,   130,   131,     0,     0,     0,     0,     0,   150,     0,
      133,   113,   114,     1,   115,   116,    87,   117,   118,   119,
      120,     6,    88,     0,    89,     8,    90,    91,    92,    12,
       13,    93,    15,    94,    17,    18,    95,    96,    97,    98,
@@ -1110,7 +1119,7 @@ static const yytype_int16 yytable[] =
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
       56,   128,    58,    59,   129,    61,    62,   104,   105,   106,
      107,     0,     0,     0,   108,     0,     0,     0,   130,   131,
-       0,     0,     0,     0,     0,   150,     0,   133,   113,   114,
+       0,     0,     0,     0,     0,   132,     0,   133,   113,   114,
        1,   115,   116,    87,   117,   118,   119,   120,     6,    88,
        0,    89,     8,    90,    91,    92,    12,    13,    93,    15,
       94,    17,    18,    95,    96,    97,    98,    22,    99,    24,
@@ -1118,16 +1127,16 @@ static const yytype_int16 yytable[] =
       31,   123,    33,    34,    35,     0,    36,    37,   124,    39,
      125,    41,   126,    43,   127,    45,    46,    47,    48,    49,
       50,     0,    51,    52,    53,    54,    55,    56,   128,    58,
-      59,   129,    61,    62,   104,   105,   106,   107,     0,     0,
+      59,    60,    61,    62,   104,   105,   106,   107,     0,     0,
        0,   108,     0,     0,     0,   130,   131,     0,     0,     0,
-       0,     0,   132,     0,   133,   113,   114,     1,   115,   116,
+       0,     0,   150,     0,   133,   113,   114,     1,   115,   116,
       87,   117,   118,   119,   120,     6,    88,     0,    89,     8,
       90,    91,    92,    12,    13,    93,    15,    94,    17,    18,
       95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
      102,   103,     0,     0,     0,     0,    30,    31,   123,    33,
-      34,    35,     0,    36,    37,   124,    39,   125,    41,   126,
-      43,   127,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,   128,    58,    59,    60,    61,
+      34,    35,     0,    36,    37,   124,   388,   125,   389,   126,
+     390,   127,   391,    46,    47,    48,    49,    50,     0,    51,
+      52,   392,   393,   394,    56,   128,    58,   395,   396,    61,
       62,   104,   105,   106,   107,     0,     0,     0,   108,     0,
        0,     0,   130,   131,     0,     0,     0,     0,     0,   150,
        0,   133,   113,   114,     1,   115,   116,    87,   117,   118,
@@ -1135,26 +1144,26 @@ static const yytype_int16 yytable[] =
       12,    13,    93,    15,    94,    17,    18,    95,    96,    97,
       98,    22,    99,    24,    25,   100,   101,   102,   103,     0,
        0,     0,     0,    30,    31,   123,    33,    34,    35,     0,
-      36,    37,   124,   387,   125,   388,   126,   389,   127,   390,
-      46,    47,    48,    49,    50,     0,    51,    52,   391,   392,
-     393,    56,   128,    58,   394,   395,    61,    62,   104,   105,
+      36,    37,   124,    39,   125,    41,   126,    43,   127,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,   392,   393,
+      55,    56,   128,    58,   395,   396,    61,    62,   104,   105,
      106,   107,     0,     0,     0,   108,     0,     0,     0,   130,
      131,     0,     0,     0,     0,     0,   150,     0,   133,   113,
      114,     1,   115,   116,    87,   117,   118,   119,   120,     6,
       88,     0,    89,     8,    90,    91,    92,    12,    13,    93,
       15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
       24,    25,   100,   101,   102,   103,     0,     0,     0,     0,
-      30,    31,   123,    33,    34,    35,     0,    36,    37,   124,
+       0,     0,   123,    33,    34,    35,     0,    36,    37,   124,
       39,   125,    41,   126,    43,   127,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,   391,   392,    55,    56,   128,
-      58,   394,   395,    61,    62,   104,   105,   106,   107,     0,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   128,
+      58,    59,   129,    61,    62,   104,   105,   106,   107,     0,
        0,     0,   108,     0,     0,     0,   130,   131,     0,     0,
        0,     0,     0,   150,     0,   133,   113,   114,     1,   115,
      116,    87,   117,   118,   119,   120,     6,    88,     0,    89,
        8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
       18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
      101,   102,   103,     0,     0,     0,     0,     0,     0,   123,
-      33,    34,    35,     0,    36,    37,   124,    39,   125,    41,
+      33,    34,    35,     0,     0,     0,   124,    39,   125,    41,
      126,    43,   127,    45,    46,    47,    48,    49,    50,     0,
       51,    52,    53,    54,    55,    56,   128,    58,    59,   129,
       61,    62,   104,   105,   106,   107,     0,     0,     0,   108,
@@ -1163,134 +1172,156 @@ static const yytype_int16 yytable[] =
      118,   119,   120,     6,    88,     0,    89,     8,    90,    91,
       92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
       97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
-       0,     0,     0,     0,     0,     0,   123,    33,    34,    35,
+       0,     0,     0,     0,     0,     0,   123,     0,    34,    35,
        0,     0,     0,   124,    39,   125,    41,   126,    43,   127,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
       54,    55,    56,   128,    58,    59,   129,    61,    62,   104,
      105,   106,   107,     0,     0,     0,   108,     0,     0,     0,
-     130,   131,     0,     0,     0,     0,     0,   150,     0,   133,
-     113,   114,     1,   115,   116,    87,   117,   118,   119,   120,
-       6,    88,     0,    89,     8,    90,    91,    92,    12,    13,
-      93,    15,    94,    17,    18,    95,    96,    97,    98,    22,
-      99,    24,    25,   100,   101,   102,   103,     0,     0,     0,
-       0,     0,     0,   123,     0,    34,    35,     0,     0,     0,
-     124,    39,   125,    41,   126,    43,   127,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     128,    58,    59,   129,    61,    62,   104,   105,   106,   107,
-       0,     0,     0,   108,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     1,   150,     0,   133,     2,     3,     4,
+       0,     0,     0,     0,     0,     0,     1,   150,     0,   133,
+       2,     3,     4,     5,     6,     0,     0,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,    26,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,     0,     0,     0,     1,    66,     0,     0,
+       2,     3,     4,     5,     6,   464,    67,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,     0,     0,   465,     0,     1,    66,     0,     0,
+       2,     3,     4,     5,     6,     0,   370,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,     0,     0,     0,     0,   445,    66,     0,     0,
+       0,     0,     0,     1,     0,     0,   370,     2,     3,     4,
        5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
        0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,   471,     1,    66,     0,   475,     2,     3,     4,
+       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
        0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,   462,    67,     7,     8,     9,    10,    11,    12,
+       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
       13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
       22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
        0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,   463,     0,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   369,     7,     8,     9,    10,    11,    12,
+       0,   500,     0,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
       13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
       22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
        0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,     0,   443,    66,     0,     0,     0,     0,     0,
-       1,     0,     0,   369,     2,     3,     4,     5,     6,     0,
-       0,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,   468,
-       1,    66,     0,   472,     2,     3,     4,     5,     6,     0,
-     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
-       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
-     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,   496,     0,
-       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
-     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,   503,     0,
-       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
-     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,   510,
-       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
-     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,   511,
-       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
-     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
-       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
-     348,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
-       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
-     369,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
-       1,    66,     0,     0,     2,     3,     4,     5,     6,     0,
-     464,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
-       0,    66,     0,     0,     0,     0,     0,     0,     0,     0,
-     484,     1,   406,   407,    87,     2,     3,     4,     5,     6,
+       0,     0,   501,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,   508,     0,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,   516,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,   517,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   348,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
+       5,     6,     0,   466,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,     0,     0,    66,     0,     0,     0,     0,     0,
+       0,     0,     0,   487,     1,   407,   408,    87,     2,     3,
+       4,     5,     6,    88,     0,    89,     8,    90,    91,    92,
+      12,    13,    93,    15,    94,    17,    18,    95,    96,    97,
+      98,    22,    99,    24,    25,   100,   101,   102,   103,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,   104,   105,
+     106,   107,     0,     1,     0,   108,    87,     2,     3,     4,
+       5,     6,    88,     0,    89,     8,    90,    91,    92,    12,
+      13,    93,    15,    94,    17,    18,    95,    96,    97,    98,
+      22,    99,    24,    25,   100,   101,   102,   103,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,   104,   105,   106,
+     107,     0,     1,     0,   108,    87,     2,     3,     4,     5,
+       6,    88,     0,    89,     8,    90,    91,    92,    12,    13,
+      93,    15,    94,    17,    18,    95,    96,    97,    98,    22,
+      99,    24,    25,   100,   101,   102,   103,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+     158,    58,    59,    60,    61,    62,   104,   105,   106,   107,
+       0,     1,     0,   108,    87,     2,     3,     4,     5,     6,
       88,     0,    89,     8,    90,    91,    92,    12,    13,    93,
       15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
       24,    25,   100,   101,   102,   103,     0,     0,     0,     0,
       30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      39,    40,    41,    42,    43,    44,    45,   192,   193,   194,
+     195,   196,     0,    51,   197,    53,    54,    55,   198,    57,
       58,    59,    60,    61,    62,   104,   105,   106,   107,     0,
        1,     0,   108,    87,     2,     3,     4,     5,     6,    88,
        0,    89,     8,    90,    91,    92,    12,    13,    93,    15,
@@ -1298,162 +1329,147 @@ static const yytype_int16 yytable[] =
       25,   100,   101,   102,   103,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      50,     0,    51,    52,    53,    54,    55,   254,    57,    58,
       59,    60,    61,    62,   104,   105,   106,   107,     0,     1,
-       0,   108,    87,     2,     3,     4,     5,     6,    88,     0,
+       0,   108,    87,   117,   118,     4,     5,     6,    88,     0,
       89,     8,    90,    91,    92,    12,    13,    93,    15,    94,
       17,    18,    95,    96,    97,    98,    22,    99,    24,    25,
      100,   101,   102,   103,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   158,    58,    59,
-      60,    61,    62,   104,   105,   106,   107,     0,     1,     0,
-     108,    87,     2,     3,     4,     5,     6,    88,     0,    89,
-       8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
-      18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
-     101,   102,   103,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,   192,   193,   194,   195,   196,     0,
-      51,   197,    53,    54,    55,   198,    57,    58,    59,    60,
-      61,    62,   104,   105,   106,   107,     0,     1,     0,   108,
-      87,     2,     3,     4,     5,     6,    88,     0,    89,     8,
-      90,    91,    92,    12,    13,    93,    15,    94,    17,    18,
-      95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
-     102,   103,     0,     0,     0,     0,    30,    31,    32,    33,
+      32,    33,    34,    35,     0,    36,    37,   124,    39,   125,
+      41,   126,    43,   127,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,   104,   105,   106,   107,     1,     0,     0,
+     108,     2,     3,     4,     5,     6,     0,     0,     7,     8,
+       9,    10,     0,    12,    13,     0,    15,    16,    17,    18,
+      19,    96,    21,     0,    22,     0,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
       34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,   254,    57,    58,    59,    60,    61,
-      62,   104,   105,   106,   107,     0,     1,     0,   108,    87,
-     117,   118,     4,     5,     6,    88,     0,    89,     8,    90,
-      91,    92,    12,    13,    93,    15,    94,    17,    18,    95,
-      96,    97,    98,    22,    99,    24,    25,   100,   101,   102,
-     103,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,   124,    39,   125,    41,   126,    43,
-     127,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-     104,   105,   106,   107,     1,     0,     0,   108,     2,     3,
-       4,     5,     6,     0,     0,     7,     8,     9,    10,     0,
-      12,    13,     0,    15,    16,    17,    18,    19,    96,    21,
-       0,    22,     0,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,   104,    64,
-       0,     0,     0,     0,     0,    66,   218,   219,   220,   221,
-     241,   242,     0,   243,     0,     0,   225,   244,   245,   218,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,   104,    64,     0,     0,     0,     0,     0,    66,   218,
      219,   220,   221,   241,   242,     0,   243,     0,     0,   225,
      244,   245,   218,   219,   220,   221,   241,   242,     0,   243,
-       0,     0,   225,   244,   245,     0,     0,     0,     0,     0,
-       0,     0,     0,   228,   229,   230,   231,   232,   233,   234,
-       0,   357,     0,     0,     0,     0,   228,   229,   230,   231,
-     232,   233,   234,     0,   439,     0,     0,     0,     0,   228,
-     229,   230,   231,   232,   233,   234,     0,   442,   218,   219,
-     220,   221,   241,   242,     0,   243,     0,     0,   225,   244,
-     245,   218,   219,   220,   221,   241,   242,     0,   243,     0,
-       0,   225,   244,   245,     0,     0,     0,     0,     0,     0,
-     218,   219,   220,   221,   241,   242,     0,   243,     0,     0,
-     225,   244,   245,     0,     0,   228,   229,   230,   231,   232,
-     233,   234,     0,   498,     0,     0,     0,     0,   228,   229,
-     230,   231,   232,   233,   234,     0,   505,   298,   299,     0,
-       0,     0,     0,     0,     0,     0,     0,   228,   229,   230,
-     231,   232,   233,   234,   218,   219,   220,   221,   241,   242,
-       0,   243,     0,     0,   225,   244,   245,   330,   331,   332,
-     333,   334,   335,     0,   336,     0,     0,   337,   338,   339,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   225,   244,   245,   218,   219,   220,   221,   241,
+     242,     0,   243,     0,     0,   225,   244,   245,     0,     0,
+       0,     0,     0,     0,     0,     0,   228,   229,   230,   231,
+     232,   233,   234,     0,   441,     0,     0,     0,     0,   228,
+     229,   230,   231,   232,   233,   234,     0,   444,     0,     0,
+       0,     0,   228,   229,   230,   231,   232,   233,   234,     0,
+     468,   218,   219,   220,   221,   241,   242,     0,   243,     0,
+       0,   225,   244,   245,   218,   219,   220,   221,   241,   242,
+       0,   243,     0,     0,   225,   244,   245,     0,     0,     0,
+       0,     0,     0,   218,   219,   220,   221,   241,   242,     0,
+     243,     0,     0,   225,   244,   245,     0,     0,   228,   229,
+     230,   231,   232,   233,   234,     0,   503,     0,     0,     0,
+       0,   228,   229,   230,   231,   232,   233,   234,     0,   511,
+     298,   299,     0,     0,     0,     0,     0,     0,     0,     0,
+     228,   229,   230,   231,   232,   233,   234,   218,   219,   220,
+     221,   241,   242,     0,   243,     0,     0,   225,   244,   245,
+     330,   331,   332,   333,   334,   335,     0,   336,     0,     0,
+     337,   338,   339,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   228,   229,   230,   231,   232,   233,   234,     0,     0,
-       0,     0,     0,     0,   340,   341,   342,   343,   344,   345,
-     346
+       0,     0,     0,     0,   228,   229,   230,   231,   232,   233,
+     234,     0,     0,     0,     0,     0,     0,   340,   341,   342,
+     343,   344,   345,   346
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    21,    29,    66,     9,   235,   348,     0,   350,    14,
-      49,    28,    31,    52,    84,   357,    21,    34,    23,    49,
-      19,    26,    99,    34,    29,    31,   103,    97,    27,    28,
-     371,    69,   374,    44,    69,    69,    49,    64,    76,    28,
-      69,    76,    76,    28,    69,    34,    98,    76,   100,    34,
-     148,    76,    91,    92,    93,    94,    95,   155,     0,    64,
-      65,    28,    92,    93,    94,    95,    66,    34,   166,    69,
-     300,    10,    11,    36,    37,    74,    69,   148,    97,   177,
-      19,    94,    95,    97,   155,    97,    23,   185,    27,    28,
-     431,    28,   433,    33,    98,   166,    98,   438,   102,   387,
-     388,   389,   390,    99,   445,   393,   177,    55,    28,    57,
-      97,    59,    28,    61,   185,    97,    98,   347,   249,   250,
-     251,    97,   464,   128,    63,   152,   250,   251,   133,    97,
-     103,    97,    97,    97,   103,    74,    97,    97,    97,    97,
-      97,    26,   484,    98,    97,   172,   487,   152,   102,   491,
-     102,   156,    44,   158,   495,    28,   498,    26,   499,    97,
-      16,    28,    97,   505,   100,   506,    97,   172,   509,    97,
-      97,    28,    97,    28,    28,   180,    15,   103,    28,    97,
-      71,    34,   121,   122,    97,    97,    97,    71,    97,    97,
-     129,    97,    69,   132,   441,    34,    28,   297,   458,    21,
-     306,   185,   265,    42,    43,    44,    45,    46,    47,    -1,
-      49,   150,    -1,    52,    53,    54,   214,    -1,   157,    -1,
-      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,   249,
-     250,   251,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-     240,    -1,    -1,    -1,   249,   250,   251,   240,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
+       0,    29,    21,     9,    66,   235,     0,    49,    14,    49,
+      31,    23,   348,    84,   350,    21,    19,    23,    49,    34,
+      26,    52,   358,    29,    27,    28,    97,    31,   148,    44,
+       0,    69,    44,    69,    69,   155,    64,   372,    76,   375,
+      76,    76,   388,   389,   390,   391,   166,    97,   394,   148,
+      92,    93,    94,    95,    94,    95,   155,   177,    64,    65,
+      91,    92,    93,    94,    95,   185,    66,   166,    28,    69,
+     300,    74,    10,    11,    34,    69,    97,    69,   177,    28,
+      69,    19,    28,    97,    76,    34,   185,    76,    34,    27,
+      28,    98,    55,   100,    57,    28,    59,   432,    61,   434,
+      99,    34,    23,    98,   103,   440,    99,    28,    36,    37,
+      98,    97,   447,    97,   102,    97,    98,   347,   249,   250,
+     251,    97,   128,    97,   152,    63,    33,   133,   250,   251,
+     466,    97,   468,    97,    28,    97,    74,    28,    97,    97,
+      97,    97,   103,    26,   172,    97,   152,    98,   103,   102,
+     156,   487,   158,    28,   102,   490,   491,    97,    26,   495,
+      16,   100,    97,    97,   499,    97,   172,   503,    97,   504,
+      28,    28,   103,    28,   180,   511,    28,   512,    97,    15,
+     515,    28,    71,   121,   122,    97,    34,    97,    97,    71,
+      69,   129,    97,    97,   132,    97,    97,    97,    34,   443,
+      28,   297,   460,   265,    21,   306,    42,    43,    44,    45,
+      46,    47,   150,    49,   185,    -1,    52,    53,    54,   157,
+      -1,    -1,    -1,   214,    -1,    -1,    42,    43,    44,    45,
+     249,   250,   251,    49,    -1,    -1,    52,    53,    54,    -1,
+     240,    -1,    -1,   249,   250,   251,   240,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
       -1,    -1,    -1,    -1,    -1,   265,   266,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,    -1,    -1,    -1,    -1,
-      -1,   306,   241,   242,   243,   244,   245,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   257,   258,
-      -1,    -1,   261,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,    -1,    -1,    -1,
+     306,    -1,    -1,   241,   242,   243,   244,   245,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   257,
+     258,    -1,    -1,   261,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,    -1,
-     350,    -1,    -1,    -1,    -1,    -1,   361,   357,    -1,    -1,
-      -1,    -1,    -1,   302,   303,    -1,   305,    -1,    -1,    -1,
-     309,   371,   311,    -1,   374,   117,   118,   119,   120,    -1,
-      -1,   123,   124,   125,   126,   127,    -1,    -1,   130,   131,
-      -1,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,    -1,    -1,
-      -1,    -1,    -1,   440,    -1,    -1,    -1,   356,    -1,    -1,
+     350,    -1,    -1,    -1,    -1,    -1,   362,    -1,   358,    -1,
+      -1,    -1,    -1,    -1,   302,   303,    -1,   305,    -1,    -1,
+      -1,   309,   372,   311,    -1,   375,    -1,   117,   118,   119,
+     120,    -1,    -1,   123,   124,   125,   126,   127,    -1,    -1,
+     130,   131,   330,   331,   332,   333,   334,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,   344,   345,   346,    -1,
+      -1,    -1,    -1,    -1,   442,    -1,    -1,    -1,   356,   357,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   431,   432,   433,    -1,   440,   375,    -1,   438,   432,
-      -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,    -1,    -1,
+      -1,    -1,   432,   433,   434,    -1,   442,    -1,   376,   433,
+     440,    -1,    -1,    -1,    -1,    -1,    -1,   447,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   462,    34,   464,    -1,    -1,   472,    -1,   462,
-      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,   484,    -1,    -1,   487,    -1,    -1,
-      -1,   491,    -1,    -1,    -1,   495,   501,    -1,   498,   499,
-      -1,    -1,    -1,    -1,    -1,   505,   506,    -1,    -1,   509,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    -1,   467,    -1,
-      -1,   273,   274,   275,   276,   277,   278,   279,   280,    -1,
-      -1,    42,    43,    44,    45,    46,    47,    -1,    49,   488,
-      33,    52,    53,    54,   296,   297,   298,   299,    -1,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    98,    -1,   100,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,   358,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
-     100,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,   386,    -1,    -1,    -1,    -1,   391,
-     392,    -1,   394,   395,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    34,   464,    -1,   466,    -1,   468,   475,
+     464,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,   487,    -1,    -1,
+     490,   491,    -1,    -1,    -1,   495,    -1,    -1,    -1,   499,
+     506,    -1,    -1,   503,   504,    -1,    -1,    -1,    -1,    -1,
+      -1,   511,   512,    -1,    -1,   515,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
+      -1,    -1,   470,   273,   274,   275,   276,   277,   278,   279,
+     280,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    33,    -1,    -1,   492,    -1,   296,   297,   298,   299,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,   359,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
+      -1,   100,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,    -1,   100,    -1,    -1,   387,    -1,    -1,
+      -1,    -1,   392,   393,    -1,   395,   396,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   449,
+     450,   451,   452,    -1,   454,   455,   456,   457,    89,    90,
       91,    92,    93,    94,    95,    -1,    -1,    98,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   447,   448,   449,   450,    -1,
-     452,   453,   454,   455,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     482,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   494,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
-      -1,   103,     5,     6,     7,     8,     9,    10,    11,    12,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      -1,    -1,    -1,    -1,    -1,   485,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,   498,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
+      -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,
+      99,    -1,   101,    -1,   103,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    -1,    -1,    -1,    88,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    98,    99,
+      -1,   101,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
@@ -1491,17 +1507,17 @@ static const yytype_int16 yycheck[] =
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    83,    84,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    98,    99,    -1,   101,
+      92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,   101,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
@@ -1511,7 +1527,7 @@ static const yytype_int16 yycheck[] =
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
       88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
-      -1,    99,   100,   101,     5,     6,     7,     8,     9,    10,
+      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
@@ -1564,7 +1580,7 @@ static const yytype_int16 yycheck[] =
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      -1,    -1,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
@@ -1574,7 +1590,7 @@ static const yytype_int16 yycheck[] =
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,
-      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
+      49,    50,    51,    -1,    -1,    -1,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
@@ -1583,38 +1599,109 @@ static const yytype_int16 yycheck[] =
       12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
+      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    50,    51,
       -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    -1,    50,    51,    -1,    -1,    -1,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     7,    99,    -1,   101,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,     7,    99,    -1,   101,
+      11,    12,    13,    14,    15,    -1,    -1,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    -1,    -1,    -1,     7,    88,    -1,    -1,
+      11,    12,    13,    14,    15,    16,    97,    18,    19,    20,
+      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,    -1,
+      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
+      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    -1,    -1,    87,    88,    -1,    -1,
+      -1,    -1,    -1,     7,    -1,    -1,    97,    11,    12,    13,
       14,    15,    -1,    -1,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    86,     7,    88,    -1,    10,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
       -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
       -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    16,    97,    18,    19,    20,    21,    22,    23,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
       24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
       34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
       -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
       14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
       24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
       34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
@@ -1622,89 +1709,40 @@ static const yytype_int16 yycheck[] =
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
-       7,    -1,    -1,    97,    11,    12,    13,    14,    15,    -1,
-      -1,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    86,
-       7,    88,    -1,    10,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    86,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    86,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-      -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      97,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    97,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    -1,     7,    -1,    88,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    -1,     7,    -1,    88,    10,    11,    12,    13,    14,
+      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      -1,     7,    -1,    88,    10,    11,    12,    13,    14,    15,
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
@@ -1727,63 +1765,39 @@ static const yytype_int16 yycheck[] =
       48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    -1,     7,    -1,
-      88,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,     7,    -1,    88,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      78,    79,    80,    81,    82,    83,    84,     7,    -1,    -1,
+      88,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
+      20,    21,    -1,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
       40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    -1,     7,    -1,    88,    10,
-      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,     7,    -1,    -1,    88,    11,    12,
-      13,    14,    15,    -1,    -1,    18,    19,    20,    21,    -1,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    -1,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    -1,    -1,    88,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
+      80,    81,    82,    -1,    -1,    -1,    -1,    -1,    88,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
       53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
       93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    79,    80,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
+      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      97,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    42,    43,    44,
       45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
       -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95
+      95,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1825,23 +1839,23 @@ static const yytype_uint8 yystos[] =
      155,   155,   155,   155,   155,   155,   155,   155,   155,   159,
       42,    43,    44,    45,    46,    47,    49,    52,    53,    54,
       89,    90,    91,    92,    93,    94,    95,    98,    97,   120,
-      97,   137,   138,   140,   138,   138,    44,    97,    28,   155,
-     155,    84,    97,   110,   111,   112,   113,   155,   121,    97,
-     120,   133,   134,   135,    97,    26,   154,   154,   154,   154,
-     154,   154,   154,   154,    23,    28,   149,    56,    58,    60,
-      62,    71,    72,    73,    77,    78,   143,   144,   154,   143,
-     154,   154,   159,   155,   155,   155,     8,     9,   117,   152,
-     155,   100,   155,   155,   155,   155,   155,   155,   155,   155,
+      97,   137,   138,   140,   138,   138,    23,    44,    97,    28,
+     155,   155,    84,    97,   110,   111,   112,   113,   155,   121,
+      97,   120,   133,   134,   135,    97,    26,   154,   154,   154,
+     154,   154,   154,   154,   154,    23,    28,   149,    56,    58,
+      60,    62,    71,    72,    73,    77,    78,   143,   144,   154,
+     143,   154,   154,   159,   155,   155,   155,     8,     9,   117,
+     152,   155,   100,   155,   155,   155,   155,   155,   155,   155,
      155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-     159,   133,    16,   133,    97,    97,    97,   155,   133,    97,
-     117,    97,    97,    87,   135,   133,   155,    28,    28,    28,
-      28,   154,   149,   149,   149,   149,   154,   154,   149,   154,
-     154,   100,    16,    85,    97,   120,    15,    34,    86,   118,
-     113,    97,    10,   154,   154,   154,   154,   154,   154,   154,
-     154,    28,    71,   144,    97,   120,    97,   133,    34,   155,
-      97,    97,   115,   117,    71,   133,    85,   155,    97,   133,
-      97,    98,   154,    85,    97,    97,   133,   117,    97,   133,
-      86,    86,    97,    97
+     155,   159,   133,    16,   133,    97,    97,    97,   155,   155,
+     133,    97,   117,    97,    97,    87,   135,   133,   155,    28,
+      28,    28,    28,   154,   149,   149,   149,   149,   154,   154,
+     149,   154,   154,   100,    16,    85,    97,   120,    97,    15,
+      34,    86,   118,   113,    97,    10,   154,   154,   154,   154,
+     154,   154,   154,   154,    28,    71,   144,    97,   120,    97,
+     133,   133,    34,   155,    97,    97,   115,   117,    71,   133,
+      85,    86,   155,    97,   133,    97,    98,   154,    85,    97,
+      97,    97,   133,   117,    97,   133,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1862,19 +1876,19 @@ static const yytype_uint8 yyr1[] =
      123,   123,   123,   123,   123,   123,   123,   124,   124,   124,
      124,   124,   125,   125,   125,   125,   126,   126,   127,   127,
      127,   128,   128,   129,   129,   129,   129,   130,   130,   130,
-     131,   131,   132,   133,   133,   134,   134,   135,   135,   136,
+     130,   131,   131,   132,   133,   133,   134,   134,   135,   135,
      136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   137,   138,   138,   139,   139,   140,   140,   140,   140,
-     140,   140,   140,   140,   140,   140,   141,   141,   142,   142,
-     142,   142,   143,   143,   143,   143,   143,   144,   145,   145,
-     145,   146,   146,   146,   146,   146,   146,   146,   146,   146,
-     146,   147,   147,   147,   147,   147,   148,   148,   148,   148,
-     149,   149,   150,   150,   150,   151,   151,   152,   152,   152,
-     153,   153,   154,   154,   155,   155,   155,   155,   155,   155,
+     136,   136,   137,   138,   138,   139,   139,   140,   140,   140,
+     140,   140,   140,   140,   140,   140,   140,   141,   141,   142,
+     142,   142,   142,   143,   143,   143,   143,   143,   144,   145,
+     145,   145,   146,   146,   146,   146,   146,   146,   146,   146,
+     146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
+     148,   149,   149,   150,   150,   150,   151,   151,   152,   152,
+     152,   153,   153,   154,   154,   155,   155,   155,   155,   155,
      155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-     155,   155,   155,   156,   156,   156,   156,   156,   156,   156,
+     155,   155,   155,   155,   156,   156,   156,   156,   156,   156,
      156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   157,   157,   158,   158,   159,   159
+     156,   156,   156,   157,   157,   158,   158,   159,   159
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1895,19 +1909,19 @@ static const yytype_int8 yyr2[] =
        0,     1,     3,     2,     4,     2,     5,     2,     2,     5,
        4,     3,     5,     5,     5,     5,     1,     1,     3,     3,
        3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
-       4,     6,     4,     0,     1,     1,     2,     1,     1,     1,
-       1,     1,     1,     2,     4,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     4,     6,
-       4,     6,     4,     6,     4,     6,     2,     2,     1,     1,
-       1,     5,     1,     1,     5,     2,     2,     2,     2,     4,
-       4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     6,     6,     6,     6,     6,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
-       2,     2,     1,     1,     1,     1,     3,     3,     3,     3,
+       9,     4,     6,     4,     0,     1,     1,     2,     1,     1,
+       1,     1,     1,     1,     2,     4,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     2,     4,
+       6,     4,     6,     4,     6,     4,     6,     2,     2,     1,
+       1,     1,     5,     1,     1,     5,     2,     2,     2,     2,
+       4,     4,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     6,     6,     6,     6,     6,     1,     1,     1,
+       1,     1,     1,     3,     3,     3,     1,     3,     3,     3,
+       3,     2,     2,     1,     1,     1,     1,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     1,     1,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     1,     1,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -2181,37 +2195,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2185 "engines/director/lingo/lingo-gr.cpp"
+#line 2199 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2191 "engines/director/lingo/lingo-gr.cpp"
+#line 2205 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2197 "engines/director/lingo/lingo-gr.cpp"
+#line 2211 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2203 "engines/director/lingo/lingo-gr.cpp"
+#line 2217 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2209 "engines/director/lingo/lingo-gr.cpp"
+#line 2223 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2215 "engines/director/lingo/lingo-gr.cpp"
+#line 2229 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2479,7 +2493,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2483 "engines/director/lingo/lingo-gr.cpp"
+#line 2497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2490,7 +2504,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2494 "engines/director/lingo/lingo-gr.cpp"
+#line 2508 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2500,37 +2514,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2504 "engines/director/lingo/lingo-gr.cpp"
+#line 2518 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2510 "engines/director/lingo/lingo-gr.cpp"
+#line 2524 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2516 "engines/director/lingo/lingo-gr.cpp"
+#line 2530 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2522 "engines/director/lingo/lingo-gr.cpp"
+#line 2536 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2528 "engines/director/lingo/lingo-gr.cpp"
+#line 2542 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2534 "engines/director/lingo/lingo-gr.cpp"
+#line 2548 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2541,7 +2555,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2545 "engines/director/lingo/lingo-gr.cpp"
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
@@ -2551,13 +2565,13 @@ yyreduce:
 			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2555 "engines/director/lingo/lingo-gr.cpp"
+#line 2569 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2561 "engines/director/lingo/lingo-gr.cpp"
+#line 2575 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2566,446 +2580,446 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2570 "engines/director/lingo/lingo-gr.cpp"
+#line 2584 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2577 "engines/director/lingo/lingo-gr.cpp"
+#line 2591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2583 "engines/director/lingo/lingo-gr.cpp"
+#line 2597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2589 "engines/director/lingo/lingo-gr.cpp"
+#line 2603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2595 "engines/director/lingo/lingo-gr.cpp"
+#line 2609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2601 "engines/director/lingo/lingo-gr.cpp"
+#line 2615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2607 "engines/director/lingo/lingo-gr.cpp"
+#line 2621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2613 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2619 "engines/director/lingo/lingo-gr.cpp"
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2625 "engines/director/lingo/lingo-gr.cpp"
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2637 "engines/director/lingo/lingo-gr.cpp"
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2643 "engines/director/lingo/lingo-gr.cpp"
+#line 2657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2655 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2667 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2673 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2685 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2691 "engines/director/lingo/lingo-gr.cpp"
+#line 2705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2697 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2703 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2709 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2715 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2721 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2727 "engines/director/lingo/lingo-gr.cpp"
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2733 "engines/director/lingo/lingo-gr.cpp"
+#line 2747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2739 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2745 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2751 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2757 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2763 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2769 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2775 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2781 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2787 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2793 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2799 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2805 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2811 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSET  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2817 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2823 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2829 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2835 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tSTARTS  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2841 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTELL  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTHE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2853 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tTIME  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2859 "engines/director/lingo/lingo-gr.cpp"
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tTO  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2865 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWHILE  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2871 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWINDOW  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2877 "engines/director/lingo/lingo-gr.cpp"
+#line 2891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWITH  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2883 "engines/director/lingo/lingo-gr.cpp"
+#line 2897 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWITHIN  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2889 "engines/director/lingo/lingo-gr.cpp"
+#line 2903 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* CMDID: tWORD  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2895 "engines/director/lingo/lingo-gr.cpp"
+#line 2909 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* CMDID: tWORDS  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2901 "engines/director/lingo/lingo-gr.cpp"
+#line 2915 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tELSE  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2907 "engines/director/lingo/lingo-gr.cpp"
+#line 2921 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tENDCLAUSE  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2913 "engines/director/lingo/lingo-gr.cpp"
+#line 2927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tEXIT  */
 #line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2919 "engines/director/lingo/lingo-gr.cpp"
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tFACTORY  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2925 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tGLOBAL  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2931 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tGO  */
 #line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2937 "engines/director/lingo/lingo-gr.cpp"
+#line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tIF  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2943 "engines/director/lingo/lingo-gr.cpp"
+#line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tINSTANCE  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2949 "engines/director/lingo/lingo-gr.cpp"
+#line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tMACRO  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2955 "engines/director/lingo/lingo-gr.cpp"
+#line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tMETHOD  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2961 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tON  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 2967 "engines/director/lingo/lingo-gr.cpp"
+#line 2981 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tOPEN  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2973 "engines/director/lingo/lingo-gr.cpp"
+#line 2987 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPLAY  */
 #line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2979 "engines/director/lingo/lingo-gr.cpp"
+#line 2993 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tPROPERTY  */
 #line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 2985 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 2991 "engines/director/lingo/lingo-gr.cpp"
+#line 3005 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
 #line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 2997 "engines/director/lingo/lingo-gr.cpp"
+#line 3011 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
 #line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 3003 "engines/director/lingo/lingo-gr.cpp"
+#line 3017 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
 #line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 3009 "engines/director/lingo/lingo-gr.cpp"
+#line 3023 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* nonemptyidlist: ID  */
@@ -3014,7 +3028,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 3018 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -3022,49 +3036,49 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 3026 "engines/director/lingo/lingo-gr.cpp"
+#line 3040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* proc: CMDID cmdargs '\n'  */
 #line 397 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* proc: tPUT cmdargs '\n'  */
 #line 398 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 3038 "engines/director/lingo/lingo-gr.cpp"
+#line 3052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* proc: tGO cmdargs '\n'  */
 #line 399 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3044 "engines/director/lingo/lingo-gr.cpp"
+#line 3058 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* proc: tGO frameargs '\n'  */
 #line 400 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3050 "engines/director/lingo/lingo-gr.cpp"
+#line 3064 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* proc: tPLAY cmdargs '\n'  */
 #line 401 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3056 "engines/director/lingo/lingo-gr.cpp"
+#line 3070 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* proc: tPLAY frameargs '\n'  */
 #line 402 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3062 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* proc: tOPEN cmdargs '\n'  */
 #line 403 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 3068 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* proc: tOPEN expr tWITH expr '\n'  */
@@ -3074,31 +3088,31 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 3078 "engines/director/lingo/lingo-gr.cpp"
+#line 3092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* proc: tNEXT tREPEAT '\n'  */
 #line 409 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 3084 "engines/director/lingo/lingo-gr.cpp"
+#line 3098 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* proc: tEXIT tREPEAT '\n'  */
 #line 410 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 3090 "engines/director/lingo/lingo-gr.cpp"
+#line 3104 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* proc: tEXIT '\n'  */
 #line 411 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 3096 "engines/director/lingo/lingo-gr.cpp"
+#line 3110 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* proc: tASSERTERROR stmtoneliner  */
 #line 412 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 3102 "engines/director/lingo/lingo-gr.cpp"
+#line 3116 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* cmdargs: %empty  */
@@ -3106,7 +3120,7 @@ yyreduce:
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 3110 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* cmdargs: expr  */
@@ -3116,7 +3130,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3120 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* cmdargs: expr ',' nonemptyexprlist  */
@@ -3125,7 +3139,7 @@ yyreduce:
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 3129 "engines/director/lingo/lingo-gr.cpp"
+#line 3143 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* cmdargs: expr expr_nounarymath  */
@@ -3136,7 +3150,7 @@ yyreduce:
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3140 "engines/director/lingo/lingo-gr.cpp"
+#line 3154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
@@ -3146,7 +3160,7 @@ yyreduce:
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 3150 "engines/director/lingo/lingo-gr.cpp"
+#line 3164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* cmdargs: '(' ')'  */
@@ -3154,7 +3168,7 @@ yyreduce:
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3158 "engines/director/lingo/lingo-gr.cpp"
+#line 3172 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
@@ -3163,7 +3177,7 @@ yyreduce:
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3167 "engines/director/lingo/lingo-gr.cpp"
+#line 3181 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* frameargs: tFRAME expr  */
@@ -3173,7 +3187,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3177 "engines/director/lingo/lingo-gr.cpp"
+#line 3191 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* frameargs: tMOVIE expr  */
@@ -3184,7 +3198,7 @@ yyreduce:
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3188 "engines/director/lingo/lingo-gr.cpp"
+#line 3202 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* frameargs: tFRAME expr tOF tMOVIE expr  */
@@ -3195,7 +3209,7 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3199 "engines/director/lingo/lingo-gr.cpp"
+#line 3213 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130: /* frameargs: expr tOF tMOVIE expr  */
@@ -3206,7 +3220,7 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3210 "engines/director/lingo/lingo-gr.cpp"
+#line 3224 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131: /* frameargs: tFRAME expr expr_nounarymath  */
@@ -3217,49 +3231,49 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3221 "engines/director/lingo/lingo-gr.cpp"
+#line 3235 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* asgn: tPUT expr tINTO varorchunk '\n'  */
 #line 482 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3227 "engines/director/lingo/lingo-gr.cpp"
+#line 3241 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
 #line 483 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3233 "engines/director/lingo/lingo-gr.cpp"
+#line 3247 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
 #line 484 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3239 "engines/director/lingo/lingo-gr.cpp"
+#line 3253 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* asgn: tSET varorthe to expr '\n'  */
 #line 485 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3245 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* definevars: tGLOBAL idlist '\n'  */
 #line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3251 "engines/director/lingo/lingo-gr.cpp"
+#line 3265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* definevars: tPROPERTY idlist '\n'  */
 #line 491 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3257 "engines/director/lingo/lingo-gr.cpp"
+#line 3271 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* definevars: tINSTANCE idlist '\n'  */
 #line 492 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3263 "engines/director/lingo/lingo-gr.cpp"
+#line 3277 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141: /* ifstmt: tIF expr tTHEN stmt  */
@@ -3268,14 +3282,14 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3272 "engines/director/lingo/lingo-gr.cpp"
+#line 3286 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
 #line 499 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3279 "engines/director/lingo/lingo-gr.cpp"
+#line 3293 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
@@ -3286,7 +3300,7 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3290 "engines/director/lingo/lingo-gr.cpp"
+#line 3304 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
@@ -3295,7 +3309,7 @@ yyreduce:
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3299 "engines/director/lingo/lingo-gr.cpp"
+#line 3313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
@@ -3304,700 +3318,707 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3308 "engines/director/lingo/lingo-gr.cpp"
+#line 3322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
 #line 517 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3315 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 521 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3322 "engines/director/lingo/lingo-gr.cpp"
+#line 3336 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 523 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3329 "engines/director/lingo/lingo-gr.cpp"
+#line 3343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 525 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3336 "engines/director/lingo/lingo-gr.cpp"
+#line 3350 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* tell: tTELL expr tTO stmtoneliner  */
-#line 529 "engines/director/lingo/lingo-gr.y"
+  case 150: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 527 "engines/director/lingo/lingo-gr.y"
+                                                                  {
+		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 151: /* tell: tTELL expr tTO stmtoneliner  */
+#line 531 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3345 "engines/director/lingo/lingo-gr.cpp"
+#line 3366 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 533 "engines/director/lingo/lingo-gr.y"
+  case 152: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
+#line 535 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3352 "engines/director/lingo/lingo-gr.cpp"
+#line 3373 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* when: tWHEN ID tTHEN expr  */
-#line 537 "engines/director/lingo/lingo-gr.y"
+  case 153: /* when: tWHEN ID tTHEN expr  */
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3358 "engines/director/lingo/lingo-gr.cpp"
+#line 3379 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* stmtlist: %empty  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 154: /* stmtlist: %empty  */
+#line 541 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3364 "engines/director/lingo/lingo-gr.cpp"
+#line 3385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* nonemptystmtlist: stmtlistline  */
-#line 544 "engines/director/lingo/lingo-gr.y"
+  case 156: /* nonemptystmtlist: stmtlistline  */
+#line 546 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3375 "engines/director/lingo/lingo-gr.cpp"
+#line 3396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* nonemptystmtlist: stmtlist stmtlistline  */
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 157: /* nonemptystmtlist: stmtlist stmtlistline  */
+#line 552 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3406 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* stmtlistline: '\n'  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 158: /* stmtlistline: '\n'  */
+#line 559 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3391 "engines/director/lingo/lingo-gr.cpp"
+#line 3412 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* simpleexpr_nounarymath: tINT  */
-#line 564 "engines/director/lingo/lingo-gr.y"
+  case 160: /* simpleexpr_nounarymath: tINT  */
+#line 566 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3397 "engines/director/lingo/lingo-gr.cpp"
+#line 3418 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* simpleexpr_nounarymath: tFLOAT  */
-#line 565 "engines/director/lingo/lingo-gr.y"
+  case 161: /* simpleexpr_nounarymath: tFLOAT  */
+#line 567 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3403 "engines/director/lingo/lingo-gr.cpp"
+#line 3424 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 566 "engines/director/lingo/lingo-gr.y"
+  case 162: /* simpleexpr_nounarymath: tSYMBOL  */
+#line 568 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3409 "engines/director/lingo/lingo-gr.cpp"
+#line 3430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* simpleexpr_nounarymath: tSTRING  */
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 163: /* simpleexpr_nounarymath: tSTRING  */
+#line 569 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3415 "engines/director/lingo/lingo-gr.cpp"
+#line 3436 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 164: /* simpleexpr_nounarymath: tNOT simpleexpr  */
+#line 570 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3421 "engines/director/lingo/lingo-gr.cpp"
+#line 3442 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
-#line 569 "engines/director/lingo/lingo-gr.y"
+  case 165: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
+#line 571 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3427 "engines/director/lingo/lingo-gr.cpp"
+#line 3448 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 570 "engines/director/lingo/lingo-gr.y"
+  case 166: /* simpleexpr_nounarymath: '(' expr ')'  */
+#line 572 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3433 "engines/director/lingo/lingo-gr.cpp"
+#line 3454 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* var: ID  */
-#line 578 "engines/director/lingo/lingo-gr.y"
+  case 172: /* var: ID  */
+#line 580 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3439 "engines/director/lingo/lingo-gr.cpp"
+#line 3460 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* chunk: tFIELD simpleexpr  */
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 177: /* chunk: tFIELD simpleexpr  */
+#line 590 "engines/director/lingo/lingo-gr.y"
                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3448 "engines/director/lingo/lingo-gr.cpp"
+#line 3469 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* chunk: tCAST simpleexpr  */
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 178: /* chunk: tCAST simpleexpr  */
+#line 594 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3457 "engines/director/lingo/lingo-gr.cpp"
+#line 3478 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 179: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3464 "engines/director/lingo/lingo-gr.cpp"
+#line 3485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 180: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 600 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3471 "engines/director/lingo/lingo-gr.cpp"
+#line 3492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* chunk: tWORD simpleexpr tOF simpleexpr  */
-#line 600 "engines/director/lingo/lingo-gr.y"
+  case 181: /* chunk: tWORD simpleexpr tOF simpleexpr  */
+#line 602 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3478 "engines/director/lingo/lingo-gr.cpp"
+#line 3499 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 602 "engines/director/lingo/lingo-gr.y"
+  case 182: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 604 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3485 "engines/director/lingo/lingo-gr.cpp"
+#line 3506 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* chunk: tITEM simpleexpr tOF simpleexpr  */
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 183: /* chunk: tITEM simpleexpr tOF simpleexpr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3492 "engines/director/lingo/lingo-gr.cpp"
+#line 3513 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 184: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 608 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3499 "engines/director/lingo/lingo-gr.cpp"
+#line 3520 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* chunk: tLINE simpleexpr tOF simpleexpr  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+  case 185: /* chunk: tLINE simpleexpr tOF simpleexpr  */
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3506 "engines/director/lingo/lingo-gr.cpp"
+#line 3527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 186: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 612 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3513 "engines/director/lingo/lingo-gr.cpp"
+#line 3534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* object: tSCRIPT simpleexpr  */
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 187: /* object: tSCRIPT simpleexpr  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3522 "engines/director/lingo/lingo-gr.cpp"
+#line 3543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* object: tWINDOW simpleexpr  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 188: /* object: tWINDOW simpleexpr  */
+#line 620 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3531 "engines/director/lingo/lingo-gr.cpp"
+#line 3552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 192: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3537 "engines/director/lingo/lingo-gr.cpp"
+#line 3558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 195: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3543 "engines/director/lingo/lingo-gr.cpp"
+#line 3564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* theobj: tSOUND simpleexpr  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 196: /* theobj: tSOUND simpleexpr  */
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3549 "engines/director/lingo/lingo-gr.cpp"
+#line 3570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* theobj: tSPRITE simpleexpr  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 197: /* theobj: tSPRITE simpleexpr  */
+#line 636 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3555 "engines/director/lingo/lingo-gr.cpp"
+#line 3576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* menu: tMENU simpleexpr  */
-#line 637 "engines/director/lingo/lingo-gr.y"
+  case 198: /* menu: tMENU simpleexpr  */
+#line 639 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3561 "engines/director/lingo/lingo-gr.cpp"
+#line 3582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* writablethe: tTHE ID  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 199: /* writablethe: tTHE ID  */
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3567 "engines/director/lingo/lingo-gr.cpp"
+#line 3588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* writablethe: tTHE ID tOF theobj  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 200: /* writablethe: tTHE ID tOF theobj  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3573 "engines/director/lingo/lingo-gr.cpp"
+#line 3594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 201: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3579 "engines/director/lingo/lingo-gr.cpp"
+#line 3600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 201: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 644 "engines/director/lingo/lingo-gr.y"
+  case 202: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3585 "engines/director/lingo/lingo-gr.cpp"
+#line 3606 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 202: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 203: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3591 "engines/director/lingo/lingo-gr.cpp"
+#line 3612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* thedatetime: tTHE tABBREV tDATE  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 204: /* thedatetime: tTHE tABBREV tDATE  */
+#line 648 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3597 "engines/director/lingo/lingo-gr.cpp"
+#line 3618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 204: /* thedatetime: tTHE tABBREV tTIME  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 205: /* thedatetime: tTHE tABBREV tTIME  */
+#line 649 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3603 "engines/director/lingo/lingo-gr.cpp"
+#line 3624 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 205: /* thedatetime: tTHE tABBR tDATE  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+  case 206: /* thedatetime: tTHE tABBR tDATE  */
+#line 650 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3609 "engines/director/lingo/lingo-gr.cpp"
+#line 3630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 206: /* thedatetime: tTHE tABBR tTIME  */
-#line 649 "engines/director/lingo/lingo-gr.y"
+  case 207: /* thedatetime: tTHE tABBR tTIME  */
+#line 651 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3615 "engines/director/lingo/lingo-gr.cpp"
+#line 3636 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 207: /* thedatetime: tTHE tLONG tDATE  */
-#line 650 "engines/director/lingo/lingo-gr.y"
+  case 208: /* thedatetime: tTHE tLONG tDATE  */
+#line 652 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3621 "engines/director/lingo/lingo-gr.cpp"
+#line 3642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* thedatetime: tTHE tLONG tTIME  */
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 209: /* thedatetime: tTHE tLONG tTIME  */
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3627 "engines/director/lingo/lingo-gr.cpp"
+#line 3648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* thedatetime: tTHE tSHORT tDATE  */
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 210: /* thedatetime: tTHE tSHORT tDATE  */
+#line 654 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3633 "engines/director/lingo/lingo-gr.cpp"
+#line 3654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* thedatetime: tTHE tSHORT tTIME  */
-#line 653 "engines/director/lingo/lingo-gr.y"
+  case 211: /* thedatetime: tTHE tSHORT tTIME  */
+#line 655 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3639 "engines/director/lingo/lingo-gr.cpp"
+#line 3660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 657 "engines/director/lingo/lingo-gr.y"
+  case 212: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 659 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3645 "engines/director/lingo/lingo-gr.cpp"
+#line 3666 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 658 "engines/director/lingo/lingo-gr.y"
+  case 213: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 660 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3651 "engines/director/lingo/lingo-gr.cpp"
+#line 3672 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 213: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 659 "engines/director/lingo/lingo-gr.y"
+  case 214: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 661 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3657 "engines/director/lingo/lingo-gr.cpp"
+#line 3678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 215: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 662 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3663 "engines/director/lingo/lingo-gr.cpp"
+#line 3684 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 661 "engines/director/lingo/lingo-gr.y"
+  case 216: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 663 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3669 "engines/director/lingo/lingo-gr.cpp"
+#line 3690 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* chunktype: tCHAR  */
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 217: /* chunktype: tCHAR  */
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3675 "engines/director/lingo/lingo-gr.cpp"
+#line 3696 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* chunktype: tWORD  */
-#line 665 "engines/director/lingo/lingo-gr.y"
+  case 218: /* chunktype: tWORD  */
+#line 667 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3681 "engines/director/lingo/lingo-gr.cpp"
+#line 3702 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* chunktype: tITEM  */
-#line 666 "engines/director/lingo/lingo-gr.y"
+  case 219: /* chunktype: tITEM  */
+#line 668 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3687 "engines/director/lingo/lingo-gr.cpp"
+#line 3708 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* chunktype: tLINE  */
-#line 667 "engines/director/lingo/lingo-gr.y"
+  case 220: /* chunktype: tLINE  */
+#line 669 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3693 "engines/director/lingo/lingo-gr.cpp"
+#line 3714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* list: '[' exprlist ']'  */
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 223: /* list: '[' exprlist ']'  */
+#line 674 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3699 "engines/director/lingo/lingo-gr.cpp"
+#line 3720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* list: '[' ':' ']'  */
-#line 673 "engines/director/lingo/lingo-gr.y"
+  case 224: /* list: '[' ':' ']'  */
+#line 675 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3705 "engines/director/lingo/lingo-gr.cpp"
+#line 3726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* list: '[' proplist ']'  */
-#line 674 "engines/director/lingo/lingo-gr.y"
+  case 225: /* list: '[' proplist ']'  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3711 "engines/director/lingo/lingo-gr.cpp"
+#line 3732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* proplist: proppair  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+  case 226: /* proplist: proppair  */
+#line 679 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3720 "engines/director/lingo/lingo-gr.cpp"
+#line 3741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* proplist: proplist ',' proppair  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 227: /* proplist: proplist ',' proppair  */
+#line 683 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3728 "engines/director/lingo/lingo-gr.cpp"
+#line 3749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* proppair: tSYMBOL ':' expr  */
-#line 686 "engines/director/lingo/lingo-gr.y"
+  case 228: /* proppair: tSYMBOL ':' expr  */
+#line 688 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3734 "engines/director/lingo/lingo-gr.cpp"
+#line 3755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* proppair: ID ':' expr  */
-#line 687 "engines/director/lingo/lingo-gr.y"
+  case 229: /* proppair: ID ':' expr  */
+#line 689 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3740 "engines/director/lingo/lingo-gr.cpp"
+#line 3761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* proppair: tSTRING ':' expr  */
-#line 688 "engines/director/lingo/lingo-gr.y"
+  case 230: /* proppair: tSTRING ':' expr  */
+#line 690 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3746 "engines/director/lingo/lingo-gr.cpp"
+#line 3767 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* unarymath: '+' simpleexpr  */
-#line 691 "engines/director/lingo/lingo-gr.y"
+  case 231: /* unarymath: '+' simpleexpr  */
+#line 693 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3752 "engines/director/lingo/lingo-gr.cpp"
+#line 3773 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* unarymath: '-' simpleexpr  */
-#line 692 "engines/director/lingo/lingo-gr.y"
+  case 232: /* unarymath: '-' simpleexpr  */
+#line 694 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3758 "engines/director/lingo/lingo-gr.cpp"
+#line 3779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 236: /* expr: expr '+' expr  */
-#line 702 "engines/director/lingo/lingo-gr.y"
+  case 237: /* expr: expr '+' expr  */
+#line 704 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3764 "engines/director/lingo/lingo-gr.cpp"
+#line 3785 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* expr: expr '-' expr  */
-#line 703 "engines/director/lingo/lingo-gr.y"
+  case 238: /* expr: expr '-' expr  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3770 "engines/director/lingo/lingo-gr.cpp"
+#line 3791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* expr: expr '*' expr  */
-#line 704 "engines/director/lingo/lingo-gr.y"
+  case 239: /* expr: expr '*' expr  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3776 "engines/director/lingo/lingo-gr.cpp"
+#line 3797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* expr: expr '/' expr  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 240: /* expr: expr '/' expr  */
+#line 707 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3782 "engines/director/lingo/lingo-gr.cpp"
+#line 3803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* expr: expr tMOD expr  */
-#line 706 "engines/director/lingo/lingo-gr.y"
+  case 241: /* expr: expr tMOD expr  */
+#line 708 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3788 "engines/director/lingo/lingo-gr.cpp"
+#line 3809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 241: /* expr: expr '>' expr  */
-#line 707 "engines/director/lingo/lingo-gr.y"
+  case 242: /* expr: expr '>' expr  */
+#line 709 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3794 "engines/director/lingo/lingo-gr.cpp"
+#line 3815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* expr: expr '<' expr  */
-#line 708 "engines/director/lingo/lingo-gr.y"
+  case 243: /* expr: expr '<' expr  */
+#line 710 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3800 "engines/director/lingo/lingo-gr.cpp"
+#line 3821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* expr: expr tEQ expr  */
-#line 709 "engines/director/lingo/lingo-gr.y"
+  case 244: /* expr: expr tEQ expr  */
+#line 711 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3806 "engines/director/lingo/lingo-gr.cpp"
+#line 3827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 244: /* expr: expr tNEQ expr  */
-#line 710 "engines/director/lingo/lingo-gr.y"
+  case 245: /* expr: expr tNEQ expr  */
+#line 712 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3812 "engines/director/lingo/lingo-gr.cpp"
+#line 3833 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* expr: expr tGE expr  */
-#line 711 "engines/director/lingo/lingo-gr.y"
+  case 246: /* expr: expr tGE expr  */
+#line 713 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3818 "engines/director/lingo/lingo-gr.cpp"
+#line 3839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* expr: expr tLE expr  */
-#line 712 "engines/director/lingo/lingo-gr.y"
+  case 247: /* expr: expr tLE expr  */
+#line 714 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3824 "engines/director/lingo/lingo-gr.cpp"
+#line 3845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 247: /* expr: expr tAND expr  */
-#line 713 "engines/director/lingo/lingo-gr.y"
+  case 248: /* expr: expr tAND expr  */
+#line 715 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3830 "engines/director/lingo/lingo-gr.cpp"
+#line 3851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* expr: expr tOR expr  */
-#line 714 "engines/director/lingo/lingo-gr.y"
+  case 249: /* expr: expr tOR expr  */
+#line 716 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3836 "engines/director/lingo/lingo-gr.cpp"
+#line 3857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 249: /* expr: expr '&' expr  */
-#line 715 "engines/director/lingo/lingo-gr.y"
+  case 250: /* expr: expr '&' expr  */
+#line 717 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3842 "engines/director/lingo/lingo-gr.cpp"
+#line 3863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 250: /* expr: expr tCONCAT expr  */
-#line 716 "engines/director/lingo/lingo-gr.y"
+  case 251: /* expr: expr tCONCAT expr  */
+#line 718 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3848 "engines/director/lingo/lingo-gr.cpp"
+#line 3869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 251: /* expr: expr tCONTAINS expr  */
-#line 717 "engines/director/lingo/lingo-gr.y"
+  case 252: /* expr: expr tCONTAINS expr  */
+#line 719 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3854 "engines/director/lingo/lingo-gr.cpp"
+#line 3875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 252: /* expr: expr tSTARTS expr  */
-#line 718 "engines/director/lingo/lingo-gr.y"
+  case 253: /* expr: expr tSTARTS expr  */
+#line 720 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3860 "engines/director/lingo/lingo-gr.cpp"
+#line 3881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 255: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 727 "engines/director/lingo/lingo-gr.y"
+  case 256: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 729 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3866 "engines/director/lingo/lingo-gr.cpp"
+#line 3887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 256: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 728 "engines/director/lingo/lingo-gr.y"
+  case 257: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 730 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3872 "engines/director/lingo/lingo-gr.cpp"
+#line 3893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 729 "engines/director/lingo/lingo-gr.y"
+  case 258: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 731 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3878 "engines/director/lingo/lingo-gr.cpp"
+#line 3899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 730 "engines/director/lingo/lingo-gr.y"
+  case 259: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 732 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3884 "engines/director/lingo/lingo-gr.cpp"
+#line 3905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 259: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 731 "engines/director/lingo/lingo-gr.y"
+  case 260: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 733 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3890 "engines/director/lingo/lingo-gr.cpp"
+#line 3911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 260: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 732 "engines/director/lingo/lingo-gr.y"
+  case 261: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 734 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3896 "engines/director/lingo/lingo-gr.cpp"
+#line 3917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 261: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 733 "engines/director/lingo/lingo-gr.y"
+  case 262: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 735 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3902 "engines/director/lingo/lingo-gr.cpp"
+#line 3923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 262: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 734 "engines/director/lingo/lingo-gr.y"
+  case 263: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 736 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3908 "engines/director/lingo/lingo-gr.cpp"
+#line 3929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 263: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 264: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 737 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3914 "engines/director/lingo/lingo-gr.cpp"
+#line 3935 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 264: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 736 "engines/director/lingo/lingo-gr.y"
+  case 265: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 738 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3920 "engines/director/lingo/lingo-gr.cpp"
+#line 3941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 265: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 737 "engines/director/lingo/lingo-gr.y"
+  case 266: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3926 "engines/director/lingo/lingo-gr.cpp"
+#line 3947 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 266: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 738 "engines/director/lingo/lingo-gr.y"
+  case 267: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 740 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3932 "engines/director/lingo/lingo-gr.cpp"
+#line 3953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 267: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+  case 268: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 741 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3938 "engines/director/lingo/lingo-gr.cpp"
+#line 3959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 268: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 740 "engines/director/lingo/lingo-gr.y"
+  case 269: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 742 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3944 "engines/director/lingo/lingo-gr.cpp"
+#line 3965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 269: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 741 "engines/director/lingo/lingo-gr.y"
+  case 270: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 743 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3950 "engines/director/lingo/lingo-gr.cpp"
+#line 3971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 270: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+  case 271: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 744 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3956 "engines/director/lingo/lingo-gr.cpp"
+#line 3977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 271: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 272: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 745 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3962 "engines/director/lingo/lingo-gr.cpp"
+#line 3983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 272: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 746 "engines/director/lingo/lingo-gr.y"
+  case 273: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 748 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3968 "engines/director/lingo/lingo-gr.cpp"
+#line 3989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 273: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 747 "engines/director/lingo/lingo-gr.y"
+  case 274: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 749 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3974 "engines/director/lingo/lingo-gr.cpp"
+#line 3995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 274: /* exprlist: %empty  */
-#line 750 "engines/director/lingo/lingo-gr.y"
+  case 275: /* exprlist: %empty  */
+#line 752 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3980 "engines/director/lingo/lingo-gr.cpp"
+#line 4001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 276: /* nonemptyexprlist: expr  */
-#line 754 "engines/director/lingo/lingo-gr.y"
+  case 277: /* nonemptyexprlist: expr  */
+#line 756 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3989 "engines/director/lingo/lingo-gr.cpp"
+#line 4010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 277: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 758 "engines/director/lingo/lingo-gr.y"
+  case 278: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 760 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3997 "engines/director/lingo/lingo-gr.cpp"
+#line 4018 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 4001 "engines/director/lingo/lingo-gr.cpp"
+#line 4022 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4196,7 +4217,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 763 "engines/director/lingo/lingo-gr.y"
+#line 765 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 3b8369f79a..706fb450d8 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -524,6 +524,8 @@ loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n' {
 		$$ = new RepeatWithToNode($ID, $start, false, $end, $stmtlist); }
 	| tREPEAT tWITH ID tEQ expr[start] tDOWN tTO expr[end] '\n' stmtlist tENDREPEAT '\n' {
 		$$ = new RepeatWithToNode($ID, $start, true, $end, $stmtlist); }
+	| tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n' {
+		$$ = new RepeatWithInNode($ID, $expr, $stmtlist); }
 	;
 
 tell: tTELL expr tTO stmtoneliner				{


Commit: 0ff9d8437c78dfafc42ee48c1a098f87ac71f0d8
    https://github.com/scummvm/scummvm/commit/0ff9d8437c78dfafc42ee48c1a098f87ac71f0d8
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add function fallback to getObjectProp

Changed paths:
    engines/director/lingo/lingo-the.cpp


diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 21ddecabc2..85de260f80 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1632,6 +1632,10 @@ Datum Lingo::getObjectProp(Datum &obj, Common::String &propName) {
 		} else {
 			warning("Lingo::getObjectProp(): CastMember %d has no property '%s'", id, propName.c_str());
 		}
+	} else if (_builtinFuncs.contains(propName) && _builtinFuncs[propName].nargs == 1) {
+		push(obj);
+		LC::call(_builtinFuncs[propName], 1, true);
+		d = pop();
 	} else {
 		warning("Lingo::getObjectProp: Invalid object: %s", obj.asString(true).c_str());
 	}


Commit: 46785dbe26c06a890cf64bdafcf11aa9cf1a3afc
    https://github.com/scummvm/scummvm/commit/46785dbe26c06a890cf64bdafcf11aa9cf1a3afc
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix list definitions

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 2a930a8ee1..3295885be8 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -634,7 +634,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  174
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4223
+#define YYLAST   3441
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
@@ -643,7 +643,7 @@ union yyalloc
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  278
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  520
+#define YYNSTATES  519
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -794,7 +794,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-347)
+#define YYPACT_NINF (-339)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -808,58 +808,58 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2289,  -347,  -347,  -347,  -347,  -347,  -347,   -21,  -347,  3506,
-    1422,  1519,  -347,  -347,  3506,  -347,    -4,  -347,  -347,  1616,
-      72,  3585,  -347,  3506,  -347,  -347,  3506,  1616,  1422,  3506,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  1519,  3506,  3506,  3900,  -347,    30,  2289,
-    -347,  -347,  -347,  -347,  1616,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,   -50,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,   -14,     5,  -347,  -347,  -347,  -347,  1713,  1713,  1713,
-    1713,  1519,  1519,  1713,  1713,  1713,  1713,  1713,  3664,  1519,
-    1713,  1713,  1325,   741,     7,    14,    16,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,   840,  -347,
-    1519,   518,  3506,    24,    26,   937,  3506,  1519,  3743,  -347,
-    -347,   -15,  -347,    93,    34,    36,  1034,    38,    41,    42,
-     429,    43,  3506,  -347,  -347,  -347,    44,  1131,  -347,  -347,
-    3506,  -347,  -347,  -347,  -347,  1228,  4115,  -347,    40,    51,
-      54,    67,   -38,   -36,   -35,     8,    11,    37,   106,   109,
-    4061,  -347,  -347,  -347,   531,    39,    45,    47,     1,    12,
-    -347,  4115,    52,    49,  1519,  -347,  -347,   117,  1519,  1519,
-    1519,  1519,  2004,  2004,  2198,  1519,  2101,  2101,  1519,  1519,
-    1519,  1519,  1519,  1519,  1519,  1519,  -347,   629,  -347,   544,
-    3096,  1519,  1519,  1519,  1519,  1519,    48,  -347,  -347,  3822,
-    3822,  3822,   -12,   642,   125,  -347,  -347,  1519,  1519,   -71,
-    -347,  1519,  -347,  -347,  -347,  3900,  3176,  -347,    60,  -347,
-    -347,   132,  4128,  1713,  1713,  1713,  1713,  1713,  1713,  1713,
-    1713,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,    79,  1810,  1907,  1713,  1713,
-    1519,  -347,  1519,  1519,  -347,  1519,  3427,  -347,  -347,  1519,
-      61,  1519,   -31,   -31,   -31,   -31,   184,   184,  -347,   -42,
-     -31,   -31,   -31,   -31,   -42,   -40,   -40,  -347,  -347,    49,
-    1519,  1519,  1519,  1519,  1519,  1519,  1519,  1519,  1519,  1519,
-    1519,  1519,  1519,  1519,  1519,  1519,  1519,  1519,  3176,   144,
-    3176,  -347,    65,  -347,    66,    68,  1519,  1519,  3176,  1907,
-    3947,  4115,  3506,  -347,  -347,    71,  -347,  -347,  3960,  -347,
-    -347,  -347,  2449,  -347,  -347,  3176,  1519,  -347,   142,  -347,
-     143,  -347,   145,  -347,   148,  -347,  -347,  1713,    79,    79,
-      79,    79,  1713,  1713,    79,  1713,  1713,  -347,  -347,  -347,
-    -347,  -347,  -347,    -7,  4115,  4115,  4115,    39,    45,    69,
-    -347,  4115,  -347,  4115,   -31,   -31,   -31,   -31,   184,   184,
-    -347,   -42,   -31,   -31,   -31,   -31,   -42,   -40,   -40,  -347,
-    -347,    49,  2369,  3256,  3176,  -347,  -347,  -347,  3973,   164,
-    2536,  -347,  3506,   -71,  -347,    81,  -347,  2616,  4115,  1713,
-    1713,  1713,  1713,  -347,  1713,  1713,  1713,  1713,  -347,   153,
-     111,  -347,  -347,  -347,  3336,    88,  3176,  -347,  3176,   152,
-    1519,    90,    91,  -347,  -347,  3506,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,   118,  1713,  -347,  3176,  -347,  -347,
-    2696,  2776,  1519,  4029,  -347,  3176,    18,  -347,  1713,  2856,
-      95,    96,  4042,  3176,  3176,  -347,  3506,  -347,    98,  -347,
-    -347,  3176,  2936,  -347,  -347,  3016,    99,   100,  -347,  -347
+    2329,  -339,  -339,  -339,  -339,  -339,  -339,   -20,  -339,  2819,
+    1462,  1559,  -339,  -339,  2819,  -339,    -1,  -339,  -339,  1656,
+      11,  2898,  -339,  2819,  -339,  -339,  2819,  1656,  1462,  2819,
+    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
+    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
+    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
+    -339,  -339,  -339,  1559,  2819,  2819,  3213,  -339,    21,  2329,
+    -339,  -339,  -339,  -339,  1656,  -339,  -339,  -339,  -339,  -339,
+    -339,  -339,  -339,  -339,  -339,   -64,  -339,  -339,  -339,  -339,
+    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
+    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
+    -339,   -30,    12,  -339,  -339,  -339,  -339,  1753,  1753,  1753,
+    1753,  1559,  1559,  1753,  1753,  1753,  1753,  1753,  2977,  1559,
+    1753,  1753,  1365,   781,    15,   -19,     6,  -339,  -339,  -339,
+    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,   880,  -339,
+    1559,   287,  2819,    25,    32,   977,  2819,  1559,  3056,  -339,
+    -339,   -21,  -339,    85,    46,    58,  1074,    61,    62,    63,
+     162,    64,  2819,  -339,  -339,  -339,    65,  1171,  -339,  -339,
+    2819,  -339,  -339,  -339,  -339,  1268,  3292,  -339,     1,     4,
+      31,    91,   -45,   -27,   -25,    26,    28,    56,   129,   135,
+    3279,  -339,  -339,  -339,   428,    66,    67,    69,   -53,   -22,
+    -339,  3292,    72,    68,  1559,  -339,  -339,   141,  1559,  1559,
+    1559,  1559,  2044,  2044,  2238,  1559,  2141,  2141,  1559,  1559,
+    1559,  1559,  1559,  1559,  1559,  1559,  -339,   398,  -339,   493,
+    2409,  1559,  1559,  1559,  1559,  1559,    71,  -339,  -339,  3135,
+    3135,  3135,    -5,   512,   147,  -339,  -339,  1559,  1559,   -56,
+    -339,  1559,  -339,  -339,  -339,  3213,  2489,  -339,    83,  -339,
+    -339,   158,  3346,  1753,  1753,  1753,  1753,  1753,  1753,  1753,
+    1753,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
+    -339,  -339,  -339,  -339,  -339,    40,  1850,  1947,  1753,  1753,
+    1559,  -339,  1559,  1559,  -339,  1559,  2740,  -339,  -339,  1559,
+      90,  1559,    -9,    -9,    -9,    -9,   134,   134,  -339,   -40,
+      -9,    -9,    -9,    -9,   -40,   -34,   -34,  -339,  -339,    68,
+    1559,  1559,  1559,  1559,  1559,  1559,  1559,  1559,  1559,  1559,
+    1559,  1559,  1559,  1559,  1559,  1559,  1559,  1559,  2489,   169,
+    2489,  -339,    94,  -339,    96,    97,  1559,  1559,  2489,  1947,
+     572,  3292,  2819,  -339,  -339,  -339,   -56,  -339,   585,  -339,
+    -339,  -339,   108,  2489,  -339,  2489,  1559,  -339,   170,  -339,
+     171,  -339,   172,  -339,   173,  -339,  -339,  1753,    40,    40,
+      40,    40,  1753,  1753,    40,  1753,  1753,  -339,  -339,  -339,
+    -339,  -339,  -339,    52,  3292,  3292,  3292,    66,    67,    99,
+    -339,  3292,  -339,  3292,    -9,    -9,    -9,    -9,   134,   134,
+    -339,   -40,    -9,    -9,    -9,    -9,   -40,   -34,   -34,  -339,
+    -339,    68,   -10,  2569,  -339,  -339,  -339,  -339,   670,    47,
+     111,  -339,  2819,  -339,  -339,   115,  -339,   203,  3292,  1753,
+    1753,  1753,  1753,  -339,  1753,  1753,  1753,  1753,  -339,   190,
+     148,  -339,  -339,  -339,  2649,   123,  2489,  -339,  2489,   187,
+    1559,   125,   133,  -339,  2819,  -339,  -339,  -339,  -339,  -339,
+    -339,  -339,  -339,   163,  1753,  -339,  2489,  -339,  -339,   150,
+     151,  1559,   683,  -339,  2489,    49,  -339,  1753,   153,   139,
+     142,  3260,  2489,  -339,  -339,  2819,  -339,   144,  -339,  -339,
+    2489,   160,  -339,  -339,   161,   152,   164,  -339,  -339
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -911,32 +911,32 @@ static const yytype_int16 yydefact[] =
      227,   278,   165,   130,   265,   266,   263,   264,   267,   268,
      260,   270,   271,   272,   262,   261,   269,   256,   257,   258,
      259,   124,     0,     0,    10,   132,   133,   134,     0,     0,
-       0,   135,    95,     0,   115,     0,   157,    20,   129,     0,
+       0,   135,    95,    16,   115,     0,   157,    20,   129,     0,
        0,     0,     0,   192,     0,     0,     0,     0,   198,     0,
        0,   196,   197,   126,     0,     0,   154,   143,   154,     0,
-       0,     0,     0,    16,   152,    21,   180,   184,   186,   182,
-     212,   214,   215,   213,     0,     0,   216,   154,   145,   142,
-       0,     0,     0,     0,   147,   154,     0,    22,     0,     0,
-       0,     0,     0,   154,    12,    19,     0,   195,     0,   144,
-     150,   154,     0,    23,   146,     0,     0,     0,   148,   149
+       0,     0,     0,   152,    21,   180,   184,   186,   182,   212,
+     214,   215,   213,     0,     0,   216,   154,   145,   142,     0,
+       0,     0,     0,   147,   154,     0,    22,     0,     0,     0,
+       0,     0,   154,    12,    19,     0,   195,     0,   144,   150,
+     154,     0,    23,   146,     0,     0,     0,   148,   149
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -347,  -347,  -347,   121,  -347,  -347,  -347,  -347,  -347,  -244,
-    -347,  -347,     0,    -6,   -28,  -347,     6,   -62,  -347,    -3,
-     172,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -336,
-    -347,  -335,  -120,   -19,  -122,  -347,  -131,  -347,  -347,   -96,
-    -258,   183,  -347,  -347,  -347,  -346,  -347,  -347,  -101,  -347,
-     260,    62,    29,   -99,     9,  -230
+    -339,  -339,  -339,   179,  -339,  -339,  -339,  -339,  -339,  -116,
+    -339,  -339,     0,    -7,   -28,  -339,     5,   -62,  -339,    -2,
+     230,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -338,
+    -339,  -113,  -121,   -18,   -97,  -339,  -118,  -339,  -339,   -35,
+    -197,   243,  -339,  -339,  -339,  -282,  -339,  -339,   -39,  -339,
+     301,    60,    84,   -50,    54,  -227
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
        0,    68,    69,    70,    71,    72,   364,   365,   366,   367,
-      73,   496,   109,   134,   111,   112,   371,    76,    77,   135,
+      73,   495,   109,   134,   111,   112,   371,    76,    77,   135,
      136,    78,   257,    79,    80,    81,    82,    83,    84,   372,
      373,   374,   137,   138,   352,   161,   139,   140,   141,   397,
      398,   142,   143,   144,   295,   387,   145,   209,   210,   146,
@@ -948,82 +948,86 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      74,   169,   160,   110,   173,   329,    75,   243,   152,   243,
-      85,   356,   432,   362,   434,   159,   154,   163,   243,   255,
-     164,   225,   440,   110,   165,   167,   363,   153,   236,   256,
-     174,   281,   357,   283,   285,   236,   171,   446,   282,   447,
-     284,   286,   454,   455,   456,   457,   236,   178,   460,   238,
-     231,   232,   233,   234,   233,   234,   238,   236,   110,   172,
-     230,   231,   232,   233,   234,   236,    74,   238,   273,    74,
-     403,   176,   148,   151,   274,    75,    86,   287,   238,   275,
-     289,   155,   277,   179,   288,   276,   238,   290,   278,   166,
-     148,   309,   291,   463,   292,   279,   293,   446,   294,   446,
-     214,   280,   385,   180,   305,   446,   214,   386,   156,   157,
-     306,   215,   446,   216,   307,   505,   506,   431,   353,   353,
-     353,   247,   199,   248,   246,   170,   258,   208,   354,   355,
-     490,   259,   491,   260,   296,   262,   177,   297,   263,   264,
-     267,   269,   302,   311,   268,   350,   110,   309,   303,   304,
-     252,   499,   199,   359,   308,   446,   446,   375,   376,   504,
-     433,   412,   435,   436,   446,   437,   110,   512,   443,   446,
-     449,   450,   305,   451,   270,   515,   452,   446,   474,   469,
-     446,   484,   485,   185,   186,   489,   492,   494,   495,   498,
-     175,   200,   509,   510,   204,   514,   518,   519,   470,   473,
-     168,   400,   486,   369,   162,   410,   218,   219,   220,   221,
-     241,   242,   239,   243,   272,     0,   225,   244,   245,   253,
-       0,     0,     0,   310,     0,     0,   218,   219,   220,   221,
-     351,   351,   351,   243,     0,     0,   225,   244,   245,     0,
-      74,     0,     0,   159,   159,   159,   349,     0,     0,     0,
-       0,     0,     0,   228,   229,   230,   231,   232,   233,   234,
-       0,     0,     0,     0,     0,    74,    74,     0,     0,     0,
-       0,     0,     0,   228,   229,   230,   231,   232,   233,   234,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,   328,     0,     0,     0,
-     409,     0,     0,   316,   317,   318,   320,   321,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   360,
-     361,     0,     0,   368,     0,     0,     0,     0,     0,     0,
+      74,   169,   110,   160,   173,    75,   464,   152,   329,   243,
+     432,    85,   434,   255,   159,   243,   163,   154,   356,   164,
+     440,   174,   110,   256,   281,   165,   167,   236,   362,   273,
+     153,   282,   275,   178,   236,   274,   171,   447,   276,   357,
+     243,   363,   283,   225,   285,   236,   214,   156,   157,   284,
+     305,   286,   231,   232,   233,   234,   236,   110,   172,   277,
+     233,   234,   469,   385,   236,   278,    74,   179,   386,    74,
+     148,   151,   176,   403,    75,   465,   306,    86,   215,   155,
+     307,   470,   230,   231,   232,   233,   234,   166,   148,   218,
+     219,   220,   221,   241,   242,   287,   243,   289,   238,   225,
+     244,   245,   288,   216,   290,   238,   454,   455,   456,   457,
+     180,   291,   460,   292,   214,   293,   238,   294,   258,   279,
+     431,   199,   247,   170,   246,   280,   208,   238,   489,   248,
+     490,   353,   353,   353,   177,   238,   228,   229,   230,   231,
+     232,   233,   234,   259,   268,   110,   504,   505,   498,   252,
+     309,   199,   463,   354,   355,   260,   503,   296,   262,   263,
+     264,   267,   269,   297,   511,   110,   309,   311,   350,   302,
+     303,   304,   514,   270,   308,   359,   218,   219,   220,   221,
+     375,   185,   186,   243,   376,   433,   225,   244,   245,   200,
+     412,   435,   204,   436,   437,   445,   265,   471,   449,   450,
+     451,   452,   305,   369,   218,   219,   220,   221,   241,   242,
+     239,   243,   473,   474,   225,   244,   245,   253,   483,   484,
+     488,   491,   493,   228,   229,   230,   231,   232,   233,   234,
+     494,   351,   351,   351,   497,   499,   508,   500,   507,   509,
+      74,   513,   159,   159,   159,   349,   515,   516,   175,   517,
+     443,   228,   229,   230,   231,   232,   233,   234,   168,   266,
+     446,   518,   400,   485,   162,    74,    74,   410,   310,   272,
+       0,     0,     0,     0,     0,     0,     0,     0,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,     0,     0,     0,     0,   409,
+       0,   316,   317,   318,   320,   321,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   360,   361,     0,
+     240,   368,     0,     0,     0,     0,     0,     0,     0,   218,
+     219,   220,   221,   241,   242,     0,   243,     0,     0,   225,
+     244,   245,     0,     0,     0,     0,     0,     0,    74,     0,
+      74,     0,     0,     0,     0,   442,     0,     0,    74,     0,
+       0,     0,   404,   405,     0,   406,     0,     0,     0,   411,
+       0,   413,     0,    74,     0,    74,   228,   229,   230,   231,
+     232,   233,   234,     0,     0,     0,     0,     0,     0,     0,
+     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
+     424,   425,   426,   427,   428,   429,   430,     0,     0,     0,
+       0,     0,     0,     0,   472,     0,   438,   439,   181,   182,
+     183,   184,     0,     0,   187,   188,   189,   190,   191,     0,
+       0,   201,   202,    74,     0,   110,   448,     0,   467,     0,
+     330,   331,   332,   333,   334,   335,     0,   336,     0,     0,
+     337,   338,   339,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    74,     0,    74,   496,    74,   487,
+     218,   219,   220,   221,   241,   242,     0,   243,     0,     0,
+     225,   244,   245,     0,     0,     0,    74,   340,   341,   342,
+     343,   344,   345,   346,    74,     0,   347,     0,   512,     0,
+       0,     0,    74,     0,     0,     0,     0,     0,     0,     0,
+      74,     0,     0,     0,     0,     0,     0,   228,   229,   230,
+     231,   232,   233,   234,     0,     0,   300,     0,   301,     0,
+     492,     0,     0,     0,     0,   218,   219,   220,   221,   241,
+     242,     0,   243,     0,     0,   225,   244,   245,     0,     0,
+       0,   501,     0,     0,   218,   219,   220,   221,   241,   242,
+       0,   243,     0,     0,   225,   244,   245,     0,     0,     0,
+       0,     0,     0,     0,   377,   378,   379,   380,   381,   382,
+     383,   384,   228,   229,   230,   231,   232,   233,   234,     0,
+       0,     0,     0,   301,     0,     0,     0,   399,   399,   401,
+     402,   228,   229,   230,   231,   232,   233,   234,     0,   358,
+       0,     0,     0,     0,   218,   219,   220,   221,   241,   242,
+       0,   243,     0,     0,   225,   244,   245,   218,   219,   220,
+     221,   241,   242,     0,   243,     0,     0,   225,   244,   245,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    74,     0,
-      74,     0,     0,     0,     0,     0,   442,     0,    74,     0,
-       0,     0,     0,     0,   404,   405,     0,   406,     0,     0,
-       0,   411,    74,   413,     0,    74,     0,   181,   182,   183,
-     184,     0,     0,   187,   188,   189,   190,   191,     0,     0,
-     201,   202,   414,   415,   416,   417,   418,   419,   420,   421,
-     422,   423,   424,   425,   426,   427,   428,   429,   430,     0,
-       0,     0,     0,     0,   472,     0,     0,     0,   438,   439,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,    74,    74,     0,   110,     0,   448,   467,
-      74,     0,     0,     0,     0,     0,     0,    74,     0,     0,
+     399,   228,   229,   230,   231,   232,   233,   234,     0,   441,
+       0,     0,     0,     0,   228,   229,   230,   231,   232,   233,
+     234,     0,   444,     0,     0,     0,     0,     0,   453,     0,
+       0,     0,     0,   458,   459,     0,   461,   462,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   265,    74,     0,    74,     0,    74,   497,
-     488,   218,   219,   220,   221,   241,   242,     0,   243,     0,
-       0,   225,   244,   245,     0,     0,     0,    74,     0,     0,
-      74,    74,     0,     0,     0,    74,     0,     0,     0,    74,
-     513,     0,     0,    74,    74,     0,     0,     0,     0,     0,
-       0,    74,    74,     0,     0,    74,     0,     0,   228,   229,
-     230,   231,   232,   233,   234,     0,   266,     0,     0,     0,
-       0,     0,   493,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   240,     0,     0,   502,     0,   399,   399,   401,   402,
-     218,   219,   220,   221,   241,   242,     0,   243,     0,     0,
-     225,   244,   245,   218,   219,   220,   221,   241,   242,     0,
-     243,     0,     0,   225,   244,   245,   218,   219,   220,   221,
-     241,   242,     0,   243,     0,     0,   225,   244,   245,     0,
-       0,     0,     0,     0,     0,     0,     0,   228,   229,   230,
-     231,   232,   233,   234,     0,     0,     0,     0,     0,   399,
-     228,   229,   230,   231,   232,   233,   234,     0,     0,   300,
-       0,   301,     0,   228,   229,   230,   231,   232,   233,   234,
-       0,     0,     0,     0,   301,     0,     0,   453,     0,     0,
-       0,     0,   458,   459,     0,   461,   462,     0,     0,     0,
+       0,     0,   218,   219,   220,   221,   241,   242,     0,   243,
+       0,     0,   225,   244,   245,   218,   219,   220,   221,   241,
+     242,     0,   243,     0,     0,   225,   244,   245,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   330,   331,   332,   333,   334,   335,     0,   336,     0,
-       0,   337,   338,   339,   218,   219,   220,   221,   241,   242,
-       0,   243,     0,     0,   225,   244,   245,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   476,
-     477,   478,   479,     0,   480,   481,   482,   483,   340,   341,
-     342,   343,   344,   345,   346,     0,     0,   347,     0,     0,
-       0,   228,   229,   230,   231,   232,   233,   234,     0,   358,
-       0,     0,     0,     0,     0,   458,   113,   114,     1,   205,
-     206,    87,   117,   118,   119,   120,     6,    88,   507,    89,
+     475,   476,   477,   478,     0,   479,   480,   481,   482,   228,
+     229,   230,   231,   232,   233,   234,     0,   468,     0,     0,
+       0,     0,   228,   229,   230,   231,   232,   233,   234,     0,
+     502,     0,     0,     0,     0,   458,   113,   114,     1,   205,
+     206,    87,   117,   118,   119,   120,     6,    88,   506,    89,
        8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
       18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
      101,   102,   103,     0,     0,     0,     0,    30,    31,   123,
@@ -1186,14 +1190,22 @@ static const yytype_int16 yytable[] =
       44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,     0,     0,     0,     1,    66,     0,     0,
-       2,     3,     4,     5,     6,   464,    67,     7,     8,     9,
+       2,     3,     4,     5,     6,     0,    67,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,     0,     0,     0,     0,     1,    66,     0,     0,
+       2,     3,     4,     5,     6,     0,   348,     7,     8,     9,
       10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
       20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
       29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
       35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,     0,     0,   465,     0,     1,    66,     0,     0,
+      63,    64,     0,     0,     0,     0,     1,    66,     0,     0,
        2,     3,     4,     5,     6,     0,   370,     7,     8,     9,
       10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
       20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
@@ -1201,104 +1213,47 @@ static const yytype_int16 yytable[] =
       35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,     0,     0,     0,     0,   445,    66,     0,     0,
-       0,     0,     0,     1,     0,     0,   370,     2,     3,     4,
-       5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,   471,     1,    66,     0,   475,     2,     3,     4,
-       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,   500,     0,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,   501,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,   508,     0,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,   516,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,   517,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   348,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   370,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,     0,     1,    66,     0,     0,     2,     3,     4,
-       5,     6,     0,   466,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,     0,     0,    66,     0,     0,     0,     0,     0,
-       0,     0,     0,   487,     1,   407,   408,    87,     2,     3,
+      63,    64,     0,     0,     0,     0,     1,    66,     0,     0,
+       2,     3,     4,     5,     6,     0,   466,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,     0,     0,     0,     0,     0,    66,     0,     0,
+       0,     0,     0,     0,     0,     0,   486,     1,   407,   408,
+      87,     2,     3,     4,     5,     6,    88,     0,    89,     8,
+      90,    91,    92,    12,    13,    93,    15,    94,    17,    18,
+      95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
+     102,   103,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,   104,   105,   106,   107,     0,     1,     0,   108,    87,
+       2,     3,     4,     5,     6,    88,     0,    89,     8,    90,
+      91,    92,    12,    13,    93,    15,    94,    17,    18,    95,
+      96,    97,    98,    22,    99,    24,    25,   100,   101,   102,
+     103,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+     104,   105,   106,   107,     0,     1,     0,   108,    87,     2,
+       3,     4,     5,     6,    88,     0,    89,     8,    90,    91,
+      92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
+      97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,   158,    58,    59,    60,    61,    62,   104,
+     105,   106,   107,     0,     1,     0,   108,    87,     2,     3,
        4,     5,     6,    88,     0,    89,     8,    90,    91,    92,
       12,    13,    93,    15,    94,    17,    18,    95,    96,    97,
       98,    22,    99,    24,    25,   100,   101,   102,   103,     0,
        0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,   104,   105,
+     192,   193,   194,   195,   196,     0,    51,   197,    53,    54,
+      55,   198,    57,    58,    59,    60,    61,    62,   104,   105,
      106,   107,     0,     1,     0,   108,    87,     2,     3,     4,
        5,     6,    88,     0,    89,     8,    90,    91,    92,    12,
       13,    93,    15,    94,    17,    18,    95,    96,    97,    98,
@@ -1306,151 +1261,122 @@ static const yytype_int16 yytable[] =
        0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,   104,   105,   106,
-     107,     0,     1,     0,   108,    87,     2,     3,     4,     5,
+     254,    57,    58,    59,    60,    61,    62,   104,   105,   106,
+     107,     0,     1,     0,   108,    87,   117,   118,     4,     5,
        6,    88,     0,    89,     8,    90,    91,    92,    12,    13,
       93,    15,    94,    17,    18,    95,    96,    97,    98,    22,
       99,    24,    25,   100,   101,   102,   103,     0,     0,     0,
        0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+     124,    39,   125,    41,   126,    43,   127,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     158,    58,    59,    60,    61,    62,   104,   105,   106,   107,
-       0,     1,     0,   108,    87,     2,     3,     4,     5,     6,
-      88,     0,    89,     8,    90,    91,    92,    12,    13,    93,
-      15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
-      24,    25,   100,   101,   102,   103,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,   192,   193,   194,
-     195,   196,     0,    51,   197,    53,    54,    55,   198,    57,
-      58,    59,    60,    61,    62,   104,   105,   106,   107,     0,
-       1,     0,   108,    87,     2,     3,     4,     5,     6,    88,
-       0,    89,     8,    90,    91,    92,    12,    13,    93,    15,
-      94,    17,    18,    95,    96,    97,    98,    22,    99,    24,
-      25,   100,   101,   102,   103,     0,     0,     0,     0,    30,
+      57,    58,    59,    60,    61,    62,   104,   105,   106,   107,
+       1,     0,     0,   108,     2,     3,     4,     5,     6,     0,
+       0,     7,     8,     9,    10,     0,    12,    13,     0,    15,
+      16,    17,    18,    19,    96,    21,     0,    22,     0,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,   254,    57,    58,
-      59,    60,    61,    62,   104,   105,   106,   107,     0,     1,
-       0,   108,    87,   117,   118,     4,     5,     6,    88,     0,
-      89,     8,    90,    91,    92,    12,    13,    93,    15,    94,
-      17,    18,    95,    96,    97,    98,    22,    99,    24,    25,
-     100,   101,   102,   103,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,    36,    37,   124,    39,   125,
-      41,   126,    43,   127,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,   104,   105,   106,   107,     1,     0,     0,
-     108,     2,     3,     4,     5,     6,     0,     0,     7,     8,
-       9,    10,     0,    12,    13,     0,    15,    16,    17,    18,
-      19,    96,    21,     0,    22,     0,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,   104,    64,     0,     0,     0,     0,     0,    66,   218,
-     219,   220,   221,   241,   242,     0,   243,     0,     0,   225,
-     244,   245,   218,   219,   220,   221,   241,   242,     0,   243,
-       0,     0,   225,   244,   245,   218,   219,   220,   221,   241,
-     242,     0,   243,     0,     0,   225,   244,   245,     0,     0,
-       0,     0,     0,     0,     0,     0,   228,   229,   230,   231,
-     232,   233,   234,     0,   441,     0,     0,     0,     0,   228,
-     229,   230,   231,   232,   233,   234,     0,   444,     0,     0,
-       0,     0,   228,   229,   230,   231,   232,   233,   234,     0,
-     468,   218,   219,   220,   221,   241,   242,     0,   243,     0,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,   104,    64,     0,     0,     0,     0,
+       0,    66,   218,   219,   220,   221,   241,   242,     0,   243,
+       0,     0,   225,   244,   245,     0,     0,     0,     0,     0,
+       0,   218,   219,   220,   221,   241,   242,     0,   243,     0,
        0,   225,   244,   245,   218,   219,   220,   221,   241,   242,
-       0,   243,     0,     0,   225,   244,   245,     0,     0,     0,
-       0,     0,     0,   218,   219,   220,   221,   241,   242,     0,
-     243,     0,     0,   225,   244,   245,     0,     0,   228,   229,
-     230,   231,   232,   233,   234,     0,   503,     0,     0,     0,
-       0,   228,   229,   230,   231,   232,   233,   234,     0,   511,
-     298,   299,     0,     0,     0,     0,     0,     0,     0,     0,
-     228,   229,   230,   231,   232,   233,   234,   218,   219,   220,
-     221,   241,   242,     0,   243,     0,     0,   225,   244,   245,
-     330,   331,   332,   333,   334,   335,     0,   336,     0,     0,
-     337,   338,   339,     0,     0,     0,     0,     0,     0,     0,
+       0,   243,     0,     0,   225,   244,   245,     0,     0,   228,
+     229,   230,   231,   232,   233,   234,     0,   510,   298,   299,
+       0,     0,     0,     0,     0,     0,     0,     0,   228,   229,
+     230,   231,   232,   233,   234,     0,     0,     0,     0,     0,
+       0,   228,   229,   230,   231,   232,   233,   234,   330,   331,
+     332,   333,   334,   335,     0,   336,     0,     0,   337,   338,
+     339,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   228,   229,   230,   231,   232,   233,
-     234,     0,     0,     0,     0,     0,     0,   340,   341,   342,
-     343,   344,   345,   346
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   340,   341,   342,   343,   344,
+     345,   346
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,    21,     9,    66,   235,     0,    49,    14,    49,
-      31,    23,   348,    84,   350,    21,    19,    23,    49,    34,
-      26,    52,   358,    29,    27,    28,    97,    31,   148,    44,
-       0,    69,    44,    69,    69,   155,    64,   372,    76,   375,
-      76,    76,   388,   389,   390,   391,   166,    97,   394,   148,
-      92,    93,    94,    95,    94,    95,   155,   177,    64,    65,
-      91,    92,    93,    94,    95,   185,    66,   166,    28,    69,
-     300,    74,    10,    11,    34,    69,    97,    69,   177,    28,
-      69,    19,    28,    97,    76,    34,   185,    76,    34,    27,
-      28,    98,    55,   100,    57,    28,    59,   432,    61,   434,
-      99,    34,    23,    98,   103,   440,    99,    28,    36,    37,
-      98,    97,   447,    97,   102,    97,    98,   347,   249,   250,
-     251,    97,   128,    97,   152,    63,    33,   133,   250,   251,
-     466,    97,   468,    97,    28,    97,    74,    28,    97,    97,
-      97,    97,   103,    26,   172,    97,   152,    98,   103,   102,
-     156,   487,   158,    28,   102,   490,   491,    97,    26,   495,
-      16,   100,    97,    97,   499,    97,   172,   503,    97,   504,
-      28,    28,   103,    28,   180,   511,    28,   512,    97,    15,
-     515,    28,    71,   121,   122,    97,    34,    97,    97,    71,
-      69,   129,    97,    97,   132,    97,    97,    97,    34,   443,
-      28,   297,   460,   265,    21,   306,    42,    43,    44,    45,
-      46,    47,   150,    49,   185,    -1,    52,    53,    54,   157,
-      -1,    -1,    -1,   214,    -1,    -1,    42,    43,    44,    45,
-     249,   250,   251,    49,    -1,    -1,    52,    53,    54,    -1,
-     240,    -1,    -1,   249,   250,   251,   240,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,    -1,   265,   266,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,    -1,    -1,    -1,
-     306,    -1,    -1,   241,   242,   243,   244,   245,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   257,
-     258,    -1,    -1,   261,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,    29,     9,    21,    66,     0,    16,    14,   235,    49,
+     348,    31,   350,    34,    21,    49,    23,    19,    23,    26,
+     358,     0,    29,    44,    69,    27,    28,   148,    84,    28,
+      31,    76,    28,    97,   155,    34,    64,   375,    34,    44,
+      49,    97,    69,    52,    69,   166,    99,    36,    37,    76,
+     103,    76,    92,    93,    94,    95,   177,    64,    65,    28,
+      94,    95,    15,    23,   185,    34,    66,    97,    28,    69,
+      10,    11,    74,   300,    69,    85,    98,    97,    97,    19,
+     102,    34,    91,    92,    93,    94,    95,    27,    28,    42,
+      43,    44,    45,    46,    47,    69,    49,    69,   148,    52,
+      53,    54,    76,    97,    76,   155,   388,   389,   390,   391,
+      98,    55,   394,    57,    99,    59,   166,    61,    33,    28,
+     347,   128,    97,    63,   152,    34,   133,   177,   466,    97,
+     468,   249,   250,   251,    74,   185,    89,    90,    91,    92,
+      93,    94,    95,    97,   172,   152,    97,    98,   486,   156,
+      98,   158,   100,   250,   251,    97,   494,    28,    97,    97,
+      97,    97,    97,    28,   502,   172,    98,    26,    97,   103,
+     103,   102,   510,   180,   102,    28,    42,    43,    44,    45,
+      97,   121,   122,    49,    26,    16,    52,    53,    54,   129,
+     100,    97,   132,    97,    97,    87,    34,    86,    28,    28,
+      28,    28,   103,   265,    42,    43,    44,    45,    46,    47,
+     150,    49,    97,    10,    52,    53,    54,   157,    28,    71,
+      97,    34,    97,    89,    90,    91,    92,    93,    94,    95,
+      97,   249,   250,   251,    71,    85,    97,    86,    85,    97,
+     240,    97,   249,   250,   251,   240,    86,    86,    69,    97,
+     366,    89,    90,    91,    92,    93,    94,    95,    28,    97,
+     373,    97,   297,   460,    21,   265,   266,   306,   214,   185,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,    -1,    -1,    -1,    -1,   306,
+      -1,   241,   242,   243,   244,   245,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   257,   258,    -1,
+      33,   261,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,   348,    -1,
+     350,    -1,    -1,    -1,    -1,   362,    -1,    -1,   358,    -1,
+      -1,    -1,   302,   303,    -1,   305,    -1,    -1,    -1,   309,
+      -1,   311,    -1,   373,    -1,   375,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
+     340,   341,   342,   343,   344,   345,   346,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   442,    -1,   356,   357,   117,   118,
+     119,   120,    -1,    -1,   123,   124,   125,   126,   127,    -1,
+      -1,   130,   131,   433,    -1,   442,   376,    -1,   433,    -1,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   464,    -1,   466,   474,   468,   464,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,   486,    89,    90,    91,
+      92,    93,    94,    95,   494,    -1,    98,    -1,   505,    -1,
+      -1,    -1,   502,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     510,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    98,    -1,   100,    -1,
+     470,    -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
+      -1,   491,    -1,    -1,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   273,   274,   275,   276,   277,   278,
+     279,   280,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    -1,    -1,   100,    -1,    -1,    -1,   296,   297,   298,
+     299,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,    -1,
-     350,    -1,    -1,    -1,    -1,    -1,   362,    -1,   358,    -1,
-      -1,    -1,    -1,    -1,   302,   303,    -1,   305,    -1,    -1,
-      -1,   309,   372,   311,    -1,   375,    -1,   117,   118,   119,
-     120,    -1,    -1,   123,   124,   125,   126,   127,    -1,    -1,
-     130,   131,   330,   331,   332,   333,   334,   335,   336,   337,
-     338,   339,   340,   341,   342,   343,   344,   345,   346,    -1,
-      -1,    -1,    -1,    -1,   442,    -1,    -1,    -1,   356,   357,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   432,   433,   434,    -1,   442,    -1,   376,   433,
-     440,    -1,    -1,    -1,    -1,    -1,    -1,   447,    -1,    -1,
+     359,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    97,    -1,    -1,    -1,    -1,    -1,   387,    -1,
+      -1,    -1,    -1,   392,   393,    -1,   395,   396,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    34,   464,    -1,   466,    -1,   468,   475,
-     464,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    -1,   487,    -1,    -1,
-     490,   491,    -1,    -1,    -1,   495,    -1,    -1,    -1,   499,
-     506,    -1,    -1,   503,   504,    -1,    -1,    -1,    -1,    -1,
-      -1,   511,   512,    -1,    -1,   515,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
-      -1,    -1,   470,   273,   274,   275,   276,   277,   278,   279,
-     280,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    33,    -1,    -1,   492,    -1,   296,   297,   298,   299,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,   359,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
-      -1,   100,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,   100,    -1,    -1,   387,    -1,    -1,
-      -1,    -1,   392,   393,    -1,   395,   396,    -1,    -1,    -1,
+      -1,    -1,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   449,
-     450,   451,   452,    -1,   454,   455,   456,   457,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    98,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      -1,    -1,    -1,    -1,    -1,   485,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,   498,    18,
+     449,   450,   451,   452,    -1,   454,   455,   456,   457,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      97,    -1,    -1,    -1,    -1,   484,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,   497,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
@@ -1613,14 +1539,14 @@ static const yytype_int16 yycheck[] =
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
       81,    82,    83,    -1,    -1,    -1,     7,    88,    -1,    -1,
-      11,    12,    13,    14,    15,    16,    97,    18,    19,    20,
+      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
       21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
       31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
       41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
       51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    85,    -1,     7,    88,    -1,    -1,
+      81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,    -1,
       11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
       21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
       31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
@@ -1628,97 +1554,48 @@ static const yytype_int16 yycheck[] =
       51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    -1,    -1,    87,    88,    -1,    -1,
-      -1,    -1,    -1,     7,    -1,    -1,    97,    11,    12,    13,
-      14,    15,    -1,    -1,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    86,     7,    88,    -1,    10,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    86,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    97,     7,     8,     9,    10,    11,    12,
+      81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,    -1,
+      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
+      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,    -1,
+      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
+      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    97,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    -1,     7,    -1,    88,    10,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    -1,     7,    -1,    88,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    -1,     7,    -1,    88,    10,    11,    12,
       13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
@@ -1742,62 +1619,29 @@ static const yytype_int16 yycheck[] =
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,     7,    -1,    88,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-       7,    -1,    88,    10,    11,    12,    13,    14,    15,    16,
-      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+       7,    -1,    -1,    88,    11,    12,    13,    14,    15,    -1,
+      -1,    18,    19,    20,    21,    -1,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    -1,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    -1,     7,
-      -1,    88,    10,    11,    12,    13,    14,    15,    16,    -1,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,     7,    -1,    -1,
-      88,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
-      20,    21,    -1,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    -1,    -1,    -1,    88,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+      -1,    88,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
       -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    79,    80,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1848,14 +1692,14 @@ static const yytype_uint8 yystos[] =
      152,   155,   100,   155,   155,   155,   155,   155,   155,   155,
      155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
      155,   159,   133,    16,   133,    97,    97,    97,   155,   155,
-     133,    97,   117,    97,    97,    87,   135,   133,   155,    28,
+     133,    97,   117,   113,    97,    87,   135,   133,   155,    28,
       28,    28,    28,   154,   149,   149,   149,   149,   154,   154,
      149,   154,   154,   100,    16,    85,    97,   120,    97,    15,
-      34,    86,   118,   113,    97,    10,   154,   154,   154,   154,
-     154,   154,   154,   154,    28,    71,   144,    97,   120,    97,
-     133,   133,    34,   155,    97,    97,   115,   117,    71,   133,
-      85,    86,   155,    97,   133,    97,    98,   154,    85,    97,
-      97,    97,   133,   117,    97,   133,    86,    86,    97,    97
+      34,    86,   118,    97,    10,   154,   154,   154,   154,   154,
+     154,   154,   154,    28,    71,   144,    97,   120,    97,   133,
+     133,    34,   155,    97,    97,   115,   117,    71,   133,    85,
+      86,   155,    97,   133,    97,    98,   154,    85,    97,    97,
+      97,   133,   117,    97,   133,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1895,7 +1739,7 @@ static const yytype_uint8 yyr1[] =
 static const yytype_int8 yyr2[] =
 {
        0,     2,     1,     1,     2,     1,     1,     1,     1,     1,
-       5,     4,     5,     0,     1,     1,     3,     1,     1,     8,
+       5,     4,     5,     0,     1,     1,     2,     1,     1,     8,
        5,     0,     1,     3,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -2195,37 +2039,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2199 "engines/director/lingo/lingo-gr.cpp"
+#line 2043 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2205 "engines/director/lingo/lingo-gr.cpp"
+#line 2049 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2211 "engines/director/lingo/lingo-gr.cpp"
+#line 2055 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2217 "engines/director/lingo/lingo-gr.cpp"
+#line 2061 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2223 "engines/director/lingo/lingo-gr.cpp"
+#line 2067 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2229 "engines/director/lingo/lingo-gr.cpp"
+#line 2073 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2493,7 +2337,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2497 "engines/director/lingo/lingo-gr.cpp"
+#line 2341 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2504,7 +2348,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2508 "engines/director/lingo/lingo-gr.cpp"
+#line 2352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2514,37 +2358,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2518 "engines/director/lingo/lingo-gr.cpp"
+#line 2362 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2524 "engines/director/lingo/lingo-gr.cpp"
+#line 2368 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2530 "engines/director/lingo/lingo-gr.cpp"
+#line 2374 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2536 "engines/director/lingo/lingo-gr.cpp"
+#line 2380 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2542 "engines/director/lingo/lingo-gr.cpp"
+#line 2386 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2548 "engines/director/lingo/lingo-gr.cpp"
+#line 2392 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2555,23 +2399,23 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2559 "engines/director/lingo/lingo-gr.cpp"
+#line 2403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 16: /* nonemptymethodlist: methodlist '\n' methodlistline  */
+  case 16: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
 #line 261 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
-			(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
+			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
-		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 2569 "engines/director/lingo/lingo-gr.cpp"
+		(yyval.nodelist) = (yyvsp[-1].nodelist); }
+#line 2413 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2575 "engines/director/lingo/lingo-gr.cpp"
+#line 2419 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2580,446 +2424,446 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2584 "engines/director/lingo/lingo-gr.cpp"
+#line 2428 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2591 "engines/director/lingo/lingo-gr.cpp"
+#line 2435 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2597 "engines/director/lingo/lingo-gr.cpp"
+#line 2441 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2603 "engines/director/lingo/lingo-gr.cpp"
+#line 2447 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2609 "engines/director/lingo/lingo-gr.cpp"
+#line 2453 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2459 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2621 "engines/director/lingo/lingo-gr.cpp"
+#line 2465 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
+#line 2471 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2477 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2483 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2645 "engines/director/lingo/lingo-gr.cpp"
+#line 2489 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2495 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2657 "engines/director/lingo/lingo-gr.cpp"
+#line 2501 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2507 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2669 "engines/director/lingo/lingo-gr.cpp"
+#line 2513 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2675 "engines/director/lingo/lingo-gr.cpp"
+#line 2519 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2531 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+#line 2537 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
+#line 2555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2717 "engines/director/lingo/lingo-gr.cpp"
+#line 2561 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2723 "engines/director/lingo/lingo-gr.cpp"
+#line 2567 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2573 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2579 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2585 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2747 "engines/director/lingo/lingo-gr.cpp"
+#line 2591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2759 "engines/director/lingo/lingo-gr.cpp"
+#line 2603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2765 "engines/director/lingo/lingo-gr.cpp"
+#line 2609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2771 "engines/director/lingo/lingo-gr.cpp"
+#line 2615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2777 "engines/director/lingo/lingo-gr.cpp"
+#line 2621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSET  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tSTARTS  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTELL  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTHE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tTIME  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tTO  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWHILE  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWINDOW  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2891 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWITH  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2897 "engines/director/lingo/lingo-gr.cpp"
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWITHIN  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2903 "engines/director/lingo/lingo-gr.cpp"
+#line 2747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* CMDID: tWORD  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2909 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* CMDID: tWORDS  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2915 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tELSE  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2921 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tENDCLAUSE  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2927 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tEXIT  */
 #line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2933 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tFACTORY  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tGLOBAL  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tGO  */
 #line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2951 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tIF  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2957 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tINSTANCE  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2963 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tMACRO  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2969 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tMETHOD  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tON  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 2981 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tOPEN  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2987 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPLAY  */
 #line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2993 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tPROPERTY  */
 #line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 2999 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 3005 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
 #line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 3011 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
 #line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 3017 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
 #line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* nonemptyidlist: ID  */
@@ -3028,7 +2872,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 2876 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -3036,49 +2880,49 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 3040 "engines/director/lingo/lingo-gr.cpp"
+#line 2884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* proc: CMDID cmdargs '\n'  */
 #line 397 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 3046 "engines/director/lingo/lingo-gr.cpp"
+#line 2890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* proc: tPUT cmdargs '\n'  */
 #line 398 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 2896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* proc: tGO cmdargs '\n'  */
 #line 399 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+#line 2902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* proc: tGO frameargs '\n'  */
 #line 400 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3064 "engines/director/lingo/lingo-gr.cpp"
+#line 2908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* proc: tPLAY cmdargs '\n'  */
 #line 401 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3070 "engines/director/lingo/lingo-gr.cpp"
+#line 2914 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* proc: tPLAY frameargs '\n'  */
 #line 402 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 2920 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* proc: tOPEN cmdargs '\n'  */
 #line 403 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 2926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* proc: tOPEN expr tWITH expr '\n'  */
@@ -3088,31 +2932,31 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 3092 "engines/director/lingo/lingo-gr.cpp"
+#line 2936 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* proc: tNEXT tREPEAT '\n'  */
 #line 409 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 3098 "engines/director/lingo/lingo-gr.cpp"
+#line 2942 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* proc: tEXIT tREPEAT '\n'  */
 #line 410 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 3104 "engines/director/lingo/lingo-gr.cpp"
+#line 2948 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* proc: tEXIT '\n'  */
 #line 411 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 3110 "engines/director/lingo/lingo-gr.cpp"
+#line 2954 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* proc: tASSERTERROR stmtoneliner  */
 #line 412 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 3116 "engines/director/lingo/lingo-gr.cpp"
+#line 2960 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* cmdargs: %empty  */
@@ -3120,7 +2964,7 @@ yyreduce:
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 2968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* cmdargs: expr  */
@@ -3130,7 +2974,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3134 "engines/director/lingo/lingo-gr.cpp"
+#line 2978 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* cmdargs: expr ',' nonemptyexprlist  */
@@ -3139,7 +2983,7 @@ yyreduce:
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 3143 "engines/director/lingo/lingo-gr.cpp"
+#line 2987 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* cmdargs: expr expr_nounarymath  */
@@ -3150,7 +2994,7 @@ yyreduce:
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+#line 2998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
@@ -3160,7 +3004,7 @@ yyreduce:
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 3164 "engines/director/lingo/lingo-gr.cpp"
+#line 3008 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* cmdargs: '(' ')'  */
@@ -3168,7 +3012,7 @@ yyreduce:
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3172 "engines/director/lingo/lingo-gr.cpp"
+#line 3016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
@@ -3177,7 +3021,7 @@ yyreduce:
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3181 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* frameargs: tFRAME expr  */
@@ -3187,7 +3031,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3191 "engines/director/lingo/lingo-gr.cpp"
+#line 3035 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* frameargs: tMOVIE expr  */
@@ -3198,7 +3042,7 @@ yyreduce:
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3202 "engines/director/lingo/lingo-gr.cpp"
+#line 3046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* frameargs: tFRAME expr tOF tMOVIE expr  */
@@ -3209,7 +3053,7 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3213 "engines/director/lingo/lingo-gr.cpp"
+#line 3057 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130: /* frameargs: expr tOF tMOVIE expr  */
@@ -3220,7 +3064,7 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3224 "engines/director/lingo/lingo-gr.cpp"
+#line 3068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131: /* frameargs: tFRAME expr expr_nounarymath  */
@@ -3231,49 +3075,49 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3235 "engines/director/lingo/lingo-gr.cpp"
+#line 3079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* asgn: tPUT expr tINTO varorchunk '\n'  */
 #line 482 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3241 "engines/director/lingo/lingo-gr.cpp"
+#line 3085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
 #line 483 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3247 "engines/director/lingo/lingo-gr.cpp"
+#line 3091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
 #line 484 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3253 "engines/director/lingo/lingo-gr.cpp"
+#line 3097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* asgn: tSET varorthe to expr '\n'  */
 #line 485 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3259 "engines/director/lingo/lingo-gr.cpp"
+#line 3103 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* definevars: tGLOBAL idlist '\n'  */
 #line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3265 "engines/director/lingo/lingo-gr.cpp"
+#line 3109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* definevars: tPROPERTY idlist '\n'  */
 #line 491 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3271 "engines/director/lingo/lingo-gr.cpp"
+#line 3115 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* definevars: tINSTANCE idlist '\n'  */
 #line 492 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3277 "engines/director/lingo/lingo-gr.cpp"
+#line 3121 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141: /* ifstmt: tIF expr tTHEN stmt  */
@@ -3282,14 +3126,14 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3286 "engines/director/lingo/lingo-gr.cpp"
+#line 3130 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
 #line 499 "engines/director/lingo/lingo-gr.y"
                                                    {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3293 "engines/director/lingo/lingo-gr.cpp"
+#line 3137 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
@@ -3300,7 +3144,7 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3304 "engines/director/lingo/lingo-gr.cpp"
+#line 3148 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
@@ -3309,7 +3153,7 @@ yyreduce:
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3313 "engines/director/lingo/lingo-gr.cpp"
+#line 3157 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
@@ -3318,42 +3162,42 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3322 "engines/director/lingo/lingo-gr.cpp"
+#line 3166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
 #line 517 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3329 "engines/director/lingo/lingo-gr.cpp"
+#line 3173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 521 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3336 "engines/director/lingo/lingo-gr.cpp"
+#line 3180 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 523 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3343 "engines/director/lingo/lingo-gr.cpp"
+#line 3187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 525 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3350 "engines/director/lingo/lingo-gr.cpp"
+#line 3194 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 527 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3201 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151: /* tell: tTELL expr tTO stmtoneliner  */
@@ -3362,26 +3206,26 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3366 "engines/director/lingo/lingo-gr.cpp"
+#line 3210 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
 #line 535 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3373 "engines/director/lingo/lingo-gr.cpp"
+#line 3217 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153: /* when: tWHEN ID tTHEN expr  */
 #line 539 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3379 "engines/director/lingo/lingo-gr.cpp"
+#line 3223 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154: /* stmtlist: %empty  */
 #line 541 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3229 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156: /* nonemptystmtlist: stmtlistline  */
@@ -3392,71 +3236,71 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3396 "engines/director/lingo/lingo-gr.cpp"
+#line 3240 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* nonemptystmtlist: stmtlist stmtlistline  */
+  case 157: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
 #line 552 "engines/director/lingo/lingo-gr.y"
-                                                {
+                                                        {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3406 "engines/director/lingo/lingo-gr.cpp"
+#line 3250 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158: /* stmtlistline: '\n'  */
 #line 559 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3412 "engines/director/lingo/lingo-gr.cpp"
+#line 3256 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160: /* simpleexpr_nounarymath: tINT  */
 #line 566 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3418 "engines/director/lingo/lingo-gr.cpp"
+#line 3262 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161: /* simpleexpr_nounarymath: tFLOAT  */
 #line 567 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3424 "engines/director/lingo/lingo-gr.cpp"
+#line 3268 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162: /* simpleexpr_nounarymath: tSYMBOL  */
 #line 568 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3430 "engines/director/lingo/lingo-gr.cpp"
+#line 3274 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163: /* simpleexpr_nounarymath: tSTRING  */
 #line 569 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3436 "engines/director/lingo/lingo-gr.cpp"
+#line 3280 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164: /* simpleexpr_nounarymath: tNOT simpleexpr  */
 #line 570 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3442 "engines/director/lingo/lingo-gr.cpp"
+#line 3286 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
 #line 571 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3448 "engines/director/lingo/lingo-gr.cpp"
+#line 3292 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166: /* simpleexpr_nounarymath: '(' expr ')'  */
 #line 572 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3454 "engines/director/lingo/lingo-gr.cpp"
+#line 3298 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172: /* var: ID  */
 #line 580 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3460 "engines/director/lingo/lingo-gr.cpp"
+#line 3304 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 177: /* chunk: tFIELD simpleexpr  */
@@ -3465,7 +3309,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3469 "engines/director/lingo/lingo-gr.cpp"
+#line 3313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 178: /* chunk: tCAST simpleexpr  */
@@ -3474,63 +3318,63 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3478 "engines/director/lingo/lingo-gr.cpp"
+#line 3322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 179: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
 #line 598 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3485 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 180: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
 #line 600 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3492 "engines/director/lingo/lingo-gr.cpp"
+#line 3336 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 181: /* chunk: tWORD simpleexpr tOF simpleexpr  */
 #line 602 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3499 "engines/director/lingo/lingo-gr.cpp"
+#line 3343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 182: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
 #line 604 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3506 "engines/director/lingo/lingo-gr.cpp"
+#line 3350 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 183: /* chunk: tITEM simpleexpr tOF simpleexpr  */
 #line 606 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3513 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 184: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
 #line 608 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3520 "engines/director/lingo/lingo-gr.cpp"
+#line 3364 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 185: /* chunk: tLINE simpleexpr tOF simpleexpr  */
 #line 610 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3527 "engines/director/lingo/lingo-gr.cpp"
+#line 3371 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 186: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
 #line 612 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3534 "engines/director/lingo/lingo-gr.cpp"
+#line 3378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 187: /* object: tSCRIPT simpleexpr  */
@@ -3539,7 +3383,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3543 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 188: /* object: tWINDOW simpleexpr  */
@@ -3548,187 +3392,187 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3552 "engines/director/lingo/lingo-gr.cpp"
+#line 3396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 192: /* the: tTHE tLAST chunktype inof simpleexpr  */
 #line 629 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3558 "engines/director/lingo/lingo-gr.cpp"
+#line 3402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 195: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
 #line 634 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3564 "engines/director/lingo/lingo-gr.cpp"
+#line 3408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 196: /* theobj: tSOUND simpleexpr  */
 #line 635 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3570 "engines/director/lingo/lingo-gr.cpp"
+#line 3414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 197: /* theobj: tSPRITE simpleexpr  */
 #line 636 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3576 "engines/director/lingo/lingo-gr.cpp"
+#line 3420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 198: /* menu: tMENU simpleexpr  */
 #line 639 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3582 "engines/director/lingo/lingo-gr.cpp"
+#line 3426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 199: /* writablethe: tTHE ID  */
 #line 641 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3588 "engines/director/lingo/lingo-gr.cpp"
+#line 3432 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 200: /* writablethe: tTHE ID tOF theobj  */
 #line 642 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3594 "engines/director/lingo/lingo-gr.cpp"
+#line 3438 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 201: /* writablethe: tTHE tNUMBER tOF theobj  */
 #line 643 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3600 "engines/director/lingo/lingo-gr.cpp"
+#line 3444 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 202: /* thedatetime: tTHE tABBREVIATED tDATE  */
 #line 646 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3606 "engines/director/lingo/lingo-gr.cpp"
+#line 3450 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 203: /* thedatetime: tTHE tABBREVIATED tTIME  */
 #line 647 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3612 "engines/director/lingo/lingo-gr.cpp"
+#line 3456 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 204: /* thedatetime: tTHE tABBREV tDATE  */
 #line 648 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3618 "engines/director/lingo/lingo-gr.cpp"
+#line 3462 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 205: /* thedatetime: tTHE tABBREV tTIME  */
 #line 649 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3624 "engines/director/lingo/lingo-gr.cpp"
+#line 3468 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 206: /* thedatetime: tTHE tABBR tDATE  */
 #line 650 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3630 "engines/director/lingo/lingo-gr.cpp"
+#line 3474 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 207: /* thedatetime: tTHE tABBR tTIME  */
 #line 651 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3636 "engines/director/lingo/lingo-gr.cpp"
+#line 3480 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 208: /* thedatetime: tTHE tLONG tDATE  */
 #line 652 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3642 "engines/director/lingo/lingo-gr.cpp"
+#line 3486 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 209: /* thedatetime: tTHE tLONG tTIME  */
 #line 653 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3648 "engines/director/lingo/lingo-gr.cpp"
+#line 3492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 210: /* thedatetime: tTHE tSHORT tDATE  */
 #line 654 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3654 "engines/director/lingo/lingo-gr.cpp"
+#line 3498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 211: /* thedatetime: tTHE tSHORT tTIME  */
 #line 655 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3660 "engines/director/lingo/lingo-gr.cpp"
+#line 3504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 212: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
 #line 659 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3666 "engines/director/lingo/lingo-gr.cpp"
+#line 3510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 213: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
 #line 660 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3672 "engines/director/lingo/lingo-gr.cpp"
+#line 3516 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 214: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
 #line 661 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3678 "engines/director/lingo/lingo-gr.cpp"
+#line 3522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 215: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
 #line 662 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3684 "engines/director/lingo/lingo-gr.cpp"
+#line 3528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 216: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
 #line 663 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3690 "engines/director/lingo/lingo-gr.cpp"
+#line 3534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 217: /* chunktype: tCHAR  */
 #line 666 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3696 "engines/director/lingo/lingo-gr.cpp"
+#line 3540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 218: /* chunktype: tWORD  */
 #line 667 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3702 "engines/director/lingo/lingo-gr.cpp"
+#line 3546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 219: /* chunktype: tITEM  */
 #line 668 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3708 "engines/director/lingo/lingo-gr.cpp"
+#line 3552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 220: /* chunktype: tLINE  */
 #line 669 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3714 "engines/director/lingo/lingo-gr.cpp"
+#line 3558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 223: /* list: '[' exprlist ']'  */
 #line 674 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3720 "engines/director/lingo/lingo-gr.cpp"
+#line 3564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 224: /* list: '[' ':' ']'  */
 #line 675 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3726 "engines/director/lingo/lingo-gr.cpp"
+#line 3570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 225: /* list: '[' proplist ']'  */
 #line 676 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3732 "engines/director/lingo/lingo-gr.cpp"
+#line 3576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 226: /* proplist: proppair  */
@@ -3737,7 +3581,7 @@ yyreduce:
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3741 "engines/director/lingo/lingo-gr.cpp"
+#line 3585 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 227: /* proplist: proplist ',' proppair  */
@@ -3745,259 +3589,259 @@ yyreduce:
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3749 "engines/director/lingo/lingo-gr.cpp"
+#line 3593 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 228: /* proppair: tSYMBOL ':' expr  */
 #line 688 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3755 "engines/director/lingo/lingo-gr.cpp"
+#line 3599 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 229: /* proppair: ID ':' expr  */
 #line 689 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3761 "engines/director/lingo/lingo-gr.cpp"
+#line 3605 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 230: /* proppair: tSTRING ':' expr  */
 #line 690 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3767 "engines/director/lingo/lingo-gr.cpp"
+#line 3611 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 231: /* unarymath: '+' simpleexpr  */
 #line 693 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3773 "engines/director/lingo/lingo-gr.cpp"
+#line 3617 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 232: /* unarymath: '-' simpleexpr  */
 #line 694 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3779 "engines/director/lingo/lingo-gr.cpp"
+#line 3623 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 237: /* expr: expr '+' expr  */
 #line 704 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3785 "engines/director/lingo/lingo-gr.cpp"
+#line 3629 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 238: /* expr: expr '-' expr  */
 #line 705 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3791 "engines/director/lingo/lingo-gr.cpp"
+#line 3635 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 239: /* expr: expr '*' expr  */
 #line 706 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3797 "engines/director/lingo/lingo-gr.cpp"
+#line 3641 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 240: /* expr: expr '/' expr  */
 #line 707 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3803 "engines/director/lingo/lingo-gr.cpp"
+#line 3647 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 241: /* expr: expr tMOD expr  */
 #line 708 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3809 "engines/director/lingo/lingo-gr.cpp"
+#line 3653 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 242: /* expr: expr '>' expr  */
 #line 709 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3815 "engines/director/lingo/lingo-gr.cpp"
+#line 3659 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 243: /* expr: expr '<' expr  */
 #line 710 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3821 "engines/director/lingo/lingo-gr.cpp"
+#line 3665 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 244: /* expr: expr tEQ expr  */
 #line 711 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3827 "engines/director/lingo/lingo-gr.cpp"
+#line 3671 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 245: /* expr: expr tNEQ expr  */
 #line 712 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3833 "engines/director/lingo/lingo-gr.cpp"
+#line 3677 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 246: /* expr: expr tGE expr  */
 #line 713 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3839 "engines/director/lingo/lingo-gr.cpp"
+#line 3683 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 247: /* expr: expr tLE expr  */
 #line 714 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3845 "engines/director/lingo/lingo-gr.cpp"
+#line 3689 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 248: /* expr: expr tAND expr  */
 #line 715 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3851 "engines/director/lingo/lingo-gr.cpp"
+#line 3695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 249: /* expr: expr tOR expr  */
 #line 716 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3857 "engines/director/lingo/lingo-gr.cpp"
+#line 3701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 250: /* expr: expr '&' expr  */
 #line 717 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3863 "engines/director/lingo/lingo-gr.cpp"
+#line 3707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 251: /* expr: expr tCONCAT expr  */
 #line 718 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3869 "engines/director/lingo/lingo-gr.cpp"
+#line 3713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 252: /* expr: expr tCONTAINS expr  */
 #line 719 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3875 "engines/director/lingo/lingo-gr.cpp"
+#line 3719 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 253: /* expr: expr tSTARTS expr  */
 #line 720 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3881 "engines/director/lingo/lingo-gr.cpp"
+#line 3725 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 256: /* expr_nounarymath: expr_nounarymath '+' expr  */
 #line 729 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3887 "engines/director/lingo/lingo-gr.cpp"
+#line 3731 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 257: /* expr_nounarymath: expr_nounarymath '-' expr  */
 #line 730 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3893 "engines/director/lingo/lingo-gr.cpp"
+#line 3737 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 258: /* expr_nounarymath: expr_nounarymath '*' expr  */
 #line 731 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3899 "engines/director/lingo/lingo-gr.cpp"
+#line 3743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 259: /* expr_nounarymath: expr_nounarymath '/' expr  */
 #line 732 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3905 "engines/director/lingo/lingo-gr.cpp"
+#line 3749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 260: /* expr_nounarymath: expr_nounarymath tMOD expr  */
 #line 733 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3911 "engines/director/lingo/lingo-gr.cpp"
+#line 3755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 261: /* expr_nounarymath: expr_nounarymath '>' expr  */
 #line 734 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3917 "engines/director/lingo/lingo-gr.cpp"
+#line 3761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 262: /* expr_nounarymath: expr_nounarymath '<' expr  */
 #line 735 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3923 "engines/director/lingo/lingo-gr.cpp"
+#line 3767 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 263: /* expr_nounarymath: expr_nounarymath tEQ expr  */
 #line 736 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3929 "engines/director/lingo/lingo-gr.cpp"
+#line 3773 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 264: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
 #line 737 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3935 "engines/director/lingo/lingo-gr.cpp"
+#line 3779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 265: /* expr_nounarymath: expr_nounarymath tGE expr  */
 #line 738 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3941 "engines/director/lingo/lingo-gr.cpp"
+#line 3785 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 266: /* expr_nounarymath: expr_nounarymath tLE expr  */
 #line 739 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3947 "engines/director/lingo/lingo-gr.cpp"
+#line 3791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 267: /* expr_nounarymath: expr_nounarymath tAND expr  */
 #line 740 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3953 "engines/director/lingo/lingo-gr.cpp"
+#line 3797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 268: /* expr_nounarymath: expr_nounarymath tOR expr  */
 #line 741 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3959 "engines/director/lingo/lingo-gr.cpp"
+#line 3803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 269: /* expr_nounarymath: expr_nounarymath '&' expr  */
 #line 742 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3965 "engines/director/lingo/lingo-gr.cpp"
+#line 3809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 270: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
 #line 743 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3971 "engines/director/lingo/lingo-gr.cpp"
+#line 3815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 271: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
 #line 744 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3977 "engines/director/lingo/lingo-gr.cpp"
+#line 3821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 272: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
 #line 745 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3983 "engines/director/lingo/lingo-gr.cpp"
+#line 3827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 273: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
 #line 748 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3989 "engines/director/lingo/lingo-gr.cpp"
+#line 3833 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 274: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
 #line 749 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3995 "engines/director/lingo/lingo-gr.cpp"
+#line 3839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 275: /* exprlist: %empty  */
 #line 752 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 4001 "engines/director/lingo/lingo-gr.cpp"
+#line 3845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 277: /* nonemptyexprlist: expr  */
@@ -4006,7 +3850,7 @@ yyreduce:
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 4010 "engines/director/lingo/lingo-gr.cpp"
+#line 3854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 278: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
@@ -4014,11 +3858,11 @@ yyreduce:
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 4018 "engines/director/lingo/lingo-gr.cpp"
+#line 3862 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 4022 "engines/director/lingo/lingo-gr.cpp"
+#line 3866 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 706fb450d8..e686a06092 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -258,7 +258,7 @@ nonemptymethodlist: methodlistline[item]			{
 			list->push_back($item);
 		}
 		$$ = list; }
-	| methodlist[prev] '\n' methodlistline[item]	{
+	| nonemptymethodlist[prev] methodlistline[item]	{
 		if ($item) {
 			$prev->push_back($item);
 		}
@@ -549,7 +549,7 @@ nonemptystmtlist:
 			list->push_back($item);
 		}
 		$$ = list; }
-	| stmtlist[prev] stmtlistline[item]	{
+	| nonemptystmtlist[prev] stmtlistline[item]	{
 		if ($item) {
 			$prev->push_back($item);
 		}


Commit: ba8671f7e019d5a681815c84d2faabacb135275e
    https://github.com/scummvm/scummvm/commit/ba8671f7e019d5a681815c84d2faabacb135275e
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add buildbot warnings to compiler

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 52c8cae709..5e7d8805a6 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -295,7 +295,7 @@ void LingoCompiler::codeVarRef(const Common::String &name) {
 	if (_methodVars->contains(name)) {
 		type = (*_methodVars)[name];
 	} else {
-		warning("LingoCompiler::codeVarRef: var %s referenced before definition", name.c_str());
+		warning("BUILDBOT: LingoCompiler::codeVarRef: var %s referenced before definition", name.c_str());
 		type = kVarGeneric;
 	}
 	switch (type) {
@@ -322,7 +322,7 @@ void LingoCompiler::codeVarGet(const Common::String &name) {
 	if (_methodVars->contains(name)) {
 		type = (*_methodVars)[name];
 	} else {
-		warning("LingoCompiler::codeVarGet: var %s referenced before definition", name.c_str());
+		warning("BUILDBOT: LingoCompiler::codeVarGet: var %s referenced before definition", name.c_str());
 		type = kVarGeneric;
 	}
 	switch (type) {
@@ -366,7 +366,7 @@ void LingoCompiler::registerFactory(Common::String &name) {
 	if (!g_lingo->_globalvars.contains(name)) {
 		g_lingo->_globalvars[name] = _assemblyContext;
 	} else {
-		warning("Factory '%s' already defined", name.c_str());
+		warning("BUILDBOT: Factory '%s' already defined", name.c_str());
 	}
 }
 
@@ -573,7 +573,7 @@ bool LingoCompiler::visitPutBeforeNode(PutBeforeNode *node) {
 bool LingoCompiler::codeTheFieldSet(int entity, Node *id, const Common::String &field) {
 	Common::String fieldId = Common::String::format("%d%s", entity, field.c_str());
 	if (!g_lingo->_theEntityFields.contains(fieldId)) {
-		warning("LingoCompiler::codeTheFieldSet: Unhandled the field %s of %s", field.c_str(), g_lingo->entity2str(entity));
+		warning("BUILDBOT: LingoCompiler::codeTheFieldSet: Unhandled the field %s of %s", field.c_str(), g_lingo->entity2str(entity));
 		return false;
 	}
 	COMPILE(id);
@@ -595,7 +595,7 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 			codeInt(0);	// No field
 			return true;
 		}
-		warning("LingoCompiler:visitSetNode: Unhandled the entity '%s'", the->prop->c_str());
+		warning("BUILDBOT: LingoCompiler:visitSetNode: Unhandled the entity '%s'", the->prop->c_str());
 		return false;
 	}
 
@@ -628,7 +628,7 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 				MenuItemNode *menuItem = static_cast<MenuItemNode *>(the->obj);
 				Common::String fieldId = Common::String::format("%d%s", kTheMenuItem, the->prop->c_str());
 				if (!g_lingo->_theEntityFields.contains(fieldId)) {
-					warning("LingoCompiler:visitTheNode: Unhandled the field %s of menuItem", the->prop->c_str());
+					warning("BUILDBOT: LingoCompiler:visitTheNode: Unhandled the field %s of menuItem", the->prop->c_str());
 					return false;
 				}
 				COMPILE(menuItem->arg1)
@@ -675,7 +675,7 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 			return true;
 		}
 
-		warning("LingoCompiler::visitSetNode: Unhandled the field %s", the->prop->c_str());
+		warning("BUILDBOT: LingoCompiler::visitSetNode: Unhandled the field %s", the->prop->c_str());
 		return false;
 	}
 
@@ -895,7 +895,7 @@ bool LingoCompiler::visitRepeatWithInNode(RepeatWithInNode *node) {
 
 bool LingoCompiler::visitNextRepeatNode(NextRepeatNode *node) {
 	if (!_currentLoop) {
-		warning("LingoCompiler::visitNextRepeatNode: next repeat not inside repeat loop");
+		warning("BUILDBOT: LingoCompiler::visitNextRepeatNode: next repeat not inside repeat loop");
 		return false;
 	}
 	_currentLoop->nextRepeats.push_back(_currentAssembly->size());
@@ -907,7 +907,7 @@ bool LingoCompiler::visitNextRepeatNode(NextRepeatNode *node) {
 
 bool LingoCompiler::visitExitRepeatNode(ExitRepeatNode *node) {
 	if (!_currentLoop) {
-		warning("LingoCompiler::visitExitRepeatLoop: exit repeat not inside repeat loop");
+		warning("BUILDBOT: LingoCompiler::visitExitRepeatLoop: exit repeat not inside repeat loop");
 		return false;
 	}
 	_currentLoop->exitRepeats.push_back(_currentAssembly->size());
@@ -1108,7 +1108,7 @@ bool LingoCompiler::visitTheNode(TheNode *node) {
 		return true;
 	}
 
-	warning("LingoCompiler:visitTheNode: Unhandled the entity '%s'", node->prop->c_str());
+	warning("BUILDBOT: LingoCompiler:visitTheNode: Unhandled the entity '%s'", node->prop->c_str());
 	return false;
 }
 
@@ -1117,7 +1117,7 @@ bool LingoCompiler::visitTheNode(TheNode *node) {
 bool LingoCompiler::codeTheFieldGet(int entity, Node *id, const Common::String &field) {
 	Common::String fieldId = Common::String::format("%d%s", entity, field.c_str());
 	if (!g_lingo->_theEntityFields.contains(fieldId)) {
-		warning("LingoCompiler::codeTheFieldGet: Unhandled the field %s of %s", field.c_str(), g_lingo->entity2str(entity));
+		warning("BUILDBOT: LingoCompiler::codeTheFieldGet: Unhandled the field %s of %s", field.c_str(), g_lingo->entity2str(entity));
 		return false;
 	}
 	COMPILE(id);
@@ -1154,7 +1154,7 @@ bool LingoCompiler::visitTheOfNode(TheOfNode *node) {
 			MenuItemNode *menuItem = static_cast<MenuItemNode *>(node->obj);
 			Common::String fieldId = Common::String::format("%d%s", kTheMenuItem, node->prop->c_str());
 			if (!g_lingo->_theEntityFields.contains(fieldId)) {
-				warning("LingoCompiler:visitTheNode: Unhandled the field %s of menuItem", node->prop->c_str());
+				warning("BUILDBOT: LingoCompiler:visitTheNode: Unhandled the field %s of menuItem", node->prop->c_str());
 				return false;
 			}
 			COMPILE(menuItem->arg1)
@@ -1207,7 +1207,7 @@ bool LingoCompiler::visitTheOfNode(TheOfNode *node) {
 		return true;
 	}
 
-	warning("LingoCompiler::visitTheOfNode: Unhandled the field %s", node->prop->c_str());
+	warning("BUILDBOT: LingoCompiler::visitTheOfNode: Unhandled the field %s", node->prop->c_str());
 	return false;
 }
 
@@ -1234,7 +1234,7 @@ bool LingoCompiler::visitTheNumberOfNode(TheNumberOfNode *node) {
 	case kNumberOfMenuItems:
 		{
 			if (node->arg->type != kMenuNode) {
-				warning("LingoCompiler::visitTheNumberOfNode: expected menu");
+				warning("BUILDBOT: LingoCompiler::visitTheNumberOfNode: expected menu");
 				return false;
 			}
 			MenuNode *menu = static_cast<MenuNode *>(node->arg);


Commit: 161cf05f7ceeeebcf61726f2955d94206bcf21a1
    https://github.com/scummvm/scummvm/commit/161cf05f7ceeeebcf61726f2955d94206bcf21a1
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add missing !

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index e6a75491f7..03b9bcac3c 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -410,7 +410,7 @@ void LC::cb_objectcall() {
 	Datum nargs = g_lingo->pop();
 
 	Datum var = g_lingo->findVarV4(varType, varId);
-	if (var.isVarRef()) {
+	if (!var.isVarRef()) {
 		warning("cb_objectcall: first arg did not resolve to variable");
 		return;
 	}


Commit: 597952bdd83f68602278d1b9818a7eb9876123bd
    https://github.com/scummvm/scummvm/commit/597952bdd83f68602278d1b9818a7eb9876123bd
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Correct codeTheFieldGet to codeTheFieldSet

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 5e7d8805a6..c6c1914bb9 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -608,10 +608,10 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 				FuncNode *func = static_cast<FuncNode *>(the->obj);
 				if (func->args->size() == 1) {
 					if (func->name->equalsIgnoreCase("cast")) {
-						return codeTheFieldGet(kTheCast, (*func->args)[0], *the->prop);
+						return codeTheFieldSet(kTheCast, (*func->args)[0], *the->prop);
 					}
 					if (func->name->equalsIgnoreCase("field")) {
-						return codeTheFieldGet(kTheField, (*func->args)[0], *the->prop);
+						return codeTheFieldSet(kTheField, (*func->args)[0], *the->prop);
 					}
 					// window is an object and is handled by that case
 				}
@@ -642,13 +642,13 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 		case kSoundNode:
 			{
 				SoundNode *sound = static_cast<SoundNode *>(the->obj);
-				return codeTheFieldGet(kTheSoundEntity, sound->arg, *the->prop);
+				return codeTheFieldSet(kTheSoundEntity, sound->arg, *the->prop);
 			}
 			break;
 		case kSpriteNode:
 			{
 				SpriteNode *sprite = static_cast<SpriteNode *>(the->obj);
-				return codeTheFieldGet(kTheSprite, sprite->arg, *the->prop);
+				return codeTheFieldSet(kTheSprite, sprite->arg, *the->prop);
 			}
 			break;
 		case kVarNode:


Commit: 150e819d3f582cbb7dc8d9670cfa2e1447a9e37f
    https://github.com/scummvm/scummvm/commit/150e819d3f582cbb7dc8d9670cfa2e1447a9e37f
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Correct more 'the' assignments

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index c6c1914bb9..6d84934cf2 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -620,7 +620,7 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 		case kMenuNode:
 			{
 				MenuNode *menu = static_cast<MenuNode *>(the->obj);
-				return codeTheFieldGet(kTheMenu, menu->arg, *the->prop);
+				return codeTheFieldSet(kTheMenu, menu->arg, *the->prop);
 			}
 			break;
 		case kMenuItemNode:
@@ -633,7 +633,7 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 				}
 				COMPILE(menuItem->arg1)
 				COMPILE(menuItem->arg2);
-				code1(LC::c_theentitypush);
+				code1(LC::c_theentityassign);
 				codeInt(kTheMenuItem);
 				codeInt(g_lingo->_theEntityFields[fieldId]->field);
 				return true;
@@ -657,7 +657,7 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 				if (the->prop->equalsIgnoreCase("number") && var->name->equalsIgnoreCase("castMembers")) {
 					code1(LC::c_intpush);
 					codeInt(0); // Put dummy id
-					code1(LC::c_theentitypush);
+					code1(LC::c_theentityassign);
 					codeInt(kTheCastMembers);
 					codeInt(kTheNumber);
 					return true;
@@ -669,8 +669,9 @@ bool LingoCompiler::visitSetNode(SetNode *node) {
 		}
 
 		if (g_director->getVersion() >= 400) {
+			COMPILE(node->val);
 			COMPILE(the->obj);
-			code1(LC::c_objectproppush);
+			code1(LC::c_objectpropassign);
 			codeString(the->prop->c_str());
 			return true;
 		}


Commit: fee4e419f8b2cc91d17918d36e8e547bec80d5e6
    https://github.com/scummvm/scummvm/commit/fee4e419f8b2cc91d17918d36e8e547bec80d5e6
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Make var undefined warning stricter

Now it only warns if the var is inside a definition. If it's in
scopeless Lingo, it should be fine.

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 6d84934cf2..2b8bd8647e 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -295,7 +295,8 @@ void LingoCompiler::codeVarRef(const Common::String &name) {
 	if (_methodVars->contains(name)) {
 		type = (*_methodVars)[name];
 	} else {
-		warning("BUILDBOT: LingoCompiler::codeVarRef: var %s referenced before definition", name.c_str());
+		if (_indef)
+			warning("BUILDBOT: LingoCompiler::codeVarRef: var %s referenced before definition", name.c_str());
 		type = kVarGeneric;
 	}
 	switch (type) {
@@ -322,7 +323,8 @@ void LingoCompiler::codeVarGet(const Common::String &name) {
 	if (_methodVars->contains(name)) {
 		type = (*_methodVars)[name];
 	} else {
-		warning("BUILDBOT: LingoCompiler::codeVarGet: var %s referenced before definition", name.c_str());
+		if (_indef)
+			warning("BUILDBOT: LingoCompiler::codeVarGet: var %s referenced before definition", name.c_str());
 		type = kVarGeneric;
 	}
 	switch (type) {


Commit: 87dc8c0269574be6657df00cc8375a3b46587bbb
    https://github.com/scummvm/scummvm/commit/87dc8c0269574be6657df00cc8375a3b46587bbb
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix delete/hilite type checks

Changed paths:
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 97232830a8..078f1c42b8 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -507,12 +507,12 @@ void LB::b_delete(int nargs) {
 	Datum field;
 	int start, end;
 	if (d.type == CHUNKREF) {
-		if (d.u.cref->source.isVarRef()) {
+		if (d.u.cref->source.isVarRef() || d.u.cref->source.isCastRef()) {
 			field = d.u.cref->source;
 			start = d.u.cref->start;
 			end = d.u.cref->end;
 		} else {
-			warning("b_delete: bad chunk ref field type: %s", d.type2str());
+			warning("BUILDBOT: b_delete: bad chunk ref field type: %s", d.u.cref->source.type2str());
 			return;
 		}
 	} else if (d.isRef()) {
@@ -520,7 +520,7 @@ void LB::b_delete(int nargs) {
 		start = 0;
 		end = -1;
 	} else {
-		warning("b_delete: bad field type: %s", d.type2str());
+		warning("BUILDBOT: b_delete: bad field type: %s", d.type2str());
 		return;
 	}
 
@@ -556,17 +556,21 @@ void LB::b_hilite(int nargs) {
 	Datum d = g_lingo->pop(false);
 
 	int fieldId, start, end;
-	if (d.type == FIELDREF) {
+	if (d.isCastRef()) {
 		fieldId = d.u.i;
 		start = 0;
 		end = -1;
 	} else if (d.type == CHUNKREF) {
-		TYPECHECK(d.u.cref->source, FIELDREF);
-		fieldId = d.u.cref->source.u.i;
-		start = d.u.cref->start;
-		end = d.u.cref->end;
+		if (d.u.cref->source.isCastRef()) {
+			fieldId = d.u.cref->source.u.i;
+			start = d.u.cref->start;
+			end = d.u.cref->end;
+		} else {
+			warning("BUILDBOT: b_delete: bad chunk ref field type: %s", d.u.cref->source.type2str());
+			return;
+		}
 	} else {
-		warning("b_hilite: bad field type: %s", d.type2str());
+		warning("BUILDBOT: b_hilite: bad field type: %s", d.type2str());
 		return;
 	}
 


Commit: 6a85f472914934a016aa41b3571d8e274d370b7f
    https://github.com/scummvm/scummvm/commit/6a85f472914934a016aa41b3571d8e274d370b7f
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Compile vars as refs for delete/hilite

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 2b8bd8647e..9395b27ba3 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -529,6 +529,12 @@ bool LingoCompiler::visitCmdNode(CmdNode *node) {
 		}
 	}
 
+	if ((node->name->equalsIgnoreCase("delete") || node->name->equalsIgnoreCase("hilite")) && node->args->size() == 1) {
+		COMPILE_REF((*node->args)[0]);
+		codeCmd(*node->name, 1);
+		return true;
+	}
+
 	COMPILE_LIST(node->args);
 	codeCmd(*node->name, node->args->size());
 	return true;


Commit: b098219eae446c25132b478a58eda49e5236abc9
    https://github.com/scummvm/scummvm/commit/b098219eae446c25132b478a58eda49e5236abc9
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix if statements in tests

>From my testing, end if is not allowed to appear on the same line as
the statement.

Changed paths:
    engines/director/lingo/tests/c2.lingo
    engines/director/lingo/tests/if.lingo
    engines/director/lingo/tests/macros2.lingo


diff --git a/engines/director/lingo/tests/c2.lingo b/engines/director/lingo/tests/c2.lingo
index 1ba075997c..c785dc69ba 100644
--- a/engines/director/lingo/tests/c2.lingo
+++ b/engines/director/lingo/tests/c2.lingo
@@ -17,7 +17,7 @@ the continuation
 of previous line
 
    if the castNum of sprite 1 > the number of cast "StarLast" then set the castNum of sprite 1 to the number of Â
-        cast "StarFirst" end if
+        cast "StarFirst"
 
 put "HelloÂ
 World!"
diff --git a/engines/director/lingo/tests/if.lingo b/engines/director/lingo/tests/if.lingo
index 20dfb2c97e..056279f817 100644
--- a/engines/director/lingo/tests/if.lingo
+++ b/engines/director/lingo/tests/if.lingo
@@ -53,7 +53,8 @@ else
 end if
 
 if abs(y) = x and abs(x) = y then put 5
-if abs(y) = x and abs(x) = y then put 5 else put 6
+if abs(y) = x and abs(x) = y then put 5
+else put 6
 
 if the selection = the text of cast A31 then
     go to frame "sEnd"
@@ -73,7 +74,8 @@ else if whichTry = 2 then
 else if whichTry = 3 then go to frame "sDo"
 else put 6
 
-if the selection = the text of cast A31 then go to frame "sEnd" else put 7
+if the selection = the text of cast A31 then go to frame "sEnd"
+else put 7
 
 if the selection = the text of cast A31 then go to frame "sEnd"
 else if whichTry = 1 then
@@ -93,7 +95,8 @@ else if whichTry = 1 then
 else if whichTry = 2 then
 	put 5
 	go to frame "sShow"
-else if whichTry = 3 then go to frame "sDo" else put 7 end if
+else if whichTry = 3 then go to frame "sDo"
+else put 7
 
 if rollOver(2) then
   put "The cursor is INSIDE the square." into field "Cursor Status"
@@ -102,16 +105,23 @@ else
 end if
 
 if the selection = the text of cast A31 then
-    if whichTry = 3 then go to frame "sDo" end if
+    if whichTry = 3 then
+		go to frame "sDo"
+	end if
 else if whichTry = 1 then
-	if whichTry = 3 then go to frame "sDo" else
+	if whichTry = 3 then go to frame "sDo"
+	else
 		put 5
 	end      if
 else if whichTry = 2 then
-	if whichTry = 3 then go to frame "sDo" else
+	if whichTry = 3 then go to frame "sDo"
+	else
 		if the selection = the text of cast A21 then
-		    if whichTry = 3 then go to frame "Foo" end if
-		else if abra = 5 then put 6 else
+		    if whichTry = 3 then
+				go to frame "Foo"
+			end if
+		else if abra = 5 then put 6
+		else
 			put 7
 			if abra = 7 then put 5
 		end if
@@ -119,10 +129,10 @@ else if whichTry = 2 then
 else if whichTry = 3 then go to frame "sDo"
 else put 6
 
-if the selection = the text of cast A31 then go to frame "sEnd" else put 7 end if
+if the selection = the text of cast A31 then go to frame "sEnd"
 
 when keyDown then if the key = RETURN then checkField
-when keyDown then if the key = QUOTE then checkField else put "bar"
+when keyDown then if the key = QUOTE then checkField
 
   if the mouseH > ((the right of sprite 15) - 20) then HidePopUp
   else if ((the mouseH > ((the left of sprite 15) + 30)) and Â
diff --git a/engines/director/lingo/tests/macros2.lingo b/engines/director/lingo/tests/macros2.lingo
index bb35ca1d36..094f37e3c6 100644
--- a/engines/director/lingo/tests/macros2.lingo
+++ b/engines/director/lingo/tests/macros2.lingo
@@ -14,4 +14,4 @@ test
 test()
 put test
 put test()
-if test then test end if
+if test then test


Commit: 76195e62f4b9695f86ddb83d59c0d2497be4f27c
    https://github.com/scummvm/scummvm/commit/76195e62f4b9695f86ddb83d59c0d2497be4f27c
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Allow stray end ifs

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 3295885be8..0ddc3955c2 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -274,45 +274,49 @@ enum yysymbol_kind_t
   YYSYMBOL_idlist = 118,                   /* idlist  */
   YYSYMBOL_nonemptyidlist = 119,           /* nonemptyidlist  */
   YYSYMBOL_stmt = 120,                     /* stmt  */
-  YYSYMBOL_stmtoneliner = 121,             /* stmtoneliner  */
-  YYSYMBOL_proc = 122,                     /* proc  */
-  YYSYMBOL_cmdargs = 123,                  /* cmdargs  */
-  YYSYMBOL_frameargs = 124,                /* frameargs  */
-  YYSYMBOL_asgn = 125,                     /* asgn  */
-  YYSYMBOL_to = 126,                       /* to  */
-  YYSYMBOL_definevars = 127,               /* definevars  */
-  YYSYMBOL_ifstmt = 128,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 129,               /* ifelsestmt  */
-  YYSYMBOL_loop = 130,                     /* loop  */
-  YYSYMBOL_tell = 131,                     /* tell  */
-  YYSYMBOL_when = 132,                     /* when  */
-  YYSYMBOL_stmtlist = 133,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 134,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 135,             /* stmtlistline  */
-  YYSYMBOL_simpleexpr_nounarymath = 136,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_var = 137,                      /* var  */
-  YYSYMBOL_varorchunk = 138,               /* varorchunk  */
-  YYSYMBOL_varorthe = 139,                 /* varorthe  */
-  YYSYMBOL_chunk = 140,                    /* chunk  */
-  YYSYMBOL_object = 141,                   /* object  */
-  YYSYMBOL_the = 142,                      /* the  */
-  YYSYMBOL_theobj = 143,                   /* theobj  */
-  YYSYMBOL_menu = 144,                     /* menu  */
-  YYSYMBOL_writablethe = 145,              /* writablethe  */
-  YYSYMBOL_thedatetime = 146,              /* thedatetime  */
-  YYSYMBOL_thenumberof = 147,              /* thenumberof  */
-  YYSYMBOL_chunktype = 148,                /* chunktype  */
-  YYSYMBOL_inof = 149,                     /* inof  */
-  YYSYMBOL_list = 150,                     /* list  */
-  YYSYMBOL_proplist = 151,                 /* proplist  */
-  YYSYMBOL_proppair = 152,                 /* proppair  */
-  YYSYMBOL_unarymath = 153,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 154,               /* simpleexpr  */
-  YYSYMBOL_expr = 155,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 156,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 157,                   /* sprite  */
-  YYSYMBOL_exprlist = 158,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 159          /* nonemptyexprlist  */
+  YYSYMBOL_stmt_insideif = 121,            /* stmt_insideif  */
+  YYSYMBOL_stmtoneliner = 122,             /* stmtoneliner  */
+  YYSYMBOL_proc = 123,                     /* proc  */
+  YYSYMBOL_cmdargs = 124,                  /* cmdargs  */
+  YYSYMBOL_frameargs = 125,                /* frameargs  */
+  YYSYMBOL_asgn = 126,                     /* asgn  */
+  YYSYMBOL_to = 127,                       /* to  */
+  YYSYMBOL_definevars = 128,               /* definevars  */
+  YYSYMBOL_ifstmt = 129,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 130,               /* ifelsestmt  */
+  YYSYMBOL_loop = 131,                     /* loop  */
+  YYSYMBOL_tell = 132,                     /* tell  */
+  YYSYMBOL_when = 133,                     /* when  */
+  YYSYMBOL_stmtlist = 134,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 135,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 136,             /* stmtlistline  */
+  YYSYMBOL_stmtlist_insideif = 137,        /* stmtlist_insideif  */
+  YYSYMBOL_nonemptystmtlist_insideif = 138, /* nonemptystmtlist_insideif  */
+  YYSYMBOL_stmtlistline_insideif = 139,    /* stmtlistline_insideif  */
+  YYSYMBOL_simpleexpr_nounarymath = 140,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_var = 141,                      /* var  */
+  YYSYMBOL_varorchunk = 142,               /* varorchunk  */
+  YYSYMBOL_varorthe = 143,                 /* varorthe  */
+  YYSYMBOL_chunk = 144,                    /* chunk  */
+  YYSYMBOL_object = 145,                   /* object  */
+  YYSYMBOL_the = 146,                      /* the  */
+  YYSYMBOL_theobj = 147,                   /* theobj  */
+  YYSYMBOL_menu = 148,                     /* menu  */
+  YYSYMBOL_writablethe = 149,              /* writablethe  */
+  YYSYMBOL_thedatetime = 150,              /* thedatetime  */
+  YYSYMBOL_thenumberof = 151,              /* thenumberof  */
+  YYSYMBOL_chunktype = 152,                /* chunktype  */
+  YYSYMBOL_inof = 153,                     /* inof  */
+  YYSYMBOL_list = 154,                     /* list  */
+  YYSYMBOL_proplist = 155,                 /* proplist  */
+  YYSYMBOL_proppair = 156,                 /* proppair  */
+  YYSYMBOL_unarymath = 157,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 158,               /* simpleexpr  */
+  YYSYMBOL_expr = 159,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 160,         /* expr_nounarymath  */
+  YYSYMBOL_sprite = 161,                   /* sprite  */
+  YYSYMBOL_exprlist = 162,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 163          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -632,18 +636,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  174
+#define YYFINAL  177
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3441
+#define YYLAST   3483
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  56
+#define YYNNTS  60
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  278
+#define YYNRULES  286
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  519
+#define YYNSTATES  527
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -711,24 +715,25 @@ static const yytype_int16 yyrline[] =
      337,   338,   339,   340,   341,   342,   343,   346,   347,   348,
      349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
      359,   360,   361,   362,   363,   366,   367,   370,   374,   384,
-     385,   386,   387,   388,   389,   392,   393,   394,   397,   398,
-     399,   400,   401,   402,   403,   404,   409,   410,   411,   412,
-     415,   418,   423,   427,   433,   438,   441,   451,   456,   462,
-     468,   474,   482,   483,   484,   485,   488,   488,   490,   491,
-     492,   495,   499,   503,   509,   513,   517,   521,   523,   525,
-     527,   531,   535,   539,   541,   542,   546,   552,   559,   560,
-     566,   567,   568,   569,   570,   571,   572,   573,   574,   575,
-     576,   577,   580,   582,   583,   586,   587,   590,   594,   598,
-     600,   602,   604,   606,   608,   610,   612,   616,   620,   626,
-     627,   628,   629,   632,   633,   634,   635,   636,   639,   641,
-     642,   643,   646,   647,   648,   649,   650,   651,   652,   653,
-     654,   655,   659,   660,   661,   662,   663,   666,   667,   668,
-     669,   672,   672,   674,   675,   676,   679,   683,   688,   689,
-     690,   693,   694,   697,   698,   702,   703,   704,   705,   706,
-     707,   708,   709,   710,   711,   712,   713,   714,   715,   716,
-     717,   718,   719,   720,   727,   728,   729,   730,   731,   732,
-     733,   734,   735,   736,   737,   738,   739,   740,   741,   742,
-     743,   744,   745,   748,   749,   752,   753,   756,   760
+     385,   388,   389,   390,   391,   392,   393,   396,   397,   398,
+     401,   402,   403,   404,   405,   406,   407,   408,   413,   414,
+     415,   416,   419,   422,   427,   431,   437,   442,   445,   455,
+     460,   466,   472,   478,   486,   487,   488,   489,   492,   492,
+     494,   495,   496,   499,   503,   507,   513,   517,   521,   525,
+     527,   529,   531,   535,   539,   543,   545,   546,   550,   556,
+     563,   564,   567,   568,   572,   578,   585,   586,   592,   593,
+     594,   595,   596,   597,   598,   599,   600,   601,   602,   603,
+     606,   608,   609,   612,   613,   616,   620,   624,   626,   628,
+     630,   632,   634,   636,   638,   642,   646,   652,   653,   654,
+     655,   658,   659,   660,   661,   662,   665,   667,   668,   669,
+     672,   673,   674,   675,   676,   677,   678,   679,   680,   681,
+     685,   686,   687,   688,   689,   692,   693,   694,   695,   698,
+     698,   700,   701,   702,   705,   709,   714,   715,   716,   719,
+     720,   723,   724,   728,   729,   730,   731,   732,   733,   734,
+     735,   736,   737,   738,   739,   740,   741,   742,   743,   744,
+     745,   746,   753,   754,   755,   756,   757,   758,   759,   760,
+     761,   762,   763,   764,   765,   766,   767,   768,   769,   770,
+     771,   774,   775,   778,   779,   782,   786
 };
 #endif
 
@@ -762,14 +767,16 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "')'", "'['", "']'", "':'", "$accept", "script", "scriptpartlist",
   "scriptpart", "macro", "factory", "method", "methodlist",
   "nonemptymethodlist", "methodlistline", "handler", "endargdef", "CMDID",
-  "ID", "idlist", "nonemptyidlist", "stmt", "stmtoneliner", "proc",
-  "cmdargs", "frameargs", "asgn", "to", "definevars", "ifstmt",
-  "ifelsestmt", "loop", "tell", "when", "stmtlist", "nonemptystmtlist",
-  "stmtlistline", "simpleexpr_nounarymath", "var", "varorchunk",
-  "varorthe", "chunk", "object", "the", "theobj", "menu", "writablethe",
-  "thedatetime", "thenumberof", "chunktype", "inof", "list", "proplist",
-  "proppair", "unarymath", "simpleexpr", "expr", "expr_nounarymath",
-  "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "ID", "idlist", "nonemptyidlist", "stmt", "stmt_insideif",
+  "stmtoneliner", "proc", "cmdargs", "frameargs", "asgn", "to",
+  "definevars", "ifstmt", "ifelsestmt", "loop", "tell", "when", "stmtlist",
+  "nonemptystmtlist", "stmtlistline", "stmtlist_insideif",
+  "nonemptystmtlist_insideif", "stmtlistline_insideif",
+  "simpleexpr_nounarymath", "var", "varorchunk", "varorthe", "chunk",
+  "object", "the", "theobj", "menu", "writablethe", "thedatetime",
+  "thenumberof", "chunktype", "inof", "list", "proplist", "proppair",
+  "unarymath", "simpleexpr", "expr", "expr_nounarymath", "sprite",
+  "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -794,7 +801,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-339)
+#define YYPACT_NINF (-462)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -808,58 +815,59 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2329,  -339,  -339,  -339,  -339,  -339,  -339,   -20,  -339,  2819,
-    1462,  1559,  -339,  -339,  2819,  -339,    -1,  -339,  -339,  1656,
-      11,  2898,  -339,  2819,  -339,  -339,  2819,  1656,  1462,  2819,
-    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
-    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
-    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
-    -339,  -339,  -339,  1559,  2819,  2819,  3213,  -339,    21,  2329,
-    -339,  -339,  -339,  -339,  1656,  -339,  -339,  -339,  -339,  -339,
-    -339,  -339,  -339,  -339,  -339,   -64,  -339,  -339,  -339,  -339,
-    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
-    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
-    -339,   -30,    12,  -339,  -339,  -339,  -339,  1753,  1753,  1753,
-    1753,  1559,  1559,  1753,  1753,  1753,  1753,  1753,  2977,  1559,
-    1753,  1753,  1365,   781,    15,   -19,     6,  -339,  -339,  -339,
-    -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,   880,  -339,
-    1559,   287,  2819,    25,    32,   977,  2819,  1559,  3056,  -339,
-    -339,   -21,  -339,    85,    46,    58,  1074,    61,    62,    63,
-     162,    64,  2819,  -339,  -339,  -339,    65,  1171,  -339,  -339,
-    2819,  -339,  -339,  -339,  -339,  1268,  3292,  -339,     1,     4,
-      31,    91,   -45,   -27,   -25,    26,    28,    56,   129,   135,
-    3279,  -339,  -339,  -339,   428,    66,    67,    69,   -53,   -22,
-    -339,  3292,    72,    68,  1559,  -339,  -339,   141,  1559,  1559,
-    1559,  1559,  2044,  2044,  2238,  1559,  2141,  2141,  1559,  1559,
-    1559,  1559,  1559,  1559,  1559,  1559,  -339,   398,  -339,   493,
-    2409,  1559,  1559,  1559,  1559,  1559,    71,  -339,  -339,  3135,
-    3135,  3135,    -5,   512,   147,  -339,  -339,  1559,  1559,   -56,
-    -339,  1559,  -339,  -339,  -339,  3213,  2489,  -339,    83,  -339,
-    -339,   158,  3346,  1753,  1753,  1753,  1753,  1753,  1753,  1753,
-    1753,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,
-    -339,  -339,  -339,  -339,  -339,    40,  1850,  1947,  1753,  1753,
-    1559,  -339,  1559,  1559,  -339,  1559,  2740,  -339,  -339,  1559,
-      90,  1559,    -9,    -9,    -9,    -9,   134,   134,  -339,   -40,
-      -9,    -9,    -9,    -9,   -40,   -34,   -34,  -339,  -339,    68,
-    1559,  1559,  1559,  1559,  1559,  1559,  1559,  1559,  1559,  1559,
-    1559,  1559,  1559,  1559,  1559,  1559,  1559,  1559,  2489,   169,
-    2489,  -339,    94,  -339,    96,    97,  1559,  1559,  2489,  1947,
-     572,  3292,  2819,  -339,  -339,  -339,   -56,  -339,   585,  -339,
-    -339,  -339,   108,  2489,  -339,  2489,  1559,  -339,   170,  -339,
-     171,  -339,   172,  -339,   173,  -339,  -339,  1753,    40,    40,
-      40,    40,  1753,  1753,    40,  1753,  1753,  -339,  -339,  -339,
-    -339,  -339,  -339,    52,  3292,  3292,  3292,    66,    67,    99,
-    -339,  3292,  -339,  3292,    -9,    -9,    -9,    -9,   134,   134,
-    -339,   -40,    -9,    -9,    -9,    -9,   -40,   -34,   -34,  -339,
-    -339,    68,   -10,  2569,  -339,  -339,  -339,  -339,   670,    47,
-     111,  -339,  2819,  -339,  -339,   115,  -339,   203,  3292,  1753,
-    1753,  1753,  1753,  -339,  1753,  1753,  1753,  1753,  -339,   190,
-     148,  -339,  -339,  -339,  2649,   123,  2489,  -339,  2489,   187,
-    1559,   125,   133,  -339,  2819,  -339,  -339,  -339,  -339,  -339,
-    -339,  -339,  -339,   163,  1753,  -339,  2489,  -339,  -339,   150,
-     151,  1559,   683,  -339,  2489,    49,  -339,  1753,   153,   139,
-     142,  3260,  2489,  -339,  -339,  2819,  -339,   144,  -339,  -339,
-    2489,   160,  -339,  -339,   161,   152,   164,  -339,  -339
+    2364,  -462,  -462,  -462,  -462,  -462,  -462,   -22,  -462,  2934,
+    1497,  1594,  -462,  -462,  2934,  -462,    28,  -462,  -462,  1691,
+      -1,  3013,  -462,  2934,  -462,  -462,  2934,  1691,  1497,  2934,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,  1594,  2934,  2934,   -32,  3328,  -462,    68,
+    2364,  -462,  -462,  -462,  -462,  1691,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,     9,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,    27,    29,  -462,  -462,  -462,  -462,  1788,
+    1788,  1788,  1788,  1594,  1594,  1788,  1788,  1788,  1788,  1788,
+    3092,  1594,  1788,  1788,  1400,   816,    -5,    36,    40,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+     915,  -462,  1594,   245,  2934,    41,    43,  1012,  2934,  1594,
+    3171,  -462,  -462,   -10,  -462,    93,    44,    53,  1109,    58,
+      59,    60,    -4,    61,  2934,  -462,  -462,  -462,  -462,    62,
+    1206,  -462,  -462,  2934,  -462,  -462,  -462,  -462,  1303,   717,
+    -462,    69,    77,    86,    87,   -25,    -3,     8,    31,    33,
+     109,   124,   135,  3375,  -462,  -462,  -462,   436,    70,    71,
+      63,    26,    34,  -462,   717,    73,    74,  1594,  -462,  -462,
+     145,  1594,  1594,  1594,  1594,  2079,  2079,  2273,  1594,  2176,
+    2176,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  -462,
+     523,  -462,   496,  2444,  1594,  1594,  1594,  1594,  1594,    89,
+    -462,  -462,  3250,  3250,  3250,   -15,   320,   154,  -462,  -462,
+    1594,  1594,   -69,  -462,  1594,  -462,  -462,  -462,  3328,  2524,
+    -462,    90,  -462,  -462,   158,  3388,  1788,  1788,  1788,  1788,
+    1788,  1788,  1788,  1788,  -462,  -462,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,    55,  1885,
+    1982,  1788,  1788,  1594,  -462,  1594,  1594,  -462,  1594,  2855,
+    -462,  -462,  1594,    91,  1594,   -31,   -31,   -31,   -31,   136,
+     136,  -462,   -39,   -31,   -31,   -31,   -31,   -39,   -23,   -23,
+    -462,  -462,    74,  1594,  1594,  1594,  1594,  1594,  1594,  1594,
+    1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,
+    1594,  2764,   176,  2524,  -462,    96,  -462,    97,    98,  1594,
+    1594,  2524,  1982,   589,   717,  2934,  -462,  -462,  -462,   -69,
+    -462,   602,  -462,  -462,  -462,   110,  2524,  -462,  2524,  1594,
+    -462,   170,  -462,   171,  -462,   172,  -462,   173,  -462,  -462,
+    1788,    55,    55,    55,    55,  1788,  1788,    55,  1788,  1788,
+    -462,  -462,  -462,  -462,  -462,  -462,   -73,   717,   717,   717,
+      70,    71,   100,  -462,   717,  -462,   717,   -31,   -31,   -31,
+     -31,   136,   136,  -462,   -39,   -31,   -31,   -31,   -31,   -39,
+     -23,   -23,  -462,  -462,    74,  -462,  -462,   -11,  2764,  -462,
+    2604,  -462,  -462,  -462,  -462,   615,   168,   119,  -462,  2934,
+    -462,  -462,    99,  -462,   196,   717,  1788,  1788,  1788,  1788,
+    -462,  1788,  1788,  1788,  1788,  -462,   179,   147,  -462,  -462,
+    -462,  2684,   126,  -462,  2764,  -462,  2524,   190,  1594,   138,
+     139,  -462,  2934,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+    -462,   167,  1788,  -462,  2764,  -462,  -462,   155,   153,  1594,
+     686,  -462,  2524,   -51,  -462,  1788,   156,   151,   157,   704,
+    2524,  -462,  -462,  2934,  -462,   159,  -462,  -462,  2524,   164,
+    -462,  -462,   165,   169,   174,  -462,  -462
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -868,79 +876,80 @@ static const yytype_int16 yypact[] =
 static const yytype_int16 yydefact[] =
 {
        0,    24,    31,    37,    60,    72,    36,     0,    38,    95,
-     120,     0,    39,    41,     0,    52,    53,    56,    58,   120,
-      59,    62,    70,     0,    73,    71,     0,   120,   120,    95,
+     122,     0,    39,    41,     0,    52,    53,    56,    58,   122,
+      59,    62,    70,     0,    73,    71,     0,   122,   122,    95,
       29,    57,    54,    51,    28,    30,    34,    66,    32,    33,
       42,    43,    45,    46,    75,    76,    25,    26,    27,    47,
       63,    35,    44,    48,    49,    50,    55,    68,    69,    64,
-      65,    40,    74,    67,    95,     0,    61,     5,     0,     2,
-       3,     6,     7,     8,   120,     9,    99,   105,   106,   107,
-     100,   101,   102,   103,   104,     0,   118,    79,    78,    80,
-      82,    83,    84,    86,    53,    92,    59,    62,    93,    94,
-      81,    89,    90,    85,    67,    91,    88,    87,    61,    77,
-      97,     0,    96,   160,   161,   163,   162,    31,    37,    60,
-      72,    38,    52,    54,    32,    42,    45,    75,    68,    65,
-       0,     0,     0,   275,   172,     0,     0,   233,   167,   168,
-     169,   170,   189,   190,   191,   171,   234,   235,   121,   236,
-       0,     0,    95,     0,     0,   121,     0,     0,    68,   172,
-     175,     0,   176,     0,     0,     0,   121,     0,     0,     0,
-       0,     0,    95,   119,     1,     4,     0,   121,   117,   138,
-       0,   178,   177,   187,   188,   127,   128,   164,     0,     0,
-       0,     0,    25,    26,    27,    47,    63,    44,    55,   199,
-       0,   231,   232,   125,     0,   163,   162,     0,   172,     0,
-     226,   277,     0,   276,   275,   110,   111,    56,     0,     0,
-       0,     0,    29,    57,    51,     0,    34,    66,     0,     0,
-       0,     0,     0,     0,     0,     0,   254,   123,   255,     0,
-       0,     0,     0,     0,     0,     0,     0,   116,   109,    41,
-      28,    30,     0,     0,    55,   136,   137,     0,     0,    13,
-     114,    73,   112,   113,   140,     0,   154,   139,     0,   108,
-      98,    56,   131,     0,     0,     0,     0,     0,     0,     0,
-       0,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   217,   219,   220,   218,     0,     0,     0,     0,     0,
-       0,   166,     0,     0,   224,     0,     0,   225,   223,     0,
-       0,     0,   246,   247,   244,   245,   248,   249,   241,   251,
-     252,   253,   243,   242,   250,   237,   238,   239,   240,   122,
+      65,    40,    74,    67,    95,     0,     0,    61,     5,     0,
+       2,     3,     6,     7,     8,   122,     9,    99,   101,   107,
+     108,   109,   102,   103,   104,   105,   106,     0,   120,    79,
+      78,    80,    82,    83,    84,    86,    53,    92,    59,    62,
+      93,    94,    81,    89,    90,    85,    67,    91,    88,    87,
+      61,    77,    97,     0,    96,   168,   169,   171,   170,    31,
+      37,    60,    72,    38,    52,    54,    32,    42,    45,    75,
+      68,    65,     0,     0,     0,   283,   180,     0,     0,   241,
+     175,   176,   177,   178,   197,   198,   199,   179,   242,   243,
+     123,   244,     0,     0,    95,     0,     0,   123,     0,     0,
+      68,   180,   183,     0,   184,     0,     0,     0,   123,     0,
+       0,     0,     0,     0,    95,   100,   121,     1,     4,     0,
+     123,   119,   140,     0,   186,   185,   195,   196,   129,   130,
+     172,     0,     0,     0,     0,    25,    26,    27,    47,    63,
+      44,    55,   207,     0,   239,   240,   127,     0,   171,   170,
+       0,   180,     0,   234,   285,     0,   284,   283,   112,   113,
+      56,     0,     0,     0,     0,    29,    57,    51,     0,    34,
+      66,     0,     0,     0,     0,     0,     0,     0,     0,   262,
+     125,   263,     0,     0,     0,     0,     0,     0,     0,     0,
+     118,   111,    41,    28,    30,     0,     0,    55,   138,   139,
+       0,     0,    13,   116,    73,   114,   115,   142,     0,   156,
+     141,     0,   110,    98,    56,   133,     0,     0,     0,     0,
+       0,     0,     0,     0,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   225,   227,   228,   226,     0,     0,
+       0,     0,     0,     0,   174,     0,     0,   232,     0,     0,
+     233,   231,     0,     0,     0,   254,   255,   252,   253,   256,
+     257,   249,   259,   260,   261,   251,   250,   258,   245,   246,
+     247,   248,   124,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   154,   141,
-     154,   173,     0,   174,     0,     0,     0,     0,   154,     0,
-       0,   153,     0,    17,    18,    11,    14,    15,     0,   151,
-     158,   159,     0,   155,   156,   154,     0,   179,     0,   183,
-       0,   185,     0,   181,     0,   221,   222,     0,    33,    43,
-      46,    76,    48,    49,    50,    64,    65,   201,   194,   193,
-     200,   273,   274,     0,   230,   228,   229,     0,     0,     0,
-     227,   278,   165,   130,   265,   266,   263,   264,   267,   268,
-     260,   270,   271,   272,   262,   261,   269,   256,   257,   258,
-     259,   124,     0,     0,    10,   132,   133,   134,     0,     0,
-       0,   135,    95,    16,   115,     0,   157,    20,   129,     0,
-       0,     0,     0,   192,     0,     0,     0,     0,   198,     0,
-       0,   196,   197,   126,     0,     0,   154,   143,   154,     0,
-       0,     0,     0,   152,    21,   180,   184,   186,   182,   212,
-     214,   215,   213,     0,     0,   216,   154,   145,   142,     0,
-       0,     0,     0,   147,   154,     0,    22,     0,     0,     0,
-       0,     0,   154,    12,    19,     0,   195,     0,   144,   150,
-     154,     0,    23,   146,     0,     0,     0,   148,   149
+       0,   162,   143,   156,   181,     0,   182,     0,     0,     0,
+       0,   156,     0,     0,   155,     0,    17,    18,    11,    14,
+      15,     0,   153,   160,   161,     0,   157,   158,   156,     0,
+     187,     0,   191,     0,   193,     0,   189,     0,   229,   230,
+       0,    33,    43,    46,    76,    48,    49,    50,    64,    65,
+     209,   202,   201,   208,   281,   282,     0,   238,   236,   237,
+       0,     0,     0,   235,   286,   173,   132,   273,   274,   271,
+     272,   275,   276,   268,   278,   279,   280,   270,   269,   277,
+     264,   265,   266,   267,   126,   166,   167,     0,   163,   164,
+       0,    10,   134,   135,   136,     0,     0,     0,   137,    95,
+      16,   117,     0,   159,    20,   131,     0,     0,     0,     0,
+     200,     0,     0,     0,     0,   206,     0,     0,   204,   205,
+     128,     0,     0,   165,   162,   145,   156,     0,     0,     0,
+       0,   154,    21,   188,   192,   194,   190,   220,   222,   223,
+     221,     0,     0,   224,   162,   147,   144,     0,     0,     0,
+       0,   149,   156,     0,    22,     0,     0,     0,     0,     0,
+     156,    12,    19,     0,   203,     0,   146,   152,   156,     0,
+      23,   148,     0,     0,     0,   150,   151
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -339,  -339,  -339,   179,  -339,  -339,  -339,  -339,  -339,  -116,
-    -339,  -339,     0,    -7,   -28,  -339,     5,   -62,  -339,    -2,
-     230,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -339,  -338,
-    -339,  -113,  -121,   -18,   -97,  -339,  -118,  -339,  -339,   -35,
-    -197,   243,  -339,  -339,  -339,  -282,  -339,  -339,   -39,  -339,
-     301,    60,    84,   -50,    54,  -227
+    -462,  -462,  -462,   182,  -462,  -462,  -462,  -462,  -462,  -127,
+    -462,  -462,     0,    -7,   -12,  -462,     6,  -340,   -64,  -462,
+       4,   225,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+    -341,  -462,  -121,  -461,  -462,  -174,   -58,   -20,  -136,  -462,
+    -172,  -462,  -462,   -35,  -200,   249,  -462,  -462,  -462,  -248,
+    -462,  -462,   -37,  -462,   328,    85,    88,   -49,    56,  -234
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    68,    69,    70,    71,    72,   364,   365,   366,   367,
-      73,   495,   109,   134,   111,   112,   371,    76,    77,   135,
-     136,    78,   257,    79,    80,    81,    82,    83,    84,   372,
-     373,   374,   137,   138,   352,   161,   139,   140,   141,   397,
-     398,   142,   143,   144,   295,   387,   145,   209,   210,   146,
-     147,   211,   237,   149,   212,   213
+       0,    69,    70,    71,    72,    73,   367,   368,   369,   370,
+      74,   503,   111,   136,   113,   114,   374,    77,    78,    79,
+     137,   138,    80,   260,    81,    82,    83,    84,    85,    86,
+     375,   376,   377,   437,   438,   439,   139,   140,   355,   163,
+     141,   142,   143,   400,   401,   144,   145,   146,   298,   390,
+     147,   212,   213,   148,   149,   214,   240,   151,   215,   216
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -948,540 +957,499 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      74,   169,   110,   160,   173,    75,   464,   152,   329,   243,
-     432,    85,   434,   255,   159,   243,   163,   154,   356,   164,
-     440,   174,   110,   256,   281,   165,   167,   236,   362,   273,
-     153,   282,   275,   178,   236,   274,   171,   447,   276,   357,
-     243,   363,   283,   225,   285,   236,   214,   156,   157,   284,
-     305,   286,   231,   232,   233,   234,   236,   110,   172,   277,
-     233,   234,   469,   385,   236,   278,    74,   179,   386,    74,
-     148,   151,   176,   403,    75,   465,   306,    86,   215,   155,
-     307,   470,   230,   231,   232,   233,   234,   166,   148,   218,
-     219,   220,   221,   241,   242,   287,   243,   289,   238,   225,
-     244,   245,   288,   216,   290,   238,   454,   455,   456,   457,
-     180,   291,   460,   292,   214,   293,   238,   294,   258,   279,
-     431,   199,   247,   170,   246,   280,   208,   238,   489,   248,
-     490,   353,   353,   353,   177,   238,   228,   229,   230,   231,
-     232,   233,   234,   259,   268,   110,   504,   505,   498,   252,
-     309,   199,   463,   354,   355,   260,   503,   296,   262,   263,
-     264,   267,   269,   297,   511,   110,   309,   311,   350,   302,
-     303,   304,   514,   270,   308,   359,   218,   219,   220,   221,
-     375,   185,   186,   243,   376,   433,   225,   244,   245,   200,
-     412,   435,   204,   436,   437,   445,   265,   471,   449,   450,
-     451,   452,   305,   369,   218,   219,   220,   221,   241,   242,
-     239,   243,   473,   474,   225,   244,   245,   253,   483,   484,
-     488,   491,   493,   228,   229,   230,   231,   232,   233,   234,
-     494,   351,   351,   351,   497,   499,   508,   500,   507,   509,
-      74,   513,   159,   159,   159,   349,   515,   516,   175,   517,
-     443,   228,   229,   230,   231,   232,   233,   234,   168,   266,
-     446,   518,   400,   485,   162,    74,    74,   410,   310,   272,
-       0,     0,     0,     0,     0,     0,     0,     0,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,     0,     0,     0,     0,   409,
-       0,   316,   317,   318,   320,   321,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   360,   361,     0,
-     240,   368,     0,     0,     0,     0,     0,     0,     0,   218,
-     219,   220,   221,   241,   242,     0,   243,     0,     0,   225,
-     244,   245,     0,     0,     0,     0,     0,     0,    74,     0,
-      74,     0,     0,     0,     0,   442,     0,     0,    74,     0,
-       0,     0,   404,   405,     0,   406,     0,     0,     0,   411,
-       0,   413,     0,    74,     0,    74,   228,   229,   230,   231,
-     232,   233,   234,     0,     0,     0,     0,     0,     0,     0,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,   426,   427,   428,   429,   430,     0,     0,     0,
-       0,     0,     0,     0,   472,     0,   438,   439,   181,   182,
-     183,   184,     0,     0,   187,   188,   189,   190,   191,     0,
-       0,   201,   202,    74,     0,   110,   448,     0,   467,     0,
-     330,   331,   332,   333,   334,   335,     0,   336,     0,     0,
-     337,   338,   339,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    74,     0,    74,   496,    74,   487,
-     218,   219,   220,   221,   241,   242,     0,   243,     0,     0,
-     225,   244,   245,     0,     0,     0,    74,   340,   341,   342,
-     343,   344,   345,   346,    74,     0,   347,     0,   512,     0,
-       0,     0,    74,     0,     0,     0,     0,     0,     0,     0,
-      74,     0,     0,     0,     0,     0,     0,   228,   229,   230,
-     231,   232,   233,   234,     0,     0,   300,     0,   301,     0,
-     492,     0,     0,     0,     0,   218,   219,   220,   221,   241,
-     242,     0,   243,     0,     0,   225,   244,   245,     0,     0,
-       0,   501,     0,     0,   218,   219,   220,   221,   241,   242,
-       0,   243,     0,     0,   225,   244,   245,     0,     0,     0,
-       0,     0,     0,     0,   377,   378,   379,   380,   381,   382,
-     383,   384,   228,   229,   230,   231,   232,   233,   234,     0,
-       0,     0,     0,   301,     0,     0,     0,   399,   399,   401,
-     402,   228,   229,   230,   231,   232,   233,   234,     0,   358,
-       0,     0,     0,     0,   218,   219,   220,   221,   241,   242,
-       0,   243,     0,     0,   225,   244,   245,   218,   219,   220,
-     221,   241,   242,     0,   243,     0,     0,   225,   244,   245,
+      75,   162,   112,   176,   332,   471,    76,   154,   359,    87,
+     246,   436,   441,   497,   161,   365,   165,   171,   246,   166,
+     447,   228,   112,   156,   258,   312,   246,   470,   366,   360,
+     268,   167,   169,   506,   259,   158,   159,   454,   221,   222,
+     223,   224,   244,   245,   284,   246,   512,   513,   228,   247,
+     248,   285,   173,   234,   235,   236,   237,   112,   174,   155,
+     233,   234,   235,   236,   237,   175,   286,    75,   177,   406,
+      75,   236,   237,   287,   472,    88,    76,   288,   388,   179,
+     356,   356,   356,   389,   289,   231,   232,   233,   234,   235,
+     236,   237,   239,   269,   217,   150,   153,   276,   436,   239,
+     290,   241,   292,   277,   157,   278,   181,   291,   241,   293,
+     239,   279,   168,   150,   280,   282,   434,   357,   358,   241,
+     281,   283,   239,   202,   182,   217,   261,   183,   211,   308,
+     239,   241,   309,   218,   436,   498,   310,   219,   250,   241,
+     251,   262,   249,   461,   462,   463,   464,   112,   172,   467,
+     263,   255,   299,   202,   436,   265,   266,   267,   270,   272,
+     180,   511,   271,   300,   294,   307,   295,   112,   296,   519,
+     297,   314,   312,   305,   306,   311,   273,   522,   221,   222,
+     223,   224,   362,   477,   379,   246,   353,   378,   228,   247,
+     248,   415,   440,   442,   443,   444,   481,   452,   456,   457,
+     458,   459,   478,   308,   372,   479,   482,   491,   188,   189,
+     221,   222,   223,   224,   244,   245,   203,   246,   492,   207,
+     228,   247,   248,   496,   499,   231,   232,   233,   234,   235,
+     236,   237,   354,   354,   354,   501,   502,   242,   505,   508,
+     507,   515,   450,    75,   256,   161,   161,   161,   516,   352,
+     523,   524,   178,   170,   517,   453,   521,   231,   232,   233,
+     234,   235,   236,   237,   473,   403,   525,   493,    75,    75,
+     164,   526,   413,   313,     0,     0,   275,     0,   243,     0,
+       0,     0,     0,     0,     0,     0,     0,   221,   222,   223,
+     224,   244,   245,     0,   246,     0,     0,   228,   247,   248,
+       0,     0,   412,     0,     0,     0,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,     0,     0,     0,     0,     0,     0,   319,
+     320,   321,   323,   324,   231,   232,   233,   234,   235,   236,
+     237,     0,     0,     0,     0,   363,   364,     0,     0,   371,
+       0,    75,     0,    75,     0,     0,     0,     0,   449,     0,
+       0,    75,   221,   222,   223,   224,   244,   245,     0,   246,
+       0,     0,   228,   247,   248,     0,    75,     0,    75,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     399,   228,   229,   230,   231,   232,   233,   234,     0,   441,
-       0,     0,     0,     0,   228,   229,   230,   231,   232,   233,
-     234,     0,   444,     0,     0,     0,     0,     0,   453,     0,
-       0,     0,     0,   458,   459,     0,   461,   462,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   218,   219,   220,   221,   241,   242,     0,   243,
-       0,     0,   225,   244,   245,   218,   219,   220,   221,   241,
-     242,     0,   243,     0,     0,   225,   244,   245,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     475,   476,   477,   478,     0,   479,   480,   481,   482,   228,
-     229,   230,   231,   232,   233,   234,     0,   468,     0,     0,
-       0,     0,   228,   229,   230,   231,   232,   233,   234,     0,
-     502,     0,     0,     0,     0,   458,   113,   114,     1,   205,
-     206,    87,   117,   118,   119,   120,     6,    88,   506,    89,
-       8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
-      18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
-     101,   102,   103,     0,     0,     0,     0,    30,    31,   123,
-      33,    34,    35,     0,    36,    37,   124,    39,   125,    41,
-     126,    43,   127,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   128,    58,    59,   129,
-      61,    62,   104,   105,   106,   107,     0,     0,     0,   108,
-       0,     0,     0,   130,   131,     0,     0,     0,     0,     0,
-     150,     0,   133,     0,   207,   113,   114,     1,   115,   116,
-      87,   117,   118,   119,   120,     6,    88,     0,    89,     8,
-      90,    91,    92,    12,    13,    93,    15,    94,   217,    18,
-      95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
-     102,   103,   218,   219,   220,   221,   222,   223,   123,   224,
-      34,    35,   225,   226,   227,   124,    39,   125,    41,   126,
-      43,   127,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,   128,    58,    59,   129,    61,
-      62,   104,   105,   106,   107,     0,     0,     0,   108,   228,
-     229,   230,   231,   232,   233,   234,     0,     0,   235,   150,
-       0,   133,   113,   114,     1,   115,   116,    87,   117,   118,
-     119,   120,     6,    88,     0,    89,     8,    90,    91,    92,
-      12,   249,    93,    15,    94,    17,    18,    95,    96,    97,
-      98,    22,    99,    24,    25,   100,   101,   102,   103,   218,
-     219,   220,   221,   222,   223,   123,   224,   250,   251,   225,
-     226,   227,   124,    39,   125,    41,   126,    43,   127,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,   128,    58,    59,   129,    61,    62,   104,   105,
-     106,   107,     0,     0,     0,   108,   228,   229,   230,   231,
-     232,   233,   234,     0,     0,   235,   150,     0,   133,   113,
-     114,     1,   115,   116,    87,   117,   118,   119,   120,     6,
-      88,     0,    89,     8,    90,    91,    92,    12,    13,    93,
-      15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
-     261,    25,   100,   101,   102,   103,   218,   219,   220,   221,
-     222,   223,   123,   224,    34,    35,   225,   226,   227,   124,
-      39,   125,    41,   126,    43,   127,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   128,
-      58,    59,   129,    61,    62,   104,   105,   106,   107,     0,
-       0,     0,   108,   228,   229,   230,   231,   232,   233,   234,
-       0,     0,   235,   150,     0,   133,   113,   114,     1,   115,
-     116,    87,   117,   118,   119,   120,     6,    88,     0,    89,
-       8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
-      18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
-     101,   102,   103,   218,   219,   220,   221,   222,   223,   123,
-     224,    34,    35,   225,   226,   227,   124,    39,   125,    41,
-     126,    43,   127,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   128,    58,    59,   129,
-      61,    62,   104,   105,   106,   107,     0,     0,     0,   108,
-     228,   229,   230,   231,   232,   233,   234,     0,     0,   235,
-     150,     0,   133,   113,   114,     1,   115,   116,    87,   117,
-     118,   119,   120,     6,    88,     0,    89,     8,    90,    91,
-      92,    12,    13,    93,    15,    94,   271,    18,    95,    96,
-      97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
-     218,   219,   220,   221,   222,   223,   123,   224,    34,    35,
-     225,   226,   227,   124,    39,   125,    41,   126,    43,   127,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   128,    58,    59,   129,    61,    62,   104,
-     105,   106,   107,     0,     0,     0,   108,   228,   229,   230,
-     231,   232,   233,   234,     0,     0,     0,   150,     0,   133,
-     113,   114,     1,   115,   116,    87,   117,   118,   119,   120,
-       6,    88,     0,    89,     8,    90,    91,    92,    12,    13,
-      93,    15,    94,    17,    18,    95,    96,    97,    98,    22,
-      99,    24,    25,   100,   101,   102,   103,     0,     0,     0,
-       0,    30,    31,   123,    33,    34,    35,     0,    36,    37,
-     124,    39,   125,    41,   126,    43,   127,    45,    46,    47,
+     407,   408,     0,   409,     0,     0,     0,   414,     0,   416,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   231,
+     232,   233,   234,   235,   236,   237,     0,   361,   417,   418,
+     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
+     429,   430,   431,   432,   433,     0,     0,   480,    75,     0,
+      75,     0,   112,     0,   445,   446,   475,   184,   185,   186,
+     187,     0,     0,   190,   191,   192,   193,   194,     0,     0,
+     204,   205,     0,     0,   455,     0,     0,     0,     0,     0,
+       0,    75,     0,     0,    75,   504,    75,   495,   221,   222,
+     223,   224,   244,   245,     0,   246,     0,     0,   228,   247,
+     248,     0,     0,     0,    75,     0,     0,     0,     0,     0,
+       0,     0,    75,     0,     0,     0,   520,     0,     0,     0,
+      75,     0,     0,     0,     0,     0,     0,     0,    75,     0,
+       0,     0,     0,     0,     0,   231,   232,   233,   234,   235,
+     236,   237,     0,     0,   303,     0,   304,     0,   221,   222,
+     223,   224,   244,   245,     0,   246,     0,     0,   228,   247,
+     248,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   500,     0,   333,   334,   335,   336,   337,
+     338,     0,   339,     0,     0,   340,   341,   342,     0,     0,
+       0,     0,     0,     0,   509,   231,   232,   233,   234,   235,
+     236,   237,     0,     0,     0,     0,   304,     0,     0,     0,
+       0,     0,     0,     0,   380,   381,   382,   383,   384,   385,
+     386,   387,   343,   344,   345,   346,   347,   348,   349,     0,
+       0,   350,     0,     0,     0,     0,     0,   402,   402,   404,
+     405,   221,   222,   223,   224,   244,   245,     0,   246,     0,
+       0,   228,   247,   248,   221,   222,   223,   224,   244,   245,
+       0,   246,     0,     0,   228,   247,   248,   221,   222,   223,
+     224,   244,   245,     0,   246,     0,     0,   228,   247,   248,
+       0,     0,     0,     0,     0,     0,     0,     0,   231,   232,
+     233,   234,   235,   236,   237,     0,   448,     0,     0,     0,
+     402,   231,   232,   233,   234,   235,   236,   237,     0,   451,
+       0,     0,     0,     0,   231,   232,   233,   234,   235,   236,
+     237,     0,   476,     0,     0,     0,     0,     0,   460,     0,
+       0,     0,     0,   465,   466,     0,   468,   469,   221,   222,
+     223,   224,   244,   245,     0,   246,     0,     0,   228,   247,
+     248,     0,     0,     0,     0,     0,   221,   222,   223,   224,
+     244,   245,     0,   246,     0,     0,   228,   247,   248,   221,
+     222,   223,   224,   244,   245,     0,   246,     0,     0,   228,
+     247,   248,     0,     0,     0,   231,   232,   233,   234,   235,
+     236,   237,     0,   510,   483,   484,   485,   486,     0,   487,
+     488,   489,   490,   231,   232,   233,   234,   235,   236,   237,
+       0,   518,     0,     0,     0,     0,   231,   232,   233,   234,
+     235,   236,   237,     0,     0,     0,     0,     0,     0,     0,
+     465,   115,   116,     1,   208,   209,    89,   119,   120,   121,
+     122,     6,    90,   514,    91,     8,    92,    93,    94,    12,
+      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
+      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
+       0,     0,    30,    31,   125,    33,    34,    35,     0,    36,
+      37,   126,    39,   127,    41,   128,    43,   129,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
+     109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
+       0,     0,     0,     0,     0,   152,     0,   135,     0,   210,
+     115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
+       6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
+      95,    15,    96,   220,    18,    97,    98,    99,   100,    22,
+     101,    24,    25,   102,   103,   104,   105,   221,   222,   223,
+     224,   225,   226,   125,   227,    34,    35,   228,   229,   230,
+     126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     128,    58,    59,   129,    61,    62,   104,   105,   106,   107,
-       0,     0,     0,   108,     0,     0,     0,   130,   131,     0,
-       0,     0,     0,     0,   150,   203,   133,   113,   114,     1,
-     115,   116,    87,   117,   118,   119,   120,     6,    88,     0,
-      89,   121,    90,    91,    92,    12,    13,    93,   122,    94,
-      17,    18,    95,    96,    97,    98,    22,    99,    24,    25,
-     100,   101,   102,   103,     0,     0,     0,     0,    30,    31,
-     123,    33,    34,    35,     0,    36,    37,   124,    39,   125,
-      41,   126,    43,   127,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   128,    58,    59,
-     129,    61,    62,   104,   105,   106,   107,     0,     0,     0,
-     108,     0,     0,     0,   130,   131,     0,     0,     0,     0,
-       0,   132,     0,   133,   113,   114,     1,   115,   116,    87,
-     117,   118,   119,   120,     6,    88,     0,    89,     8,    90,
-      91,    92,    12,    13,    93,    15,    94,    17,    18,    95,
-      96,    97,    98,    22,    99,    24,    25,   100,   101,   102,
-     103,     0,     0,     0,     0,    30,    31,   123,    33,    34,
-      35,     0,    36,    37,   124,    39,   125,    41,   126,    43,
-     127,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   128,    58,    59,   129,    61,    62,
-     104,   105,   106,   107,     0,     0,     0,   108,     0,     0,
-       0,   130,   131,     0,     0,     0,     0,     0,   150,     0,
-     133,   113,   114,     1,   115,   116,    87,   117,   118,   119,
-     120,     6,    88,     0,    89,     8,    90,    91,    92,    12,
-      13,    93,    15,    94,    17,    18,    95,    96,    97,    98,
-      22,    99,    24,    25,   100,   101,   102,   103,     0,     0,
-       0,     0,    30,    31,   123,    33,    34,    35,     0,    36,
-      37,   124,    39,   125,    41,   126,    43,   127,    45,    46,
+     130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
+       0,     0,     0,   110,   231,   232,   233,   234,   235,   236,
+     237,     0,     0,   238,   152,     0,   135,   115,   116,     1,
+     117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
+      91,     8,    92,    93,    94,    12,   252,    95,    15,    96,
+      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+     102,   103,   104,   105,   221,   222,   223,   224,   225,   226,
+     125,   227,   253,   254,   228,   229,   230,   126,    39,   127,
+      41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
+     131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
+     110,   231,   232,   233,   234,   235,   236,   237,     0,     0,
+     238,   152,     0,   135,   115,   116,     1,   117,   118,    89,
+     119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
+      93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
+      98,    99,   100,    22,   101,   264,    25,   102,   103,   104,
+     105,   221,   222,   223,   224,   225,   226,   125,   227,    34,
+      35,   228,   229,   230,   126,    39,   127,    41,   128,    43,
+     129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
+     106,   107,   108,   109,     0,     0,     0,   110,   231,   232,
+     233,   234,   235,   236,   237,     0,     0,   238,   152,     0,
+     135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
+     122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
+      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
+      22,   101,    24,    25,   102,   103,   104,   105,   221,   222,
+     223,   224,   225,   226,   125,   227,    34,    35,   228,   229,
+     230,   126,    39,   127,    41,   128,    43,   129,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,   128,    58,    59,   129,    61,    62,   104,   105,   106,
-     107,     0,     0,     0,   108,     0,     0,     0,   130,   131,
-       0,     0,     0,     0,     0,   132,     0,   133,   113,   114,
-       1,   115,   116,    87,   117,   118,   119,   120,     6,    88,
-       0,    89,     8,    90,    91,    92,    12,    13,    93,    15,
-      94,    17,    18,    95,    96,    97,    98,    22,    99,    24,
-      25,   100,   101,   102,   103,     0,     0,     0,     0,    30,
-      31,   123,    33,    34,    35,     0,    36,    37,   124,    39,
-     125,    41,   126,    43,   127,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,   128,    58,
-      59,    60,    61,    62,   104,   105,   106,   107,     0,     0,
-       0,   108,     0,     0,     0,   130,   131,     0,     0,     0,
-       0,     0,   150,     0,   133,   113,   114,     1,   115,   116,
-      87,   117,   118,   119,   120,     6,    88,     0,    89,     8,
-      90,    91,    92,    12,    13,    93,    15,    94,    17,    18,
-      95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
-     102,   103,     0,     0,     0,     0,    30,    31,   123,    33,
-      34,    35,     0,    36,    37,   124,   388,   125,   389,   126,
-     390,   127,   391,    46,    47,    48,    49,    50,     0,    51,
-      52,   392,   393,   394,    56,   128,    58,   395,   396,    61,
-      62,   104,   105,   106,   107,     0,     0,     0,   108,     0,
-       0,     0,   130,   131,     0,     0,     0,     0,     0,   150,
-       0,   133,   113,   114,     1,   115,   116,    87,   117,   118,
-     119,   120,     6,    88,     0,    89,     8,    90,    91,    92,
-      12,    13,    93,    15,    94,    17,    18,    95,    96,    97,
-      98,    22,    99,    24,    25,   100,   101,   102,   103,     0,
-       0,     0,     0,    30,    31,   123,    33,    34,    35,     0,
-      36,    37,   124,    39,   125,    41,   126,    43,   127,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,   392,   393,
-      55,    56,   128,    58,   395,   396,    61,    62,   104,   105,
-     106,   107,     0,     0,     0,   108,     0,     0,     0,   130,
-     131,     0,     0,     0,     0,     0,   150,     0,   133,   113,
-     114,     1,   115,   116,    87,   117,   118,   119,   120,     6,
-      88,     0,    89,     8,    90,    91,    92,    12,    13,    93,
-      15,    94,    17,    18,    95,    96,    97,    98,    22,    99,
-      24,    25,   100,   101,   102,   103,     0,     0,     0,     0,
-       0,     0,   123,    33,    34,    35,     0,    36,    37,   124,
-      39,   125,    41,   126,    43,   127,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   128,
-      58,    59,   129,    61,    62,   104,   105,   106,   107,     0,
-       0,     0,   108,     0,     0,     0,   130,   131,     0,     0,
-       0,     0,     0,   150,     0,   133,   113,   114,     1,   115,
-     116,    87,   117,   118,   119,   120,     6,    88,     0,    89,
-       8,    90,    91,    92,    12,    13,    93,    15,    94,    17,
-      18,    95,    96,    97,    98,    22,    99,    24,    25,   100,
-     101,   102,   103,     0,     0,     0,     0,     0,     0,   123,
-      33,    34,    35,     0,     0,     0,   124,    39,   125,    41,
-     126,    43,   127,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   128,    58,    59,   129,
-      61,    62,   104,   105,   106,   107,     0,     0,     0,   108,
-       0,     0,     0,   130,   131,     0,     0,     0,     0,     0,
-     150,     0,   133,   113,   114,     1,   115,   116,    87,   117,
-     118,   119,   120,     6,    88,     0,    89,     8,    90,    91,
-      92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
-      97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
-       0,     0,     0,     0,     0,     0,   123,     0,    34,    35,
-       0,     0,     0,   124,    39,   125,    41,   126,    43,   127,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   128,    58,    59,   129,    61,    62,   104,
-     105,   106,   107,     0,     0,     0,   108,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     1,   150,     0,   133,
-       2,     3,     4,     5,     6,     0,     0,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,    26,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,     0,     0,     0,     1,    66,     0,     0,
-       2,     3,     4,     5,     6,     0,    67,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,     0,     0,     0,     0,     1,    66,     0,     0,
-       2,     3,     4,     5,     6,     0,   348,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,     0,     0,     0,     0,     1,    66,     0,     0,
-       2,     3,     4,     5,     6,     0,   370,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,     0,     0,     0,     0,     1,    66,     0,     0,
-       2,     3,     4,     5,     6,     0,   466,     7,     8,     9,
-      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
-      20,    21,     0,    22,    23,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,     0,     0,     0,     0,     0,    66,     0,     0,
-       0,     0,     0,     0,     0,     0,   486,     1,   407,   408,
-      87,     2,     3,     4,     5,     6,    88,     0,    89,     8,
-      90,    91,    92,    12,    13,    93,    15,    94,    17,    18,
-      95,    96,    97,    98,    22,    99,    24,    25,   100,   101,
-     102,   103,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,   104,   105,   106,   107,     0,     1,     0,   108,    87,
-       2,     3,     4,     5,     6,    88,     0,    89,     8,    90,
-      91,    92,    12,    13,    93,    15,    94,    17,    18,    95,
-      96,    97,    98,    22,    99,    24,    25,   100,   101,   102,
-     103,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-     104,   105,   106,   107,     0,     1,     0,   108,    87,     2,
-       3,     4,     5,     6,    88,     0,    89,     8,    90,    91,
-      92,    12,    13,    93,    15,    94,    17,    18,    95,    96,
-      97,    98,    22,    99,    24,    25,   100,   101,   102,   103,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
+     109,     0,     0,     0,   110,   231,   232,   233,   234,   235,
+     236,   237,     0,     0,   238,   152,     0,   135,   115,   116,
+       1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
+       0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
+      96,   274,    18,    97,    98,    99,   100,    22,   101,    24,
+      25,   102,   103,   104,   105,   221,   222,   223,   224,   225,
+     226,   125,   227,    34,    35,   228,   229,   230,   126,    39,
+     127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
+      59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
+       0,   110,   231,   232,   233,   234,   235,   236,   237,     0,
+       0,     0,   152,     0,   135,   115,   116,     1,   117,   118,
+      89,   119,   120,   121,   122,     6,    90,     0,    91,     8,
+      92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
+      97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
+     104,   105,     0,     0,     0,     0,    30,    31,   125,    33,
+      34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
+      43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,   130,    58,    59,   131,    61,
+      62,   106,   107,   108,   109,     0,     0,     0,   110,     0,
+       0,     0,   132,   133,     0,     0,     0,     0,     0,   152,
+     206,   135,   115,   116,     1,   117,   118,    89,   119,   120,
+     121,   122,     6,    90,     0,    91,   123,    92,    93,    94,
+      12,    13,    95,   124,    96,    17,    18,    97,    98,    99,
+     100,    22,   101,    24,    25,   102,   103,   104,   105,     0,
+       0,     0,     0,    30,    31,   125,    33,    34,    35,     0,
+      36,    37,   126,    39,   127,    41,   128,    43,   129,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,   130,    58,    59,   131,    61,    62,   106,   107,
+     108,   109,     0,     0,     0,   110,     0,     0,     0,   132,
+     133,     0,     0,     0,     0,     0,   134,     0,   135,   115,
+     116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
+      90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
+      15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
+      24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
+      30,    31,   125,    33,    34,    35,     0,    36,    37,   126,
+      39,   127,    41,   128,    43,   129,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
+      58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
+       0,     0,   110,     0,     0,     0,   132,   133,     0,     0,
+       0,     0,     0,   152,     0,   135,   115,   116,     1,   117,
+     118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
+       8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
+      18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
+     103,   104,   105,     0,     0,     0,     0,    30,    31,   125,
+      33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
+     128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
+      61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
+       0,     0,     0,   132,   133,     0,     0,     0,     0,     0,
+     134,     0,   135,   115,   116,     1,   117,   118,    89,   119,
+     120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
+      94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
+      99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
+       0,     0,     0,     0,    30,    31,   125,    33,    34,    35,
+       0,    36,    37,   126,    39,   127,    41,   128,    43,   129,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   158,    58,    59,    60,    61,    62,   104,
-     105,   106,   107,     0,     1,     0,   108,    87,     2,     3,
-       4,     5,     6,    88,     0,    89,     8,    90,    91,    92,
-      12,    13,    93,    15,    94,    17,    18,    95,    96,    97,
-      98,    22,    99,    24,    25,   100,   101,   102,   103,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-     192,   193,   194,   195,   196,     0,    51,   197,    53,    54,
-      55,   198,    57,    58,    59,    60,    61,    62,   104,   105,
-     106,   107,     0,     1,     0,   108,    87,     2,     3,     4,
-       5,     6,    88,     0,    89,     8,    90,    91,    92,    12,
-      13,    93,    15,    94,    17,    18,    95,    96,    97,    98,
-      22,    99,    24,    25,   100,   101,   102,   103,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      54,    55,    56,   130,    58,    59,    60,    61,    62,   106,
+     107,   108,   109,     0,     0,     0,   110,     0,     0,     0,
+     132,   133,     0,     0,     0,     0,     0,   152,     0,   135,
+     115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
+       6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
+      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
+     101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
+       0,    30,    31,   125,    33,    34,    35,     0,    36,    37,
+     126,   391,   127,   392,   128,   393,   129,   394,    46,    47,
+      48,    49,    50,     0,    51,    52,   395,   396,   397,    56,
+     130,    58,   398,   399,    61,    62,   106,   107,   108,   109,
+       0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
+       0,     0,     0,     0,   152,     0,   135,   115,   116,     1,
+     117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
+      91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
+      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+     102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
+     125,    33,    34,    35,     0,    36,    37,   126,    39,   127,
+      41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,   395,   396,    55,    56,   130,    58,   398,
+     399,    61,    62,   106,   107,   108,   109,     0,     0,     0,
+     110,     0,     0,     0,   132,   133,     0,     0,     0,     0,
+       0,   152,     0,   135,   115,   116,     1,   117,   118,    89,
+     119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
+      93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
+      98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
+     105,     0,     0,     0,     0,     0,     0,   125,    33,    34,
+      35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
+     129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
+     106,   107,   108,   109,     0,     0,     0,   110,     0,     0,
+       0,   132,   133,     0,     0,     0,     0,     0,   152,     0,
+     135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
+     122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
+      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
+      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
+       0,     0,     0,     0,   125,    33,    34,    35,     0,     0,
+       0,   126,    39,   127,    41,   128,    43,   129,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-     254,    57,    58,    59,    60,    61,    62,   104,   105,   106,
-     107,     0,     1,     0,   108,    87,   117,   118,     4,     5,
-       6,    88,     0,    89,     8,    90,    91,    92,    12,    13,
-      93,    15,    94,    17,    18,    95,    96,    97,    98,    22,
-      99,    24,    25,   100,   101,   102,   103,     0,     0,     0,
+      56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
+     109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
+       0,     0,     0,     0,     0,   152,     0,   135,   115,   116,
+       1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
+       0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
+      96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
+      25,   102,   103,   104,   105,     0,     0,     0,     0,     0,
+       0,   125,     0,    34,    35,     0,     0,     0,   126,    39,
+     127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
+      59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
+       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     1,   152,     0,   135,     2,     3,     4,     5,     6,
+       0,     0,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,    26,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,    68,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,   351,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,   373,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,   474,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,   494,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
+       0,     0,    67,     0,     0,     0,     0,     0,     0,     0,
+       0,   435,     1,   410,   411,    89,     2,     3,     4,     5,
+       6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
+      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
+     101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
        0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-     124,    39,   125,    41,   126,    43,   127,    45,    46,    47,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,   104,   105,   106,   107,
-       1,     0,     0,   108,     2,     3,     4,     5,     6,     0,
-       0,     7,     8,     9,    10,     0,    12,    13,     0,    15,
-      16,    17,    18,    19,    96,    21,     0,    22,     0,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      57,    58,    59,    60,    61,    62,   106,   107,   108,   109,
+       0,     1,     0,   110,    89,     2,     3,     4,     5,     6,
+      90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
+      15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
+      24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,   106,   107,   108,   109,     0,
+       1,     0,   110,    89,     2,     3,     4,     5,     6,    90,
+       0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
+      96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
+      25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,   104,    64,     0,     0,     0,     0,
-       0,    66,   218,   219,   220,   221,   241,   242,     0,   243,
-       0,     0,   225,   244,   245,     0,     0,     0,     0,     0,
-       0,   218,   219,   220,   221,   241,   242,     0,   243,     0,
-       0,   225,   244,   245,   218,   219,   220,   221,   241,   242,
-       0,   243,     0,     0,   225,   244,   245,     0,     0,   228,
-     229,   230,   231,   232,   233,   234,     0,   510,   298,   299,
-       0,     0,     0,     0,     0,     0,     0,     0,   228,   229,
-     230,   231,   232,   233,   234,     0,     0,     0,     0,     0,
-       0,   228,   229,   230,   231,   232,   233,   234,   330,   331,
-     332,   333,   334,   335,     0,   336,     0,     0,   337,   338,
-     339,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   340,   341,   342,   343,   344,
-     345,   346
+      50,     0,    51,    52,    53,    54,    55,    56,   160,    58,
+      59,    60,    61,    62,   106,   107,   108,   109,     0,     1,
+       0,   110,    89,     2,     3,     4,     5,     6,    90,     0,
+      91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
+      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+     102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,   195,   196,   197,   198,   199,
+       0,    51,   200,    53,    54,    55,   201,    57,    58,    59,
+      60,    61,    62,   106,   107,   108,   109,     0,     1,     0,
+     110,    89,     2,     3,     4,     5,     6,    90,     0,    91,
+       8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
+      18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
+     103,   104,   105,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,   257,    57,    58,    59,    60,
+      61,    62,   106,   107,   108,   109,     0,     1,     0,   110,
+      89,   119,   120,     4,     5,     6,    90,     0,    91,     8,
+      92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
+      97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
+     104,   105,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
+      43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,   106,   107,   108,   109,     1,     0,     0,   110,     2,
+       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
+       0,    12,    13,     0,    15,    16,    17,    18,    19,    98,
+      21,     0,    22,     0,    24,    25,     0,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,   106,
+      64,     0,     0,     0,     0,     0,    67,   221,   222,   223,
+     224,   244,   245,     0,   246,     0,     0,   228,   247,   248,
+     333,   334,   335,   336,   337,   338,     0,   339,     0,     0,
+     340,   341,   342,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   301,   302,     0,     0,     0,     0,
+       0,     0,     0,     0,   231,   232,   233,   234,   235,   236,
+     237,     0,     0,     0,     0,     0,     0,   343,   344,   345,
+     346,   347,   348,   349
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,     9,    21,    66,     0,    16,    14,   235,    49,
-     348,    31,   350,    34,    21,    49,    23,    19,    23,    26,
-     358,     0,    29,    44,    69,    27,    28,   148,    84,    28,
-      31,    76,    28,    97,   155,    34,    64,   375,    34,    44,
-      49,    97,    69,    52,    69,   166,    99,    36,    37,    76,
-     103,    76,    92,    93,    94,    95,   177,    64,    65,    28,
-      94,    95,    15,    23,   185,    34,    66,    97,    28,    69,
-      10,    11,    74,   300,    69,    85,    98,    97,    97,    19,
-     102,    34,    91,    92,    93,    94,    95,    27,    28,    42,
-      43,    44,    45,    46,    47,    69,    49,    69,   148,    52,
-      53,    54,    76,    97,    76,   155,   388,   389,   390,   391,
-      98,    55,   394,    57,    99,    59,   166,    61,    33,    28,
-     347,   128,    97,    63,   152,    34,   133,   177,   466,    97,
-     468,   249,   250,   251,    74,   185,    89,    90,    91,    92,
-      93,    94,    95,    97,   172,   152,    97,    98,   486,   156,
-      98,   158,   100,   250,   251,    97,   494,    28,    97,    97,
-      97,    97,    97,    28,   502,   172,    98,    26,    97,   103,
-     103,   102,   510,   180,   102,    28,    42,    43,    44,    45,
-      97,   121,   122,    49,    26,    16,    52,    53,    54,   129,
-     100,    97,   132,    97,    97,    87,    34,    86,    28,    28,
-      28,    28,   103,   265,    42,    43,    44,    45,    46,    47,
-     150,    49,    97,    10,    52,    53,    54,   157,    28,    71,
-      97,    34,    97,    89,    90,    91,    92,    93,    94,    95,
-      97,   249,   250,   251,    71,    85,    97,    86,    85,    97,
-     240,    97,   249,   250,   251,   240,    86,    86,    69,    97,
-     366,    89,    90,    91,    92,    93,    94,    95,    28,    97,
-     373,    97,   297,   460,    21,   265,   266,   306,   214,   185,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,    -1,    -1,    -1,    -1,   306,
-      -1,   241,   242,   243,   244,   245,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   257,   258,    -1,
-      33,   261,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,   348,    -1,
-     350,    -1,    -1,    -1,    -1,   362,    -1,    -1,   358,    -1,
-      -1,    -1,   302,   303,    -1,   305,    -1,    -1,    -1,   309,
-      -1,   311,    -1,   373,    -1,   375,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
-     340,   341,   342,   343,   344,   345,   346,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   442,    -1,   356,   357,   117,   118,
-     119,   120,    -1,    -1,   123,   124,   125,   126,   127,    -1,
-      -1,   130,   131,   433,    -1,   442,   376,    -1,   433,    -1,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   464,    -1,   466,   474,   468,   464,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,   486,    89,    90,    91,
-      92,    93,    94,    95,   494,    -1,    98,    -1,   505,    -1,
-      -1,    -1,   502,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     510,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    98,    -1,   100,    -1,
-     470,    -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,
+       0,    21,     9,    67,   238,    16,     0,    14,    23,    31,
+      49,   351,   353,   474,    21,    84,    23,    29,    49,    26,
+     361,    52,    29,    19,    34,    98,    49,   100,    97,    44,
+      34,    27,    28,   494,    44,    36,    37,   378,    42,    43,
+      44,    45,    46,    47,    69,    49,    97,    98,    52,    53,
+      54,    76,    64,    92,    93,    94,    95,    64,    65,    31,
+      91,    92,    93,    94,    95,    97,    69,    67,     0,   303,
+      70,    94,    95,    76,    85,    97,    70,    69,    23,    75,
+     252,   253,   254,    28,    76,    89,    90,    91,    92,    93,
+      94,    95,   150,    97,    99,    10,    11,    28,   438,   157,
+      69,   150,    69,    34,    19,    28,    97,    76,   157,    76,
+     168,    34,    27,    28,    28,    28,   350,   253,   254,   168,
+      34,    34,   180,   130,    97,    99,    33,    98,   135,   103,
+     188,   180,    98,    97,   474,   476,   102,    97,    97,   188,
+      97,    97,   154,   391,   392,   393,   394,   154,    63,   397,
+      97,   158,    28,   160,   494,    97,    97,    97,    97,    97,
+      75,   502,   174,    28,    55,   102,    57,   174,    59,   510,
+      61,    26,    98,   103,   103,   102,   183,   518,    42,    43,
+      44,    45,    28,    15,    26,    49,    97,    97,    52,    53,
+      54,   100,    16,    97,    97,    97,    97,    87,    28,    28,
+      28,    28,    34,   103,   268,    86,    10,    28,   123,   124,
+      42,    43,    44,    45,    46,    47,   131,    49,    71,   134,
+      52,    53,    54,    97,    34,    89,    90,    91,    92,    93,
+      94,    95,   252,   253,   254,    97,    97,   152,    71,    86,
+      85,    85,   369,   243,   159,   252,   253,   254,    97,   243,
+      86,    86,    70,    28,    97,   376,    97,    89,    90,    91,
+      92,    93,    94,    95,   438,   300,    97,   467,   268,   269,
+      21,    97,   309,   217,    -1,    -1,   188,    -1,    33,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      -1,    -1,   309,    -1,    -1,    -1,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,    -1,    -1,    -1,    -1,    -1,    -1,   244,
+     245,   246,   247,   248,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    -1,    -1,   260,   261,    -1,    -1,   264,
+      -1,   351,    -1,   353,    -1,    -1,    -1,    -1,   365,    -1,
+      -1,   361,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,   376,    -1,   378,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     305,   306,    -1,   308,    -1,    -1,    -1,   312,    -1,   314,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,    -1,    -1,   449,   438,    -1,
+     440,    -1,   449,    -1,   359,   360,   440,   119,   120,   121,
+     122,    -1,    -1,   125,   126,   127,   128,   129,    -1,    -1,
+     132,   133,    -1,    -1,   379,    -1,    -1,    -1,    -1,    -1,
+      -1,   471,    -1,    -1,   474,   482,   476,   471,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,   494,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   502,    -1,    -1,    -1,   513,    -1,    -1,    -1,
+     510,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   518,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    -1,    98,    -1,   100,    -1,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   478,    -1,    42,    43,    44,    45,    46,
       47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      -1,   491,    -1,    -1,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   273,   274,   275,   276,   277,   278,
-     279,   280,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    -1,    -1,   100,    -1,    -1,    -1,   296,   297,   298,
-     299,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
+      -1,    -1,    -1,    -1,   499,    89,    90,    91,    92,    93,
+      94,    95,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   276,   277,   278,   279,   280,   281,
+     282,   283,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    98,    -1,    -1,    -1,    -1,    -1,   299,   300,   301,
+     302,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
       -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
       45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     359,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
+     362,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
       -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    97,    -1,    -1,    -1,    -1,    -1,   387,    -1,
-      -1,    -1,    -1,   392,   393,    -1,   395,   396,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     449,   450,   451,   452,    -1,   454,   455,   456,   457,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    -1,    -1,    -1,    -1,   484,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,   497,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
-      -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,
-      99,    -1,   101,    -1,   103,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    -1,    -1,    -1,    88,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    98,    99,
-      -1,   101,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    98,    99,    -1,   101,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    98,    99,    -1,   101,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
-      99,    -1,   101,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,   101,
+      95,    -1,    97,    -1,    -1,    -1,    -1,    -1,   390,    -1,
+      -1,    -1,    -1,   395,   396,    -1,   398,   399,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    97,   456,   457,   458,   459,    -1,   461,
+     462,   463,   464,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     492,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,   505,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
+      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,    -1,   103,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,     7,
+      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    98,    99,    -1,   101,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
-      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
-      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
+      88,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      98,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
+      81,    82,    83,    84,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    98,    99,    -1,
      101,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
-      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
+      84,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
+      94,    95,    -1,    -1,    98,    99,    -1,   101,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
+      -1,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
       -1,    -1,    99,    -1,   101,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
@@ -1492,7 +1460,7 @@ static const yytype_int16 yycheck[] =
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,
       -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,
-      -1,   101,     5,     6,     7,     8,     9,    10,    11,    12,
+     100,   101,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
@@ -1506,7 +1474,7 @@ static const yytype_int16 yycheck[] =
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    49,    50,    51,    -1,    53,    54,    55,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
@@ -1515,8 +1483,8 @@ static const yytype_int16 yycheck[] =
        9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,
-      49,    50,    51,    -1,    -1,    -1,    55,    56,    57,    58,
+      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
@@ -1525,93 +1493,110 @@ static const yytype_int16 yycheck[] =
       12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    50,    51,
-      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    61,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     7,    99,    -1,   101,
-      11,    12,    13,    14,    15,    -1,    -1,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    -1,    -1,    -1,     7,    88,    -1,    -1,
-      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,    -1,
-      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,    -1,
-      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    -1,    -1,     7,    88,    -1,    -1,
-      11,    12,    13,    14,    15,    -1,    97,    18,    19,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    97,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    -1,     7,    -1,    88,    10,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
+      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
+      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,
       51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,     7,    -1,    88,    10,    11,
-      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    -1,     7,    -1,    88,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    -1,     7,    -1,    88,    10,    11,    12,    13,
+      81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
+     101,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      -1,    -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,
+      -1,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,     7,    -1,    88,    10,    11,    12,    13,    14,
+      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
+      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,
+      -1,    48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     7,    99,    -1,   101,    11,    12,    13,    14,    15,
+      -1,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    -1,
+      -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    97,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
@@ -1619,29 +1604,61 @@ static const yytype_int16 yycheck[] =
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-       7,    -1,    -1,    88,    11,    12,    13,    14,    15,    -1,
-      -1,    18,    19,    20,    21,    -1,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    -1,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      -1,     7,    -1,    88,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
+       7,    -1,    88,    10,    11,    12,    13,    14,    15,    16,
+      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-      -1,    88,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,     7,
+      -1,    88,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    -1,     7,    -1,
+      88,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,     7,    -1,    88,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,     7,    -1,    -1,    88,    11,
+      12,    13,    14,    15,    -1,    -1,    18,    19,    20,    21,
+      -1,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    -1,    36,    37,    -1,    39,    40,    41,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    -1,    -1,    -1,    -1,    -1,    88,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    80,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1654,52 +1671,53 @@ static const yytype_uint8 yystos[] =
       46,    47,    48,    49,    50,    51,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    88,    97,   105,   106,
-     107,   108,   109,   114,   116,   120,   121,   122,   125,   127,
-     128,   129,   130,   131,   132,    31,    97,    10,    16,    18,
-      20,    21,    22,    25,    27,    30,    31,    32,    33,    35,
-      38,    39,    40,    41,    81,    82,    83,    84,    88,   116,
-     117,   118,   119,     5,     6,     8,     9,    11,    12,    13,
-      14,    19,    26,    48,    55,    57,    59,    61,    75,    78,
-      92,    93,    99,   101,   117,   123,   124,   136,   137,   140,
-     141,   142,   145,   146,   147,   150,   153,   154,   155,   157,
-      99,   155,   117,    31,   123,   155,    36,    37,    75,   117,
-     137,   139,   145,   117,   117,   123,   155,   123,   124,   118,
-     155,   118,   117,   121,     0,   107,   123,   155,    97,    97,
-      98,   154,   154,   154,   154,   155,   155,   154,   154,   154,
-     154,   154,    63,    64,    65,    66,    67,    70,    74,   117,
-     155,   154,   154,   100,   155,     8,     9,   103,   117,   151,
-     152,   155,   158,   159,    99,    97,    97,    28,    42,    43,
-      44,    45,    46,    47,    49,    52,    53,    54,    89,    90,
-      91,    92,    93,    94,    95,    98,   136,   156,   157,   155,
-      33,    46,    47,    49,    53,    54,   118,    97,    97,    24,
-      50,    51,   117,   155,    74,    34,    44,   126,    33,    97,
-      97,    36,    97,    97,    97,    34,    97,    97,   118,    97,
-     117,    28,   156,    28,    34,    28,    34,    28,    34,    28,
-      34,    69,    76,    69,    76,    69,    76,    69,    76,    69,
-      76,    55,    57,    59,    61,   148,    28,    28,    79,    80,
-      98,   100,   103,   103,   102,   103,    98,   102,   102,    98,
-     158,    26,   155,   155,   155,   155,   155,   155,   155,   155,
-     155,   155,   155,   155,   155,   155,   155,   155,   155,   159,
-      42,    43,    44,    45,    46,    47,    49,    52,    53,    54,
-      89,    90,    91,    92,    93,    94,    95,    98,    97,   120,
-      97,   137,   138,   140,   138,   138,    23,    44,    97,    28,
-     155,   155,    84,    97,   110,   111,   112,   113,   155,   121,
-      97,   120,   133,   134,   135,    97,    26,   154,   154,   154,
-     154,   154,   154,   154,   154,    23,    28,   149,    56,    58,
-      60,    62,    71,    72,    73,    77,    78,   143,   144,   154,
-     143,   154,   154,   159,   155,   155,   155,     8,     9,   117,
-     152,   155,   100,   155,   155,   155,   155,   155,   155,   155,
-     155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-     155,   159,   133,    16,   133,    97,    97,    97,   155,   155,
-     133,    97,   117,   113,    97,    87,   135,   133,   155,    28,
-      28,    28,    28,   154,   149,   149,   149,   149,   154,   154,
-     149,   154,   154,   100,    16,    85,    97,   120,    97,    15,
-      34,    86,   118,    97,    10,   154,   154,   154,   154,   154,
-     154,   154,   154,    28,    71,   144,    97,   120,    97,   133,
-     133,    34,   155,    97,    97,   115,   117,    71,   133,    85,
-      86,   155,    97,   133,    97,    98,   154,    85,    97,    97,
-      97,   133,   117,    97,   133,    86,    86,    97,    97
+      78,    79,    80,    81,    82,    83,    85,    88,    97,   105,
+     106,   107,   108,   109,   114,   116,   120,   121,   122,   123,
+     126,   128,   129,   130,   131,   132,   133,    31,    97,    10,
+      16,    18,    20,    21,    22,    25,    27,    30,    31,    32,
+      33,    35,    38,    39,    40,    41,    81,    82,    83,    84,
+      88,   116,   117,   118,   119,     5,     6,     8,     9,    11,
+      12,    13,    14,    19,    26,    48,    55,    57,    59,    61,
+      75,    78,    92,    93,    99,   101,   117,   124,   125,   140,
+     141,   144,   145,   146,   149,   150,   151,   154,   157,   158,
+     159,   161,    99,   159,   117,    31,   124,   159,    36,    37,
+      75,   117,   141,   143,   149,   117,   117,   124,   159,   124,
+     125,   118,   159,   118,   117,    97,   122,     0,   107,   124,
+     159,    97,    97,    98,   158,   158,   158,   158,   159,   159,
+     158,   158,   158,   158,   158,    63,    64,    65,    66,    67,
+      70,    74,   117,   159,   158,   158,   100,   159,     8,     9,
+     103,   117,   155,   156,   159,   162,   163,    99,    97,    97,
+      28,    42,    43,    44,    45,    46,    47,    49,    52,    53,
+      54,    89,    90,    91,    92,    93,    94,    95,    98,   140,
+     160,   161,   159,    33,    46,    47,    49,    53,    54,   118,
+      97,    97,    24,    50,    51,   117,   159,    74,    34,    44,
+     127,    33,    97,    97,    36,    97,    97,    97,    34,    97,
+      97,   118,    97,   117,    28,   160,    28,    34,    28,    34,
+      28,    34,    28,    34,    69,    76,    69,    76,    69,    76,
+      69,    76,    69,    76,    55,    57,    59,    61,   152,    28,
+      28,    79,    80,    98,   100,   103,   103,   102,   103,    98,
+     102,   102,    98,   162,    26,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   163,    42,    43,    44,    45,    46,    47,    49,
+      52,    53,    54,    89,    90,    91,    92,    93,    94,    95,
+      98,    97,   120,    97,   141,   142,   144,   142,   142,    23,
+      44,    97,    28,   159,   159,    84,    97,   110,   111,   112,
+     113,   159,   122,    97,   120,   134,   135,   136,    97,    26,
+     158,   158,   158,   158,   158,   158,   158,   158,    23,    28,
+     153,    56,    58,    60,    62,    71,    72,    73,    77,    78,
+     147,   148,   158,   147,   158,   158,   163,   159,   159,   159,
+       8,     9,   117,   156,   159,   100,   159,   159,   159,   159,
+     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,   163,    97,   121,   137,   138,   139,
+      16,   134,    97,    97,    97,   159,   159,   134,    97,   117,
+     113,    97,    87,   136,   134,   159,    28,    28,    28,    28,
+     158,   153,   153,   153,   153,   158,   158,   153,   158,   158,
+     100,    16,    85,   139,    97,   120,    97,    15,    34,    86,
+     118,    97,    10,   158,   158,   158,   158,   158,   158,   158,
+     158,    28,    71,   148,    97,   120,    97,   137,   134,    34,
+     159,    97,    97,   115,   117,    71,   137,    85,    86,   159,
+      97,   134,    97,    98,   158,    85,    97,    97,    97,   134,
+     117,    97,   134,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1715,24 +1733,25 @@ static const yytype_uint8 yyr1[] =
      116,   116,   116,   116,   116,   116,   116,   117,   117,   117,
      117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
      117,   117,   117,   117,   117,   118,   118,   119,   119,   120,
-     120,   120,   120,   120,   120,   121,   121,   121,   122,   122,
-     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
-     123,   123,   123,   123,   123,   123,   123,   124,   124,   124,
-     124,   124,   125,   125,   125,   125,   126,   126,   127,   127,
-     127,   128,   128,   129,   129,   129,   129,   130,   130,   130,
-     130,   131,   131,   132,   133,   133,   134,   134,   135,   135,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   137,   138,   138,   139,   139,   140,   140,   140,
-     140,   140,   140,   140,   140,   140,   140,   141,   141,   142,
-     142,   142,   142,   143,   143,   143,   143,   143,   144,   145,
-     145,   145,   146,   146,   146,   146,   146,   146,   146,   146,
-     146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
-     148,   149,   149,   150,   150,   150,   151,   151,   152,   152,
-     152,   153,   153,   154,   154,   155,   155,   155,   155,   155,
-     155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-     155,   155,   155,   155,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   157,   157,   158,   158,   159,   159
+     120,   121,   121,   121,   121,   121,   121,   122,   122,   122,
+     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   124,   124,   124,   124,   124,   124,   124,   125,
+     125,   125,   125,   125,   126,   126,   126,   126,   127,   127,
+     128,   128,   128,   129,   129,   130,   130,   130,   130,   131,
+     131,   131,   131,   132,   132,   133,   134,   134,   135,   135,
+     136,   136,   137,   137,   138,   138,   139,   139,   140,   140,
+     140,   140,   140,   140,   140,   140,   140,   140,   140,   140,
+     141,   142,   142,   143,   143,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   145,   145,   146,   146,   146,
+     146,   147,   147,   147,   147,   147,   148,   149,   149,   149,
+     150,   150,   150,   150,   150,   150,   150,   150,   150,   150,
+     151,   151,   151,   151,   151,   152,   152,   152,   152,   153,
+     153,   154,   154,   154,   155,   155,   156,   156,   156,   157,
+     157,   158,   158,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   160,   160,   160,   160,   160,   160,   160,   160,
+     160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
+     160,   161,   161,   162,   162,   163,   163
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1748,24 +1767,25 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     0,     1,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     3,
-       3,     3,     3,     3,     3,     5,     3,     3,     2,     2,
-       0,     1,     3,     2,     4,     2,     5,     2,     2,     5,
-       4,     3,     5,     5,     5,     5,     1,     1,     3,     3,
-       3,     4,     7,     6,     9,     7,    10,     7,    11,    12,
-       9,     4,     6,     4,     0,     1,     1,     2,     1,     1,
-       1,     1,     1,     1,     2,     4,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     2,     4,
-       6,     4,     6,     4,     6,     4,     6,     2,     2,     1,
-       1,     1,     5,     1,     1,     5,     2,     2,     2,     2,
-       4,     4,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     6,     6,     6,     6,     6,     1,     1,     1,
-       1,     1,     1,     3,     3,     3,     1,     3,     3,     3,
-       3,     2,     2,     1,     1,     1,     1,     3,     3,     3,
+       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     3,     3,     3,     3,     3,     3,     5,     3,     3,
+       2,     2,     0,     1,     3,     2,     4,     2,     5,     2,
+       2,     5,     4,     3,     5,     5,     5,     5,     1,     1,
+       3,     3,     3,     4,     7,     6,     9,     7,    10,     7,
+      11,    12,     9,     4,     6,     4,     0,     1,     1,     2,
+       1,     1,     0,     1,     1,     2,     1,     1,     1,     1,
+       1,     1,     2,     4,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     2,     4,     6,     4,
+       6,     4,     6,     4,     6,     2,     2,     1,     1,     1,
+       5,     1,     1,     5,     2,     2,     2,     2,     4,     4,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     1,     1,     3,     3,     3,     3,
+       6,     6,     6,     6,     6,     1,     1,     1,     1,     1,
+       1,     3,     3,     3,     1,     3,     3,     3,     3,     2,
+       2,     1,     1,     1,     1,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     1,     1,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -2039,37 +2059,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2043 "engines/director/lingo/lingo-gr.cpp"
+#line 2063 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2049 "engines/director/lingo/lingo-gr.cpp"
+#line 2069 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2055 "engines/director/lingo/lingo-gr.cpp"
+#line 2075 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2061 "engines/director/lingo/lingo-gr.cpp"
+#line 2081 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2067 "engines/director/lingo/lingo-gr.cpp"
+#line 2087 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2073 "engines/director/lingo/lingo-gr.cpp"
+#line 2093 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2337,7 +2357,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2341 "engines/director/lingo/lingo-gr.cpp"
+#line 2361 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2348,7 +2368,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2352 "engines/director/lingo/lingo-gr.cpp"
+#line 2372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2358,37 +2378,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2362 "engines/director/lingo/lingo-gr.cpp"
+#line 2382 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2368 "engines/director/lingo/lingo-gr.cpp"
+#line 2388 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2374 "engines/director/lingo/lingo-gr.cpp"
+#line 2394 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2380 "engines/director/lingo/lingo-gr.cpp"
+#line 2400 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2386 "engines/director/lingo/lingo-gr.cpp"
+#line 2406 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2392 "engines/director/lingo/lingo-gr.cpp"
+#line 2412 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2399,7 +2419,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2403 "engines/director/lingo/lingo-gr.cpp"
+#line 2423 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
@@ -2409,13 +2429,13 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2413 "engines/director/lingo/lingo-gr.cpp"
+#line 2433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2419 "engines/director/lingo/lingo-gr.cpp"
+#line 2439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2424,446 +2444,446 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2428 "engines/director/lingo/lingo-gr.cpp"
+#line 2448 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2435 "engines/director/lingo/lingo-gr.cpp"
+#line 2455 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2447 "engines/director/lingo/lingo-gr.cpp"
+#line 2467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2453 "engines/director/lingo/lingo-gr.cpp"
+#line 2473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2459 "engines/director/lingo/lingo-gr.cpp"
+#line 2479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2465 "engines/director/lingo/lingo-gr.cpp"
+#line 2485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2491 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2477 "engines/director/lingo/lingo-gr.cpp"
+#line 2497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2483 "engines/director/lingo/lingo-gr.cpp"
+#line 2503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2489 "engines/director/lingo/lingo-gr.cpp"
+#line 2509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2495 "engines/director/lingo/lingo-gr.cpp"
+#line 2515 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2501 "engines/director/lingo/lingo-gr.cpp"
+#line 2521 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2507 "engines/director/lingo/lingo-gr.cpp"
+#line 2527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2513 "engines/director/lingo/lingo-gr.cpp"
+#line 2533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2519 "engines/director/lingo/lingo-gr.cpp"
+#line 2539 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2545 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2531 "engines/director/lingo/lingo-gr.cpp"
+#line 2551 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2537 "engines/director/lingo/lingo-gr.cpp"
+#line 2557 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2543 "engines/director/lingo/lingo-gr.cpp"
+#line 2563 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2549 "engines/director/lingo/lingo-gr.cpp"
+#line 2569 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2555 "engines/director/lingo/lingo-gr.cpp"
+#line 2575 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2561 "engines/director/lingo/lingo-gr.cpp"
+#line 2581 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2567 "engines/director/lingo/lingo-gr.cpp"
+#line 2587 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2573 "engines/director/lingo/lingo-gr.cpp"
+#line 2593 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2599 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2585 "engines/director/lingo/lingo-gr.cpp"
+#line 2605 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2591 "engines/director/lingo/lingo-gr.cpp"
+#line 2611 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2597 "engines/director/lingo/lingo-gr.cpp"
+#line 2617 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2603 "engines/director/lingo/lingo-gr.cpp"
+#line 2623 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2609 "engines/director/lingo/lingo-gr.cpp"
+#line 2629 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2635 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2621 "engines/director/lingo/lingo-gr.cpp"
+#line 2641 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
+#line 2647 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2653 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2659 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2645 "engines/director/lingo/lingo-gr.cpp"
+#line 2665 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2671 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2657 "engines/director/lingo/lingo-gr.cpp"
+#line 2677 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2683 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2669 "engines/director/lingo/lingo-gr.cpp"
+#line 2689 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSET  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2675 "engines/director/lingo/lingo-gr.cpp"
+#line 2695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+#line 2713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tSTARTS  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2719 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTELL  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2725 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTHE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
+#line 2731 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tTIME  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2717 "engines/director/lingo/lingo-gr.cpp"
+#line 2737 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tTO  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2723 "engines/director/lingo/lingo-gr.cpp"
+#line 2743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWHILE  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWINDOW  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWITH  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWITHIN  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2747 "engines/director/lingo/lingo-gr.cpp"
+#line 2767 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* CMDID: tWORD  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2773 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* CMDID: tWORDS  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2759 "engines/director/lingo/lingo-gr.cpp"
+#line 2779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tELSE  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2765 "engines/director/lingo/lingo-gr.cpp"
+#line 2785 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tENDCLAUSE  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2771 "engines/director/lingo/lingo-gr.cpp"
+#line 2791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tEXIT  */
 #line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2777 "engines/director/lingo/lingo-gr.cpp"
+#line 2797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tFACTORY  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tGLOBAL  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tGO  */
 #line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tIF  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tINSTANCE  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tMACRO  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2833 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tMETHOD  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tON  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tOPEN  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPLAY  */
 #line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tPROPERTY  */
 #line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
 #line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
 #line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
 #line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* nonemptyidlist: ID  */
@@ -2872,7 +2892,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2876 "engines/director/lingo/lingo-gr.cpp"
+#line 2896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2880,989 +2900,1028 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2884 "engines/director/lingo/lingo-gr.cpp"
+#line 2904 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* proc: CMDID cmdargs '\n'  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+  case 100: /* stmt: tENDIF '\n'  */
+#line 385 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = nullptr; }
+#line 2910 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 110: /* proc: CMDID cmdargs '\n'  */
+#line 401 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2890 "engines/director/lingo/lingo-gr.cpp"
+#line 2916 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* proc: tPUT cmdargs '\n'  */
-#line 398 "engines/director/lingo/lingo-gr.y"
+  case 111: /* proc: tPUT cmdargs '\n'  */
+#line 402 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2896 "engines/director/lingo/lingo-gr.cpp"
+#line 2922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* proc: tGO cmdargs '\n'  */
-#line 399 "engines/director/lingo/lingo-gr.y"
+  case 112: /* proc: tGO cmdargs '\n'  */
+#line 403 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2902 "engines/director/lingo/lingo-gr.cpp"
+#line 2928 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* proc: tGO frameargs '\n'  */
-#line 400 "engines/director/lingo/lingo-gr.y"
+  case 113: /* proc: tGO frameargs '\n'  */
+#line 404 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2908 "engines/director/lingo/lingo-gr.cpp"
+#line 2934 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* proc: tPLAY cmdargs '\n'  */
-#line 401 "engines/director/lingo/lingo-gr.y"
+  case 114: /* proc: tPLAY cmdargs '\n'  */
+#line 405 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2914 "engines/director/lingo/lingo-gr.cpp"
+#line 2940 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* proc: tPLAY frameargs '\n'  */
-#line 402 "engines/director/lingo/lingo-gr.y"
+  case 115: /* proc: tPLAY frameargs '\n'  */
+#line 406 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2920 "engines/director/lingo/lingo-gr.cpp"
+#line 2946 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* proc: tOPEN cmdargs '\n'  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+  case 116: /* proc: tOPEN cmdargs '\n'  */
+#line 407 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 2926 "engines/director/lingo/lingo-gr.cpp"
+#line 2952 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* proc: tOPEN expr tWITH expr '\n'  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 117: /* proc: tOPEN expr tWITH expr '\n'  */
+#line 408 "engines/director/lingo/lingo-gr.y"
                                                  {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 2936 "engines/director/lingo/lingo-gr.cpp"
+#line 2962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* proc: tNEXT tREPEAT '\n'  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+  case 118: /* proc: tNEXT tREPEAT '\n'  */
+#line 413 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+#line 2968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* proc: tEXIT tREPEAT '\n'  */
-#line 410 "engines/director/lingo/lingo-gr.y"
+  case 119: /* proc: tEXIT tREPEAT '\n'  */
+#line 414 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2948 "engines/director/lingo/lingo-gr.cpp"
+#line 2974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* proc: tEXIT '\n'  */
-#line 411 "engines/director/lingo/lingo-gr.y"
+  case 120: /* proc: tEXIT '\n'  */
+#line 415 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 2980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* proc: tASSERTERROR stmtoneliner  */
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 121: /* proc: tASSERTERROR stmtoneliner  */
+#line 416 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 2986 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* cmdargs: %empty  */
-#line 415 "engines/director/lingo/lingo-gr.y"
+  case 122: /* cmdargs: %empty  */
+#line 419 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2968 "engines/director/lingo/lingo-gr.cpp"
+#line 2994 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* cmdargs: expr  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+  case 123: /* cmdargs: expr  */
+#line 422 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2978 "engines/director/lingo/lingo-gr.cpp"
+#line 3004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 423 "engines/director/lingo/lingo-gr.y"
+  case 124: /* cmdargs: expr ',' nonemptyexprlist  */
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 2987 "engines/director/lingo/lingo-gr.cpp"
+#line 3013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* cmdargs: expr expr_nounarymath  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 125: /* cmdargs: expr expr_nounarymath  */
+#line 431 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 2998 "engines/director/lingo/lingo-gr.cpp"
+#line 3024 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 126: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
+#line 437 "engines/director/lingo/lingo-gr.y"
                                                            {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
 		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 3008 "engines/director/lingo/lingo-gr.cpp"
+#line 3034 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* cmdargs: '(' ')'  */
-#line 438 "engines/director/lingo/lingo-gr.y"
+  case 127: /* cmdargs: '(' ')'  */
+#line 442 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3016 "engines/director/lingo/lingo-gr.cpp"
+#line 3042 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 441 "engines/director/lingo/lingo-gr.y"
+  case 128: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 445 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3025 "engines/director/lingo/lingo-gr.cpp"
+#line 3051 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* frameargs: tFRAME expr  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 129: /* frameargs: tFRAME expr  */
+#line 455 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3035 "engines/director/lingo/lingo-gr.cpp"
+#line 3061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* frameargs: tMOVIE expr  */
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 130: /* frameargs: tMOVIE expr  */
+#line 460 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3046 "engines/director/lingo/lingo-gr.cpp"
+#line 3072 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 131: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 466 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3057 "engines/director/lingo/lingo-gr.cpp"
+#line 3083 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* frameargs: expr tOF tMOVIE expr  */
-#line 468 "engines/director/lingo/lingo-gr.y"
+  case 132: /* frameargs: expr tOF tMOVIE expr  */
+#line 472 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3068 "engines/director/lingo/lingo-gr.cpp"
+#line 3094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+  case 133: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 478 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3079 "engines/director/lingo/lingo-gr.cpp"
+#line 3105 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 482 "engines/director/lingo/lingo-gr.y"
+  case 134: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 486 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3085 "engines/director/lingo/lingo-gr.cpp"
+#line 3111 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 483 "engines/director/lingo/lingo-gr.y"
+  case 135: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3091 "engines/director/lingo/lingo-gr.cpp"
+#line 3117 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 136: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3097 "engines/director/lingo/lingo-gr.cpp"
+#line 3123 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* asgn: tSET varorthe to expr '\n'  */
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 137: /* asgn: tSET varorthe to expr '\n'  */
+#line 489 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3103 "engines/director/lingo/lingo-gr.cpp"
+#line 3129 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* definevars: tGLOBAL idlist '\n'  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 140: /* definevars: tGLOBAL idlist '\n'  */
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3109 "engines/director/lingo/lingo-gr.cpp"
+#line 3135 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* definevars: tPROPERTY idlist '\n'  */
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 141: /* definevars: tPROPERTY idlist '\n'  */
+#line 495 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3115 "engines/director/lingo/lingo-gr.cpp"
+#line 3141 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* definevars: tINSTANCE idlist '\n'  */
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 142: /* definevars: tINSTANCE idlist '\n'  */
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3121 "engines/director/lingo/lingo-gr.cpp"
+#line 3147 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* ifstmt: tIF expr tTHEN stmt  */
-#line 495 "engines/director/lingo/lingo-gr.y"
+  case 143: /* ifstmt: tIF expr tTHEN stmt  */
+#line 499 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3130 "engines/director/lingo/lingo-gr.cpp"
+#line 3156 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n'  */
-#line 499 "engines/director/lingo/lingo-gr.y"
-                                                   {
+  case 144: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif tENDIF '\n'  */
+#line 503 "engines/director/lingo/lingo-gr.y"
+                                                            {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3137 "engines/director/lingo/lingo-gr.cpp"
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 145: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 507 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3148 "engines/director/lingo/lingo-gr.cpp"
+#line 3174 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n'  */
-#line 509 "engines/director/lingo/lingo-gr.y"
-                                                                                {
+  case 146: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif tENDIF '\n'  */
+#line 513 "engines/director/lingo/lingo-gr.y"
+                                                                                         {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3157 "engines/director/lingo/lingo-gr.cpp"
+#line 3183 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt  */
-#line 513 "engines/director/lingo/lingo-gr.y"
-                                                                    {
+  case 147: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
+#line 517 "engines/director/lingo/lingo-gr.y"
+                                                                             {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3166 "engines/director/lingo/lingo-gr.cpp"
+#line 3192 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n'  */
-#line 517 "engines/director/lingo/lingo-gr.y"
-                                                                                             {
+  case 148: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif tENDIF '\n'  */
+#line 521 "engines/director/lingo/lingo-gr.y"
+                                                                                                               {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3173 "engines/director/lingo/lingo-gr.cpp"
+#line 3199 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 521 "engines/director/lingo/lingo-gr.y"
+  case 149: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 525 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3180 "engines/director/lingo/lingo-gr.cpp"
+#line 3206 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 150: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 527 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3187 "engines/director/lingo/lingo-gr.cpp"
+#line 3213 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 525 "engines/director/lingo/lingo-gr.y"
+  case 151: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 529 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3194 "engines/director/lingo/lingo-gr.cpp"
+#line 3220 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 152: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 531 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3201 "engines/director/lingo/lingo-gr.cpp"
+#line 3227 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* tell: tTELL expr tTO stmtoneliner  */
-#line 531 "engines/director/lingo/lingo-gr.y"
+  case 153: /* tell: tTELL expr tTO stmtoneliner  */
+#line 535 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3210 "engines/director/lingo/lingo-gr.cpp"
+#line 3236 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 154: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3217 "engines/director/lingo/lingo-gr.cpp"
+#line 3243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* when: tWHEN ID tTHEN expr  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 155: /* when: tWHEN ID tTHEN expr  */
+#line 543 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3223 "engines/director/lingo/lingo-gr.cpp"
+#line 3249 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* stmtlist: %empty  */
-#line 541 "engines/director/lingo/lingo-gr.y"
+  case 156: /* stmtlist: %empty  */
+#line 545 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3229 "engines/director/lingo/lingo-gr.cpp"
+#line 3255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* nonemptystmtlist: stmtlistline  */
-#line 546 "engines/director/lingo/lingo-gr.y"
+  case 158: /* nonemptystmtlist: stmtlistline  */
+#line 550 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3240 "engines/director/lingo/lingo-gr.cpp"
+#line 3266 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 159: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* stmtlistline: '\n'  */
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 160: /* stmtlistline: '\n'  */
+#line 563 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3256 "engines/director/lingo/lingo-gr.cpp"
+#line 3282 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 162: /* stmtlist_insideif: %empty  */
+#line 567 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.nodelist) = new NodeList; }
+#line 3288 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 164: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
+#line 572 "engines/director/lingo/lingo-gr.y"
+                                                {
+		NodeList *list = new NodeList;
+		if ((yyvsp[0].node)) {
+			list->push_back((yyvsp[0].node));
+		}
+		(yyval.nodelist) = list; }
+#line 3299 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 165: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
+#line 578 "engines/director/lingo/lingo-gr.y"
+                                                                        {
+		if ((yyvsp[0].node)) {
+			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
+		}
+		(yyval.nodelist) = (yyvsp[-1].nodelist); }
+#line 3309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* simpleexpr_nounarymath: tINT  */
-#line 566 "engines/director/lingo/lingo-gr.y"
+  case 166: /* stmtlistline_insideif: '\n'  */
+#line 585 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = nullptr; }
+#line 3315 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 168: /* simpleexpr_nounarymath: tINT  */
+#line 592 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3262 "engines/director/lingo/lingo-gr.cpp"
+#line 3321 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* simpleexpr_nounarymath: tFLOAT  */
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 169: /* simpleexpr_nounarymath: tFLOAT  */
+#line 593 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3268 "engines/director/lingo/lingo-gr.cpp"
+#line 3327 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 170: /* simpleexpr_nounarymath: tSYMBOL  */
+#line 594 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3274 "engines/director/lingo/lingo-gr.cpp"
+#line 3333 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* simpleexpr_nounarymath: tSTRING  */
-#line 569 "engines/director/lingo/lingo-gr.y"
+  case 171: /* simpleexpr_nounarymath: tSTRING  */
+#line 595 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3280 "engines/director/lingo/lingo-gr.cpp"
+#line 3339 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 570 "engines/director/lingo/lingo-gr.y"
+  case 172: /* simpleexpr_nounarymath: tNOT simpleexpr  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3286 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
-#line 571 "engines/director/lingo/lingo-gr.y"
+  case 173: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3292 "engines/director/lingo/lingo-gr.cpp"
+#line 3351 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 572 "engines/director/lingo/lingo-gr.y"
+  case 174: /* simpleexpr_nounarymath: '(' expr ')'  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3298 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* var: ID  */
-#line 580 "engines/director/lingo/lingo-gr.y"
+  case 180: /* var: ID  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3304 "engines/director/lingo/lingo-gr.cpp"
+#line 3363 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* chunk: tFIELD simpleexpr  */
-#line 590 "engines/director/lingo/lingo-gr.y"
+  case 185: /* chunk: tFIELD simpleexpr  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3313 "engines/director/lingo/lingo-gr.cpp"
+#line 3372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* chunk: tCAST simpleexpr  */
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 186: /* chunk: tCAST simpleexpr  */
+#line 620 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3322 "engines/director/lingo/lingo-gr.cpp"
+#line 3381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 187: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
+#line 624 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3329 "engines/director/lingo/lingo-gr.cpp"
+#line 3388 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 600 "engines/director/lingo/lingo-gr.y"
+  case 188: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 626 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3336 "engines/director/lingo/lingo-gr.cpp"
+#line 3395 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* chunk: tWORD simpleexpr tOF simpleexpr  */
-#line 602 "engines/director/lingo/lingo-gr.y"
+  case 189: /* chunk: tWORD simpleexpr tOF simpleexpr  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3343 "engines/director/lingo/lingo-gr.cpp"
+#line 3402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 190: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 630 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3350 "engines/director/lingo/lingo-gr.cpp"
+#line 3409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* chunk: tITEM simpleexpr tOF simpleexpr  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 191: /* chunk: tITEM simpleexpr tOF simpleexpr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3416 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+  case 192: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3364 "engines/director/lingo/lingo-gr.cpp"
+#line 3423 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* chunk: tLINE simpleexpr tOF simpleexpr  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 193: /* chunk: tLINE simpleexpr tOF simpleexpr  */
+#line 636 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3371 "engines/director/lingo/lingo-gr.cpp"
+#line 3430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+  case 194: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 638 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3378 "engines/director/lingo/lingo-gr.cpp"
+#line 3437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* object: tSCRIPT simpleexpr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
+  case 195: /* object: tSCRIPT simpleexpr  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3387 "engines/director/lingo/lingo-gr.cpp"
+#line 3446 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* object: tWINDOW simpleexpr  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 196: /* object: tWINDOW simpleexpr  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3396 "engines/director/lingo/lingo-gr.cpp"
+#line 3455 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+  case 200: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 655 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3402 "engines/director/lingo/lingo-gr.cpp"
+#line 3461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 203: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 660 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3408 "engines/director/lingo/lingo-gr.cpp"
+#line 3467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* theobj: tSOUND simpleexpr  */
-#line 635 "engines/director/lingo/lingo-gr.y"
+  case 204: /* theobj: tSOUND simpleexpr  */
+#line 661 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3414 "engines/director/lingo/lingo-gr.cpp"
+#line 3473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* theobj: tSPRITE simpleexpr  */
-#line 636 "engines/director/lingo/lingo-gr.y"
+  case 205: /* theobj: tSPRITE simpleexpr  */
+#line 662 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3420 "engines/director/lingo/lingo-gr.cpp"
+#line 3479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* menu: tMENU simpleexpr  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 206: /* menu: tMENU simpleexpr  */
+#line 665 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3426 "engines/director/lingo/lingo-gr.cpp"
+#line 3485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* writablethe: tTHE ID  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 207: /* writablethe: tTHE ID  */
+#line 667 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3432 "engines/director/lingo/lingo-gr.cpp"
+#line 3491 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* writablethe: tTHE ID tOF theobj  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 208: /* writablethe: tTHE ID tOF theobj  */
+#line 668 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3438 "engines/director/lingo/lingo-gr.cpp"
+#line 3497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 201: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 209: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 669 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3444 "engines/director/lingo/lingo-gr.cpp"
+#line 3503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 202: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 210: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 672 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3450 "engines/director/lingo/lingo-gr.cpp"
+#line 3509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 211: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 673 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3456 "engines/director/lingo/lingo-gr.cpp"
+#line 3515 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 204: /* thedatetime: tTHE tABBREV tDATE  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+  case 212: /* thedatetime: tTHE tABBREV tDATE  */
+#line 674 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3462 "engines/director/lingo/lingo-gr.cpp"
+#line 3521 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 205: /* thedatetime: tTHE tABBREV tTIME  */
-#line 649 "engines/director/lingo/lingo-gr.y"
+  case 213: /* thedatetime: tTHE tABBREV tTIME  */
+#line 675 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3468 "engines/director/lingo/lingo-gr.cpp"
+#line 3527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 206: /* thedatetime: tTHE tABBR tDATE  */
-#line 650 "engines/director/lingo/lingo-gr.y"
+  case 214: /* thedatetime: tTHE tABBR tDATE  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3474 "engines/director/lingo/lingo-gr.cpp"
+#line 3533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 207: /* thedatetime: tTHE tABBR tTIME  */
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 215: /* thedatetime: tTHE tABBR tTIME  */
+#line 677 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3480 "engines/director/lingo/lingo-gr.cpp"
+#line 3539 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* thedatetime: tTHE tLONG tDATE  */
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 216: /* thedatetime: tTHE tLONG tDATE  */
+#line 678 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3486 "engines/director/lingo/lingo-gr.cpp"
+#line 3545 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* thedatetime: tTHE tLONG tTIME  */
-#line 653 "engines/director/lingo/lingo-gr.y"
+  case 217: /* thedatetime: tTHE tLONG tTIME  */
+#line 679 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3492 "engines/director/lingo/lingo-gr.cpp"
+#line 3551 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* thedatetime: tTHE tSHORT tDATE  */
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 218: /* thedatetime: tTHE tSHORT tDATE  */
+#line 680 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3498 "engines/director/lingo/lingo-gr.cpp"
+#line 3557 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* thedatetime: tTHE tSHORT tTIME  */
-#line 655 "engines/director/lingo/lingo-gr.y"
+  case 219: /* thedatetime: tTHE tSHORT tTIME  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3504 "engines/director/lingo/lingo-gr.cpp"
+#line 3563 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 659 "engines/director/lingo/lingo-gr.y"
+  case 220: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 685 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3510 "engines/director/lingo/lingo-gr.cpp"
+#line 3569 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 213: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 221: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3516 "engines/director/lingo/lingo-gr.cpp"
+#line 3575 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 661 "engines/director/lingo/lingo-gr.y"
+  case 222: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 687 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3522 "engines/director/lingo/lingo-gr.cpp"
+#line 3581 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 662 "engines/director/lingo/lingo-gr.y"
+  case 223: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 688 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3528 "engines/director/lingo/lingo-gr.cpp"
+#line 3587 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 663 "engines/director/lingo/lingo-gr.y"
+  case 224: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 689 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3534 "engines/director/lingo/lingo-gr.cpp"
+#line 3593 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* chunktype: tCHAR  */
-#line 666 "engines/director/lingo/lingo-gr.y"
+  case 225: /* chunktype: tCHAR  */
+#line 692 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3540 "engines/director/lingo/lingo-gr.cpp"
+#line 3599 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* chunktype: tWORD  */
-#line 667 "engines/director/lingo/lingo-gr.y"
+  case 226: /* chunktype: tWORD  */
+#line 693 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3546 "engines/director/lingo/lingo-gr.cpp"
+#line 3605 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* chunktype: tITEM  */
-#line 668 "engines/director/lingo/lingo-gr.y"
+  case 227: /* chunktype: tITEM  */
+#line 694 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3552 "engines/director/lingo/lingo-gr.cpp"
+#line 3611 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* chunktype: tLINE  */
-#line 669 "engines/director/lingo/lingo-gr.y"
+  case 228: /* chunktype: tLINE  */
+#line 695 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3558 "engines/director/lingo/lingo-gr.cpp"
+#line 3617 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* list: '[' exprlist ']'  */
-#line 674 "engines/director/lingo/lingo-gr.y"
+  case 231: /* list: '[' exprlist ']'  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3564 "engines/director/lingo/lingo-gr.cpp"
+#line 3623 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* list: '[' ':' ']'  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 232: /* list: '[' ':' ']'  */
+#line 701 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3570 "engines/director/lingo/lingo-gr.cpp"
+#line 3629 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* list: '[' proplist ']'  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 233: /* list: '[' proplist ']'  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3576 "engines/director/lingo/lingo-gr.cpp"
+#line 3635 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* proplist: proppair  */
-#line 679 "engines/director/lingo/lingo-gr.y"
+  case 234: /* proplist: proppair  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3585 "engines/director/lingo/lingo-gr.cpp"
+#line 3644 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* proplist: proplist ',' proppair  */
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 235: /* proplist: proplist ',' proppair  */
+#line 709 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3593 "engines/director/lingo/lingo-gr.cpp"
+#line 3652 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* proppair: tSYMBOL ':' expr  */
-#line 688 "engines/director/lingo/lingo-gr.y"
+  case 236: /* proppair: tSYMBOL ':' expr  */
+#line 714 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3599 "engines/director/lingo/lingo-gr.cpp"
+#line 3658 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* proppair: ID ':' expr  */
-#line 689 "engines/director/lingo/lingo-gr.y"
+  case 237: /* proppair: ID ':' expr  */
+#line 715 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3605 "engines/director/lingo/lingo-gr.cpp"
+#line 3664 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* proppair: tSTRING ':' expr  */
-#line 690 "engines/director/lingo/lingo-gr.y"
+  case 238: /* proppair: tSTRING ':' expr  */
+#line 716 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3611 "engines/director/lingo/lingo-gr.cpp"
+#line 3670 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* unarymath: '+' simpleexpr  */
-#line 693 "engines/director/lingo/lingo-gr.y"
+  case 239: /* unarymath: '+' simpleexpr  */
+#line 719 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3617 "engines/director/lingo/lingo-gr.cpp"
+#line 3676 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 232: /* unarymath: '-' simpleexpr  */
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 240: /* unarymath: '-' simpleexpr  */
+#line 720 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3623 "engines/director/lingo/lingo-gr.cpp"
+#line 3682 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* expr: expr '+' expr  */
-#line 704 "engines/director/lingo/lingo-gr.y"
+  case 245: /* expr: expr '+' expr  */
+#line 730 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3629 "engines/director/lingo/lingo-gr.cpp"
+#line 3688 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* expr: expr '-' expr  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 246: /* expr: expr '-' expr  */
+#line 731 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3635 "engines/director/lingo/lingo-gr.cpp"
+#line 3694 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* expr: expr '*' expr  */
-#line 706 "engines/director/lingo/lingo-gr.y"
+  case 247: /* expr: expr '*' expr  */
+#line 732 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3641 "engines/director/lingo/lingo-gr.cpp"
+#line 3700 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* expr: expr '/' expr  */
-#line 707 "engines/director/lingo/lingo-gr.y"
+  case 248: /* expr: expr '/' expr  */
+#line 733 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3647 "engines/director/lingo/lingo-gr.cpp"
+#line 3706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 241: /* expr: expr tMOD expr  */
-#line 708 "engines/director/lingo/lingo-gr.y"
+  case 249: /* expr: expr tMOD expr  */
+#line 734 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3653 "engines/director/lingo/lingo-gr.cpp"
+#line 3712 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* expr: expr '>' expr  */
-#line 709 "engines/director/lingo/lingo-gr.y"
+  case 250: /* expr: expr '>' expr  */
+#line 735 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3659 "engines/director/lingo/lingo-gr.cpp"
+#line 3718 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* expr: expr '<' expr  */
-#line 710 "engines/director/lingo/lingo-gr.y"
+  case 251: /* expr: expr '<' expr  */
+#line 736 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3665 "engines/director/lingo/lingo-gr.cpp"
+#line 3724 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 244: /* expr: expr tEQ expr  */
-#line 711 "engines/director/lingo/lingo-gr.y"
+  case 252: /* expr: expr tEQ expr  */
+#line 737 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3671 "engines/director/lingo/lingo-gr.cpp"
+#line 3730 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* expr: expr tNEQ expr  */
-#line 712 "engines/director/lingo/lingo-gr.y"
+  case 253: /* expr: expr tNEQ expr  */
+#line 738 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3677 "engines/director/lingo/lingo-gr.cpp"
+#line 3736 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* expr: expr tGE expr  */
-#line 713 "engines/director/lingo/lingo-gr.y"
+  case 254: /* expr: expr tGE expr  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3683 "engines/director/lingo/lingo-gr.cpp"
+#line 3742 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 247: /* expr: expr tLE expr  */
-#line 714 "engines/director/lingo/lingo-gr.y"
+  case 255: /* expr: expr tLE expr  */
+#line 740 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3689 "engines/director/lingo/lingo-gr.cpp"
+#line 3748 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* expr: expr tAND expr  */
-#line 715 "engines/director/lingo/lingo-gr.y"
+  case 256: /* expr: expr tAND expr  */
+#line 741 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3695 "engines/director/lingo/lingo-gr.cpp"
+#line 3754 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 249: /* expr: expr tOR expr  */
-#line 716 "engines/director/lingo/lingo-gr.y"
+  case 257: /* expr: expr tOR expr  */
+#line 742 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3701 "engines/director/lingo/lingo-gr.cpp"
+#line 3760 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 250: /* expr: expr '&' expr  */
-#line 717 "engines/director/lingo/lingo-gr.y"
+  case 258: /* expr: expr '&' expr  */
+#line 743 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3707 "engines/director/lingo/lingo-gr.cpp"
+#line 3766 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 251: /* expr: expr tCONCAT expr  */
-#line 718 "engines/director/lingo/lingo-gr.y"
+  case 259: /* expr: expr tCONCAT expr  */
+#line 744 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3713 "engines/director/lingo/lingo-gr.cpp"
+#line 3772 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 252: /* expr: expr tCONTAINS expr  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 260: /* expr: expr tCONTAINS expr  */
+#line 745 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3719 "engines/director/lingo/lingo-gr.cpp"
+#line 3778 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 253: /* expr: expr tSTARTS expr  */
-#line 720 "engines/director/lingo/lingo-gr.y"
+  case 261: /* expr: expr tSTARTS expr  */
+#line 746 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3725 "engines/director/lingo/lingo-gr.cpp"
+#line 3784 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 256: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 729 "engines/director/lingo/lingo-gr.y"
+  case 264: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 755 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3731 "engines/director/lingo/lingo-gr.cpp"
+#line 3790 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 730 "engines/director/lingo/lingo-gr.y"
+  case 265: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 756 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3737 "engines/director/lingo/lingo-gr.cpp"
+#line 3796 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 731 "engines/director/lingo/lingo-gr.y"
+  case 266: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 757 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3743 "engines/director/lingo/lingo-gr.cpp"
+#line 3802 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 259: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 732 "engines/director/lingo/lingo-gr.y"
+  case 267: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 758 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3749 "engines/director/lingo/lingo-gr.cpp"
+#line 3808 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 260: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 733 "engines/director/lingo/lingo-gr.y"
+  case 268: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 759 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3755 "engines/director/lingo/lingo-gr.cpp"
+#line 3814 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 261: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 734 "engines/director/lingo/lingo-gr.y"
+  case 269: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 760 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3761 "engines/director/lingo/lingo-gr.cpp"
+#line 3820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 262: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 270: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 761 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3767 "engines/director/lingo/lingo-gr.cpp"
+#line 3826 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 263: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 736 "engines/director/lingo/lingo-gr.y"
+  case 271: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 762 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3773 "engines/director/lingo/lingo-gr.cpp"
+#line 3832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 264: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 737 "engines/director/lingo/lingo-gr.y"
+  case 272: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 763 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3779 "engines/director/lingo/lingo-gr.cpp"
+#line 3838 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 265: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 738 "engines/director/lingo/lingo-gr.y"
+  case 273: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 764 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3785 "engines/director/lingo/lingo-gr.cpp"
+#line 3844 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 266: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+  case 274: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 765 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3791 "engines/director/lingo/lingo-gr.cpp"
+#line 3850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 267: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 740 "engines/director/lingo/lingo-gr.y"
+  case 275: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 766 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3797 "engines/director/lingo/lingo-gr.cpp"
+#line 3856 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 268: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 741 "engines/director/lingo/lingo-gr.y"
+  case 276: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 767 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3803 "engines/director/lingo/lingo-gr.cpp"
+#line 3862 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 269: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+  case 277: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 768 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3809 "engines/director/lingo/lingo-gr.cpp"
+#line 3868 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 270: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 278: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 769 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3815 "engines/director/lingo/lingo-gr.cpp"
+#line 3874 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 271: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 744 "engines/director/lingo/lingo-gr.y"
+  case 279: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 770 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3821 "engines/director/lingo/lingo-gr.cpp"
+#line 3880 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 272: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 745 "engines/director/lingo/lingo-gr.y"
+  case 280: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 771 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3827 "engines/director/lingo/lingo-gr.cpp"
+#line 3886 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 273: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 748 "engines/director/lingo/lingo-gr.y"
+  case 281: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 774 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3833 "engines/director/lingo/lingo-gr.cpp"
+#line 3892 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 274: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 749 "engines/director/lingo/lingo-gr.y"
+  case 282: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 775 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3839 "engines/director/lingo/lingo-gr.cpp"
+#line 3898 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 275: /* exprlist: %empty  */
-#line 752 "engines/director/lingo/lingo-gr.y"
+  case 283: /* exprlist: %empty  */
+#line 778 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3845 "engines/director/lingo/lingo-gr.cpp"
+#line 3904 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 277: /* nonemptyexprlist: expr  */
-#line 756 "engines/director/lingo/lingo-gr.y"
+  case 285: /* nonemptyexprlist: expr  */
+#line 782 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3854 "engines/director/lingo/lingo-gr.cpp"
+#line 3913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 278: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 760 "engines/director/lingo/lingo-gr.y"
+  case 286: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 786 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3862 "engines/director/lingo/lingo-gr.cpp"
+#line 3921 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3866 "engines/director/lingo/lingo-gr.cpp"
+#line 3925 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4061,7 +4120,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 765 "engines/director/lingo/lingo-gr.y"
+#line 791 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index e686a06092..418697ffeb 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -160,11 +160,11 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<idlist> idlist nonemptyidlist
 
 // STATEMENT
-%type<node> stmt stmtoneliner
+%type<node> stmt stmt_insideif stmtoneliner
 %type<node> proc asgn definevars
 %type<node> ifstmt ifelsestmt loop tell when
-%type<nodelist> cmdargs frameargs stmtlist nonemptystmtlist
-%type<node> stmtlistline
+%type<nodelist> cmdargs frameargs stmtlist nonemptystmtlist stmtlist_insideif nonemptystmtlist_insideif
+%type<node> stmtlistline stmtlistline_insideif
 
 // EXPRESSION
 %type<node> simpleexpr_nounarymath simpleexpr
@@ -381,7 +381,11 @@ nonemptyidlist: ID[item]					{
 // Sometimes this '\n' is in a nested statement (e.g. tIF expr tTHEN stmt).
 // It may not look like there's a '\n', but it's there.
 
-stmt: stmtoneliner
+stmt: stmt_insideif
+	| tENDIF '\n'						{ $$ = nullptr; } // stray `end if`s are allowed for some reason
+	;
+
+stmt_insideif: stmtoneliner
 	| ifstmt
 	| ifelsestmt
 	| loop
@@ -496,8 +500,8 @@ ifstmt: tIF expr tTHEN stmt {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back($stmt);
 		$$ = new IfStmtNode($expr, stmtlist); }
-	| tIF expr tTHEN '\n' stmtlist tENDIF '\n' {
-		$$ = new IfStmtNode($expr, $stmtlist); }
+	| tIF expr tTHEN '\n' stmtlist_insideif tENDIF '\n' {
+		$$ = new IfStmtNode($expr, $stmtlist_insideif); }
 	;
 
 ifelsestmt: tIF expr tTHEN stmt[stmt1] tELSE stmt[stmt2] {
@@ -506,15 +510,15 @@ ifelsestmt: tIF expr tTHEN stmt[stmt1] tELSE stmt[stmt2] {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back($stmt2);
 		$$ = new IfElseStmtNode($expr, stmtlist1, stmtlist2); }
-	| tIF expr tTHEN stmt[stmt1] tELSE '\n' stmtlist[stmtlist2] tENDIF '\n' {
+	| tIF expr tTHEN stmt[stmt1] tELSE '\n' stmtlist_insideif[stmtlist2] tENDIF '\n' {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back($stmt1);
 		$$ = new IfElseStmtNode($expr, stmtlist1, $stmtlist2); }
-	| tIF expr tTHEN '\n' stmtlist[stmtlist1] tELSE stmt[stmt2] {
+	| tIF expr tTHEN '\n' stmtlist_insideif[stmtlist1] tELSE stmt[stmt2] {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back($stmt2);
 		$$ = new IfElseStmtNode($expr, $stmtlist1, stmtlist2); }
-	| tIF expr tTHEN '\n' stmtlist[stmtlist1] tELSE '\n' stmtlist[stmtlist2] tENDIF '\n' {
+	| tIF expr tTHEN '\n' stmtlist_insideif[stmtlist1] tELSE '\n' stmtlist_insideif[stmtlist2] tENDIF '\n' {
 		$$ = new IfElseStmtNode($expr, $stmtlist1, $stmtlist2); }
 	;
 
@@ -560,6 +564,28 @@ stmtlistline: '\n'					{ $$ = nullptr; }
 	| stmt
 	;
 
+stmtlist_insideif: /* empty */		{ $$ = new NodeList; }
+	| nonemptystmtlist_insideif
+	;
+
+nonemptystmtlist_insideif:
+	stmtlistline_insideif[item]		{
+		NodeList *list = new NodeList;
+		if ($item) {
+			list->push_back($item);
+		}
+		$$ = list; }
+	| nonemptystmtlist_insideif[prev] stmtlistline_insideif[item]	{
+		if ($item) {
+			$prev->push_back($item);
+		}
+		$$ = $prev; }
+	;
+
+stmtlistline_insideif: '\n'			{ $$ = nullptr; }
+	| stmt_insideif
+	;
+
 // EXPRESSION
 
 simpleexpr_nounarymath:


Commit: e093f59aa2f40e449ab6387a8c93e6b5e0e4aa53
    https://github.com/scummvm/scummvm/commit/e093f59aa2f40e449ab6387a8c93e6b5e0e4aa53
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Allow trailing comma

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 0ddc3955c2..29981b6045 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -278,45 +278,46 @@ enum yysymbol_kind_t
   YYSYMBOL_stmtoneliner = 122,             /* stmtoneliner  */
   YYSYMBOL_proc = 123,                     /* proc  */
   YYSYMBOL_cmdargs = 124,                  /* cmdargs  */
-  YYSYMBOL_frameargs = 125,                /* frameargs  */
-  YYSYMBOL_asgn = 126,                     /* asgn  */
-  YYSYMBOL_to = 127,                       /* to  */
-  YYSYMBOL_definevars = 128,               /* definevars  */
-  YYSYMBOL_ifstmt = 129,                   /* ifstmt  */
-  YYSYMBOL_ifelsestmt = 130,               /* ifelsestmt  */
-  YYSYMBOL_loop = 131,                     /* loop  */
-  YYSYMBOL_tell = 132,                     /* tell  */
-  YYSYMBOL_when = 133,                     /* when  */
-  YYSYMBOL_stmtlist = 134,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 135,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 136,             /* stmtlistline  */
-  YYSYMBOL_stmtlist_insideif = 137,        /* stmtlist_insideif  */
-  YYSYMBOL_nonemptystmtlist_insideif = 138, /* nonemptystmtlist_insideif  */
-  YYSYMBOL_stmtlistline_insideif = 139,    /* stmtlistline_insideif  */
-  YYSYMBOL_simpleexpr_nounarymath = 140,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_var = 141,                      /* var  */
-  YYSYMBOL_varorchunk = 142,               /* varorchunk  */
-  YYSYMBOL_varorthe = 143,                 /* varorthe  */
-  YYSYMBOL_chunk = 144,                    /* chunk  */
-  YYSYMBOL_object = 145,                   /* object  */
-  YYSYMBOL_the = 146,                      /* the  */
-  YYSYMBOL_theobj = 147,                   /* theobj  */
-  YYSYMBOL_menu = 148,                     /* menu  */
-  YYSYMBOL_writablethe = 149,              /* writablethe  */
-  YYSYMBOL_thedatetime = 150,              /* thedatetime  */
-  YYSYMBOL_thenumberof = 151,              /* thenumberof  */
-  YYSYMBOL_chunktype = 152,                /* chunktype  */
-  YYSYMBOL_inof = 153,                     /* inof  */
-  YYSYMBOL_list = 154,                     /* list  */
-  YYSYMBOL_proplist = 155,                 /* proplist  */
-  YYSYMBOL_proppair = 156,                 /* proppair  */
-  YYSYMBOL_unarymath = 157,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 158,               /* simpleexpr  */
-  YYSYMBOL_expr = 159,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 160,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 161,                   /* sprite  */
-  YYSYMBOL_exprlist = 162,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 163          /* nonemptyexprlist  */
+  YYSYMBOL_trailingcomma = 125,            /* trailingcomma  */
+  YYSYMBOL_frameargs = 126,                /* frameargs  */
+  YYSYMBOL_asgn = 127,                     /* asgn  */
+  YYSYMBOL_to = 128,                       /* to  */
+  YYSYMBOL_definevars = 129,               /* definevars  */
+  YYSYMBOL_ifstmt = 130,                   /* ifstmt  */
+  YYSYMBOL_ifelsestmt = 131,               /* ifelsestmt  */
+  YYSYMBOL_loop = 132,                     /* loop  */
+  YYSYMBOL_tell = 133,                     /* tell  */
+  YYSYMBOL_when = 134,                     /* when  */
+  YYSYMBOL_stmtlist = 135,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 136,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 137,             /* stmtlistline  */
+  YYSYMBOL_stmtlist_insideif = 138,        /* stmtlist_insideif  */
+  YYSYMBOL_nonemptystmtlist_insideif = 139, /* nonemptystmtlist_insideif  */
+  YYSYMBOL_stmtlistline_insideif = 140,    /* stmtlistline_insideif  */
+  YYSYMBOL_simpleexpr_nounarymath = 141,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_var = 142,                      /* var  */
+  YYSYMBOL_varorchunk = 143,               /* varorchunk  */
+  YYSYMBOL_varorthe = 144,                 /* varorthe  */
+  YYSYMBOL_chunk = 145,                    /* chunk  */
+  YYSYMBOL_object = 146,                   /* object  */
+  YYSYMBOL_the = 147,                      /* the  */
+  YYSYMBOL_theobj = 148,                   /* theobj  */
+  YYSYMBOL_menu = 149,                     /* menu  */
+  YYSYMBOL_writablethe = 150,              /* writablethe  */
+  YYSYMBOL_thedatetime = 151,              /* thedatetime  */
+  YYSYMBOL_thenumberof = 152,              /* thenumberof  */
+  YYSYMBOL_chunktype = 153,                /* chunktype  */
+  YYSYMBOL_inof = 154,                     /* inof  */
+  YYSYMBOL_list = 155,                     /* list  */
+  YYSYMBOL_proplist = 156,                 /* proplist  */
+  YYSYMBOL_proppair = 157,                 /* proppair  */
+  YYSYMBOL_unarymath = 158,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 159,               /* simpleexpr  */
+  YYSYMBOL_expr = 160,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 161,         /* expr_nounarymath  */
+  YYSYMBOL_sprite = 162,                   /* sprite  */
+  YYSYMBOL_exprlist = 163,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 164          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -638,16 +639,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  177
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3483
+#define YYLAST   3495
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  60
+#define YYNNTS  61
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  286
+#define YYNRULES  289
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  527
+#define YYNSTATES  532
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -714,26 +715,26 @@ static const yytype_int16 yyrline[] =
      327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
      337,   338,   339,   340,   341,   342,   343,   346,   347,   348,
      349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   366,   367,   370,   374,   384,
-     385,   388,   389,   390,   391,   392,   393,   396,   397,   398,
-     401,   402,   403,   404,   405,   406,   407,   408,   413,   414,
-     415,   416,   419,   422,   427,   431,   437,   442,   445,   455,
-     460,   466,   472,   478,   486,   487,   488,   489,   492,   492,
-     494,   495,   496,   499,   503,   507,   513,   517,   521,   525,
-     527,   529,   531,   535,   539,   543,   545,   546,   550,   556,
-     563,   564,   567,   568,   572,   578,   585,   586,   592,   593,
-     594,   595,   596,   597,   598,   599,   600,   601,   602,   603,
-     606,   608,   609,   612,   613,   616,   620,   624,   626,   628,
-     630,   632,   634,   636,   638,   642,   646,   652,   653,   654,
-     655,   658,   659,   660,   661,   662,   665,   667,   668,   669,
-     672,   673,   674,   675,   676,   677,   678,   679,   680,   681,
-     685,   686,   687,   688,   689,   692,   693,   694,   695,   698,
-     698,   700,   701,   702,   705,   709,   714,   715,   716,   719,
-     720,   723,   724,   728,   729,   730,   731,   732,   733,   734,
+     359,   360,   361,   362,   363,   366,   367,   368,   371,   375,
+     385,   386,   389,   390,   391,   392,   393,   394,   397,   398,
+     399,   402,   403,   404,   405,   406,   407,   408,   409,   414,
+     415,   416,   417,   420,   423,   428,   432,   438,   443,   446,
+     452,   452,   458,   463,   469,   475,   481,   489,   490,   491,
+     492,   495,   495,   497,   498,   499,   502,   506,   510,   516,
+     520,   524,   528,   530,   532,   534,   538,   542,   546,   548,
+     549,   553,   559,   566,   567,   570,   571,   575,   581,   588,
+     589,   595,   596,   597,   598,   599,   600,   601,   602,   603,
+     604,   605,   606,   609,   611,   612,   615,   616,   619,   623,
+     627,   629,   631,   633,   635,   637,   639,   641,   645,   649,
+     655,   656,   657,   658,   661,   662,   663,   664,   665,   668,
+     670,   671,   672,   675,   676,   677,   678,   679,   680,   681,
+     682,   683,   684,   688,   689,   690,   691,   692,   695,   696,
+     697,   698,   701,   701,   703,   704,   705,   708,   712,   717,
+     718,   719,   722,   723,   726,   727,   731,   732,   733,   734,
      735,   736,   737,   738,   739,   740,   741,   742,   743,   744,
-     745,   746,   753,   754,   755,   756,   757,   758,   759,   760,
+     745,   746,   747,   748,   749,   756,   757,   758,   759,   760,
      761,   762,   763,   764,   765,   766,   767,   768,   769,   770,
-     771,   774,   775,   778,   779,   782,   786
+     771,   772,   773,   774,   777,   778,   781,   782,   785,   789
 };
 #endif
 
@@ -768,9 +769,9 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "scriptpart", "macro", "factory", "method", "methodlist",
   "nonemptymethodlist", "methodlistline", "handler", "endargdef", "CMDID",
   "ID", "idlist", "nonemptyidlist", "stmt", "stmt_insideif",
-  "stmtoneliner", "proc", "cmdargs", "frameargs", "asgn", "to",
-  "definevars", "ifstmt", "ifelsestmt", "loop", "tell", "when", "stmtlist",
-  "nonemptystmtlist", "stmtlistline", "stmtlist_insideif",
+  "stmtoneliner", "proc", "cmdargs", "trailingcomma", "frameargs", "asgn",
+  "to", "definevars", "ifstmt", "ifelsestmt", "loop", "tell", "when",
+  "stmtlist", "nonemptystmtlist", "stmtlistline", "stmtlist_insideif",
   "nonemptystmtlist_insideif", "stmtlistline_insideif",
   "simpleexpr_nounarymath", "var", "varorchunk", "varorthe", "chunk",
   "object", "the", "theobj", "menu", "writablethe", "thedatetime",
@@ -801,7 +802,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-462)
+#define YYPACT_NINF (-465)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -815,59 +816,60 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2364,  -462,  -462,  -462,  -462,  -462,  -462,   -22,  -462,  2934,
-    1497,  1594,  -462,  -462,  2934,  -462,    28,  -462,  -462,  1691,
-      -1,  3013,  -462,  2934,  -462,  -462,  2934,  1691,  1497,  2934,
-    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
-    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
-    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
-    -462,  -462,  -462,  1594,  2934,  2934,   -32,  3328,  -462,    68,
-    2364,  -462,  -462,  -462,  -462,  1691,  -462,  -462,  -462,  -462,
-    -462,  -462,  -462,  -462,  -462,  -462,  -462,     9,  -462,  -462,
-    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
-    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
-    -462,  -462,  -462,    27,    29,  -462,  -462,  -462,  -462,  1788,
-    1788,  1788,  1788,  1594,  1594,  1788,  1788,  1788,  1788,  1788,
-    3092,  1594,  1788,  1788,  1400,   816,    -5,    36,    40,  -462,
-    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
-     915,  -462,  1594,   245,  2934,    41,    43,  1012,  2934,  1594,
-    3171,  -462,  -462,   -10,  -462,    93,    44,    53,  1109,    58,
-      59,    60,    -4,    61,  2934,  -462,  -462,  -462,  -462,    62,
-    1206,  -462,  -462,  2934,  -462,  -462,  -462,  -462,  1303,   717,
-    -462,    69,    77,    86,    87,   -25,    -3,     8,    31,    33,
-     109,   124,   135,  3375,  -462,  -462,  -462,   436,    70,    71,
-      63,    26,    34,  -462,   717,    73,    74,  1594,  -462,  -462,
-     145,  1594,  1594,  1594,  1594,  2079,  2079,  2273,  1594,  2176,
-    2176,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  -462,
-     523,  -462,   496,  2444,  1594,  1594,  1594,  1594,  1594,    89,
-    -462,  -462,  3250,  3250,  3250,   -15,   320,   154,  -462,  -462,
-    1594,  1594,   -69,  -462,  1594,  -462,  -462,  -462,  3328,  2524,
-    -462,    90,  -462,  -462,   158,  3388,  1788,  1788,  1788,  1788,
-    1788,  1788,  1788,  1788,  -462,  -462,  -462,  -462,  -462,  -462,
-    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,    55,  1885,
-    1982,  1788,  1788,  1594,  -462,  1594,  1594,  -462,  1594,  2855,
-    -462,  -462,  1594,    91,  1594,   -31,   -31,   -31,   -31,   136,
-     136,  -462,   -39,   -31,   -31,   -31,   -31,   -39,   -23,   -23,
-    -462,  -462,    74,  1594,  1594,  1594,  1594,  1594,  1594,  1594,
-    1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,  1594,
-    1594,  2764,   176,  2524,  -462,    96,  -462,    97,    98,  1594,
-    1594,  2524,  1982,   589,   717,  2934,  -462,  -462,  -462,   -69,
-    -462,   602,  -462,  -462,  -462,   110,  2524,  -462,  2524,  1594,
-    -462,   170,  -462,   171,  -462,   172,  -462,   173,  -462,  -462,
-    1788,    55,    55,    55,    55,  1788,  1788,    55,  1788,  1788,
-    -462,  -462,  -462,  -462,  -462,  -462,   -73,   717,   717,   717,
-      70,    71,   100,  -462,   717,  -462,   717,   -31,   -31,   -31,
-     -31,   136,   136,  -462,   -39,   -31,   -31,   -31,   -31,   -39,
-     -23,   -23,  -462,  -462,    74,  -462,  -462,   -11,  2764,  -462,
-    2604,  -462,  -462,  -462,  -462,   615,   168,   119,  -462,  2934,
-    -462,  -462,    99,  -462,   196,   717,  1788,  1788,  1788,  1788,
-    -462,  1788,  1788,  1788,  1788,  -462,   179,   147,  -462,  -462,
-    -462,  2684,   126,  -462,  2764,  -462,  2524,   190,  1594,   138,
-     139,  -462,  2934,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
-    -462,   167,  1788,  -462,  2764,  -462,  -462,   155,   153,  1594,
-     686,  -462,  2524,   -51,  -462,  1788,   156,   151,   157,   704,
-    2524,  -462,  -462,  2934,  -462,   159,  -462,  -462,  2524,   164,
-    -462,  -462,   165,   169,   174,  -462,  -462
+    2303,  -465,  -465,  -465,  -465,  -465,  -465,   -18,  -465,  2873,
+    1436,  1533,  -465,  -465,  2873,  -465,    38,  -465,  -465,  1630,
+     -11,  2952,  -465,  2873,  -465,  -465,  2873,  1630,  1436,  2873,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
+    -465,  -465,  -465,  1533,  2873,  2873,   -38,  3267,  -465,    82,
+    2303,  -465,  -465,  -465,  -465,  1630,  -465,  -465,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,     1,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
+    -465,  -465,  -465,    37,    -8,  -465,  -465,  -465,  -465,  1727,
+    1727,  1727,  1727,  1533,  1533,  1727,  1727,  1727,  1727,  1727,
+    3031,  1533,  1727,  1727,  1339,   755,    49,    53,    58,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
+     854,  -465,  1533,   166,  2873,    60,    61,   951,  2873,  1533,
+    3110,  -465,  -465,   -14,  -465,    92,    62,    63,  1048,    76,
+      77,    78,    19,    81,  2873,  -465,  -465,  -465,  -465,    88,
+    1145,  -465,  -465,  2873,  -465,  -465,  -465,  -465,  1242,  3346,
+    -465,     8,    26,    50,    87,   -48,   -32,   -31,   -29,   -28,
+     111,   126,   164,  3333,  -465,  -465,  -465,   482,    90,    91,
+      95,   -76,    28,  -465,  3346,    98,   103,  1533,  -465,  -465,
+     170,  1533,  1533,  1533,  1533,  2018,  2018,  2212,  1533,  2115,
+    2115,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  -465,
+    -465,   229,  -465,   506,  2383,  1533,  1533,  1533,  1533,  1533,
+     106,  -465,  -465,  3189,  3189,  3189,   -15,   411,   176,  -465,
+    -465,  1533,  1533,   -66,  -465,  1533,  -465,  -465,  -465,  3267,
+    2463,  -465,   109,  -465,  -465,   191,  3400,  1727,  1727,  1727,
+    1727,  1727,  1727,  1727,  1727,  -465,  -465,  -465,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,    94,
+    1824,  1921,  1727,  1727,  1533,  -465,  1533,  1533,  -465,  1533,
+    2794,  -465,  -465,  1533,   121,  1533,    -6,    -6,    -6,    -6,
+      51,    51,  -465,    70,    -6,    -6,    -6,    -6,    70,     7,
+       7,  -465,  -465,   124,  1533,  1533,  1533,  1533,  1533,  1533,
+    1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,
+    1533,  1533,  -465,  2703,   208,  2463,  -465,   139,  -465,   141,
+     142,  1533,  1533,  2463,  1921,   575,  3346,  2873,  -465,  -465,
+    -465,   -66,  -465,   588,  -465,  -465,  -465,   153,  2463,  -465,
+    2463,  1533,  -465,   213,  -465,   214,  -465,   215,  -465,   221,
+    -465,  -465,  1727,    94,    94,    94,    94,  1727,  1727,    94,
+    1727,  1727,  -465,  -465,  -465,  -465,  -465,  -465,    20,  3346,
+    3346,  3346,    90,    91,   148,  -465,  3346,  -465,  3346,  1533,
+    -465,    -6,    -6,    -6,    -6,    51,    51,  -465,    70,    -6,
+      -6,    -6,    -6,    70,     7,     7,  -465,  -465,   124,  -465,
+    -465,    -4,  2703,  -465,  2543,  -465,  -465,  -465,  -465,   603,
+     137,   167,  -465,  2873,  -465,  -465,   155,  -465,   244,  3346,
+    1727,  1727,  1727,  1727,  -465,  1727,  1727,  1727,  1727,  -465,
+     234,   192,  -465,  -465,  -465,  -465,  2623,   168,  -465,  2703,
+    -465,  2463,   230,  1533,   169,   171,  -465,  2873,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,   196,  1727,  -465,  2703,
+    -465,  -465,   194,   198,  1533,   659,  -465,  2463,     9,  -465,
+    1727,   195,   180,   205,  3314,  2463,  -465,  -465,  2873,  -465,
+     207,  -465,  -465,  2463,   219,  -465,  -465,   220,   210,   211,
+    -465,  -465
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -876,80 +878,83 @@ static const yytype_int16 yypact[] =
 static const yytype_int16 yydefact[] =
 {
        0,    24,    31,    37,    60,    72,    36,     0,    38,    95,
-     122,     0,    39,    41,     0,    52,    53,    56,    58,   122,
-      59,    62,    70,     0,    73,    71,     0,   122,   122,    95,
+     123,     0,    39,    41,     0,    52,    53,    56,    58,   123,
+      59,    62,    70,     0,    73,    71,     0,   123,   123,    95,
       29,    57,    54,    51,    28,    30,    34,    66,    32,    33,
       42,    43,    45,    46,    75,    76,    25,    26,    27,    47,
       63,    35,    44,    48,    49,    50,    55,    68,    69,    64,
       65,    40,    74,    67,    95,     0,     0,    61,     5,     0,
-       2,     3,     6,     7,     8,   122,     9,    99,   101,   107,
-     108,   109,   102,   103,   104,   105,   106,     0,   120,    79,
+       2,     3,     6,     7,     8,   123,     9,   100,   102,   108,
+     109,   110,   103,   104,   105,   106,   107,     0,   121,    79,
       78,    80,    82,    83,    84,    86,    53,    92,    59,    62,
       93,    94,    81,    89,    90,    85,    67,    91,    88,    87,
-      61,    77,    97,     0,    96,   168,   169,   171,   170,    31,
+      61,    77,    98,     0,    96,   171,   172,   174,   173,    31,
       37,    60,    72,    38,    52,    54,    32,    42,    45,    75,
-      68,    65,     0,     0,     0,   283,   180,     0,     0,   241,
-     175,   176,   177,   178,   197,   198,   199,   179,   242,   243,
-     123,   244,     0,     0,    95,     0,     0,   123,     0,     0,
-      68,   180,   183,     0,   184,     0,     0,     0,   123,     0,
-       0,     0,     0,     0,    95,   100,   121,     1,     4,     0,
-     123,   119,   140,     0,   186,   185,   195,   196,   129,   130,
-     172,     0,     0,     0,     0,    25,    26,    27,    47,    63,
-      44,    55,   207,     0,   239,   240,   127,     0,   171,   170,
-       0,   180,     0,   234,   285,     0,   284,   283,   112,   113,
+      68,    65,     0,     0,     0,   286,   183,     0,     0,   244,
+     178,   179,   180,   181,   200,   201,   202,   182,   245,   246,
+     130,   247,     0,     0,    95,     0,     0,   130,     0,     0,
+      68,   183,   186,     0,   187,     0,     0,     0,   130,     0,
+       0,     0,     0,     0,    95,   101,   122,     1,     4,     0,
+     130,   120,   143,    97,   189,   188,   198,   199,   132,   133,
+     175,     0,     0,     0,     0,    25,    26,    27,    47,    63,
+      44,    55,   210,     0,   242,   243,   128,     0,   174,   173,
+       0,   183,     0,   237,   288,     0,   287,   286,   113,   114,
       56,     0,     0,     0,     0,    29,    57,    51,     0,    34,
-      66,     0,     0,     0,     0,     0,     0,     0,     0,   262,
-     125,   263,     0,     0,     0,     0,     0,     0,     0,     0,
-     118,   111,    41,    28,    30,     0,     0,    55,   138,   139,
-       0,     0,    13,   116,    73,   114,   115,   142,     0,   156,
-     141,     0,   110,    98,    56,   133,     0,     0,     0,     0,
-       0,     0,     0,     0,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   225,   227,   228,   226,     0,     0,
-       0,     0,     0,     0,   174,     0,     0,   232,     0,     0,
-     233,   231,     0,     0,     0,   254,   255,   252,   253,   256,
-     257,   249,   259,   260,   261,   251,   250,   258,   245,   246,
-     247,   248,   124,     0,     0,     0,     0,     0,     0,     0,
+      66,     0,     0,     0,     0,     0,     0,     0,   131,   124,
+     265,   130,   266,     0,     0,     0,     0,     0,     0,     0,
+       0,   119,   112,    41,    28,    30,     0,     0,    55,   141,
+     142,     0,     0,    13,   117,    73,   115,   116,   145,     0,
+     159,   144,     0,   111,    99,    56,   136,     0,     0,     0,
+       0,     0,     0,     0,     0,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   228,   230,   231,   229,     0,
+       0,     0,     0,     0,     0,   177,     0,     0,   235,     0,
+       0,   236,   234,     0,     0,     0,   257,   258,   255,   256,
+     259,   260,   252,   262,   263,   264,   254,   253,   261,   248,
+     249,   250,   251,   130,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   162,   143,   156,   181,     0,   182,     0,     0,     0,
-       0,   156,     0,     0,   155,     0,    17,    18,    11,    14,
-      15,     0,   153,   160,   161,     0,   157,   158,   156,     0,
-     187,     0,   191,     0,   193,     0,   189,     0,   229,   230,
-       0,    33,    43,    46,    76,    48,    49,    50,    64,    65,
-     209,   202,   201,   208,   281,   282,     0,   238,   236,   237,
-       0,     0,     0,   235,   286,   173,   132,   273,   274,   271,
-     272,   275,   276,   268,   278,   279,   280,   270,   269,   277,
-     264,   265,   266,   267,   126,   166,   167,     0,   163,   164,
-       0,    10,   134,   135,   136,     0,     0,     0,   137,    95,
-      16,   117,     0,   159,    20,   131,     0,     0,     0,     0,
-     200,     0,     0,     0,     0,   206,     0,     0,   204,   205,
-     128,     0,     0,   165,   162,   145,   156,     0,     0,     0,
-       0,   154,    21,   188,   192,   194,   190,   220,   222,   223,
-     221,     0,     0,   224,   162,   147,   144,     0,     0,     0,
-       0,   149,   156,     0,    22,     0,     0,     0,     0,     0,
-     156,    12,    19,     0,   203,     0,   146,   152,   156,     0,
-      23,   148,     0,     0,     0,   150,   151
+       0,   131,   126,   165,   146,   159,   184,     0,   185,     0,
+       0,     0,     0,   159,     0,     0,   158,     0,    17,    18,
+      11,    14,    15,     0,   156,   163,   164,     0,   160,   161,
+     159,     0,   190,     0,   194,     0,   196,     0,   192,     0,
+     232,   233,     0,    33,    43,    46,    76,    48,    49,    50,
+      64,    65,   212,   205,   204,   211,   284,   285,     0,   241,
+     239,   240,     0,     0,     0,   238,   289,   176,   135,   131,
+     125,   276,   277,   274,   275,   278,   279,   271,   281,   282,
+     283,   273,   272,   280,   267,   268,   269,   270,   130,   169,
+     170,     0,   166,   167,     0,    10,   137,   138,   139,     0,
+       0,     0,   140,    95,    16,   118,     0,   162,    20,   134,
+       0,     0,     0,     0,   203,     0,     0,     0,     0,   209,
+       0,     0,   207,   208,   129,   127,     0,     0,   168,   165,
+     148,   159,     0,     0,     0,     0,   157,    21,   191,   195,
+     197,   193,   223,   225,   226,   224,     0,     0,   227,   165,
+     150,   147,     0,     0,     0,     0,   152,   159,     0,    22,
+       0,     0,     0,     0,     0,   159,    12,    19,     0,   206,
+       0,   149,   155,   159,     0,    23,   151,     0,     0,     0,
+     153,   154
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -462,  -462,  -462,   182,  -462,  -462,  -462,  -462,  -462,  -127,
-    -462,  -462,     0,    -7,   -12,  -462,     6,  -340,   -64,  -462,
-       4,   225,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
-    -341,  -462,  -121,  -461,  -462,  -174,   -58,   -20,  -136,  -462,
-    -172,  -462,  -462,   -35,  -200,   249,  -462,  -462,  -462,  -248,
-    -462,  -462,   -37,  -462,   328,    85,    88,   -49,    56,  -234
+    -465,  -465,  -465,   245,  -465,  -465,  -465,  -465,  -465,   -57,
+    -465,  -465,     0,    -7,   -25,  -465,     6,  -343,   -64,  -465,
+       5,  -236,   288,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
+    -465,  -346,  -465,   -61,  -464,  -465,  -112,    57,   -20,  -117,
+    -465,  -122,  -465,  -465,    30,  -139,   312,  -465,  -465,  -465,
+    -344,  -465,  -465,    24,  -465,   262,    64,   149,   178,   119,
+    -227
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    69,    70,    71,    72,    73,   367,   368,   369,   370,
-      74,   503,   111,   136,   113,   114,   374,    77,    78,    79,
-     137,   138,    80,   260,    81,    82,    83,    84,    85,    86,
-     375,   376,   377,   437,   438,   439,   139,   140,   355,   163,
-     141,   142,   143,   400,   401,   144,   145,   146,   298,   390,
-     147,   212,   213,   148,   149,   214,   240,   151,   215,   216
+       0,    69,    70,    71,    72,    73,   369,   370,   371,   372,
+      74,   508,   111,   136,   113,   114,   376,    77,    78,    79,
+     137,   239,   138,    80,   261,    81,    82,    83,    84,    85,
+      86,   377,   378,   379,   441,   442,   443,   139,   140,   357,
+     163,   141,   142,   143,   402,   403,   144,   145,   146,   299,
+     392,   147,   212,   213,   148,   149,   214,   241,   151,   215,
+     216
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -957,101 +962,124 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      75,   162,   112,   176,   332,   471,    76,   154,   359,    87,
-     246,   436,   441,   497,   161,   365,   165,   171,   246,   166,
-     447,   228,   112,   156,   258,   312,   246,   470,   366,   360,
-     268,   167,   169,   506,   259,   158,   159,   454,   221,   222,
-     223,   224,   244,   245,   284,   246,   512,   513,   228,   247,
-     248,   285,   173,   234,   235,   236,   237,   112,   174,   155,
-     233,   234,   235,   236,   237,   175,   286,    75,   177,   406,
-      75,   236,   237,   287,   472,    88,    76,   288,   388,   179,
-     356,   356,   356,   389,   289,   231,   232,   233,   234,   235,
-     236,   237,   239,   269,   217,   150,   153,   276,   436,   239,
-     290,   241,   292,   277,   157,   278,   181,   291,   241,   293,
-     239,   279,   168,   150,   280,   282,   434,   357,   358,   241,
-     281,   283,   239,   202,   182,   217,   261,   183,   211,   308,
-     239,   241,   309,   218,   436,   498,   310,   219,   250,   241,
-     251,   262,   249,   461,   462,   463,   464,   112,   172,   467,
-     263,   255,   299,   202,   436,   265,   266,   267,   270,   272,
-     180,   511,   271,   300,   294,   307,   295,   112,   296,   519,
-     297,   314,   312,   305,   306,   311,   273,   522,   221,   222,
-     223,   224,   362,   477,   379,   246,   353,   378,   228,   247,
-     248,   415,   440,   442,   443,   444,   481,   452,   456,   457,
-     458,   459,   478,   308,   372,   479,   482,   491,   188,   189,
-     221,   222,   223,   224,   244,   245,   203,   246,   492,   207,
-     228,   247,   248,   496,   499,   231,   232,   233,   234,   235,
-     236,   237,   354,   354,   354,   501,   502,   242,   505,   508,
-     507,   515,   450,    75,   256,   161,   161,   161,   516,   352,
-     523,   524,   178,   170,   517,   453,   521,   231,   232,   233,
-     234,   235,   236,   237,   473,   403,   525,   493,    75,    75,
-     164,   526,   413,   313,     0,     0,   275,     0,   243,     0,
-       0,     0,     0,     0,     0,     0,     0,   221,   222,   223,
-     224,   244,   245,     0,   246,     0,     0,   228,   247,   248,
-       0,     0,   412,     0,     0,     0,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,     0,     0,     0,     0,     0,     0,   319,
-     320,   321,   323,   324,   231,   232,   233,   234,   235,   236,
-     237,     0,     0,     0,     0,   363,   364,     0,     0,   371,
-       0,    75,     0,    75,     0,     0,     0,     0,   449,     0,
-       0,    75,   221,   222,   223,   224,   244,   245,     0,   246,
-       0,     0,   228,   247,   248,     0,    75,     0,    75,     0,
+      75,   162,   112,   176,   171,   352,    76,   154,   361,   445,
+     440,   333,   476,    87,   161,   502,   165,   451,   367,   166,
+     259,   285,   112,   217,   156,   158,   159,   309,   286,   362,
+     260,   368,   167,   169,   458,   511,   277,   287,   289,   173,
+     291,   293,   278,   247,   288,   290,   228,   292,   294,   465,
+     466,   467,   468,   269,   279,   471,   247,   112,   174,   175,
+     280,   221,   222,   223,   224,   245,   246,    75,   247,   155,
+      75,   228,   248,   249,   150,   153,    76,   408,   281,    88,
+     179,   477,   177,   157,   282,   233,   234,   235,   236,   237,
+     183,   168,   150,   221,   222,   223,   224,   420,   181,   440,
+     247,   236,   237,   228,   248,   249,   517,   518,   231,   232,
+     233,   234,   235,   236,   237,   283,   270,   390,   313,   247,
+     474,   284,   391,   202,   438,   262,   310,   172,   211,   250,
+     311,   358,   358,   358,   182,   503,   440,   359,   360,   180,
+     231,   232,   233,   234,   235,   236,   237,   112,   217,   272,
+     218,   256,   482,   202,   300,   219,   440,   251,   252,   263,
+     264,   516,   234,   235,   236,   237,   295,   112,   296,   524,
+     297,   483,   298,   266,   267,   268,   274,   527,   271,   221,
+     222,   223,   224,   245,   246,   273,   247,   188,   189,   228,
+     248,   249,   301,   306,   307,   203,   315,   308,   207,   244,
+     312,   313,   475,   355,   364,   374,   380,   240,   221,   222,
+     223,   224,   245,   246,   240,   247,   243,   381,   228,   248,
+     249,   417,   419,   257,   444,   240,   231,   232,   233,   234,
+     235,   236,   237,   356,   356,   356,   446,   240,   447,   448,
+     456,   460,   461,   462,    75,   240,   161,   161,   161,   463,
+     354,   309,   486,   484,   487,   231,   232,   233,   234,   235,
+     236,   237,   496,   497,   504,   501,   506,   510,   507,    75,
+      75,   334,   335,   336,   337,   338,   339,   521,   340,   512,
+     520,   341,   342,   343,   513,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   522,   414,   526,   528,   529,   530,   531,   320,
+     321,   322,   324,   325,   454,   178,   170,   457,   344,   345,
+     346,   347,   348,   349,   350,   365,   366,   351,   242,   373,
+     478,   405,   498,   164,   415,   242,   314,   276,     0,     0,
+       0,     0,     0,     0,     0,     0,   242,     0,     0,     0,
+       0,     0,     0,    75,     0,    75,     0,     0,   242,     0,
+     453,     0,     0,    75,     0,     0,   242,     0,     0,     0,
+     409,   410,     0,   411,     0,     0,     0,   416,    75,   418,
+      75,   184,   185,   186,   187,     0,     0,   190,   191,   192,
+     193,   194,     0,     0,   204,   205,     0,     0,   421,   422,
+     423,   424,   425,   426,   427,   428,   429,   430,   431,   432,
+     433,   434,   435,   436,   437,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   449,   450,     0,   485,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     407,   408,     0,   409,     0,     0,     0,   414,     0,   416,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   231,
-     232,   233,   234,   235,   236,   237,     0,   361,   417,   418,
-     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
-     429,   430,   431,   432,   433,     0,     0,   480,    75,     0,
-      75,     0,   112,     0,   445,   446,   475,   184,   185,   186,
-     187,     0,     0,   190,   191,   192,   193,   194,     0,     0,
-     204,   205,     0,     0,   455,     0,     0,     0,     0,     0,
-       0,    75,     0,     0,    75,   504,    75,   495,   221,   222,
-     223,   224,   244,   245,     0,   246,     0,     0,   228,   247,
-     248,     0,     0,     0,    75,     0,     0,     0,     0,     0,
-       0,     0,    75,     0,     0,     0,   520,     0,     0,     0,
-      75,     0,     0,     0,     0,     0,     0,     0,    75,     0,
+       0,     0,    75,     0,    75,   459,   112,     0,     0,     0,
+     480,     0,     0,   221,   222,   223,   224,   245,   246,     0,
+     247,     0,     0,   228,   248,   249,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    75,     0,     0,    75,
+     509,    75,   500,   416,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    75,
+     231,   232,   233,   234,   235,   236,   237,    75,   363,     0,
+       0,   525,     0,     0,     0,    75,     0,     0,     0,     0,
+       0,     0,     0,    75,   221,   222,   223,   224,   245,   246,
+       0,   247,     0,     0,   228,   248,   249,     0,     0,   382,
+     383,   384,   385,   386,   387,   388,   389,   505,   221,   222,
+     223,   224,   245,   246,     0,   247,     0,     0,   228,   248,
+     249,     0,   404,   404,   406,   407,     0,     0,   514,     0,
+       0,   231,   232,   233,   234,   235,   236,   237,     0,     0,
+     304,     0,   305,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   231,   232,   233,   234,   235,
-     236,   237,     0,     0,   303,     0,   304,     0,   221,   222,
-     223,   224,   244,   245,     0,   246,     0,     0,   228,   247,
-     248,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   500,     0,   333,   334,   335,   336,   337,
-     338,     0,   339,     0,     0,   340,   341,   342,     0,     0,
-       0,     0,     0,     0,   509,   231,   232,   233,   234,   235,
-     236,   237,     0,     0,     0,     0,   304,     0,     0,     0,
-       0,     0,     0,     0,   380,   381,   382,   383,   384,   385,
-     386,   387,   343,   344,   345,   346,   347,   348,   349,     0,
-       0,   350,     0,     0,     0,     0,     0,   402,   402,   404,
-     405,   221,   222,   223,   224,   244,   245,     0,   246,     0,
-       0,   228,   247,   248,   221,   222,   223,   224,   244,   245,
-       0,   246,     0,     0,   228,   247,   248,   221,   222,   223,
-     224,   244,   245,     0,   246,     0,     0,   228,   247,   248,
+     236,   237,     0,     0,     0,     0,   305,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   221,   222,   223,
+     224,   245,   246,     0,   247,     0,   404,   228,   248,   249,
+     221,   222,   223,   224,   245,   246,     0,   247,     0,     0,
+     228,   248,   249,     0,     0,   221,   222,   223,   224,   245,
+     246,     0,   247,     0,   464,   228,   248,   249,     0,   469,
+     470,     0,   472,   473,   231,   232,   233,   234,   235,   236,
+     237,     0,   452,     0,     0,     0,     0,   231,   232,   233,
+     234,   235,   236,   237,     0,   455,     0,     0,     0,     0,
+       0,     0,   231,   232,   233,   234,   235,   236,   237,     0,
+     481,   221,   222,   223,   224,   245,   246,     0,   247,     0,
+       0,   228,   248,   249,     0,     0,     0,     0,     0,     0,
+       0,     0,   488,   489,   490,   491,     0,   492,   493,   494,
+     495,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,   231,   232,
-     233,   234,   235,   236,   237,     0,   448,     0,     0,     0,
-     402,   231,   232,   233,   234,   235,   236,   237,     0,   451,
-       0,     0,     0,     0,   231,   232,   233,   234,   235,   236,
-     237,     0,   476,     0,     0,     0,     0,     0,   460,     0,
-       0,     0,     0,   465,   466,     0,   468,   469,   221,   222,
-     223,   224,   244,   245,     0,   246,     0,     0,   228,   247,
-     248,     0,     0,     0,     0,     0,   221,   222,   223,   224,
-     244,   245,     0,   246,     0,     0,   228,   247,   248,   221,
-     222,   223,   224,   244,   245,     0,   246,     0,     0,   228,
-     247,   248,     0,     0,     0,   231,   232,   233,   234,   235,
-     236,   237,     0,   510,   483,   484,   485,   486,     0,   487,
-     488,   489,   490,   231,   232,   233,   234,   235,   236,   237,
-       0,   518,     0,     0,     0,     0,   231,   232,   233,   234,
-     235,   236,   237,     0,     0,     0,     0,     0,     0,     0,
-     465,   115,   116,     1,   208,   209,    89,   119,   120,   121,
-     122,     6,    90,   514,    91,     8,    92,    93,    94,    12,
-      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
-      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
-       0,     0,    30,    31,   125,    33,    34,    35,     0,    36,
-      37,   126,    39,   127,    41,   128,    43,   129,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
-     109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
-       0,     0,     0,     0,     0,   152,     0,   135,     0,   210,
+     233,   234,   235,   236,   237,     0,   515,     0,     0,   469,
+     115,   116,     1,   208,   209,    89,   119,   120,   121,   122,
+       6,    90,   519,    91,     8,    92,    93,    94,    12,    13,
+      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
+     101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
+       0,    30,    31,   125,    33,    34,    35,     0,    36,    37,
+     126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+     130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
+       0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
+       0,     0,     0,     0,   152,     0,   135,     0,   210,   115,
+     116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
+      90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
+      15,    96,   220,    18,    97,    98,    99,   100,    22,   101,
+      24,    25,   102,   103,   104,   105,   221,   222,   223,   224,
+     225,   226,   125,   227,    34,    35,   228,   229,   230,   126,
+      39,   127,    41,   128,    43,   129,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
+      58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
+       0,     0,   110,   231,   232,   233,   234,   235,   236,   237,
+       0,     0,   238,   152,     0,   135,   115,   116,     1,   117,
+     118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
+       8,    92,    93,    94,    12,   253,    95,    15,    96,    17,
+      18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
+     103,   104,   105,   221,   222,   223,   224,   225,   226,   125,
+     227,   254,   255,   228,   229,   230,   126,    39,   127,    41,
+     128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
+      61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
+     231,   232,   233,   234,   235,   236,   237,     0,     0,   238,
+     152,     0,   135,   115,   116,     1,   117,   118,    89,   119,
+     120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
+      94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
+      99,   100,    22,   101,   265,    25,   102,   103,   104,   105,
+     221,   222,   223,   224,   225,   226,   125,   227,    34,    35,
+     228,   229,   230,   126,    39,   127,    41,   128,    43,   129,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
+     107,   108,   109,     0,     0,     0,   110,   231,   232,   233,
+     234,   235,   236,   237,     0,     0,   238,   152,     0,   135,
      115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
        6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
-      95,    15,    96,   220,    18,    97,    98,    99,   100,    22,
+      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
      101,    24,    25,   102,   103,   104,   105,   221,   222,   223,
      224,   225,   226,   125,   227,    34,    35,   228,   229,   230,
      126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
@@ -1060,43 +1088,43 @@ static const yytype_int16 yytable[] =
        0,     0,     0,   110,   231,   232,   233,   234,   235,   236,
      237,     0,     0,   238,   152,     0,   135,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
-      91,     8,    92,    93,    94,    12,   252,    95,    15,    96,
-      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+      91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
+     275,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,   221,   222,   223,   224,   225,   226,
-     125,   227,   253,   254,   228,   229,   230,   126,    39,   127,
+     125,   227,    34,    35,   228,   229,   230,   126,    39,   127,
       41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
        0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
      131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
      110,   231,   232,   233,   234,   235,   236,   237,     0,     0,
-     238,   152,     0,   135,   115,   116,     1,   117,   118,    89,
+       0,   152,     0,   135,   115,   116,     1,   117,   118,    89,
      119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
       93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
-      98,    99,   100,    22,   101,   264,    25,   102,   103,   104,
-     105,   221,   222,   223,   224,   225,   226,   125,   227,    34,
-      35,   228,   229,   230,   126,    39,   127,    41,   128,    43,
+      98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
+     105,     0,     0,     0,     0,    30,    31,   125,    33,    34,
+      35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
      129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
-     106,   107,   108,   109,     0,     0,     0,   110,   231,   232,
-     233,   234,   235,   236,   237,     0,     0,   238,   152,     0,
+     106,   107,   108,   109,     0,     0,     0,   110,     0,     0,
+       0,   132,   133,     0,     0,     0,     0,     0,   152,   206,
      135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
-     122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
-      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
-      22,   101,    24,    25,   102,   103,   104,   105,   221,   222,
-     223,   224,   225,   226,   125,   227,    34,    35,   228,   229,
-     230,   126,    39,   127,    41,   128,    43,   129,    45,    46,
+     122,     6,    90,     0,    91,   123,    92,    93,    94,    12,
+      13,    95,   124,    96,    17,    18,    97,    98,    99,   100,
+      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
+       0,     0,    30,    31,   125,    33,    34,    35,     0,    36,
+      37,   126,    39,   127,    41,   128,    43,   129,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
       56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
-     109,     0,     0,     0,   110,   231,   232,   233,   234,   235,
-     236,   237,     0,     0,   238,   152,     0,   135,   115,   116,
+     109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
+       0,     0,     0,     0,     0,   134,     0,   135,   115,   116,
        1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
-      96,   274,    18,    97,    98,    99,   100,    22,   101,    24,
-      25,   102,   103,   104,   105,   221,   222,   223,   224,   225,
-     226,   125,   227,    34,    35,   228,   229,   230,   126,    39,
+      96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
+      25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
+      31,   125,    33,    34,    35,     0,    36,    37,   126,    39,
      127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
       50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
       59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
-       0,   110,   231,   232,   233,   234,   235,   236,   237,     0,
+       0,   110,     0,     0,     0,   132,   133,     0,     0,     0,
        0,     0,   152,     0,   135,   115,   116,     1,   117,   118,
       89,   119,   120,   121,   122,     6,    90,     0,    91,     8,
       92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
@@ -1106,25 +1134,25 @@ static const yytype_int16 yytable[] =
       43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,   130,    58,    59,   131,    61,
       62,   106,   107,   108,   109,     0,     0,     0,   110,     0,
-       0,     0,   132,   133,     0,     0,     0,     0,     0,   152,
-     206,   135,   115,   116,     1,   117,   118,    89,   119,   120,
-     121,   122,     6,    90,     0,    91,   123,    92,    93,    94,
-      12,    13,    95,   124,    96,    17,    18,    97,    98,    99,
+       0,     0,   132,   133,     0,     0,     0,     0,     0,   134,
+       0,   135,   115,   116,     1,   117,   118,    89,   119,   120,
+     121,   122,     6,    90,     0,    91,     8,    92,    93,    94,
+      12,    13,    95,    15,    96,    17,    18,    97,    98,    99,
      100,    22,   101,    24,    25,   102,   103,   104,   105,     0,
        0,     0,     0,    30,    31,   125,    33,    34,    35,     0,
       36,    37,   126,    39,   127,    41,   128,    43,   129,    45,
       46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,   130,    58,    59,   131,    61,    62,   106,   107,
+      55,    56,   130,    58,    59,    60,    61,    62,   106,   107,
      108,   109,     0,     0,     0,   110,     0,     0,     0,   132,
-     133,     0,     0,     0,     0,     0,   134,     0,   135,   115,
+     133,     0,     0,     0,     0,     0,   152,     0,   135,   115,
      116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
       30,    31,   125,    33,    34,    35,     0,    36,    37,   126,
-      39,   127,    41,   128,    43,   129,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
-      58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
+     393,   127,   394,   128,   395,   129,   396,    46,    47,    48,
+      49,    50,     0,    51,    52,   397,   398,   399,    56,   130,
+      58,   400,   401,    61,    62,   106,   107,   108,   109,     0,
        0,     0,   110,     0,     0,     0,   132,   133,     0,     0,
        0,     0,     0,   152,     0,   135,   115,   116,     1,   117,
      118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
@@ -1133,125 +1161,88 @@ static const yytype_int16 yytable[] =
      103,   104,   105,     0,     0,     0,     0,    30,    31,   125,
       33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
      128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
+      51,    52,   397,   398,    55,    56,   130,    58,   400,   401,
       61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
        0,     0,     0,   132,   133,     0,     0,     0,     0,     0,
-     134,     0,   135,   115,   116,     1,   117,   118,    89,   119,
+     152,     0,   135,   115,   116,     1,   117,   118,    89,   119,
      120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
       94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
       99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
-       0,     0,     0,     0,    30,    31,   125,    33,    34,    35,
+       0,     0,     0,     0,     0,     0,   125,    33,    34,    35,
        0,    36,    37,   126,    39,   127,    41,   128,    43,   129,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   130,    58,    59,    60,    61,    62,   106,
+      54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
      107,   108,   109,     0,     0,     0,   110,     0,     0,     0,
      132,   133,     0,     0,     0,     0,     0,   152,     0,   135,
      115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
        6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
      101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
-       0,    30,    31,   125,    33,    34,    35,     0,    36,    37,
-     126,   391,   127,   392,   128,   393,   129,   394,    46,    47,
-      48,    49,    50,     0,    51,    52,   395,   396,   397,    56,
-     130,    58,   398,   399,    61,    62,   106,   107,   108,   109,
+       0,     0,     0,   125,    33,    34,    35,     0,     0,     0,
+     126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+     130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
        0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
        0,     0,     0,     0,   152,     0,   135,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
-     102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
-     125,    33,    34,    35,     0,    36,    37,   126,    39,   127,
+     102,   103,   104,   105,     0,     0,     0,     0,     0,     0,
+     125,     0,    34,    35,     0,     0,     0,   126,    39,   127,
       41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,   395,   396,    55,    56,   130,    58,   398,
-     399,    61,    62,   106,   107,   108,   109,     0,     0,     0,
-     110,     0,     0,     0,   132,   133,     0,     0,     0,     0,
-       0,   152,     0,   135,   115,   116,     1,   117,   118,    89,
-     119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
-      93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
-      98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
-     105,     0,     0,     0,     0,     0,     0,   125,    33,    34,
-      35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
-     129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
-     106,   107,   108,   109,     0,     0,     0,   110,     0,     0,
-       0,   132,   133,     0,     0,     0,     0,     0,   152,     0,
-     135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
-     122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
-      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
-      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
-       0,     0,     0,     0,   125,    33,    34,    35,     0,     0,
-       0,   126,    39,   127,    41,   128,    43,   129,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
-     109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
-       0,     0,     0,     0,     0,   152,     0,   135,   115,   116,
-       1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
-       0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
-      96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
-      25,   102,   103,   104,   105,     0,     0,     0,     0,     0,
-       0,   125,     0,    34,    35,     0,     0,     0,   126,    39,
-     127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
-      59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
-       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     1,   152,     0,   135,     2,     3,     4,     5,     6,
-       0,     0,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,    26,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,    68,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,   351,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,   373,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,   474,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,   494,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
-       0,     0,    67,     0,     0,     0,     0,     0,     0,     0,
-       0,   435,     1,   410,   411,    89,     2,     3,     4,     5,
-       6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
-      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
-     101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,   106,   107,   108,   109,
-       0,     1,     0,   110,    89,     2,     3,     4,     5,     6,
+       0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
+     131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
+     110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       1,   152,     0,   135,     2,     3,     4,     5,     6,     0,
+       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+      68,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+     353,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+     375,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+     479,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+     499,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
+       0,    67,     0,     0,     0,     0,     0,     0,     0,     0,
+     439,     1,   412,   413,    89,     2,     3,     4,     5,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
@@ -1265,143 +1256,181 @@ static const yytype_int16 yytable[] =
       25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,   160,    58,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,   106,   107,   108,   109,     0,     1,
        0,   110,    89,     2,     3,     4,     5,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
       32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,   195,   196,   197,   198,   199,
-       0,    51,   200,    53,    54,    55,   201,    57,    58,    59,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,   160,    58,    59,
       60,    61,    62,   106,   107,   108,   109,     0,     1,     0,
      110,    89,     2,     3,     4,     5,     6,    90,     0,    91,
        8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
      103,   104,   105,     0,     0,     0,     0,    30,    31,    32,
       33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,   257,    57,    58,    59,    60,
+      42,    43,    44,    45,   195,   196,   197,   198,   199,     0,
+      51,   200,    53,    54,    55,   201,    57,    58,    59,    60,
       61,    62,   106,   107,   108,   109,     0,     1,     0,   110,
-      89,   119,   120,     4,     5,     6,    90,     0,    91,     8,
+      89,     2,     3,     4,     5,     6,    90,     0,    91,     8,
       92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
       97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
      104,   105,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
-      43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,   106,   107,   108,   109,     1,     0,     0,   110,     2,
-       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
-       0,    12,    13,     0,    15,    16,    17,    18,    19,    98,
-      21,     0,    22,     0,    24,    25,     0,    27,    28,    29,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,   106,
-      64,     0,     0,     0,     0,     0,    67,   221,   222,   223,
-     224,   244,   245,     0,   246,     0,     0,   228,   247,   248,
-     333,   334,   335,   336,   337,   338,     0,   339,     0,     0,
-     340,   341,   342,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   301,   302,     0,     0,     0,     0,
-       0,     0,     0,     0,   231,   232,   233,   234,   235,   236,
-     237,     0,     0,     0,     0,     0,     0,   343,   344,   345,
-     346,   347,   348,   349
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,   258,    57,    58,    59,    60,    61,
+      62,   106,   107,   108,   109,     0,     1,     0,   110,    89,
+     119,   120,     4,     5,     6,    90,     0,    91,     8,    92,
+      93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
+      98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
+     105,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
+     129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+     106,   107,   108,   109,     1,     0,     0,   110,     2,     3,
+       4,     5,     6,     0,     0,     7,     8,     9,    10,     0,
+      12,    13,     0,    15,    16,    17,    18,    19,    98,    21,
+       0,    22,     0,    24,    25,     0,    27,    28,    29,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,   106,    64,
+       0,     0,     0,     0,     0,    67,   221,   222,   223,   224,
+     245,   246,     0,   247,     0,     0,   228,   248,   249,     0,
+       0,     0,     0,     0,     0,   221,   222,   223,   224,   245,
+     246,     0,   247,     0,     0,   228,   248,   249,   221,   222,
+     223,   224,   245,   246,     0,   247,     0,     0,   228,   248,
+     249,     0,     0,   231,   232,   233,   234,   235,   236,   237,
+       0,   523,   302,   303,     0,     0,     0,     0,     0,     0,
+       0,     0,   231,   232,   233,   234,   235,   236,   237,     0,
+       0,     0,     0,     0,     0,   231,   232,   233,   234,   235,
+     236,   237,   334,   335,   336,   337,   338,   339,     0,   340,
+       0,     0,   341,   342,   343,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   344,
+     345,   346,   347,   348,   349,   350
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    21,     9,    67,   238,    16,     0,    14,    23,    31,
-      49,   351,   353,   474,    21,    84,    23,    29,    49,    26,
-     361,    52,    29,    19,    34,    98,    49,   100,    97,    44,
-      34,    27,    28,   494,    44,    36,    37,   378,    42,    43,
-      44,    45,    46,    47,    69,    49,    97,    98,    52,    53,
-      54,    76,    64,    92,    93,    94,    95,    64,    65,    31,
-      91,    92,    93,    94,    95,    97,    69,    67,     0,   303,
-      70,    94,    95,    76,    85,    97,    70,    69,    23,    75,
-     252,   253,   254,    28,    76,    89,    90,    91,    92,    93,
-      94,    95,   150,    97,    99,    10,    11,    28,   438,   157,
-      69,   150,    69,    34,    19,    28,    97,    76,   157,    76,
-     168,    34,    27,    28,    28,    28,   350,   253,   254,   168,
-      34,    34,   180,   130,    97,    99,    33,    98,   135,   103,
-     188,   180,    98,    97,   474,   476,   102,    97,    97,   188,
-      97,    97,   154,   391,   392,   393,   394,   154,    63,   397,
-      97,   158,    28,   160,   494,    97,    97,    97,    97,    97,
-      75,   502,   174,    28,    55,   102,    57,   174,    59,   510,
-      61,    26,    98,   103,   103,   102,   183,   518,    42,    43,
-      44,    45,    28,    15,    26,    49,    97,    97,    52,    53,
-      54,   100,    16,    97,    97,    97,    97,    87,    28,    28,
-      28,    28,    34,   103,   268,    86,    10,    28,   123,   124,
-      42,    43,    44,    45,    46,    47,   131,    49,    71,   134,
-      52,    53,    54,    97,    34,    89,    90,    91,    92,    93,
-      94,    95,   252,   253,   254,    97,    97,   152,    71,    86,
-      85,    85,   369,   243,   159,   252,   253,   254,    97,   243,
-      86,    86,    70,    28,    97,   376,    97,    89,    90,    91,
-      92,    93,    94,    95,   438,   300,    97,   467,   268,   269,
-      21,    97,   309,   217,    -1,    -1,   188,    -1,    33,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      -1,    -1,   309,    -1,    -1,    -1,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,    -1,    -1,    -1,    -1,    -1,    -1,   244,
-     245,   246,   247,   248,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,   260,   261,    -1,    -1,   264,
-      -1,   351,    -1,   353,    -1,    -1,    -1,    -1,   365,    -1,
-      -1,   361,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,   376,    -1,   378,    -1,
+       0,    21,     9,    67,    29,   241,     0,    14,    23,   355,
+     353,   238,    16,    31,    21,   479,    23,   363,    84,    26,
+      34,    69,    29,    99,    19,    36,    37,   103,    76,    44,
+      44,    97,    27,    28,   380,   499,    28,    69,    69,    64,
+      69,    69,    34,    49,    76,    76,    52,    76,    76,   393,
+     394,   395,   396,    34,    28,   399,    49,    64,    65,    97,
+      34,    42,    43,    44,    45,    46,    47,    67,    49,    31,
+      70,    52,    53,    54,    10,    11,    70,   304,    28,    97,
+      75,    85,     0,    19,    34,    91,    92,    93,    94,    95,
+      98,    27,    28,    42,    43,    44,    45,   333,    97,   442,
+      49,    94,    95,    52,    53,    54,    97,    98,    89,    90,
+      91,    92,    93,    94,    95,    28,    97,    23,    98,    49,
+     100,    34,    28,   130,   351,    33,    98,    63,   135,   154,
+     102,   253,   254,   255,    97,   481,   479,   254,   255,    75,
+      89,    90,    91,    92,    93,    94,    95,   154,    99,   174,
+      97,   158,    15,   160,    28,    97,   499,    97,    97,    97,
+      97,   507,    92,    93,    94,    95,    55,   174,    57,   515,
+      59,    34,    61,    97,    97,    97,   183,   523,    97,    42,
+      43,    44,    45,    46,    47,    97,    49,   123,   124,    52,
+      53,    54,    28,   103,   103,   131,    26,   102,   134,    33,
+     102,    98,   438,    97,    28,   269,    97,   150,    42,    43,
+      44,    45,    46,    47,   157,    49,   152,    26,    52,    53,
+      54,   100,    98,   159,    16,   168,    89,    90,    91,    92,
+      93,    94,    95,   253,   254,   255,    97,   180,    97,    97,
+      87,    28,    28,    28,   244,   188,   253,   254,   255,    28,
+     244,   103,    97,    86,    10,    89,    90,    91,    92,    93,
+      94,    95,    28,    71,    34,    97,    97,    71,    97,   269,
+     270,    42,    43,    44,    45,    46,    47,    97,    49,    85,
+      85,    52,    53,    54,    86,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,    97,   310,    97,    86,    86,    97,    97,   245,
+     246,   247,   248,   249,   371,    70,    28,   378,    89,    90,
+      91,    92,    93,    94,    95,   261,   262,    98,   150,   265,
+     442,   301,   471,    21,   310,   157,   217,   188,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   168,    -1,    -1,    -1,
+      -1,    -1,    -1,   353,    -1,   355,    -1,    -1,   180,    -1,
+     367,    -1,    -1,   363,    -1,    -1,   188,    -1,    -1,    -1,
+     306,   307,    -1,   309,    -1,    -1,    -1,   313,   378,   315,
+     380,   119,   120,   121,   122,    -1,    -1,   125,   126,   127,
+     128,   129,    -1,    -1,   132,   133,    -1,    -1,   334,   335,
+     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
+     346,   347,   348,   349,   350,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   361,   362,    -1,   453,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     305,   306,    -1,   308,    -1,    -1,    -1,   312,    -1,   314,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,    -1,    -1,   449,   438,    -1,
-     440,    -1,   449,    -1,   359,   360,   440,   119,   120,   121,
-     122,    -1,    -1,   125,   126,   127,   128,   129,    -1,    -1,
-     132,   133,    -1,    -1,   379,    -1,    -1,    -1,    -1,    -1,
-      -1,   471,    -1,    -1,   474,   482,   476,   471,    42,    43,
+      -1,    -1,   442,    -1,   444,   381,   453,    -1,    -1,    -1,
+     444,    -1,    -1,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   476,    -1,    -1,   479,
+     487,   481,   476,   419,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   499,
+      89,    90,    91,    92,    93,    94,    95,   507,    97,    -1,
+      -1,   518,    -1,    -1,    -1,   515,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   523,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,   277,
+     278,   279,   280,   281,   282,   283,   284,   483,    42,    43,
       44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,   494,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   502,    -1,    -1,    -1,   513,    -1,    -1,    -1,
-     510,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   518,    -1,
+      54,    -1,   300,   301,   302,   303,    -1,    -1,   504,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      98,    -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    -1,    98,    -1,   100,    -1,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   478,    -1,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      -1,    -1,    -1,    -1,   499,    89,    90,    91,    92,    93,
       94,    95,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   276,   277,   278,   279,   280,   281,
-     282,   283,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    98,    -1,    -1,    -1,    -1,    -1,   299,   300,   301,
-     302,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,   364,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,   392,    52,    53,    54,    -1,   397,
+     398,    -1,   400,   401,    89,    90,    91,    92,    93,    94,
+      95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      97,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   460,   461,   462,   463,    -1,   465,   466,   467,
+     468,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
-     362,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    97,    -1,    -1,    -1,    -1,    -1,   390,    -1,
-      -1,    -1,    -1,   395,   396,    -1,   398,   399,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    97,   456,   457,   458,   459,    -1,   461,
-     462,   463,   464,    89,    90,    91,    92,    93,    94,    95,
-      -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     492,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,   505,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
-      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,    -1,   103,
+      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,   497,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,   510,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,    -1,   101,    -1,   103,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
+      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    98,    99,    -1,   101,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
+      99,    -1,   101,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    -1,    -1,    -1,    88,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    98,    99,    -1,   101,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -1421,35 +1450,35 @@ static const yytype_int16 yycheck[] =
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
       88,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      98,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
+      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    98,    99,    -1,
+      81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,   100,
      101,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
-      94,    95,    -1,    -1,    98,    99,    -1,   101,     5,     6,
+      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
+      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
       -1,    -1,    99,    -1,   101,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
@@ -1460,7 +1489,7 @@ static const yytype_int16 yycheck[] =
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,
       -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,
-     100,   101,     5,     6,     7,     8,     9,    10,    11,    12,
+      -1,   101,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
@@ -1493,7 +1522,7 @@ static const yytype_int16 yycheck[] =
       12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
       -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
@@ -1503,7 +1532,7 @@ static const yytype_int16 yycheck[] =
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,    -1,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
@@ -1512,99 +1541,62 @@ static const yytype_int16 yycheck[] =
        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
-      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
-      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
-     101,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,
-      -1,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
-      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       7,    99,    -1,   101,    11,    12,    13,    14,    15,    -1,
       -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    83,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
       -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     7,    99,    -1,   101,    11,    12,    13,    14,    15,
-      -1,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    97,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,     7,    -1,    88,    10,    11,    12,    13,    14,    15,
+      97,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
@@ -1643,22 +1635,37 @@ static const yytype_int16 yycheck[] =
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,     7,    -1,    -1,    88,    11,
-      12,    13,    14,    15,    -1,    -1,    18,    19,    20,    21,
-      -1,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    39,    40,    41,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    -1,    -1,    -1,    -1,    -1,    88,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95
+      80,    81,    82,    83,    84,    -1,     7,    -1,    88,    10,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,     7,    -1,    -1,    88,    11,    12,
+      13,    14,    15,    -1,    -1,    18,    19,    20,    21,    -1,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    -1,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,    -1,    88,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1673,51 +1680,52 @@ static const yytype_uint8 yystos[] =
       67,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    85,    88,    97,   105,
      106,   107,   108,   109,   114,   116,   120,   121,   122,   123,
-     126,   128,   129,   130,   131,   132,   133,    31,    97,    10,
+     127,   129,   130,   131,   132,   133,   134,    31,    97,    10,
       16,    18,    20,    21,    22,    25,    27,    30,    31,    32,
       33,    35,    38,    39,    40,    41,    81,    82,    83,    84,
       88,   116,   117,   118,   119,     5,     6,     8,     9,    11,
       12,    13,    14,    19,    26,    48,    55,    57,    59,    61,
-      75,    78,    92,    93,    99,   101,   117,   124,   125,   140,
-     141,   144,   145,   146,   149,   150,   151,   154,   157,   158,
-     159,   161,    99,   159,   117,    31,   124,   159,    36,    37,
-      75,   117,   141,   143,   149,   117,   117,   124,   159,   124,
-     125,   118,   159,   118,   117,    97,   122,     0,   107,   124,
-     159,    97,    97,    98,   158,   158,   158,   158,   159,   159,
-     158,   158,   158,   158,   158,    63,    64,    65,    66,    67,
-      70,    74,   117,   159,   158,   158,   100,   159,     8,     9,
-     103,   117,   155,   156,   159,   162,   163,    99,    97,    97,
+      75,    78,    92,    93,    99,   101,   117,   124,   126,   141,
+     142,   145,   146,   147,   150,   151,   152,   155,   158,   159,
+     160,   162,    99,   160,   117,    31,   124,   160,    36,    37,
+      75,   117,   142,   144,   150,   117,   117,   124,   160,   124,
+     126,   118,   160,   118,   117,    97,   122,     0,   107,   124,
+     160,    97,    97,    98,   159,   159,   159,   159,   160,   160,
+     159,   159,   159,   159,   159,    63,    64,    65,    66,    67,
+      70,    74,   117,   160,   159,   159,   100,   160,     8,     9,
+     103,   117,   156,   157,   160,   163,   164,    99,    97,    97,
       28,    42,    43,    44,    45,    46,    47,    49,    52,    53,
-      54,    89,    90,    91,    92,    93,    94,    95,    98,   140,
-     160,   161,   159,    33,    46,    47,    49,    53,    54,   118,
-      97,    97,    24,    50,    51,   117,   159,    74,    34,    44,
-     127,    33,    97,    97,    36,    97,    97,    97,    34,    97,
-      97,   118,    97,   117,    28,   160,    28,    34,    28,    34,
-      28,    34,    28,    34,    69,    76,    69,    76,    69,    76,
-      69,    76,    69,    76,    55,    57,    59,    61,   152,    28,
-      28,    79,    80,    98,   100,   103,   103,   102,   103,    98,
-     102,   102,    98,   162,    26,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
-     159,   159,   163,    42,    43,    44,    45,    46,    47,    49,
-      52,    53,    54,    89,    90,    91,    92,    93,    94,    95,
-      98,    97,   120,    97,   141,   142,   144,   142,   142,    23,
-      44,    97,    28,   159,   159,    84,    97,   110,   111,   112,
-     113,   159,   122,    97,   120,   134,   135,   136,    97,    26,
-     158,   158,   158,   158,   158,   158,   158,   158,    23,    28,
-     153,    56,    58,    60,    62,    71,    72,    73,    77,    78,
-     147,   148,   158,   147,   158,   158,   163,   159,   159,   159,
-       8,     9,   117,   156,   159,   100,   159,   159,   159,   159,
-     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,   163,    97,   121,   137,   138,   139,
-      16,   134,    97,    97,    97,   159,   159,   134,    97,   117,
-     113,    97,    87,   136,   134,   159,    28,    28,    28,    28,
-     158,   153,   153,   153,   153,   158,   158,   153,   158,   158,
-     100,    16,    85,   139,    97,   120,    97,    15,    34,    86,
-     118,    97,    10,   158,   158,   158,   158,   158,   158,   158,
-     158,    28,    71,   148,    97,   120,    97,   137,   134,    34,
-     159,    97,    97,   115,   117,    71,   137,    85,    86,   159,
-      97,   134,    97,    98,   158,    85,    97,    97,    97,   134,
-     117,    97,   134,    86,    86,    97,    97
+      54,    89,    90,    91,    92,    93,    94,    95,    98,   125,
+     141,   161,   162,   160,    33,    46,    47,    49,    53,    54,
+     118,    97,    97,    24,    50,    51,   117,   160,    74,    34,
+      44,   128,    33,    97,    97,    36,    97,    97,    97,    34,
+      97,    97,   118,    97,   117,    28,   161,    28,    34,    28,
+      34,    28,    34,    28,    34,    69,    76,    69,    76,    69,
+      76,    69,    76,    69,    76,    55,    57,    59,    61,   153,
+      28,    28,    79,    80,    98,   100,   103,   103,   102,   103,
+      98,   102,   102,    98,   163,    26,   160,   160,   160,   160,
+     160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
+     160,   160,   160,   164,    42,    43,    44,    45,    46,    47,
+      49,    52,    53,    54,    89,    90,    91,    92,    93,    94,
+      95,    98,   125,    97,   120,    97,   142,   143,   145,   143,
+     143,    23,    44,    97,    28,   160,   160,    84,    97,   110,
+     111,   112,   113,   160,   122,    97,   120,   135,   136,   137,
+      97,    26,   159,   159,   159,   159,   159,   159,   159,   159,
+      23,    28,   154,    56,    58,    60,    62,    71,    72,    73,
+      77,    78,   148,   149,   159,   148,   159,   159,   164,   160,
+     160,   160,     8,     9,   117,   157,   160,   100,   160,    98,
+     125,   160,   160,   160,   160,   160,   160,   160,   160,   160,
+     160,   160,   160,   160,   160,   160,   160,   160,   164,    97,
+     121,   138,   139,   140,    16,   135,    97,    97,    97,   160,
+     160,   135,    97,   117,   113,    97,    87,   137,   135,   160,
+      28,    28,    28,    28,   159,   154,   154,   154,   154,   159,
+     159,   154,   159,   159,   100,   125,    16,    85,   140,    97,
+     120,    97,    15,    34,    86,   118,    97,    10,   159,   159,
+     159,   159,   159,   159,   159,   159,    28,    71,   149,    97,
+     120,    97,   138,   135,    34,   160,    97,    97,   115,   117,
+      71,   138,    85,    86,   160,    97,   135,    97,    98,   159,
+      85,    97,    97,    97,   135,   117,    97,   135,    86,    86,
+      97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1732,26 +1740,26 @@ static const yytype_uint8 yyr1[] =
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   117,   117,   117,
      117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
-     117,   117,   117,   117,   117,   118,   118,   119,   119,   120,
-     120,   121,   121,   121,   121,   121,   121,   122,   122,   122,
-     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   124,   124,   124,   124,   124,   124,   124,   125,
-     125,   125,   125,   125,   126,   126,   126,   126,   127,   127,
-     128,   128,   128,   129,   129,   130,   130,   130,   130,   131,
-     131,   131,   131,   132,   132,   133,   134,   134,   135,   135,
-     136,   136,   137,   137,   138,   138,   139,   139,   140,   140,
-     140,   140,   140,   140,   140,   140,   140,   140,   140,   140,
-     141,   142,   142,   143,   143,   144,   144,   144,   144,   144,
-     144,   144,   144,   144,   144,   145,   145,   146,   146,   146,
-     146,   147,   147,   147,   147,   147,   148,   149,   149,   149,
-     150,   150,   150,   150,   150,   150,   150,   150,   150,   150,
-     151,   151,   151,   151,   151,   152,   152,   152,   152,   153,
-     153,   154,   154,   154,   155,   155,   156,   156,   156,   157,
-     157,   158,   158,   159,   159,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
-     159,   159,   160,   160,   160,   160,   160,   160,   160,   160,
+     117,   117,   117,   117,   117,   118,   118,   118,   119,   119,
+     120,   120,   121,   121,   121,   121,   121,   121,   122,   122,
+     122,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   124,   124,   124,   124,   124,   124,   124,
+     125,   125,   126,   126,   126,   126,   126,   127,   127,   127,
+     127,   128,   128,   129,   129,   129,   130,   130,   131,   131,
+     131,   131,   132,   132,   132,   132,   133,   133,   134,   135,
+     135,   136,   136,   137,   137,   138,   138,   139,   139,   140,
+     140,   141,   141,   141,   141,   141,   141,   141,   141,   141,
+     141,   141,   141,   142,   143,   143,   144,   144,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   146,   146,
+     147,   147,   147,   147,   148,   148,   148,   148,   148,   149,
+     150,   150,   150,   151,   151,   151,   151,   151,   151,   151,
+     151,   151,   151,   152,   152,   152,   152,   152,   153,   153,
+     153,   153,   154,   154,   155,   155,   155,   156,   156,   157,
+     157,   157,   158,   158,   159,   159,   160,   160,   160,   160,
      160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-     160,   161,   161,   162,   162,   163,   163
+     160,   160,   160,   160,   160,   161,   161,   161,   161,   161,
+     161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
+     161,   161,   161,   161,   162,   162,   163,   163,   164,   164
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1766,26 +1774,26 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     1,     1,     3,     1,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     3,     3,     3,     3,     3,     3,     5,     3,     3,
-       2,     2,     0,     1,     3,     2,     4,     2,     5,     2,
-       2,     5,     4,     3,     5,     5,     5,     5,     1,     1,
-       3,     3,     3,     4,     7,     6,     9,     7,    10,     7,
-      11,    12,     9,     4,     6,     4,     0,     1,     1,     2,
-       1,     1,     0,     1,     1,     2,     1,     1,     1,     1,
-       1,     1,     2,     4,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     2,     4,     6,     4,
-       6,     4,     6,     4,     6,     2,     2,     1,     1,     1,
-       5,     1,     1,     5,     2,     2,     2,     2,     4,     4,
+       1,     1,     1,     1,     1,     0,     1,     2,     1,     3,
+       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     3,     3,     3,     3,     3,     3,     3,     5,     3,
+       3,     2,     2,     0,     2,     4,     3,     5,     2,     5,
+       0,     1,     2,     2,     5,     4,     3,     5,     5,     5,
+       5,     1,     1,     3,     3,     3,     4,     7,     6,     9,
+       7,    10,     7,    11,    12,     9,     4,     6,     4,     0,
+       1,     1,     2,     1,     1,     0,     1,     1,     2,     1,
+       1,     1,     1,     1,     1,     2,     4,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
+       4,     6,     4,     6,     4,     6,     4,     6,     2,     2,
+       1,     1,     1,     5,     1,     1,     5,     2,     2,     2,
+       2,     4,     4,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     6,     6,     6,     6,     6,     1,     1,
+       1,     1,     1,     1,     3,     3,     3,     1,     3,     3,
+       3,     3,     2,     2,     1,     1,     1,     1,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       6,     6,     6,     6,     6,     1,     1,     1,     1,     1,
-       1,     3,     3,     3,     1,     3,     3,     3,     3,     2,
-       2,     1,     1,     1,     1,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     1,     1,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     1,     1,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     4,     4,     0,     1,     1,     3
+       3,     3,     3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -2059,37 +2067,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2063 "engines/director/lingo/lingo-gr.cpp"
+#line 2071 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2069 "engines/director/lingo/lingo-gr.cpp"
+#line 2077 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2075 "engines/director/lingo/lingo-gr.cpp"
+#line 2083 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2081 "engines/director/lingo/lingo-gr.cpp"
+#line 2089 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2087 "engines/director/lingo/lingo-gr.cpp"
+#line 2095 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2093 "engines/director/lingo/lingo-gr.cpp"
+#line 2101 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2357,7 +2365,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2361 "engines/director/lingo/lingo-gr.cpp"
+#line 2369 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2368,7 +2376,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2372 "engines/director/lingo/lingo-gr.cpp"
+#line 2380 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2378,37 +2386,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2382 "engines/director/lingo/lingo-gr.cpp"
+#line 2390 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2388 "engines/director/lingo/lingo-gr.cpp"
+#line 2396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2394 "engines/director/lingo/lingo-gr.cpp"
+#line 2402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2400 "engines/director/lingo/lingo-gr.cpp"
+#line 2408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2406 "engines/director/lingo/lingo-gr.cpp"
+#line 2414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2412 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2419,7 +2427,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2423 "engines/director/lingo/lingo-gr.cpp"
+#line 2431 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
@@ -2429,13 +2437,13 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2433 "engines/director/lingo/lingo-gr.cpp"
+#line 2441 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2439 "engines/director/lingo/lingo-gr.cpp"
+#line 2447 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2444,1484 +2452,1484 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2448 "engines/director/lingo/lingo-gr.cpp"
+#line 2456 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2455 "engines/director/lingo/lingo-gr.cpp"
+#line 2463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2461 "engines/director/lingo/lingo-gr.cpp"
+#line 2469 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2467 "engines/director/lingo/lingo-gr.cpp"
+#line 2475 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2473 "engines/director/lingo/lingo-gr.cpp"
+#line 2481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2479 "engines/director/lingo/lingo-gr.cpp"
+#line 2487 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2485 "engines/director/lingo/lingo-gr.cpp"
+#line 2493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2491 "engines/director/lingo/lingo-gr.cpp"
+#line 2499 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2497 "engines/director/lingo/lingo-gr.cpp"
+#line 2505 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2503 "engines/director/lingo/lingo-gr.cpp"
+#line 2511 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 2517 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2515 "engines/director/lingo/lingo-gr.cpp"
+#line 2523 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2521 "engines/director/lingo/lingo-gr.cpp"
+#line 2529 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2527 "engines/director/lingo/lingo-gr.cpp"
+#line 2535 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2533 "engines/director/lingo/lingo-gr.cpp"
+#line 2541 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2539 "engines/director/lingo/lingo-gr.cpp"
+#line 2547 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2545 "engines/director/lingo/lingo-gr.cpp"
+#line 2553 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2551 "engines/director/lingo/lingo-gr.cpp"
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2557 "engines/director/lingo/lingo-gr.cpp"
+#line 2565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2563 "engines/director/lingo/lingo-gr.cpp"
+#line 2571 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2569 "engines/director/lingo/lingo-gr.cpp"
+#line 2577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2575 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2581 "engines/director/lingo/lingo-gr.cpp"
+#line 2589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2587 "engines/director/lingo/lingo-gr.cpp"
+#line 2595 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2593 "engines/director/lingo/lingo-gr.cpp"
+#line 2601 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2599 "engines/director/lingo/lingo-gr.cpp"
+#line 2607 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2613 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2611 "engines/director/lingo/lingo-gr.cpp"
+#line 2619 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2617 "engines/director/lingo/lingo-gr.cpp"
+#line 2625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2623 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2629 "engines/director/lingo/lingo-gr.cpp"
+#line 2637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2635 "engines/director/lingo/lingo-gr.cpp"
+#line 2643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2641 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2647 "engines/director/lingo/lingo-gr.cpp"
+#line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2653 "engines/director/lingo/lingo-gr.cpp"
+#line 2661 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2659 "engines/director/lingo/lingo-gr.cpp"
+#line 2667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2665 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2677 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2683 "engines/director/lingo/lingo-gr.cpp"
+#line 2691 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2689 "engines/director/lingo/lingo-gr.cpp"
+#line 2697 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSET  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2701 "engines/director/lingo/lingo-gr.cpp"
+#line 2709 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2707 "engines/director/lingo/lingo-gr.cpp"
+#line 2715 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2713 "engines/director/lingo/lingo-gr.cpp"
+#line 2721 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tSTARTS  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2719 "engines/director/lingo/lingo-gr.cpp"
+#line 2727 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTELL  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2725 "engines/director/lingo/lingo-gr.cpp"
+#line 2733 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTHE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2731 "engines/director/lingo/lingo-gr.cpp"
+#line 2739 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tTIME  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2737 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tTO  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2743 "engines/director/lingo/lingo-gr.cpp"
+#line 2751 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWHILE  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2757 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWINDOW  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2755 "engines/director/lingo/lingo-gr.cpp"
+#line 2763 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWITH  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2761 "engines/director/lingo/lingo-gr.cpp"
+#line 2769 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWITHIN  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2767 "engines/director/lingo/lingo-gr.cpp"
+#line 2775 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* CMDID: tWORD  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2773 "engines/director/lingo/lingo-gr.cpp"
+#line 2781 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* CMDID: tWORDS  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2779 "engines/director/lingo/lingo-gr.cpp"
+#line 2787 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tELSE  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2785 "engines/director/lingo/lingo-gr.cpp"
+#line 2793 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tENDCLAUSE  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2791 "engines/director/lingo/lingo-gr.cpp"
+#line 2799 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tEXIT  */
 #line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2797 "engines/director/lingo/lingo-gr.cpp"
+#line 2805 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tFACTORY  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2803 "engines/director/lingo/lingo-gr.cpp"
+#line 2811 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tGLOBAL  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2809 "engines/director/lingo/lingo-gr.cpp"
+#line 2817 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tGO  */
 #line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2815 "engines/director/lingo/lingo-gr.cpp"
+#line 2823 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tIF  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2821 "engines/director/lingo/lingo-gr.cpp"
+#line 2829 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tINSTANCE  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2827 "engines/director/lingo/lingo-gr.cpp"
+#line 2835 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tMACRO  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2833 "engines/director/lingo/lingo-gr.cpp"
+#line 2841 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tMETHOD  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2839 "engines/director/lingo/lingo-gr.cpp"
+#line 2847 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tON  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 2845 "engines/director/lingo/lingo-gr.cpp"
+#line 2853 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tOPEN  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2851 "engines/director/lingo/lingo-gr.cpp"
+#line 2859 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPLAY  */
 #line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2857 "engines/director/lingo/lingo-gr.cpp"
+#line 2865 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tPROPERTY  */
 #line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 2863 "engines/director/lingo/lingo-gr.cpp"
+#line 2871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 2869 "engines/director/lingo/lingo-gr.cpp"
+#line 2877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
 #line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 2875 "engines/director/lingo/lingo-gr.cpp"
+#line 2883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
 #line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2881 "engines/director/lingo/lingo-gr.cpp"
+#line 2889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
 #line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2887 "engines/director/lingo/lingo-gr.cpp"
+#line 2895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* nonemptyidlist: ID  */
-#line 370 "engines/director/lingo/lingo-gr.y"
+  case 98: /* nonemptyidlist: ID  */
+#line 371 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2896 "engines/director/lingo/lingo-gr.cpp"
+#line 2904 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 374 "engines/director/lingo/lingo-gr.y"
+  case 99: /* nonemptyidlist: nonemptyidlist ',' ID  */
+#line 375 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2904 "engines/director/lingo/lingo-gr.cpp"
+#line 2912 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* stmt: tENDIF '\n'  */
-#line 385 "engines/director/lingo/lingo-gr.y"
+  case 101: /* stmt: tENDIF '\n'  */
+#line 386 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2910 "engines/director/lingo/lingo-gr.cpp"
+#line 2918 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* proc: CMDID cmdargs '\n'  */
-#line 401 "engines/director/lingo/lingo-gr.y"
+  case 111: /* proc: CMDID cmdargs '\n'  */
+#line 402 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2916 "engines/director/lingo/lingo-gr.cpp"
+#line 2924 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* proc: tPUT cmdargs '\n'  */
-#line 402 "engines/director/lingo/lingo-gr.y"
+  case 112: /* proc: tPUT cmdargs '\n'  */
+#line 403 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2922 "engines/director/lingo/lingo-gr.cpp"
+#line 2930 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* proc: tGO cmdargs '\n'  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+  case 113: /* proc: tGO cmdargs '\n'  */
+#line 404 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2928 "engines/director/lingo/lingo-gr.cpp"
+#line 2936 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* proc: tGO frameargs '\n'  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 114: /* proc: tGO frameargs '\n'  */
+#line 405 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2934 "engines/director/lingo/lingo-gr.cpp"
+#line 2942 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* proc: tPLAY cmdargs '\n'  */
-#line 405 "engines/director/lingo/lingo-gr.y"
+  case 115: /* proc: tPLAY cmdargs '\n'  */
+#line 406 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2940 "engines/director/lingo/lingo-gr.cpp"
+#line 2948 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* proc: tPLAY frameargs '\n'  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+  case 116: /* proc: tPLAY frameargs '\n'  */
+#line 407 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2946 "engines/director/lingo/lingo-gr.cpp"
+#line 2954 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* proc: tOPEN cmdargs '\n'  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+  case 117: /* proc: tOPEN cmdargs '\n'  */
+#line 408 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 2952 "engines/director/lingo/lingo-gr.cpp"
+#line 2960 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* proc: tOPEN expr tWITH expr '\n'  */
-#line 408 "engines/director/lingo/lingo-gr.y"
+  case 118: /* proc: tOPEN expr tWITH expr '\n'  */
+#line 409 "engines/director/lingo/lingo-gr.y"
                                                  {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 2962 "engines/director/lingo/lingo-gr.cpp"
+#line 2970 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118: /* proc: tNEXT tREPEAT '\n'  */
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 119: /* proc: tNEXT tREPEAT '\n'  */
+#line 414 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2968 "engines/director/lingo/lingo-gr.cpp"
+#line 2976 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* proc: tEXIT tREPEAT '\n'  */
-#line 414 "engines/director/lingo/lingo-gr.y"
+  case 120: /* proc: tEXIT tREPEAT '\n'  */
+#line 415 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2974 "engines/director/lingo/lingo-gr.cpp"
+#line 2982 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* proc: tEXIT '\n'  */
-#line 415 "engines/director/lingo/lingo-gr.y"
+  case 121: /* proc: tEXIT '\n'  */
+#line 416 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2980 "engines/director/lingo/lingo-gr.cpp"
+#line 2988 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* proc: tASSERTERROR stmtoneliner  */
-#line 416 "engines/director/lingo/lingo-gr.y"
+  case 122: /* proc: tASSERTERROR stmtoneliner  */
+#line 417 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2986 "engines/director/lingo/lingo-gr.cpp"
+#line 2994 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122: /* cmdargs: %empty  */
-#line 419 "engines/director/lingo/lingo-gr.y"
-                                                        {
+  case 123: /* cmdargs: %empty  */
+#line 420 "engines/director/lingo/lingo-gr.y"
+                                                                                        {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 2994 "engines/director/lingo/lingo-gr.cpp"
+#line 3002 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123: /* cmdargs: expr  */
-#line 422 "engines/director/lingo/lingo-gr.y"
-                                                                        {
+  case 124: /* cmdargs: expr trailingcomma  */
+#line 423 "engines/director/lingo/lingo-gr.y"
+                                                                                        {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
-		args->push_back((yyvsp[0].node));
+		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3004 "engines/director/lingo/lingo-gr.cpp"
+#line 3012 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* cmdargs: expr ',' nonemptyexprlist  */
-#line 427 "engines/director/lingo/lingo-gr.y"
-                                                {
+  case 125: /* cmdargs: expr ',' nonemptyexprlist trailingcomma  */
+#line 428 "engines/director/lingo/lingo-gr.y"
+                                                                {
 		// This matches `cmd args, ...)
-		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
-		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 3013 "engines/director/lingo/lingo-gr.cpp"
+		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
+		(yyval.nodelist) = (yyvsp[-1].nodelist); }
+#line 3021 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* cmdargs: expr expr_nounarymath  */
-#line 431 "engines/director/lingo/lingo-gr.y"
-                                                        {
+  case 126: /* cmdargs: expr expr_nounarymath trailingcomma  */
+#line 432 "engines/director/lingo/lingo-gr.y"
+                                                                        {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
+		args->push_back((yyvsp[-2].node));
 		args->push_back((yyvsp[-1].node));
-		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3024 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist  */
-#line 437 "engines/director/lingo/lingo-gr.y"
-                                                           {
+  case 127: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist trailingcomma  */
+#line 438 "engines/director/lingo/lingo-gr.y"
+                                                                                {
 		// This matches `cmd arg arg, ...`
-		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-2].node));
-		(yyvsp[0].nodelist)->insert_at(0, (yyvsp[-3].node));
-		(yyval.nodelist) = (yyvsp[0].nodelist); }
-#line 3034 "engines/director/lingo/lingo-gr.cpp"
+		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
+		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-4].node));
+		(yyval.nodelist) = (yyvsp[-1].nodelist); }
+#line 3042 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* cmdargs: '(' ')'  */
-#line 442 "engines/director/lingo/lingo-gr.y"
+  case 128: /* cmdargs: '(' ')'  */
+#line 443 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3042 "engines/director/lingo/lingo-gr.cpp"
+#line 3050 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 445 "engines/director/lingo/lingo-gr.y"
+  case 129: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 446 "engines/director/lingo/lingo-gr.y"
                                                   {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3051 "engines/director/lingo/lingo-gr.cpp"
+#line 3059 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* frameargs: tFRAME expr  */
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 132: /* frameargs: tFRAME expr  */
+#line 458 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3061 "engines/director/lingo/lingo-gr.cpp"
+#line 3069 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* frameargs: tMOVIE expr  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 133: /* frameargs: tMOVIE expr  */
+#line 463 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3072 "engines/director/lingo/lingo-gr.cpp"
+#line 3080 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 466 "engines/director/lingo/lingo-gr.y"
+  case 134: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 469 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3083 "engines/director/lingo/lingo-gr.cpp"
+#line 3091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* frameargs: expr tOF tMOVIE expr  */
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 135: /* frameargs: expr tOF tMOVIE expr  */
+#line 475 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3102 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 136: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3105 "engines/director/lingo/lingo-gr.cpp"
+#line 3113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+  case 137: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 489 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3111 "engines/director/lingo/lingo-gr.cpp"
+#line 3119 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 138: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3117 "engines/director/lingo/lingo-gr.cpp"
+#line 3125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 139: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3123 "engines/director/lingo/lingo-gr.cpp"
+#line 3131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* asgn: tSET varorthe to expr '\n'  */
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 140: /* asgn: tSET varorthe to expr '\n'  */
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3129 "engines/director/lingo/lingo-gr.cpp"
+#line 3137 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* definevars: tGLOBAL idlist '\n'  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+  case 143: /* definevars: tGLOBAL idlist '\n'  */
+#line 497 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3135 "engines/director/lingo/lingo-gr.cpp"
+#line 3143 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* definevars: tPROPERTY idlist '\n'  */
-#line 495 "engines/director/lingo/lingo-gr.y"
+  case 144: /* definevars: tPROPERTY idlist '\n'  */
+#line 498 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3141 "engines/director/lingo/lingo-gr.cpp"
+#line 3149 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142: /* definevars: tINSTANCE idlist '\n'  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 145: /* definevars: tINSTANCE idlist '\n'  */
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3147 "engines/director/lingo/lingo-gr.cpp"
+#line 3155 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* ifstmt: tIF expr tTHEN stmt  */
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 146: /* ifstmt: tIF expr tTHEN stmt  */
+#line 502 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3156 "engines/director/lingo/lingo-gr.cpp"
+#line 3164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif tENDIF '\n'  */
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 147: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif tENDIF '\n'  */
+#line 506 "engines/director/lingo/lingo-gr.y"
                                                             {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3163 "engines/director/lingo/lingo-gr.cpp"
+#line 3171 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 507 "engines/director/lingo/lingo-gr.y"
+  case 148: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 510 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3174 "engines/director/lingo/lingo-gr.cpp"
+#line 3182 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif tENDIF '\n'  */
-#line 513 "engines/director/lingo/lingo-gr.y"
+  case 149: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif tENDIF '\n'  */
+#line 516 "engines/director/lingo/lingo-gr.y"
                                                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3183 "engines/director/lingo/lingo-gr.cpp"
+#line 3191 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
-#line 517 "engines/director/lingo/lingo-gr.y"
+  case 150: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                                              {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3192 "engines/director/lingo/lingo-gr.cpp"
+#line 3200 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif tENDIF '\n'  */
-#line 521 "engines/director/lingo/lingo-gr.y"
+  case 151: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif tENDIF '\n'  */
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                                                                                {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3199 "engines/director/lingo/lingo-gr.cpp"
+#line 3207 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 525 "engines/director/lingo/lingo-gr.y"
+  case 152: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 528 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3206 "engines/director/lingo/lingo-gr.cpp"
+#line 3214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 153: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 530 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3213 "engines/director/lingo/lingo-gr.cpp"
+#line 3221 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 529 "engines/director/lingo/lingo-gr.y"
+  case 154: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 532 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3220 "engines/director/lingo/lingo-gr.cpp"
+#line 3228 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 531 "engines/director/lingo/lingo-gr.y"
+  case 155: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 534 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3227 "engines/director/lingo/lingo-gr.cpp"
+#line 3235 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* tell: tTELL expr tTO stmtoneliner  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 156: /* tell: tTELL expr tTO stmtoneliner  */
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3236 "engines/director/lingo/lingo-gr.cpp"
+#line 3244 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 157: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
+#line 542 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3243 "engines/director/lingo/lingo-gr.cpp"
+#line 3251 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* when: tWHEN ID tTHEN expr  */
-#line 543 "engines/director/lingo/lingo-gr.y"
+  case 158: /* when: tWHEN ID tTHEN expr  */
+#line 546 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3249 "engines/director/lingo/lingo-gr.cpp"
+#line 3257 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* stmtlist: %empty  */
-#line 545 "engines/director/lingo/lingo-gr.y"
+  case 159: /* stmtlist: %empty  */
+#line 548 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3255 "engines/director/lingo/lingo-gr.cpp"
+#line 3263 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* nonemptystmtlist: stmtlistline  */
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 161: /* nonemptystmtlist: stmtlistline  */
+#line 553 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3266 "engines/director/lingo/lingo-gr.cpp"
+#line 3274 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 162: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
+#line 559 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3276 "engines/director/lingo/lingo-gr.cpp"
+#line 3284 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* stmtlistline: '\n'  */
-#line 563 "engines/director/lingo/lingo-gr.y"
+  case 163: /* stmtlistline: '\n'  */
+#line 566 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3282 "engines/director/lingo/lingo-gr.cpp"
+#line 3290 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* stmtlist_insideif: %empty  */
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 165: /* stmtlist_insideif: %empty  */
+#line 570 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.nodelist) = new NodeList; }
-#line 3288 "engines/director/lingo/lingo-gr.cpp"
+#line 3296 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
-#line 572 "engines/director/lingo/lingo-gr.y"
+  case 167: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
+#line 575 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3299 "engines/director/lingo/lingo-gr.cpp"
+#line 3307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
-#line 578 "engines/director/lingo/lingo-gr.y"
+  case 168: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
+#line 581 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3309 "engines/director/lingo/lingo-gr.cpp"
+#line 3317 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* stmtlistline_insideif: '\n'  */
-#line 585 "engines/director/lingo/lingo-gr.y"
+  case 169: /* stmtlistline_insideif: '\n'  */
+#line 588 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 3315 "engines/director/lingo/lingo-gr.cpp"
+#line 3323 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* simpleexpr_nounarymath: tINT  */
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 171: /* simpleexpr_nounarymath: tINT  */
+#line 595 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3321 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* simpleexpr_nounarymath: tFLOAT  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 172: /* simpleexpr_nounarymath: tFLOAT  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3327 "engines/director/lingo/lingo-gr.cpp"
+#line 3335 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 173: /* simpleexpr_nounarymath: tSYMBOL  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3333 "engines/director/lingo/lingo-gr.cpp"
+#line 3341 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* simpleexpr_nounarymath: tSTRING  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 174: /* simpleexpr_nounarymath: tSTRING  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3339 "engines/director/lingo/lingo-gr.cpp"
+#line 3347 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 175: /* simpleexpr_nounarymath: tNOT simpleexpr  */
+#line 599 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3345 "engines/director/lingo/lingo-gr.cpp"
+#line 3353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 176: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
+#line 600 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3351 "engines/director/lingo/lingo-gr.cpp"
+#line 3359 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 177: /* simpleexpr_nounarymath: '(' expr ')'  */
+#line 601 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3365 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* var: ID  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 183: /* var: ID  */
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3363 "engines/director/lingo/lingo-gr.cpp"
+#line 3371 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* chunk: tFIELD simpleexpr  */
-#line 616 "engines/director/lingo/lingo-gr.y"
+  case 188: /* chunk: tFIELD simpleexpr  */
+#line 619 "engines/director/lingo/lingo-gr.y"
                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3372 "engines/director/lingo/lingo-gr.cpp"
+#line 3380 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* chunk: tCAST simpleexpr  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 189: /* chunk: tCAST simpleexpr  */
+#line 623 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3381 "engines/director/lingo/lingo-gr.cpp"
+#line 3389 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 190: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
+#line 627 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3388 "engines/director/lingo/lingo-gr.cpp"
+#line 3396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+  case 191: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3395 "engines/director/lingo/lingo-gr.cpp"
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* chunk: tWORD simpleexpr tOF simpleexpr  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 192: /* chunk: tWORD simpleexpr tOF simpleexpr  */
+#line 631 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3402 "engines/director/lingo/lingo-gr.cpp"
+#line 3410 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 193: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3409 "engines/director/lingo/lingo-gr.cpp"
+#line 3417 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* chunk: tITEM simpleexpr tOF simpleexpr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 194: /* chunk: tITEM simpleexpr tOF simpleexpr  */
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3416 "engines/director/lingo/lingo-gr.cpp"
+#line 3424 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 195: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 637 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3423 "engines/director/lingo/lingo-gr.cpp"
+#line 3431 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* chunk: tLINE simpleexpr tOF simpleexpr  */
-#line 636 "engines/director/lingo/lingo-gr.y"
+  case 196: /* chunk: tLINE simpleexpr tOF simpleexpr  */
+#line 639 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3430 "engines/director/lingo/lingo-gr.cpp"
+#line 3438 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+  case 197: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3437 "engines/director/lingo/lingo-gr.cpp"
+#line 3445 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* object: tSCRIPT simpleexpr  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 198: /* object: tSCRIPT simpleexpr  */
+#line 645 "engines/director/lingo/lingo-gr.y"
                                         {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3446 "engines/director/lingo/lingo-gr.cpp"
+#line 3454 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* object: tWINDOW simpleexpr  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 199: /* object: tWINDOW simpleexpr  */
+#line 649 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3455 "engines/director/lingo/lingo-gr.cpp"
+#line 3463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 655 "engines/director/lingo/lingo-gr.y"
+  case 203: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 658 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3461 "engines/director/lingo/lingo-gr.cpp"
+#line 3469 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 206: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 663 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3467 "engines/director/lingo/lingo-gr.cpp"
+#line 3475 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 204: /* theobj: tSOUND simpleexpr  */
-#line 661 "engines/director/lingo/lingo-gr.y"
+  case 207: /* theobj: tSOUND simpleexpr  */
+#line 664 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3473 "engines/director/lingo/lingo-gr.cpp"
+#line 3481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 205: /* theobj: tSPRITE simpleexpr  */
-#line 662 "engines/director/lingo/lingo-gr.y"
+  case 208: /* theobj: tSPRITE simpleexpr  */
+#line 665 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3479 "engines/director/lingo/lingo-gr.cpp"
+#line 3487 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 206: /* menu: tMENU simpleexpr  */
-#line 665 "engines/director/lingo/lingo-gr.y"
+  case 209: /* menu: tMENU simpleexpr  */
+#line 668 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3485 "engines/director/lingo/lingo-gr.cpp"
+#line 3493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 207: /* writablethe: tTHE ID  */
-#line 667 "engines/director/lingo/lingo-gr.y"
+  case 210: /* writablethe: tTHE ID  */
+#line 670 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3491 "engines/director/lingo/lingo-gr.cpp"
+#line 3499 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* writablethe: tTHE ID tOF theobj  */
-#line 668 "engines/director/lingo/lingo-gr.y"
+  case 211: /* writablethe: tTHE ID tOF theobj  */
+#line 671 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3497 "engines/director/lingo/lingo-gr.cpp"
+#line 3505 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 669 "engines/director/lingo/lingo-gr.y"
+  case 212: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 672 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3503 "engines/director/lingo/lingo-gr.cpp"
+#line 3511 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 213: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 675 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3509 "engines/director/lingo/lingo-gr.cpp"
+#line 3517 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 673 "engines/director/lingo/lingo-gr.y"
+  case 214: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3515 "engines/director/lingo/lingo-gr.cpp"
+#line 3523 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* thedatetime: tTHE tABBREV tDATE  */
-#line 674 "engines/director/lingo/lingo-gr.y"
+  case 215: /* thedatetime: tTHE tABBREV tDATE  */
+#line 677 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3521 "engines/director/lingo/lingo-gr.cpp"
+#line 3529 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 213: /* thedatetime: tTHE tABBREV tTIME  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 216: /* thedatetime: tTHE tABBREV tTIME  */
+#line 678 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3527 "engines/director/lingo/lingo-gr.cpp"
+#line 3535 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* thedatetime: tTHE tABBR tDATE  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 217: /* thedatetime: tTHE tABBR tDATE  */
+#line 679 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3533 "engines/director/lingo/lingo-gr.cpp"
+#line 3541 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* thedatetime: tTHE tABBR tTIME  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+  case 218: /* thedatetime: tTHE tABBR tTIME  */
+#line 680 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3539 "engines/director/lingo/lingo-gr.cpp"
+#line 3547 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* thedatetime: tTHE tLONG tDATE  */
-#line 678 "engines/director/lingo/lingo-gr.y"
+  case 219: /* thedatetime: tTHE tLONG tDATE  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3545 "engines/director/lingo/lingo-gr.cpp"
+#line 3553 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* thedatetime: tTHE tLONG tTIME  */
-#line 679 "engines/director/lingo/lingo-gr.y"
+  case 220: /* thedatetime: tTHE tLONG tTIME  */
+#line 682 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3551 "engines/director/lingo/lingo-gr.cpp"
+#line 3559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* thedatetime: tTHE tSHORT tDATE  */
-#line 680 "engines/director/lingo/lingo-gr.y"
+  case 221: /* thedatetime: tTHE tSHORT tDATE  */
+#line 683 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3557 "engines/director/lingo/lingo-gr.cpp"
+#line 3565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* thedatetime: tTHE tSHORT tTIME  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 222: /* thedatetime: tTHE tSHORT tTIME  */
+#line 684 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3563 "engines/director/lingo/lingo-gr.cpp"
+#line 3571 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 685 "engines/director/lingo/lingo-gr.y"
+  case 223: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 688 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3569 "engines/director/lingo/lingo-gr.cpp"
+#line 3577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 221: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 686 "engines/director/lingo/lingo-gr.y"
+  case 224: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 689 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3575 "engines/director/lingo/lingo-gr.cpp"
+#line 3583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 687 "engines/director/lingo/lingo-gr.y"
+  case 225: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 690 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3581 "engines/director/lingo/lingo-gr.cpp"
+#line 3589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 688 "engines/director/lingo/lingo-gr.y"
+  case 226: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 691 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3587 "engines/director/lingo/lingo-gr.cpp"
+#line 3595 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 689 "engines/director/lingo/lingo-gr.y"
+  case 227: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 692 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3593 "engines/director/lingo/lingo-gr.cpp"
+#line 3601 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* chunktype: tCHAR  */
-#line 692 "engines/director/lingo/lingo-gr.y"
+  case 228: /* chunktype: tCHAR  */
+#line 695 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3599 "engines/director/lingo/lingo-gr.cpp"
+#line 3607 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* chunktype: tWORD  */
-#line 693 "engines/director/lingo/lingo-gr.y"
+  case 229: /* chunktype: tWORD  */
+#line 696 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3605 "engines/director/lingo/lingo-gr.cpp"
+#line 3613 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* chunktype: tITEM  */
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 230: /* chunktype: tITEM  */
+#line 697 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3611 "engines/director/lingo/lingo-gr.cpp"
+#line 3619 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* chunktype: tLINE  */
-#line 695 "engines/director/lingo/lingo-gr.y"
+  case 231: /* chunktype: tLINE  */
+#line 698 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3617 "engines/director/lingo/lingo-gr.cpp"
+#line 3625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* list: '[' exprlist ']'  */
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 234: /* list: '[' exprlist ']'  */
+#line 703 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3623 "engines/director/lingo/lingo-gr.cpp"
+#line 3631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 232: /* list: '[' ':' ']'  */
-#line 701 "engines/director/lingo/lingo-gr.y"
+  case 235: /* list: '[' ':' ']'  */
+#line 704 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3629 "engines/director/lingo/lingo-gr.cpp"
+#line 3637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 233: /* list: '[' proplist ']'  */
-#line 702 "engines/director/lingo/lingo-gr.y"
+  case 236: /* list: '[' proplist ']'  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3635 "engines/director/lingo/lingo-gr.cpp"
+#line 3643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 234: /* proplist: proppair  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 237: /* proplist: proppair  */
+#line 708 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3644 "engines/director/lingo/lingo-gr.cpp"
+#line 3652 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 235: /* proplist: proplist ',' proppair  */
-#line 709 "engines/director/lingo/lingo-gr.y"
+  case 238: /* proplist: proplist ',' proppair  */
+#line 712 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3652 "engines/director/lingo/lingo-gr.cpp"
+#line 3660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 236: /* proppair: tSYMBOL ':' expr  */
-#line 714 "engines/director/lingo/lingo-gr.y"
+  case 239: /* proppair: tSYMBOL ':' expr  */
+#line 717 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3658 "engines/director/lingo/lingo-gr.cpp"
+#line 3666 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* proppair: ID ':' expr  */
-#line 715 "engines/director/lingo/lingo-gr.y"
+  case 240: /* proppair: ID ':' expr  */
+#line 718 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3664 "engines/director/lingo/lingo-gr.cpp"
+#line 3672 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* proppair: tSTRING ':' expr  */
-#line 716 "engines/director/lingo/lingo-gr.y"
+  case 241: /* proppair: tSTRING ':' expr  */
+#line 719 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3670 "engines/director/lingo/lingo-gr.cpp"
+#line 3678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* unarymath: '+' simpleexpr  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 242: /* unarymath: '+' simpleexpr  */
+#line 722 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3676 "engines/director/lingo/lingo-gr.cpp"
+#line 3684 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* unarymath: '-' simpleexpr  */
-#line 720 "engines/director/lingo/lingo-gr.y"
+  case 243: /* unarymath: '-' simpleexpr  */
+#line 723 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3682 "engines/director/lingo/lingo-gr.cpp"
+#line 3690 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* expr: expr '+' expr  */
-#line 730 "engines/director/lingo/lingo-gr.y"
+  case 248: /* expr: expr '+' expr  */
+#line 733 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3688 "engines/director/lingo/lingo-gr.cpp"
+#line 3696 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* expr: expr '-' expr  */
-#line 731 "engines/director/lingo/lingo-gr.y"
+  case 249: /* expr: expr '-' expr  */
+#line 734 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3694 "engines/director/lingo/lingo-gr.cpp"
+#line 3702 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 247: /* expr: expr '*' expr  */
-#line 732 "engines/director/lingo/lingo-gr.y"
+  case 250: /* expr: expr '*' expr  */
+#line 735 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3700 "engines/director/lingo/lingo-gr.cpp"
+#line 3708 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* expr: expr '/' expr  */
-#line 733 "engines/director/lingo/lingo-gr.y"
+  case 251: /* expr: expr '/' expr  */
+#line 736 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3706 "engines/director/lingo/lingo-gr.cpp"
+#line 3714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 249: /* expr: expr tMOD expr  */
-#line 734 "engines/director/lingo/lingo-gr.y"
+  case 252: /* expr: expr tMOD expr  */
+#line 737 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3712 "engines/director/lingo/lingo-gr.cpp"
+#line 3720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 250: /* expr: expr '>' expr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 253: /* expr: expr '>' expr  */
+#line 738 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3718 "engines/director/lingo/lingo-gr.cpp"
+#line 3726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 251: /* expr: expr '<' expr  */
-#line 736 "engines/director/lingo/lingo-gr.y"
+  case 254: /* expr: expr '<' expr  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3724 "engines/director/lingo/lingo-gr.cpp"
+#line 3732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 252: /* expr: expr tEQ expr  */
-#line 737 "engines/director/lingo/lingo-gr.y"
+  case 255: /* expr: expr tEQ expr  */
+#line 740 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3730 "engines/director/lingo/lingo-gr.cpp"
+#line 3738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 253: /* expr: expr tNEQ expr  */
-#line 738 "engines/director/lingo/lingo-gr.y"
+  case 256: /* expr: expr tNEQ expr  */
+#line 741 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3736 "engines/director/lingo/lingo-gr.cpp"
+#line 3744 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 254: /* expr: expr tGE expr  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+  case 257: /* expr: expr tGE expr  */
+#line 742 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3742 "engines/director/lingo/lingo-gr.cpp"
+#line 3750 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 255: /* expr: expr tLE expr  */
-#line 740 "engines/director/lingo/lingo-gr.y"
+  case 258: /* expr: expr tLE expr  */
+#line 743 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3748 "engines/director/lingo/lingo-gr.cpp"
+#line 3756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 256: /* expr: expr tAND expr  */
-#line 741 "engines/director/lingo/lingo-gr.y"
+  case 259: /* expr: expr tAND expr  */
+#line 744 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3754 "engines/director/lingo/lingo-gr.cpp"
+#line 3762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* expr: expr tOR expr  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+  case 260: /* expr: expr tOR expr  */
+#line 745 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3760 "engines/director/lingo/lingo-gr.cpp"
+#line 3768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* expr: expr '&' expr  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 261: /* expr: expr '&' expr  */
+#line 746 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3766 "engines/director/lingo/lingo-gr.cpp"
+#line 3774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 259: /* expr: expr tCONCAT expr  */
-#line 744 "engines/director/lingo/lingo-gr.y"
+  case 262: /* expr: expr tCONCAT expr  */
+#line 747 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3772 "engines/director/lingo/lingo-gr.cpp"
+#line 3780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 260: /* expr: expr tCONTAINS expr  */
-#line 745 "engines/director/lingo/lingo-gr.y"
+  case 263: /* expr: expr tCONTAINS expr  */
+#line 748 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3778 "engines/director/lingo/lingo-gr.cpp"
+#line 3786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 261: /* expr: expr tSTARTS expr  */
-#line 746 "engines/director/lingo/lingo-gr.y"
+  case 264: /* expr: expr tSTARTS expr  */
+#line 749 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3784 "engines/director/lingo/lingo-gr.cpp"
+#line 3792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 264: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 755 "engines/director/lingo/lingo-gr.y"
+  case 267: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 758 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3790 "engines/director/lingo/lingo-gr.cpp"
+#line 3798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 265: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 756 "engines/director/lingo/lingo-gr.y"
+  case 268: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 759 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3796 "engines/director/lingo/lingo-gr.cpp"
+#line 3804 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 266: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 757 "engines/director/lingo/lingo-gr.y"
+  case 269: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 760 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3802 "engines/director/lingo/lingo-gr.cpp"
+#line 3810 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 267: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 758 "engines/director/lingo/lingo-gr.y"
+  case 270: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 761 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3808 "engines/director/lingo/lingo-gr.cpp"
+#line 3816 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 268: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 759 "engines/director/lingo/lingo-gr.y"
+  case 271: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 762 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3814 "engines/director/lingo/lingo-gr.cpp"
+#line 3822 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 269: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 760 "engines/director/lingo/lingo-gr.y"
+  case 272: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 763 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3820 "engines/director/lingo/lingo-gr.cpp"
+#line 3828 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 270: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 761 "engines/director/lingo/lingo-gr.y"
+  case 273: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 764 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3826 "engines/director/lingo/lingo-gr.cpp"
+#line 3834 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 271: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 762 "engines/director/lingo/lingo-gr.y"
+  case 274: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 765 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3832 "engines/director/lingo/lingo-gr.cpp"
+#line 3840 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 272: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 763 "engines/director/lingo/lingo-gr.y"
+  case 275: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 766 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3838 "engines/director/lingo/lingo-gr.cpp"
+#line 3846 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 273: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 764 "engines/director/lingo/lingo-gr.y"
+  case 276: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 767 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3844 "engines/director/lingo/lingo-gr.cpp"
+#line 3852 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 274: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 765 "engines/director/lingo/lingo-gr.y"
+  case 277: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 768 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3850 "engines/director/lingo/lingo-gr.cpp"
+#line 3858 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 275: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 766 "engines/director/lingo/lingo-gr.y"
+  case 278: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 769 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3856 "engines/director/lingo/lingo-gr.cpp"
+#line 3864 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 276: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 767 "engines/director/lingo/lingo-gr.y"
+  case 279: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 770 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3862 "engines/director/lingo/lingo-gr.cpp"
+#line 3870 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 277: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 768 "engines/director/lingo/lingo-gr.y"
+  case 280: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 771 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3868 "engines/director/lingo/lingo-gr.cpp"
+#line 3876 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 278: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 769 "engines/director/lingo/lingo-gr.y"
+  case 281: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 772 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3874 "engines/director/lingo/lingo-gr.cpp"
+#line 3882 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 279: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 770 "engines/director/lingo/lingo-gr.y"
+  case 282: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 773 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3880 "engines/director/lingo/lingo-gr.cpp"
+#line 3888 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 280: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 771 "engines/director/lingo/lingo-gr.y"
+  case 283: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 774 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3886 "engines/director/lingo/lingo-gr.cpp"
+#line 3894 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 281: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 774 "engines/director/lingo/lingo-gr.y"
+  case 284: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 777 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3892 "engines/director/lingo/lingo-gr.cpp"
+#line 3900 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 282: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 775 "engines/director/lingo/lingo-gr.y"
+  case 285: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 778 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3898 "engines/director/lingo/lingo-gr.cpp"
+#line 3906 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 283: /* exprlist: %empty  */
-#line 778 "engines/director/lingo/lingo-gr.y"
+  case 286: /* exprlist: %empty  */
+#line 781 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3904 "engines/director/lingo/lingo-gr.cpp"
+#line 3912 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 285: /* nonemptyexprlist: expr  */
-#line 782 "engines/director/lingo/lingo-gr.y"
+  case 288: /* nonemptyexprlist: expr  */
+#line 785 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3913 "engines/director/lingo/lingo-gr.cpp"
+#line 3921 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 286: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 786 "engines/director/lingo/lingo-gr.y"
+  case 289: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 789 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3921 "engines/director/lingo/lingo-gr.cpp"
+#line 3929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3925 "engines/director/lingo/lingo-gr.cpp"
+#line 3933 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4120,7 +4128,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 791 "engines/director/lingo/lingo-gr.y"
+#line 794 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 418697ffeb..2aa9156ed8 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -365,6 +365,7 @@ ID: CMDID
 
 idlist: /* empty */					{ $$ = new IDList; }
 	| nonemptyidlist
+	| nonemptyidlist ',' // allow trailing comma
 	;
 
 nonemptyidlist: ID[item]					{
@@ -416,25 +417,25 @@ proc: CMDID cmdargs '\n'				{ $$ = new CmdNode($CMDID, $cmdargs); }
 	| tASSERTERROR stmtoneliner			{ $$ = new AssertErrorNode($stmtoneliner); }
 	;
 
-cmdargs: /* empty */					{
+cmdargs: /* empty */									{
 		// This matches `cmd`
 		$$ = new NodeList; }
-	| expr								{
+	| expr trailingcomma								{
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back($expr);
 		$$ = args; }
-	| expr ',' nonemptyexprlist[args]	{
+	| expr ',' nonemptyexprlist[args] trailingcomma		{
 		// This matches `cmd args, ...)
 		$args->insert_at(0, $expr);
 		$$ = $args; }
-	| expr expr_nounarymath				{
+	| expr expr_nounarymath trailingcomma				{
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back($expr);
 		args->push_back($expr_nounarymath);
 		$$ = args; }
-	| expr expr_nounarymath ',' nonemptyexprlist[args] {
+	| expr expr_nounarymath ',' nonemptyexprlist[args] trailingcomma	{
 		// This matches `cmd arg arg, ...`
 		$args->insert_at(0, $expr_nounarymath);
 		$args->insert_at(0, $expr);
@@ -448,6 +449,8 @@ cmdargs: /* empty */					{
 		$$ = $args; }
 	;
 
+trailingcomma: /* empty */ | ',' ;
+
 frameargs:
 	// On the off chance that we encounter something like `play frame done`
 	// we will wrap the frame arg in a FrameNode. This has no purpose other than


Commit: 155db7d72c6b832679bf212662afcd9036762a87
    https://github.com/scummvm/scummvm/commit/155db7d72c6b832679bf212662afcd9036762a87
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Correctly populate _methodVars

Arguments were not added to _methodVars before.

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 9395b27ba3..04121f7f4b 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -353,9 +353,11 @@ void LingoCompiler::registerMethodVar(const Common::String &name, VarType type)
 		}
 		(*_methodVars)[name] = type;
 		if (type == kVarProperty || type == kVarInstance) {
-			_assemblyContext->_properties[name] = Datum();
+			if (!_assemblyContext->_properties.contains(name))
+				_assemblyContext->_properties[name] = Datum();
 		} else if (type == kVarGlobal) {
-			g_lingo->_globalvars[name] = Datum();
+			if (!g_lingo->_globalvars.contains(name))
+				g_lingo->_globalvars[name] = Datum();
 		}
 	}
 }
@@ -425,14 +427,15 @@ bool LingoCompiler::visitHandlerNode(HandlerNode *node) {
 	VarTypeHash *mainMethodVars = _methodVars;
 	_methodVars = new VarTypeHash;
 
+	for (uint i = 0; i < node->args->size(); i++) {
+		registerMethodVar(*(*node->args)[i], kVarArgument);
+	}
 	for (VarTypeHash::iterator i = mainMethodVars->begin(); i != mainMethodVars->end(); ++i) {
-		if (i->_value == kVarGlobal || i->_value == kVarProperty)
-			(*_methodVars)[i->_key] = i->_value;
+		if (i->_value == kVarGlobal)
+			registerMethodVar(i->_key, kVarGlobal);
 	}
-	if (_inFactory) {
-		for (DatumHash::iterator i = _assemblyContext->_properties.begin(); i != _assemblyContext->_properties.end(); ++i) {
-			(*_methodVars)[i->_key] = kVarInstance;
-		}
+	for (DatumHash::iterator i = _assemblyContext->_properties.begin(); i != _assemblyContext->_properties.end(); ++i) {
+		registerMethodVar(i->_key, _inFactory ? kVarInstance : kVarProperty);
 	}
 
 	COMPILE_LIST(node->stmts);


Commit: 478f74de3e168e11e35f2d812ed254266bae6cf3
    https://github.com/scummvm/scummvm/commit/478f74de3e168e11e35f2d812ed254266bae6cf3
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Reimplement factory calls

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 827fb41bf3..2b590e6ccd 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1422,7 +1422,7 @@ void LC::call(const Common::String &name, int nargs, bool allowRetVal) {
 		Datum firstArg = g_lingo->_stack[g_lingo->_stack.size() - nargs];
 
 		// Factory/XObject method call
-		if (firstArg.type == VARREF) { // first arg could be method name
+		if (firstArg.isVarRef()) { // first arg could be method name
 			Datum objName(name);
 			objName.type = VARREF;
 			Datum obj = g_lingo->varFetch(objName, nullptr, true);
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 04121f7f4b..dacde82dd5 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -427,6 +427,9 @@ bool LingoCompiler::visitHandlerNode(HandlerNode *node) {
 	VarTypeHash *mainMethodVars = _methodVars;
 	_methodVars = new VarTypeHash;
 
+	if (_inFactory) {
+		registerMethodVar("me", kVarArgument);
+	}
 	for (uint i = 0; i < node->args->size(); i++) {
 		registerMethodVar(*(*node->args)[i], kVarArgument);
 	}
@@ -445,6 +448,9 @@ bool LingoCompiler::visitHandlerNode(HandlerNode *node) {
 		debug("define handler \"%s\" (len: %d)", node->name->c_str(), _currentAssembly->size() - 1);
 
 	Common::Array<Common::String> *argNames = new Common::Array<Common::String>;
+	if (_inFactory) {
+		argNames->push_back("me");
+	}
 	for (uint i = 0; i < node->args->size(); i++) {
 		argNames->push_back(Common::String((*node->args)[i]->c_str()));
 	}
@@ -538,7 +544,15 @@ bool LingoCompiler::visitCmdNode(CmdNode *node) {
 		return true;
 	}
 
-	COMPILE_LIST(node->args);
+	if (node->args->size() >= 1 && (*node->args)[0]->type == kVarNode) {
+		// This could be a method call. Code the first arg as a reference.
+		COMPILE_REF((*node->args)[0]);
+		for (uint i = 1; i < node->args->size(); i++) {
+			COMPILE((*node->args)[i]);
+		}
+	} else {
+		COMPILE_LIST(node->args);
+	}
 	codeCmd(*node->name, node->args->size());
 	return true;
 }
@@ -1023,7 +1037,15 @@ bool LingoCompiler::visitPropPairNode(PropPairNode *node) {
 /* FuncNode */
 
 bool LingoCompiler::visitFuncNode(FuncNode *node) {
-	COMPILE_LIST(node->args);
+	if (node->args->size() >= 1 && (*node->args)[0]->type == kVarNode) {
+		// This could be a method call. Code the first arg as a reference.
+		COMPILE_REF((*node->args)[0]);
+		for (uint i = 1; i < node->args->size(); i++) {
+			COMPILE((*node->args)[i]);
+		}
+	} else {
+		COMPILE_LIST(node->args);
+	}
 	codeFunc(*node->name, node->args->size());
 	return true;
 }


Commit: 9c5c8cbb1d8359fcf1df194f279a6b55e809309c
    https://github.com/scummvm/scummvm/commit/9c5c8cbb1d8359fcf1df194f279a6b55e809309c
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Remove buildbot warnings for undefined var

I kept a regular warning for codeVarGet, but I don't think this is worth
a buildbot failure.

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index dacde82dd5..144c500f8e 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -295,8 +295,6 @@ void LingoCompiler::codeVarRef(const Common::String &name) {
 	if (_methodVars->contains(name)) {
 		type = (*_methodVars)[name];
 	} else {
-		if (_indef)
-			warning("BUILDBOT: LingoCompiler::codeVarRef: var %s referenced before definition", name.c_str());
 		type = kVarGeneric;
 	}
 	switch (type) {
@@ -324,7 +322,7 @@ void LingoCompiler::codeVarGet(const Common::String &name) {
 		type = (*_methodVars)[name];
 	} else {
 		if (_indef)
-			warning("BUILDBOT: LingoCompiler::codeVarGet: var %s referenced before definition", name.c_str());
+			warning("LingoCompiler::codeVarGet: var %s referenced before definition", name.c_str());
 		type = kVarGeneric;
 	}
 	switch (type) {


Commit: 7d543f5750a899779cc1af2f63c03c18e0b63cd0
    https://github.com/scummvm/scummvm/commit/7d543f5750a899779cc1af2f63c03c18e0b63cd0
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix factory redefinition warning

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 144c500f8e..ca8774c5e0 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -365,7 +365,7 @@ void LingoCompiler::registerFactory(Common::String &name) {
 	// but bytecode needs it to resolve names
 	_assemblyContext->setName(name);
 	_assemblyContext->setFactory(true);
-	if (!g_lingo->_globalvars.contains(name)) {
+	if (!g_lingo->_globalvars.contains(name) || g_lingo->_globalvars[name].type == VOID) {
 		g_lingo->_globalvars[name] = _assemblyContext;
 	} else {
 		warning("BUILDBOT: Factory '%s' already defined", name.c_str());


Commit: 509b34579fa30ce9cb4b32fcfda3526fc7dbcc27
    https://github.com/scummvm/scummvm/commit/509b34579fa30ce9cb4b32fcfda3526fc7dbcc27
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Change chunk ref args to exprs

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 29981b6045..3f6327ff6f 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -639,7 +639,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  177
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3495
+#define YYLAST   3746
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
@@ -817,58 +817,58 @@ static const yytype_int16 yytoknum[] =
 static const yytype_int16 yypact[] =
 {
     2303,  -465,  -465,  -465,  -465,  -465,  -465,   -18,  -465,  2873,
-    1436,  1533,  -465,  -465,  2873,  -465,    38,  -465,  -465,  1630,
+    1436,  1533,  -465,  -465,  2873,  -465,    20,  -465,  -465,  1630,
      -11,  2952,  -465,  2873,  -465,  -465,  2873,  1630,  1436,  2873,
     -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
     -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
     -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  1533,  2873,  2873,   -38,  3267,  -465,    82,
+    -465,  -465,  -465,  1533,  2873,  2873,   -19,  3267,  -465,    69,
     2303,  -465,  -465,  -465,  -465,  1630,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,     1,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,   -13,  -465,  -465,
     -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
     -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,    37,    -8,  -465,  -465,  -465,  -465,  1727,
-    1727,  1727,  1727,  1533,  1533,  1727,  1727,  1727,  1727,  1727,
-    3031,  1533,  1727,  1727,  1339,   755,    49,    53,    58,  -465,
+    -465,  -465,  -465,     1,   -16,  -465,  -465,  -465,  -465,  1727,
+    1727,  1727,  1727,  1533,  1533,  1727,  1533,  1533,  1533,  1533,
+    3031,  1533,  1727,  1727,  1339,   755,    -9,    23,    25,  -465,
     -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-     854,  -465,  1533,   166,  2873,    60,    61,   951,  2873,  1533,
-    3110,  -465,  -465,   -14,  -465,    92,    62,    63,  1048,    76,
-      77,    78,    19,    81,  2873,  -465,  -465,  -465,  -465,    88,
-    1145,  -465,  -465,  2873,  -465,  -465,  -465,  -465,  1242,  3346,
-    -465,     8,    26,    50,    87,   -48,   -32,   -31,   -29,   -28,
-     111,   126,   164,  3333,  -465,  -465,  -465,   482,    90,    91,
-      95,   -76,    28,  -465,  3346,    98,   103,  1533,  -465,  -465,
-     170,  1533,  1533,  1533,  1533,  2018,  2018,  2212,  1533,  2115,
+     854,  -465,  1533,   229,  2873,    28,    29,   951,  2873,  1533,
+    3110,  -465,  -465,   -14,  -465,   100,    37,    40,  1048,    41,
+      53,    55,  3316,    57,  2873,  -465,  -465,  -465,  -465,    60,
+    1145,  -465,  -465,  2873,  -465,  -465,  -465,  -465,  1242,  3597,
+    -465,    19,   443,   527,   549,   -48,   -32,   -31,   -28,   -27,
+     113,   130,   131,  3584,  -465,  -465,  -465,  3329,    68,    72,
+      58,   -76,   -62,  -465,  3597,    71,    81,  1533,  -465,  -465,
+     155,  1533,  1533,  1533,  1533,  2018,  2018,  2212,  1533,  2115,
     2115,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  -465,
-    -465,   229,  -465,   506,  2383,  1533,  1533,  1533,  1533,  1533,
-     106,  -465,  -465,  3189,  3189,  3189,   -15,   411,   176,  -465,
+    -465,  3401,  -465,  3342,  2383,  1533,  1533,  1533,  1533,  1533,
+      85,  -465,  -465,  3189,  3189,  3189,   -15,  3414,   156,  -465,
     -465,  1533,  1533,   -66,  -465,  1533,  -465,  -465,  -465,  3267,
-    2463,  -465,   109,  -465,  -465,   191,  3400,  1727,  1727,  1727,
-    1727,  1727,  1727,  1727,  1727,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,    94,
+    2463,  -465,    86,  -465,  -465,   159,  3651,  1727,  1533,  1727,
+    1533,  1727,  1533,  1727,  1533,  -465,  -465,  -465,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,    27,
     1824,  1921,  1727,  1727,  1533,  -465,  1533,  1533,  -465,  1533,
-    2794,  -465,  -465,  1533,   121,  1533,    -6,    -6,    -6,    -6,
+    2794,  -465,  -465,  1533,    89,  1533,    -6,    -6,    -6,    -6,
       51,    51,  -465,    70,    -6,    -6,    -6,    -6,    70,     7,
-       7,  -465,  -465,   124,  1533,  1533,  1533,  1533,  1533,  1533,
+       7,  -465,  -465,    96,  1533,  1533,  1533,  1533,  1533,  1533,
     1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,
-    1533,  1533,  -465,  2703,   208,  2463,  -465,   139,  -465,   141,
-     142,  1533,  1533,  2463,  1921,   575,  3346,  2873,  -465,  -465,
-    -465,   -66,  -465,   588,  -465,  -465,  -465,   153,  2463,  -465,
-    2463,  1533,  -465,   213,  -465,   214,  -465,   215,  -465,   221,
-    -465,  -465,  1727,    94,    94,    94,    94,  1727,  1727,    94,
-    1727,  1727,  -465,  -465,  -465,  -465,  -465,  -465,    20,  3346,
-    3346,  3346,    90,    91,   148,  -465,  3346,  -465,  3346,  1533,
+    1533,  1533,  -465,  2703,   180,  2463,  -465,   103,  -465,   104,
+     106,  1533,  1533,  2463,  1921,  3427,  3597,  2873,  -465,  -465,
+    -465,   -66,  -465,  3483,  -465,  -465,  -465,   110,  2463,  -465,
+    2463,  1533,  -465,   411,  -465,   603,  -465,   623,  -465,   657,
+    -465,  -465,  1727,    27,    27,    27,    27,  1727,  1727,    27,
+    1727,  1727,  -465,  -465,  -465,  -465,  -465,  -465,   -46,  3597,
+    3597,  3597,    68,    72,   101,  -465,  3597,  -465,  3597,  1533,
     -465,    -6,    -6,    -6,    -6,    51,    51,  -465,    70,    -6,
-      -6,    -6,    -6,    70,     7,     7,  -465,  -465,   124,  -465,
-    -465,    -4,  2703,  -465,  2543,  -465,  -465,  -465,  -465,   603,
-     137,   167,  -465,  2873,  -465,  -465,   155,  -465,   244,  3346,
+      -6,    -6,    -6,    70,     7,     7,  -465,  -465,    96,  -465,
+    -465,    -4,  2703,  -465,  2543,  -465,  -465,  -465,  -465,  3496,
+     165,   120,  -465,  2873,  -465,  -465,   118,  -465,   211,  3597,
     1727,  1727,  1727,  1727,  -465,  1727,  1727,  1727,  1727,  -465,
-     234,   192,  -465,  -465,  -465,  -465,  2623,   168,  -465,  2703,
-    -465,  2463,   230,  1533,   169,   171,  -465,  2873,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,   196,  1727,  -465,  2703,
-    -465,  -465,   194,   198,  1533,   659,  -465,  2463,     9,  -465,
-    1727,   195,   180,   205,  3314,  2463,  -465,  -465,  2873,  -465,
-     207,  -465,  -465,  2463,   219,  -465,  -465,   220,   210,   211,
+     194,   153,  -465,  -465,  -465,  -465,  2623,   128,  -465,  2703,
+    -465,  2463,   192,  1533,   132,   133,  -465,  2873,  -465,  -465,
+    -465,  -465,  -465,  -465,  -465,  -465,   157,  1727,  -465,  2703,
+    -465,  -465,   142,   146,  1533,  3509,  -465,  2463,   -38,  -465,
+    1727,   151,   140,   141,  3565,  2463,  -465,  -465,  2873,  -465,
+     143,  -465,  -465,  2463,   163,  -465,  -465,   166,   144,   145,
     -465,  -465
 };
 
@@ -936,12 +936,12 @@ static const yytype_int16 yydefact[] =
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -465,  -465,  -465,   245,  -465,  -465,  -465,  -465,  -465,   -57,
+    -465,  -465,  -465,   169,  -465,  -465,  -465,  -465,  -465,  -126,
     -465,  -465,     0,    -7,   -25,  -465,     6,  -343,   -64,  -465,
-       5,  -236,   288,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -346,  -465,   -61,  -464,  -465,  -112,    57,   -20,  -117,
-    -465,  -122,  -465,  -465,    30,  -139,   312,  -465,  -465,  -465,
-    -344,  -465,  -465,    24,  -465,   262,    64,   149,   178,   119,
+       5,  -236,   225,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
+    -465,  -346,  -465,  -117,  -464,  -465,  -179,    -2,   -20,  -148,
+    -465,  -123,  -465,  -465,   -37,  -206,   245,  -465,  -465,  -465,
+    -278,  -465,  -465,   -43,  -465,   262,    64,    80,    63,    62,
     -227
 };
 
@@ -965,79 +965,79 @@ static const yytype_int16 yytable[] =
       75,   162,   112,   176,   171,   352,    76,   154,   361,   445,
      440,   333,   476,    87,   161,   502,   165,   451,   367,   166,
      259,   285,   112,   217,   156,   158,   159,   309,   286,   362,
-     260,   368,   167,   169,   458,   511,   277,   287,   289,   173,
-     291,   293,   278,   247,   288,   290,   228,   292,   294,   465,
-     466,   467,   468,   269,   279,   471,   247,   112,   174,   175,
-     280,   221,   222,   223,   224,   245,   246,    75,   247,   155,
-      75,   228,   248,   249,   150,   153,    76,   408,   281,    88,
-     179,   477,   177,   157,   282,   233,   234,   235,   236,   237,
-     183,   168,   150,   221,   222,   223,   224,   420,   181,   440,
-     247,   236,   237,   228,   248,   249,   517,   518,   231,   232,
-     233,   234,   235,   236,   237,   283,   270,   390,   313,   247,
-     474,   284,   391,   202,   438,   262,   310,   172,   211,   250,
-     311,   358,   358,   358,   182,   503,   440,   359,   360,   180,
-     231,   232,   233,   234,   235,   236,   237,   112,   217,   272,
-     218,   256,   482,   202,   300,   219,   440,   251,   252,   263,
-     264,   516,   234,   235,   236,   237,   295,   112,   296,   524,
-     297,   483,   298,   266,   267,   268,   274,   527,   271,   221,
-     222,   223,   224,   245,   246,   273,   247,   188,   189,   228,
-     248,   249,   301,   306,   307,   203,   315,   308,   207,   244,
-     312,   313,   475,   355,   364,   374,   380,   240,   221,   222,
-     223,   224,   245,   246,   240,   247,   243,   381,   228,   248,
-     249,   417,   419,   257,   444,   240,   231,   232,   233,   234,
-     235,   236,   237,   356,   356,   356,   446,   240,   447,   448,
-     456,   460,   461,   462,    75,   240,   161,   161,   161,   463,
-     354,   309,   486,   484,   487,   231,   232,   233,   234,   235,
-     236,   237,   496,   497,   504,   501,   506,   510,   507,    75,
-      75,   334,   335,   336,   337,   338,   339,   521,   340,   512,
-     520,   341,   342,   343,   513,   316,   317,   318,   319,   320,
+     260,   368,   167,   169,   458,   511,   310,   287,   289,   173,
+     311,   291,   293,   247,   288,   290,   228,   277,   292,   294,
+     390,   155,   313,   278,   474,   391,   247,   112,   174,   517,
+     518,   221,   222,   223,   224,   245,   246,    75,   247,   177,
+      75,   228,   248,   249,   150,   153,    76,   408,   175,    88,
+     179,   477,   183,   157,   181,   233,   234,   235,   236,   237,
+     217,   168,   150,   221,   222,   223,   224,   420,   182,   440,
+     247,   236,   237,   228,   248,   249,   359,   360,   231,   232,
+     233,   234,   235,   236,   237,   465,   466,   467,   468,   247,
+     218,   471,   219,   202,   438,   251,   252,   172,   211,   250,
+     358,   358,   358,   262,   263,   503,   440,   264,   266,   180,
+     231,   232,   233,   234,   235,   236,   237,   112,   240,   272,
+     267,   256,   268,   202,   271,   240,   440,   273,   300,   301,
+     308,   516,   234,   235,   236,   237,   240,   112,   295,   524,
+     296,   306,   297,   312,   298,   307,   274,   527,   240,   313,
+     482,   315,   355,   380,   364,   381,   240,   188,   189,   417,
+     191,   192,   193,   194,   419,   203,   444,   456,   207,   483,
+     446,   447,   475,   448,   309,   374,   484,   221,   222,   223,
+     224,   245,   246,   242,   247,   486,   243,   228,   248,   249,
+     242,   487,   496,   257,   497,   501,   504,   512,   510,   506,
+     507,   242,   513,   356,   356,   356,   520,   521,   522,   178,
+     526,   530,   531,   242,    75,   454,   161,   161,   161,   528,
+     354,   242,   529,   170,   231,   232,   233,   234,   235,   236,
+     237,   457,   244,   478,   405,   498,   164,   415,   276,    75,
+      75,   221,   222,   223,   224,   245,   246,     0,   247,   314,
+       0,   228,   248,   249,     0,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   522,   414,   526,   528,   529,   530,   531,   320,
-     321,   322,   324,   325,   454,   178,   170,   457,   344,   345,
-     346,   347,   348,   349,   350,   365,   366,   351,   242,   373,
-     478,   405,   498,   164,   415,   242,   314,   276,     0,     0,
-       0,     0,     0,     0,     0,     0,   242,     0,     0,     0,
-       0,     0,     0,    75,     0,    75,     0,     0,   242,     0,
-     453,     0,     0,    75,     0,     0,   242,     0,     0,     0,
+     331,   332,     0,   414,     0,     0,     0,     0,     0,   320,
+     321,   322,   324,   325,     0,     0,     0,     0,   231,   232,
+     233,   234,   235,   236,   237,   365,   366,     0,     0,   373,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   383,     0,   385,     0,   387,     0,   389,     0,
+       0,     0,     0,    75,     0,    75,     0,     0,     0,     0,
+     453,     0,     0,    75,     0,     0,     0,     0,     0,     0,
      409,   410,     0,   411,     0,     0,     0,   416,    75,   418,
-      75,   184,   185,   186,   187,     0,     0,   190,   191,   192,
-     193,   194,     0,     0,   204,   205,     0,     0,   421,   422,
+      75,   184,   185,   186,   187,     0,     0,   190,     0,     0,
+       0,     0,     0,     0,   204,   205,     0,     0,   421,   422,
      423,   424,   425,   426,   427,   428,   429,   430,   431,   432,
      433,   434,   435,   436,   437,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   449,   450,     0,   485,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   460,
        0,     0,    75,     0,    75,   459,   112,     0,     0,     0,
      480,     0,     0,   221,   222,   223,   224,   245,   246,     0,
      247,     0,     0,   228,   248,   249,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    75,     0,     0,    75,
-     509,    75,   500,   416,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    75,
-     231,   232,   233,   234,   235,   236,   237,    75,   363,     0,
+       0,   279,     0,     0,     0,     0,    75,   280,     0,    75,
+     509,    75,   500,   416,     0,   221,   222,   223,   224,   245,
+     246,     0,   247,     0,     0,   228,   248,   249,     0,    75,
+     231,   232,   233,   234,   235,   236,   237,    75,     0,     0,
        0,   525,     0,     0,     0,    75,     0,     0,     0,     0,
-       0,     0,     0,    75,   221,   222,   223,   224,   245,   246,
-       0,   247,     0,     0,   228,   248,   249,     0,     0,   382,
-     383,   384,   385,   386,   387,   388,   389,   505,   221,   222,
-     223,   224,   245,   246,     0,   247,     0,     0,   228,   248,
-     249,     0,   404,   404,   406,   407,     0,     0,   514,     0,
-       0,   231,   232,   233,   234,   235,   236,   237,     0,     0,
-     304,     0,   305,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   231,   232,   233,   234,   235,
-     236,   237,     0,     0,     0,     0,   305,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   221,   222,   223,
-     224,   245,   246,     0,   247,     0,   404,   228,   248,   249,
-     221,   222,   223,   224,   245,   246,     0,   247,     0,     0,
-     228,   248,   249,     0,     0,   221,   222,   223,   224,   245,
-     246,     0,   247,     0,   464,   228,   248,   249,     0,   469,
-     470,     0,   472,   473,   231,   232,   233,   234,   235,   236,
-     237,     0,   452,     0,     0,     0,     0,   231,   232,   233,
-     234,   235,   236,   237,     0,   455,     0,     0,     0,     0,
-       0,     0,   231,   232,   233,   234,   235,   236,   237,     0,
-     481,   221,   222,   223,   224,   245,   246,     0,   247,     0,
+       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
+       0,     0,   231,   232,   233,   234,   235,   236,   237,   382,
+       0,   384,     0,   386,     0,   388,     0,   505,     0,     0,
+       0,     0,     0,     0,     0,   281,     0,     0,     0,     0,
+       0,   282,   404,   404,   406,   407,     0,     0,   514,   221,
+     222,   223,   224,   245,   246,     0,   247,   283,     0,   228,
+     248,   249,     0,   284,     0,     0,     0,     0,     0,     0,
+       0,   221,   222,   223,   224,   245,   246,     0,   247,     0,
        0,   228,   248,   249,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   231,   232,   233,   234,
+     235,   236,   237,     0,     0,     0,   404,     0,     0,     0,
+       0,   461,     0,     0,     0,     0,     0,     0,   231,   232,
+     233,   234,   235,   236,   237,   221,   222,   223,   224,   245,
+     246,   462,   247,     0,   464,   228,   248,   249,     0,   469,
+     470,     0,   472,   473,     0,   221,   222,   223,   224,   245,
+     246,     0,   247,     0,     0,   228,   248,   249,     0,     0,
+       0,     0,     0,     0,     0,   463,     0,     0,     0,     0,
+       0,     0,   231,   232,   233,   234,   235,   236,   237,   221,
+     222,   223,   224,   245,   246,     0,   247,     0,     0,   228,
+     248,   249,   231,   232,   233,   234,   235,   236,   237,     0,
        0,     0,   488,   489,   490,   491,     0,   492,   493,   494,
      495,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   231,   232,
-     233,   234,   235,   236,   237,     0,   515,     0,     0,   469,
+       0,     0,     0,     0,     0,     0,   231,   232,   233,   234,
+     235,   236,   237,     0,     0,     0,     0,     0,     0,   469,
      115,   116,     1,   208,   209,    89,   119,   120,   121,   122,
        6,    90,   519,    91,     8,    92,    93,    94,    12,    13,
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
@@ -1297,21 +1297,46 @@ static const yytype_int16 yytable[] =
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,   106,    64,
-       0,     0,     0,     0,     0,    67,   221,   222,   223,   224,
-     245,   246,     0,   247,     0,     0,   228,   248,   249,     0,
-       0,     0,     0,     0,     0,   221,   222,   223,   224,   245,
+     269,     0,     0,     0,     0,    67,     0,     0,   221,   222,
+     223,   224,   245,   246,     0,   247,     0,     0,   228,   248,
+     249,   221,   222,   223,   224,   245,   246,     0,   247,     0,
+       0,   228,   248,   249,   221,   222,   223,   224,   245,   246,
+       0,   247,     0,     0,   228,   248,   249,     0,     0,     0,
+       0,     0,     0,     0,     0,   231,   232,   233,   234,   235,
+     236,   237,     0,   270,     0,     0,     0,     0,   231,   232,
+     233,   234,   235,   236,   237,     0,     0,   304,     0,   305,
+       0,   231,   232,   233,   234,   235,   236,   237,     0,     0,
+       0,     0,   305,   334,   335,   336,   337,   338,   339,     0,
+     340,     0,     0,   341,   342,   343,   221,   222,   223,   224,
+     245,   246,     0,   247,     0,     0,   228,   248,   249,   221,
+     222,   223,   224,   245,   246,     0,   247,     0,     0,   228,
+     248,   249,     0,     0,     0,     0,     0,     0,     0,     0,
+     344,   345,   346,   347,   348,   349,   350,     0,     0,   351,
+       0,     0,     0,   231,   232,   233,   234,   235,   236,   237,
+       0,   363,     0,     0,     0,     0,   231,   232,   233,   234,
+     235,   236,   237,     0,   452,   221,   222,   223,   224,   245,
      246,     0,   247,     0,     0,   228,   248,   249,   221,   222,
      223,   224,   245,   246,     0,   247,     0,     0,   228,   248,
-     249,     0,     0,   231,   232,   233,   234,   235,   236,   237,
-       0,   523,   302,   303,     0,     0,     0,     0,     0,     0,
+     249,   221,   222,   223,   224,   245,   246,     0,   247,     0,
+       0,   228,   248,   249,     0,     0,     0,     0,     0,     0,
        0,     0,   231,   232,   233,   234,   235,   236,   237,     0,
-       0,     0,     0,     0,     0,   231,   232,   233,   234,   235,
-     236,   237,   334,   335,   336,   337,   338,   339,     0,   340,
-       0,     0,   341,   342,   343,     0,     0,     0,     0,     0,
+     455,     0,     0,     0,     0,   231,   232,   233,   234,   235,
+     236,   237,     0,   481,     0,     0,     0,     0,   231,   232,
+     233,   234,   235,   236,   237,     0,   515,   221,   222,   223,
+     224,   245,   246,     0,   247,     0,     0,   228,   248,   249,
+       0,     0,     0,     0,     0,     0,   221,   222,   223,   224,
+     245,   246,     0,   247,     0,     0,   228,   248,   249,   221,
+     222,   223,   224,   245,   246,     0,   247,     0,     0,   228,
+     248,   249,     0,     0,   231,   232,   233,   234,   235,   236,
+     237,     0,   523,   302,   303,     0,     0,     0,     0,     0,
+       0,     0,     0,   231,   232,   233,   234,   235,   236,   237,
+       0,     0,     0,     0,     0,     0,   231,   232,   233,   234,
+     235,   236,   237,   334,   335,   336,   337,   338,   339,     0,
+     340,     0,     0,   341,   342,   343,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   344,
-     345,   346,   347,   348,   349,   350
+     344,   345,   346,   347,   348,   349,   350
 };
 
 static const yytype_int16 yycheck[] =
@@ -1319,79 +1344,79 @@ static const yytype_int16 yycheck[] =
        0,    21,     9,    67,    29,   241,     0,    14,    23,   355,
      353,   238,    16,    31,    21,   479,    23,   363,    84,    26,
       34,    69,    29,    99,    19,    36,    37,   103,    76,    44,
-      44,    97,    27,    28,   380,   499,    28,    69,    69,    64,
-      69,    69,    34,    49,    76,    76,    52,    76,    76,   393,
-     394,   395,   396,    34,    28,   399,    49,    64,    65,    97,
-      34,    42,    43,    44,    45,    46,    47,    67,    49,    31,
-      70,    52,    53,    54,    10,    11,    70,   304,    28,    97,
-      75,    85,     0,    19,    34,    91,    92,    93,    94,    95,
-      98,    27,    28,    42,    43,    44,    45,   333,    97,   442,
-      49,    94,    95,    52,    53,    54,    97,    98,    89,    90,
-      91,    92,    93,    94,    95,    28,    97,    23,    98,    49,
-     100,    34,    28,   130,   351,    33,    98,    63,   135,   154,
-     102,   253,   254,   255,    97,   481,   479,   254,   255,    75,
-      89,    90,    91,    92,    93,    94,    95,   154,    99,   174,
-      97,   158,    15,   160,    28,    97,   499,    97,    97,    97,
-      97,   507,    92,    93,    94,    95,    55,   174,    57,   515,
-      59,    34,    61,    97,    97,    97,   183,   523,    97,    42,
-      43,    44,    45,    46,    47,    97,    49,   123,   124,    52,
-      53,    54,    28,   103,   103,   131,    26,   102,   134,    33,
-     102,    98,   438,    97,    28,   269,    97,   150,    42,    43,
-      44,    45,    46,    47,   157,    49,   152,    26,    52,    53,
-      54,   100,    98,   159,    16,   168,    89,    90,    91,    92,
-      93,    94,    95,   253,   254,   255,    97,   180,    97,    97,
-      87,    28,    28,    28,   244,   188,   253,   254,   255,    28,
-     244,   103,    97,    86,    10,    89,    90,    91,    92,    93,
-      94,    95,    28,    71,    34,    97,    97,    71,    97,   269,
-     270,    42,    43,    44,    45,    46,    47,    97,    49,    85,
-      85,    52,    53,    54,    86,   221,   222,   223,   224,   225,
+      44,    97,    27,    28,   380,   499,    98,    69,    69,    64,
+     102,    69,    69,    49,    76,    76,    52,    28,    76,    76,
+      23,    31,    98,    34,   100,    28,    49,    64,    65,    97,
+      98,    42,    43,    44,    45,    46,    47,    67,    49,     0,
+      70,    52,    53,    54,    10,    11,    70,   304,    97,    97,
+      75,    85,    98,    19,    97,    91,    92,    93,    94,    95,
+      99,    27,    28,    42,    43,    44,    45,   333,    97,   442,
+      49,    94,    95,    52,    53,    54,   254,   255,    89,    90,
+      91,    92,    93,    94,    95,   393,   394,   395,   396,    49,
+      97,   399,    97,   130,   351,    97,    97,    63,   135,   154,
+     253,   254,   255,    33,    97,   481,   479,    97,    97,    75,
+      89,    90,    91,    92,    93,    94,    95,   154,   150,   174,
+      97,   158,    97,   160,    97,   157,   499,    97,    28,    28,
+     102,   507,    92,    93,    94,    95,   168,   174,    55,   515,
+      57,   103,    59,   102,    61,   103,   183,   523,   180,    98,
+      15,    26,    97,    97,    28,    26,   188,   123,   124,   100,
+     126,   127,   128,   129,    98,   131,    16,    87,   134,    34,
+      97,    97,   438,    97,   103,   269,    86,    42,    43,    44,
+      45,    46,    47,   150,    49,    97,   152,    52,    53,    54,
+     157,    10,    28,   159,    71,    97,    34,    85,    71,    97,
+      97,   168,    86,   253,   254,   255,    85,    97,    97,    70,
+      97,    97,    97,   180,   244,   371,   253,   254,   255,    86,
+     244,   188,    86,    28,    89,    90,    91,    92,    93,    94,
+      95,   378,    33,   442,   301,   471,    21,   310,   188,   269,
+     270,    42,    43,    44,    45,    46,    47,    -1,    49,   217,
+      -1,    52,    53,    54,    -1,   221,   222,   223,   224,   225,
      226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,    97,   310,    97,    86,    86,    97,    97,   245,
-     246,   247,   248,   249,   371,    70,    28,   378,    89,    90,
-      91,    92,    93,    94,    95,   261,   262,    98,   150,   265,
-     442,   301,   471,    21,   310,   157,   217,   188,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   168,    -1,    -1,    -1,
-      -1,    -1,    -1,   353,    -1,   355,    -1,    -1,   180,    -1,
-     367,    -1,    -1,   363,    -1,    -1,   188,    -1,    -1,    -1,
+     236,   237,    -1,   310,    -1,    -1,    -1,    -1,    -1,   245,
+     246,   247,   248,   249,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,   261,   262,    -1,    -1,   265,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   278,    -1,   280,    -1,   282,    -1,   284,    -1,
+      -1,    -1,    -1,   353,    -1,   355,    -1,    -1,    -1,    -1,
+     367,    -1,    -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,
      306,   307,    -1,   309,    -1,    -1,    -1,   313,   378,   315,
-     380,   119,   120,   121,   122,    -1,    -1,   125,   126,   127,
-     128,   129,    -1,    -1,   132,   133,    -1,    -1,   334,   335,
+     380,   119,   120,   121,   122,    -1,    -1,   125,    -1,    -1,
+      -1,    -1,    -1,    -1,   132,   133,    -1,    -1,   334,   335,
      336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
      346,   347,   348,   349,   350,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   361,   362,    -1,   453,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
       -1,    -1,   442,    -1,   444,   381,   453,    -1,    -1,    -1,
      444,    -1,    -1,    42,    43,    44,    45,    46,    47,    -1,
       49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   476,    -1,    -1,   479,
-     487,   481,   476,   419,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   499,
-      89,    90,    91,    92,    93,    94,    95,   507,    97,    -1,
+      -1,    28,    -1,    -1,    -1,    -1,   476,    34,    -1,   479,
+     487,   481,   476,   419,    -1,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,   499,
+      89,    90,    91,    92,    93,    94,    95,   507,    -1,    -1,
       -1,   518,    -1,    -1,    -1,   515,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   523,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,   277,
-     278,   279,   280,   281,   282,   283,   284,   483,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,   300,   301,   302,   303,    -1,    -1,   504,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      98,    -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,   364,    52,    53,    54,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,   392,    52,    53,    54,    -1,   397,
-     398,    -1,   400,   401,    89,    90,    91,    92,    93,    94,
-      95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    -1,    -1,   523,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,   277,
+      -1,   279,    -1,   281,    -1,   283,    -1,   483,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,
+      -1,    34,   300,   301,   302,   303,    -1,    -1,   504,    42,
+      43,    44,    45,    46,    47,    -1,    49,    28,    -1,    52,
+      53,    54,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
       -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,   364,    -1,    -1,    -1,
+      -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    42,    43,    44,    45,    46,
+      47,    28,    49,    -1,   392,    52,    53,    54,    -1,   397,
+     398,    -1,   400,   401,    -1,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    89,    90,    91,    92,    93,    94,    95,    -1,
       -1,    -1,   460,   461,   462,   463,    -1,   465,   466,   467,
      468,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,   497,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,   497,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,   510,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -1651,21 +1676,46 @@ static const yytype_int16 yycheck[] =
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    -1,    -1,    88,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
-      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,
+      34,    -1,    -1,    -1,    -1,    88,    -1,    -1,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    98,    -1,   100,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      -1,    -1,   100,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    97,    42,    43,    44,    45,    46,
       47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
       44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    97,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,
+      54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    97,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    97,    79,    80,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95
+      89,    90,    91,    92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1691,7 +1741,7 @@ static const yytype_uint8 yystos[] =
       75,   117,   142,   144,   150,   117,   117,   124,   160,   124,
      126,   118,   160,   118,   117,    97,   122,     0,   107,   124,
      160,    97,    97,    98,   159,   159,   159,   159,   160,   160,
-     159,   159,   159,   159,   159,    63,    64,    65,    66,    67,
+     159,   160,   160,   160,   160,    63,    64,    65,    66,    67,
       70,    74,   117,   160,   159,   159,   100,   160,     8,     9,
      103,   117,   156,   157,   160,   163,   164,    99,    97,    97,
       28,    42,    43,    44,    45,    46,    47,    49,    52,    53,
@@ -1710,7 +1760,7 @@ static const yytype_uint8 yystos[] =
       95,    98,   125,    97,   120,    97,   142,   143,   145,   143,
      143,    23,    44,    97,    28,   160,   160,    84,    97,   110,
      111,   112,   113,   160,   122,    97,   120,   135,   136,   137,
-      97,    26,   159,   159,   159,   159,   159,   159,   159,   159,
+      97,    26,   159,   160,   159,   160,   159,   160,   159,   160,
       23,    28,   154,    56,    58,    60,    62,    71,    72,    73,
       77,    78,   148,   149,   159,   148,   159,   159,   164,   160,
      160,   160,     8,     9,   117,   157,   160,   100,   160,    98,
@@ -2067,37 +2117,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2071 "engines/director/lingo/lingo-gr.cpp"
+#line 2121 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2077 "engines/director/lingo/lingo-gr.cpp"
+#line 2127 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2083 "engines/director/lingo/lingo-gr.cpp"
+#line 2133 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2089 "engines/director/lingo/lingo-gr.cpp"
+#line 2139 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2095 "engines/director/lingo/lingo-gr.cpp"
+#line 2145 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2101 "engines/director/lingo/lingo-gr.cpp"
+#line 2151 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2365,7 +2415,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2369 "engines/director/lingo/lingo-gr.cpp"
+#line 2419 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2376,7 +2426,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2380 "engines/director/lingo/lingo-gr.cpp"
+#line 2430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2386,37 +2436,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2390 "engines/director/lingo/lingo-gr.cpp"
+#line 2440 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2396 "engines/director/lingo/lingo-gr.cpp"
+#line 2446 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2402 "engines/director/lingo/lingo-gr.cpp"
+#line 2452 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2408 "engines/director/lingo/lingo-gr.cpp"
+#line 2458 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2414 "engines/director/lingo/lingo-gr.cpp"
+#line 2464 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2420 "engines/director/lingo/lingo-gr.cpp"
+#line 2470 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2427,7 +2477,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2431 "engines/director/lingo/lingo-gr.cpp"
+#line 2481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
@@ -2437,13 +2487,13 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2491 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2447 "engines/director/lingo/lingo-gr.cpp"
+#line 2497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2452,446 +2502,446 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2456 "engines/director/lingo/lingo-gr.cpp"
+#line 2506 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2463 "engines/director/lingo/lingo-gr.cpp"
+#line 2513 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2469 "engines/director/lingo/lingo-gr.cpp"
+#line 2519 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2475 "engines/director/lingo/lingo-gr.cpp"
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2481 "engines/director/lingo/lingo-gr.cpp"
+#line 2531 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2487 "engines/director/lingo/lingo-gr.cpp"
+#line 2537 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2493 "engines/director/lingo/lingo-gr.cpp"
+#line 2543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2499 "engines/director/lingo/lingo-gr.cpp"
+#line 2549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2505 "engines/director/lingo/lingo-gr.cpp"
+#line 2555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2511 "engines/director/lingo/lingo-gr.cpp"
+#line 2561 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2517 "engines/director/lingo/lingo-gr.cpp"
+#line 2567 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2523 "engines/director/lingo/lingo-gr.cpp"
+#line 2573 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2529 "engines/director/lingo/lingo-gr.cpp"
+#line 2579 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2535 "engines/director/lingo/lingo-gr.cpp"
+#line 2585 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2541 "engines/director/lingo/lingo-gr.cpp"
+#line 2591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2547 "engines/director/lingo/lingo-gr.cpp"
+#line 2597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2553 "engines/director/lingo/lingo-gr.cpp"
+#line 2603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2559 "engines/director/lingo/lingo-gr.cpp"
+#line 2609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2565 "engines/director/lingo/lingo-gr.cpp"
+#line 2615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2571 "engines/director/lingo/lingo-gr.cpp"
+#line 2621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2577 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2583 "engines/director/lingo/lingo-gr.cpp"
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2589 "engines/director/lingo/lingo-gr.cpp"
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2595 "engines/director/lingo/lingo-gr.cpp"
+#line 2645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2601 "engines/director/lingo/lingo-gr.cpp"
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2607 "engines/director/lingo/lingo-gr.cpp"
+#line 2657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2613 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2619 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2625 "engines/director/lingo/lingo-gr.cpp"
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2637 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2643 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2655 "engines/director/lingo/lingo-gr.cpp"
+#line 2705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2667 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2673 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2685 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2691 "engines/director/lingo/lingo-gr.cpp"
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2697 "engines/director/lingo/lingo-gr.cpp"
+#line 2747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSET  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2703 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2709 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2715 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2721 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tSTARTS  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2727 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTELL  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2733 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTHE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2739 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tTIME  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2745 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tTO  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2751 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWHILE  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2757 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWINDOW  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2763 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWITH  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2769 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWITHIN  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2775 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* CMDID: tWORD  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2781 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* CMDID: tWORDS  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2787 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tELSE  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2793 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tENDCLAUSE  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2799 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tEXIT  */
 #line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2805 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tFACTORY  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2811 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tGLOBAL  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2817 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tGO  */
 #line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2823 "engines/director/lingo/lingo-gr.cpp"
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tIF  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2829 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tINSTANCE  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2835 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tMACRO  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2841 "engines/director/lingo/lingo-gr.cpp"
+#line 2891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tMETHOD  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 2897 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tON  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 2853 "engines/director/lingo/lingo-gr.cpp"
+#line 2903 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tOPEN  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2859 "engines/director/lingo/lingo-gr.cpp"
+#line 2909 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPLAY  */
 #line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2865 "engines/director/lingo/lingo-gr.cpp"
+#line 2915 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tPROPERTY  */
 #line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 2871 "engines/director/lingo/lingo-gr.cpp"
+#line 2921 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 2877 "engines/director/lingo/lingo-gr.cpp"
+#line 2927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
 #line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 2883 "engines/director/lingo/lingo-gr.cpp"
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
 #line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2889 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
 #line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2895 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: ID  */
@@ -2900,7 +2950,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2904 "engines/director/lingo/lingo-gr.cpp"
+#line 2954 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2908,55 +2958,55 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2912 "engines/director/lingo/lingo-gr.cpp"
+#line 2962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* stmt: tENDIF '\n'  */
 #line 386 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2918 "engines/director/lingo/lingo-gr.cpp"
+#line 2968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* proc: CMDID cmdargs '\n'  */
 #line 402 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2924 "engines/director/lingo/lingo-gr.cpp"
+#line 2974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* proc: tPUT cmdargs '\n'  */
 #line 403 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2930 "engines/director/lingo/lingo-gr.cpp"
+#line 2980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* proc: tGO cmdargs '\n'  */
 #line 404 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2936 "engines/director/lingo/lingo-gr.cpp"
+#line 2986 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* proc: tGO frameargs '\n'  */
 #line 405 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+#line 2992 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* proc: tPLAY cmdargs '\n'  */
 #line 406 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2948 "engines/director/lingo/lingo-gr.cpp"
+#line 2998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* proc: tPLAY frameargs '\n'  */
 #line 407 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 3004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* proc: tOPEN cmdargs '\n'  */
 #line 408 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 3010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* proc: tOPEN expr tWITH expr '\n'  */
@@ -2966,31 +3016,31 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 2970 "engines/director/lingo/lingo-gr.cpp"
+#line 3020 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* proc: tNEXT tREPEAT '\n'  */
 #line 414 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 2976 "engines/director/lingo/lingo-gr.cpp"
+#line 3026 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* proc: tEXIT tREPEAT '\n'  */
 #line 415 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 2982 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* proc: tEXIT '\n'  */
 #line 416 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 2988 "engines/director/lingo/lingo-gr.cpp"
+#line 3038 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* proc: tASSERTERROR stmtoneliner  */
 #line 417 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 2994 "engines/director/lingo/lingo-gr.cpp"
+#line 3044 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* cmdargs: %empty  */
@@ -2998,7 +3048,7 @@ yyreduce:
                                                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 3002 "engines/director/lingo/lingo-gr.cpp"
+#line 3052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* cmdargs: expr trailingcomma  */
@@ -3008,7 +3058,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3012 "engines/director/lingo/lingo-gr.cpp"
+#line 3062 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* cmdargs: expr ',' nonemptyexprlist trailingcomma  */
@@ -3017,7 +3067,7 @@ yyreduce:
 		// This matches `cmd args, ...)
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3021 "engines/director/lingo/lingo-gr.cpp"
+#line 3071 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* cmdargs: expr expr_nounarymath trailingcomma  */
@@ -3028,7 +3078,7 @@ yyreduce:
 		args->push_back((yyvsp[-2].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist trailingcomma  */
@@ -3038,7 +3088,7 @@ yyreduce:
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-4].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3042 "engines/director/lingo/lingo-gr.cpp"
+#line 3092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* cmdargs: '(' ')'  */
@@ -3046,7 +3096,7 @@ yyreduce:
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3050 "engines/director/lingo/lingo-gr.cpp"
+#line 3100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
@@ -3055,7 +3105,7 @@ yyreduce:
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3059 "engines/director/lingo/lingo-gr.cpp"
+#line 3109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* frameargs: tFRAME expr  */
@@ -3065,7 +3115,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3069 "engines/director/lingo/lingo-gr.cpp"
+#line 3119 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* frameargs: tMOVIE expr  */
@@ -3076,7 +3126,7 @@ yyreduce:
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3080 "engines/director/lingo/lingo-gr.cpp"
+#line 3130 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* frameargs: tFRAME expr tOF tMOVIE expr  */
@@ -3087,7 +3137,7 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3091 "engines/director/lingo/lingo-gr.cpp"
+#line 3141 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* frameargs: expr tOF tMOVIE expr  */
@@ -3098,7 +3148,7 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3102 "engines/director/lingo/lingo-gr.cpp"
+#line 3152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* frameargs: tFRAME expr expr_nounarymath  */
@@ -3109,49 +3159,49 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3113 "engines/director/lingo/lingo-gr.cpp"
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* asgn: tPUT expr tINTO varorchunk '\n'  */
 #line 489 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3119 "engines/director/lingo/lingo-gr.cpp"
+#line 3169 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
 #line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3125 "engines/director/lingo/lingo-gr.cpp"
+#line 3175 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
 #line 491 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3131 "engines/director/lingo/lingo-gr.cpp"
+#line 3181 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* asgn: tSET varorthe to expr '\n'  */
 #line 492 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3137 "engines/director/lingo/lingo-gr.cpp"
+#line 3187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* definevars: tGLOBAL idlist '\n'  */
 #line 497 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3143 "engines/director/lingo/lingo-gr.cpp"
+#line 3193 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* definevars: tPROPERTY idlist '\n'  */
 #line 498 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3149 "engines/director/lingo/lingo-gr.cpp"
+#line 3199 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* definevars: tINSTANCE idlist '\n'  */
 #line 499 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3155 "engines/director/lingo/lingo-gr.cpp"
+#line 3205 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* ifstmt: tIF expr tTHEN stmt  */
@@ -3160,14 +3210,14 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3164 "engines/director/lingo/lingo-gr.cpp"
+#line 3214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif tENDIF '\n'  */
 #line 506 "engines/director/lingo/lingo-gr.y"
                                                             {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3171 "engines/director/lingo/lingo-gr.cpp"
+#line 3221 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
@@ -3178,7 +3228,7 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3182 "engines/director/lingo/lingo-gr.cpp"
+#line 3232 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif tENDIF '\n'  */
@@ -3187,7 +3237,7 @@ yyreduce:
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3191 "engines/director/lingo/lingo-gr.cpp"
+#line 3241 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
@@ -3196,42 +3246,42 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3200 "engines/director/lingo/lingo-gr.cpp"
+#line 3250 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif tENDIF '\n'  */
 #line 524 "engines/director/lingo/lingo-gr.y"
                                                                                                                {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3207 "engines/director/lingo/lingo-gr.cpp"
+#line 3257 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 528 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3214 "engines/director/lingo/lingo-gr.cpp"
+#line 3264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 530 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3221 "engines/director/lingo/lingo-gr.cpp"
+#line 3271 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 532 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3228 "engines/director/lingo/lingo-gr.cpp"
+#line 3278 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 534 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3235 "engines/director/lingo/lingo-gr.cpp"
+#line 3285 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156: /* tell: tTELL expr tTO stmtoneliner  */
@@ -3240,26 +3290,26 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3244 "engines/director/lingo/lingo-gr.cpp"
+#line 3294 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
 #line 542 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3251 "engines/director/lingo/lingo-gr.cpp"
+#line 3301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158: /* when: tWHEN ID tTHEN expr  */
 #line 546 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3257 "engines/director/lingo/lingo-gr.cpp"
+#line 3307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159: /* stmtlist: %empty  */
 #line 548 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3263 "engines/director/lingo/lingo-gr.cpp"
+#line 3313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161: /* nonemptystmtlist: stmtlistline  */
@@ -3270,7 +3320,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3274 "engines/director/lingo/lingo-gr.cpp"
+#line 3324 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
@@ -3280,19 +3330,19 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3284 "engines/director/lingo/lingo-gr.cpp"
+#line 3334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163: /* stmtlistline: '\n'  */
 #line 566 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3290 "engines/director/lingo/lingo-gr.cpp"
+#line 3340 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165: /* stmtlist_insideif: %empty  */
 #line 570 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.nodelist) = new NodeList; }
-#line 3296 "engines/director/lingo/lingo-gr.cpp"
+#line 3346 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
@@ -3303,7 +3353,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3307 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
@@ -3313,61 +3363,61 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3317 "engines/director/lingo/lingo-gr.cpp"
+#line 3367 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169: /* stmtlistline_insideif: '\n'  */
 #line 588 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 3323 "engines/director/lingo/lingo-gr.cpp"
+#line 3373 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171: /* simpleexpr_nounarymath: tINT  */
 #line 595 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3329 "engines/director/lingo/lingo-gr.cpp"
+#line 3379 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172: /* simpleexpr_nounarymath: tFLOAT  */
 #line 596 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3335 "engines/director/lingo/lingo-gr.cpp"
+#line 3385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173: /* simpleexpr_nounarymath: tSYMBOL  */
 #line 597 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3341 "engines/director/lingo/lingo-gr.cpp"
+#line 3391 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 174: /* simpleexpr_nounarymath: tSTRING  */
 #line 598 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3347 "engines/director/lingo/lingo-gr.cpp"
+#line 3397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 175: /* simpleexpr_nounarymath: tNOT simpleexpr  */
 #line 599 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3353 "engines/director/lingo/lingo-gr.cpp"
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 176: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
 #line 600 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3359 "engines/director/lingo/lingo-gr.cpp"
+#line 3409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 177: /* simpleexpr_nounarymath: '(' expr ')'  */
 #line 601 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3365 "engines/director/lingo/lingo-gr.cpp"
+#line 3415 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 183: /* var: ID  */
 #line 609 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3371 "engines/director/lingo/lingo-gr.cpp"
+#line 3421 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 188: /* chunk: tFIELD simpleexpr  */
@@ -3376,7 +3426,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3380 "engines/director/lingo/lingo-gr.cpp"
+#line 3430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 189: /* chunk: tCAST simpleexpr  */
@@ -3385,63 +3435,63 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3389 "engines/director/lingo/lingo-gr.cpp"
+#line 3439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* chunk: tCHAR simpleexpr tOF simpleexpr  */
+  case 190: /* chunk: tCHAR expr tOF simpleexpr  */
 #line 627 "engines/director/lingo/lingo-gr.y"
-                                                        {
+                                                {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3396 "engines/director/lingo/lingo-gr.cpp"
+#line 3446 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* chunk: tCHAR simpleexpr tTO simpleexpr tOF simpleexpr  */
+  case 191: /* chunk: tCHAR expr tTO expr tOF simpleexpr  */
 #line 629 "engines/director/lingo/lingo-gr.y"
-                                                                                {
+                                                                {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3403 "engines/director/lingo/lingo-gr.cpp"
+#line 3453 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* chunk: tWORD simpleexpr tOF simpleexpr  */
+  case 192: /* chunk: tWORD expr tOF simpleexpr  */
 #line 631 "engines/director/lingo/lingo-gr.y"
-                                                        {
+                                                {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3410 "engines/director/lingo/lingo-gr.cpp"
+#line 3460 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* chunk: tWORD simpleexpr tTO simpleexpr tOF simpleexpr  */
+  case 193: /* chunk: tWORD expr tTO expr tOF simpleexpr  */
 #line 633 "engines/director/lingo/lingo-gr.y"
-                                                                                {
+                                                                {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3417 "engines/director/lingo/lingo-gr.cpp"
+#line 3467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* chunk: tITEM simpleexpr tOF simpleexpr  */
+  case 194: /* chunk: tITEM expr tOF simpleexpr  */
 #line 635 "engines/director/lingo/lingo-gr.y"
-                                                        {
+                                                {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3424 "engines/director/lingo/lingo-gr.cpp"
+#line 3474 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* chunk: tITEM simpleexpr tTO simpleexpr tOF simpleexpr  */
+  case 195: /* chunk: tITEM expr tTO expr tOF simpleexpr  */
 #line 637 "engines/director/lingo/lingo-gr.y"
-                                                                                {
+                                                                {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3431 "engines/director/lingo/lingo-gr.cpp"
+#line 3481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* chunk: tLINE simpleexpr tOF simpleexpr  */
+  case 196: /* chunk: tLINE expr tOF simpleexpr  */
 #line 639 "engines/director/lingo/lingo-gr.y"
-                                                        {
+                                                {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3438 "engines/director/lingo/lingo-gr.cpp"
+#line 3488 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* chunk: tLINE simpleexpr tTO simpleexpr tOF simpleexpr  */
+  case 197: /* chunk: tLINE expr tTO expr tOF simpleexpr  */
 #line 641 "engines/director/lingo/lingo-gr.y"
-                                                                                {
+                                                                {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3445 "engines/director/lingo/lingo-gr.cpp"
+#line 3495 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 198: /* object: tSCRIPT simpleexpr  */
@@ -3450,7 +3500,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3454 "engines/director/lingo/lingo-gr.cpp"
+#line 3504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 199: /* object: tWINDOW simpleexpr  */
@@ -3459,187 +3509,187 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3463 "engines/director/lingo/lingo-gr.cpp"
+#line 3513 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 203: /* the: tTHE tLAST chunktype inof simpleexpr  */
 #line 658 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3469 "engines/director/lingo/lingo-gr.cpp"
+#line 3519 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 206: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
 #line 663 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3475 "engines/director/lingo/lingo-gr.cpp"
+#line 3525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 207: /* theobj: tSOUND simpleexpr  */
 #line 664 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3481 "engines/director/lingo/lingo-gr.cpp"
+#line 3531 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 208: /* theobj: tSPRITE simpleexpr  */
 #line 665 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3487 "engines/director/lingo/lingo-gr.cpp"
+#line 3537 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 209: /* menu: tMENU simpleexpr  */
 #line 668 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3493 "engines/director/lingo/lingo-gr.cpp"
+#line 3543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 210: /* writablethe: tTHE ID  */
 #line 670 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3499 "engines/director/lingo/lingo-gr.cpp"
+#line 3549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 211: /* writablethe: tTHE ID tOF theobj  */
 #line 671 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3505 "engines/director/lingo/lingo-gr.cpp"
+#line 3555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 212: /* writablethe: tTHE tNUMBER tOF theobj  */
 #line 672 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3511 "engines/director/lingo/lingo-gr.cpp"
+#line 3561 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 213: /* thedatetime: tTHE tABBREVIATED tDATE  */
 #line 675 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3517 "engines/director/lingo/lingo-gr.cpp"
+#line 3567 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 214: /* thedatetime: tTHE tABBREVIATED tTIME  */
 #line 676 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3523 "engines/director/lingo/lingo-gr.cpp"
+#line 3573 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 215: /* thedatetime: tTHE tABBREV tDATE  */
 #line 677 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3529 "engines/director/lingo/lingo-gr.cpp"
+#line 3579 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 216: /* thedatetime: tTHE tABBREV tTIME  */
 #line 678 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3535 "engines/director/lingo/lingo-gr.cpp"
+#line 3585 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 217: /* thedatetime: tTHE tABBR tDATE  */
 #line 679 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3541 "engines/director/lingo/lingo-gr.cpp"
+#line 3591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 218: /* thedatetime: tTHE tABBR tTIME  */
 #line 680 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3547 "engines/director/lingo/lingo-gr.cpp"
+#line 3597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 219: /* thedatetime: tTHE tLONG tDATE  */
 #line 681 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3553 "engines/director/lingo/lingo-gr.cpp"
+#line 3603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 220: /* thedatetime: tTHE tLONG tTIME  */
 #line 682 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3559 "engines/director/lingo/lingo-gr.cpp"
+#line 3609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 221: /* thedatetime: tTHE tSHORT tDATE  */
 #line 683 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3565 "engines/director/lingo/lingo-gr.cpp"
+#line 3615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 222: /* thedatetime: tTHE tSHORT tTIME  */
 #line 684 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3571 "engines/director/lingo/lingo-gr.cpp"
+#line 3621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 223: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
 #line 688 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3577 "engines/director/lingo/lingo-gr.cpp"
+#line 3627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 224: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
 #line 689 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3583 "engines/director/lingo/lingo-gr.cpp"
+#line 3633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 225: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
 #line 690 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3589 "engines/director/lingo/lingo-gr.cpp"
+#line 3639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 226: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
 #line 691 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3595 "engines/director/lingo/lingo-gr.cpp"
+#line 3645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 227: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
 #line 692 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3601 "engines/director/lingo/lingo-gr.cpp"
+#line 3651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 228: /* chunktype: tCHAR  */
 #line 695 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3607 "engines/director/lingo/lingo-gr.cpp"
+#line 3657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 229: /* chunktype: tWORD  */
 #line 696 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3613 "engines/director/lingo/lingo-gr.cpp"
+#line 3663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 230: /* chunktype: tITEM  */
 #line 697 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3619 "engines/director/lingo/lingo-gr.cpp"
+#line 3669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 231: /* chunktype: tLINE  */
 #line 698 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3625 "engines/director/lingo/lingo-gr.cpp"
+#line 3675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 234: /* list: '[' exprlist ']'  */
 #line 703 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3631 "engines/director/lingo/lingo-gr.cpp"
+#line 3681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 235: /* list: '[' ':' ']'  */
 #line 704 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3637 "engines/director/lingo/lingo-gr.cpp"
+#line 3687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 236: /* list: '[' proplist ']'  */
 #line 705 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3643 "engines/director/lingo/lingo-gr.cpp"
+#line 3693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 237: /* proplist: proppair  */
@@ -3648,7 +3698,7 @@ yyreduce:
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3652 "engines/director/lingo/lingo-gr.cpp"
+#line 3702 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 238: /* proplist: proplist ',' proppair  */
@@ -3656,259 +3706,259 @@ yyreduce:
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3660 "engines/director/lingo/lingo-gr.cpp"
+#line 3710 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 239: /* proppair: tSYMBOL ':' expr  */
 #line 717 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3666 "engines/director/lingo/lingo-gr.cpp"
+#line 3716 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 240: /* proppair: ID ':' expr  */
 #line 718 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3672 "engines/director/lingo/lingo-gr.cpp"
+#line 3722 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 241: /* proppair: tSTRING ':' expr  */
 #line 719 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3678 "engines/director/lingo/lingo-gr.cpp"
+#line 3728 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 242: /* unarymath: '+' simpleexpr  */
 #line 722 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3684 "engines/director/lingo/lingo-gr.cpp"
+#line 3734 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 243: /* unarymath: '-' simpleexpr  */
 #line 723 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3690 "engines/director/lingo/lingo-gr.cpp"
+#line 3740 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 248: /* expr: expr '+' expr  */
 #line 733 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3696 "engines/director/lingo/lingo-gr.cpp"
+#line 3746 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 249: /* expr: expr '-' expr  */
 #line 734 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3702 "engines/director/lingo/lingo-gr.cpp"
+#line 3752 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 250: /* expr: expr '*' expr  */
 #line 735 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3708 "engines/director/lingo/lingo-gr.cpp"
+#line 3758 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 251: /* expr: expr '/' expr  */
 #line 736 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3714 "engines/director/lingo/lingo-gr.cpp"
+#line 3764 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 252: /* expr: expr tMOD expr  */
 #line 737 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3720 "engines/director/lingo/lingo-gr.cpp"
+#line 3770 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 253: /* expr: expr '>' expr  */
 #line 738 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3726 "engines/director/lingo/lingo-gr.cpp"
+#line 3776 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 254: /* expr: expr '<' expr  */
 #line 739 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3732 "engines/director/lingo/lingo-gr.cpp"
+#line 3782 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 255: /* expr: expr tEQ expr  */
 #line 740 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3738 "engines/director/lingo/lingo-gr.cpp"
+#line 3788 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 256: /* expr: expr tNEQ expr  */
 #line 741 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3744 "engines/director/lingo/lingo-gr.cpp"
+#line 3794 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 257: /* expr: expr tGE expr  */
 #line 742 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3750 "engines/director/lingo/lingo-gr.cpp"
+#line 3800 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 258: /* expr: expr tLE expr  */
 #line 743 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3756 "engines/director/lingo/lingo-gr.cpp"
+#line 3806 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 259: /* expr: expr tAND expr  */
 #line 744 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3762 "engines/director/lingo/lingo-gr.cpp"
+#line 3812 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 260: /* expr: expr tOR expr  */
 #line 745 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3768 "engines/director/lingo/lingo-gr.cpp"
+#line 3818 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 261: /* expr: expr '&' expr  */
 #line 746 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3774 "engines/director/lingo/lingo-gr.cpp"
+#line 3824 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 262: /* expr: expr tCONCAT expr  */
 #line 747 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3780 "engines/director/lingo/lingo-gr.cpp"
+#line 3830 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 263: /* expr: expr tCONTAINS expr  */
 #line 748 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3786 "engines/director/lingo/lingo-gr.cpp"
+#line 3836 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 264: /* expr: expr tSTARTS expr  */
 #line 749 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3792 "engines/director/lingo/lingo-gr.cpp"
+#line 3842 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 267: /* expr_nounarymath: expr_nounarymath '+' expr  */
 #line 758 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3798 "engines/director/lingo/lingo-gr.cpp"
+#line 3848 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 268: /* expr_nounarymath: expr_nounarymath '-' expr  */
 #line 759 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3804 "engines/director/lingo/lingo-gr.cpp"
+#line 3854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 269: /* expr_nounarymath: expr_nounarymath '*' expr  */
 #line 760 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3810 "engines/director/lingo/lingo-gr.cpp"
+#line 3860 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 270: /* expr_nounarymath: expr_nounarymath '/' expr  */
 #line 761 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3816 "engines/director/lingo/lingo-gr.cpp"
+#line 3866 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 271: /* expr_nounarymath: expr_nounarymath tMOD expr  */
 #line 762 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3822 "engines/director/lingo/lingo-gr.cpp"
+#line 3872 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 272: /* expr_nounarymath: expr_nounarymath '>' expr  */
 #line 763 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3828 "engines/director/lingo/lingo-gr.cpp"
+#line 3878 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 273: /* expr_nounarymath: expr_nounarymath '<' expr  */
 #line 764 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3834 "engines/director/lingo/lingo-gr.cpp"
+#line 3884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 274: /* expr_nounarymath: expr_nounarymath tEQ expr  */
 #line 765 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3840 "engines/director/lingo/lingo-gr.cpp"
+#line 3890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 275: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
 #line 766 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3846 "engines/director/lingo/lingo-gr.cpp"
+#line 3896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 276: /* expr_nounarymath: expr_nounarymath tGE expr  */
 #line 767 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3852 "engines/director/lingo/lingo-gr.cpp"
+#line 3902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 277: /* expr_nounarymath: expr_nounarymath tLE expr  */
 #line 768 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3858 "engines/director/lingo/lingo-gr.cpp"
+#line 3908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 278: /* expr_nounarymath: expr_nounarymath tAND expr  */
 #line 769 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3864 "engines/director/lingo/lingo-gr.cpp"
+#line 3914 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 279: /* expr_nounarymath: expr_nounarymath tOR expr  */
 #line 770 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3870 "engines/director/lingo/lingo-gr.cpp"
+#line 3920 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 280: /* expr_nounarymath: expr_nounarymath '&' expr  */
 #line 771 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3876 "engines/director/lingo/lingo-gr.cpp"
+#line 3926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 281: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
 #line 772 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3882 "engines/director/lingo/lingo-gr.cpp"
+#line 3932 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 282: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
 #line 773 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3888 "engines/director/lingo/lingo-gr.cpp"
+#line 3938 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 283: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
 #line 774 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3894 "engines/director/lingo/lingo-gr.cpp"
+#line 3944 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 284: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
 #line 777 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3900 "engines/director/lingo/lingo-gr.cpp"
+#line 3950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 285: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
 #line 778 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3906 "engines/director/lingo/lingo-gr.cpp"
+#line 3956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 286: /* exprlist: %empty  */
 #line 781 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3912 "engines/director/lingo/lingo-gr.cpp"
+#line 3962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 288: /* nonemptyexprlist: expr  */
@@ -3917,7 +3967,7 @@ yyreduce:
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3921 "engines/director/lingo/lingo-gr.cpp"
+#line 3971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 289: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
@@ -3925,11 +3975,11 @@ yyreduce:
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3929 "engines/director/lingo/lingo-gr.cpp"
+#line 3979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3933 "engines/director/lingo/lingo-gr.cpp"
+#line 3983 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 2aa9156ed8..f7fa71b5e9 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -624,21 +624,21 @@ chunk: tFIELD simpleexpr[arg]	{
 		NodeList *args = new NodeList;
 		args->push_back($arg);
 		$$ = new FuncNode(new Common::String("cast"), args); }
-	| tCHAR simpleexpr[idx] tOF simpleexpr[src]	{
+	| tCHAR expr[idx] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkChar, $idx, nullptr, $src); }
-	| tCHAR simpleexpr[start] tTO simpleexpr[end] tOF simpleexpr[src]	{
+	| tCHAR expr[start] tTO expr[end] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkChar, $start, $end, $src); }
-	| tWORD simpleexpr[idx] tOF simpleexpr[src]	{
+	| tWORD expr[idx] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkWord, $idx, nullptr, $src); }
-	| tWORD simpleexpr[start] tTO simpleexpr[end] tOF simpleexpr[src]	{
+	| tWORD expr[start] tTO expr[end] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkWord, $start, $end, $src); }
-	| tITEM simpleexpr[idx] tOF simpleexpr[src]	{
+	| tITEM expr[idx] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkItem, $idx, nullptr, $src); }
-	| tITEM simpleexpr[start] tTO simpleexpr[end] tOF simpleexpr[src]	{
+	| tITEM expr[start] tTO expr[end] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkItem, $start, $end, $src); }
-	| tLINE simpleexpr[idx] tOF simpleexpr[src]	{
+	| tLINE expr[idx] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkLine, $idx, nullptr, $src); }
-	| tLINE simpleexpr[start] tTO simpleexpr[end] tOF simpleexpr[src]	{
+	| tLINE expr[start] tTO expr[end] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkLine, $start, $end, $src); }
 	;
 


Commit: 16ad72c042dfd0311e6006262f29a02d8e6200b4
    https://github.com/scummvm/scummvm/commit/16ad72c042dfd0311e6006262f29a02d8e6200b4
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix calling window with multiple args

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 3f6327ff6f..aeeff82866 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -300,24 +300,25 @@ enum yysymbol_kind_t
   YYSYMBOL_varorthe = 144,                 /* varorthe  */
   YYSYMBOL_chunk = 145,                    /* chunk  */
   YYSYMBOL_object = 146,                   /* object  */
-  YYSYMBOL_the = 147,                      /* the  */
-  YYSYMBOL_theobj = 148,                   /* theobj  */
-  YYSYMBOL_menu = 149,                     /* menu  */
-  YYSYMBOL_writablethe = 150,              /* writablethe  */
-  YYSYMBOL_thedatetime = 151,              /* thedatetime  */
-  YYSYMBOL_thenumberof = 152,              /* thenumberof  */
-  YYSYMBOL_chunktype = 153,                /* chunktype  */
-  YYSYMBOL_inof = 154,                     /* inof  */
-  YYSYMBOL_list = 155,                     /* list  */
-  YYSYMBOL_proplist = 156,                 /* proplist  */
-  YYSYMBOL_proppair = 157,                 /* proppair  */
-  YYSYMBOL_unarymath = 158,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 159,               /* simpleexpr  */
-  YYSYMBOL_expr = 160,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 161,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 162,                   /* sprite  */
-  YYSYMBOL_exprlist = 163,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 164          /* nonemptyexprlist  */
+  YYSYMBOL_refargs = 147,                  /* refargs  */
+  YYSYMBOL_the = 148,                      /* the  */
+  YYSYMBOL_theobj = 149,                   /* theobj  */
+  YYSYMBOL_menu = 150,                     /* menu  */
+  YYSYMBOL_writablethe = 151,              /* writablethe  */
+  YYSYMBOL_thedatetime = 152,              /* thedatetime  */
+  YYSYMBOL_thenumberof = 153,              /* thenumberof  */
+  YYSYMBOL_chunktype = 154,                /* chunktype  */
+  YYSYMBOL_inof = 155,                     /* inof  */
+  YYSYMBOL_list = 156,                     /* list  */
+  YYSYMBOL_proplist = 157,                 /* proplist  */
+  YYSYMBOL_proppair = 158,                 /* proppair  */
+  YYSYMBOL_unarymath = 159,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 160,               /* simpleexpr  */
+  YYSYMBOL_expr = 161,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 162,         /* expr_nounarymath  */
+  YYSYMBOL_sprite = 163,                   /* sprite  */
+  YYSYMBOL_exprlist = 164,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 165          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -639,16 +640,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  177
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3746
+#define YYLAST   3990
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  61
+#define YYNNTS  62
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  289
+#define YYNRULES  292
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  532
+#define YYNSTATES  539
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -724,17 +725,18 @@ static const yytype_int16 yyrline[] =
      520,   524,   528,   530,   532,   534,   538,   542,   546,   548,
      549,   553,   559,   566,   567,   570,   571,   575,   581,   588,
      589,   595,   596,   597,   598,   599,   600,   601,   602,   603,
-     604,   605,   606,   609,   611,   612,   615,   616,   619,   623,
-     627,   629,   631,   633,   635,   637,   639,   641,   645,   649,
-     655,   656,   657,   658,   661,   662,   663,   664,   665,   668,
-     670,   671,   672,   675,   676,   677,   678,   679,   680,   681,
-     682,   683,   684,   688,   689,   690,   691,   692,   695,   696,
-     697,   698,   701,   701,   703,   704,   705,   708,   712,   717,
-     718,   719,   722,   723,   726,   727,   731,   732,   733,   734,
-     735,   736,   737,   738,   739,   740,   741,   742,   743,   744,
-     745,   746,   747,   748,   749,   756,   757,   758,   759,   760,
-     761,   762,   763,   764,   765,   766,   767,   768,   769,   770,
-     771,   772,   773,   774,   777,   778,   781,   782,   785,   789
+     604,   605,   606,   609,   611,   612,   615,   616,   619,   620,
+     621,   623,   625,   627,   629,   631,   633,   635,   639,   640,
+     643,   648,   651,   657,   658,   659,   660,   663,   664,   665,
+     666,   667,   670,   672,   673,   674,   677,   678,   679,   680,
+     681,   682,   683,   684,   685,   686,   690,   691,   692,   693,
+     694,   697,   698,   699,   700,   703,   703,   705,   706,   707,
+     710,   714,   719,   720,   721,   724,   725,   728,   729,   733,
+     734,   735,   736,   737,   738,   739,   740,   741,   742,   743,
+     744,   745,   746,   747,   748,   749,   750,   751,   758,   759,
+     760,   761,   762,   763,   764,   765,   766,   767,   768,   769,
+     770,   771,   772,   773,   774,   775,   776,   779,   780,   783,
+     784,   787,   791
 };
 #endif
 
@@ -774,10 +776,10 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "stmtlist", "nonemptystmtlist", "stmtlistline", "stmtlist_insideif",
   "nonemptystmtlist_insideif", "stmtlistline_insideif",
   "simpleexpr_nounarymath", "var", "varorchunk", "varorthe", "chunk",
-  "object", "the", "theobj", "menu", "writablethe", "thedatetime",
-  "thenumberof", "chunktype", "inof", "list", "proplist", "proppair",
-  "unarymath", "simpleexpr", "expr", "expr_nounarymath", "sprite",
-  "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "object", "refargs", "the", "theobj", "menu", "writablethe",
+  "thedatetime", "thenumberof", "chunktype", "inof", "list", "proplist",
+  "proppair", "unarymath", "simpleexpr", "expr", "expr_nounarymath",
+  "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -802,7 +804,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-465)
+#define YYPACT_NINF (-459)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -816,60 +818,60 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2303,  -465,  -465,  -465,  -465,  -465,  -465,   -18,  -465,  2873,
-    1436,  1533,  -465,  -465,  2873,  -465,    20,  -465,  -465,  1630,
-     -11,  2952,  -465,  2873,  -465,  -465,  2873,  1630,  1436,  2873,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  1533,  2873,  2873,   -19,  3267,  -465,    69,
-    2303,  -465,  -465,  -465,  -465,  1630,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,   -13,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,     1,   -16,  -465,  -465,  -465,  -465,  1727,
-    1727,  1727,  1727,  1533,  1533,  1727,  1533,  1533,  1533,  1533,
-    3031,  1533,  1727,  1727,  1339,   755,    -9,    23,    25,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-     854,  -465,  1533,   229,  2873,    28,    29,   951,  2873,  1533,
-    3110,  -465,  -465,   -14,  -465,   100,    37,    40,  1048,    41,
-      53,    55,  3316,    57,  2873,  -465,  -465,  -465,  -465,    60,
-    1145,  -465,  -465,  2873,  -465,  -465,  -465,  -465,  1242,  3597,
-    -465,    19,   443,   527,   549,   -48,   -32,   -31,   -28,   -27,
-     113,   130,   131,  3584,  -465,  -465,  -465,  3329,    68,    72,
-      58,   -76,   -62,  -465,  3597,    71,    81,  1533,  -465,  -465,
-     155,  1533,  1533,  1533,  1533,  2018,  2018,  2212,  1533,  2115,
-    2115,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  -465,
-    -465,  3401,  -465,  3342,  2383,  1533,  1533,  1533,  1533,  1533,
-      85,  -465,  -465,  3189,  3189,  3189,   -15,  3414,   156,  -465,
-    -465,  1533,  1533,   -66,  -465,  1533,  -465,  -465,  -465,  3267,
-    2463,  -465,    86,  -465,  -465,   159,  3651,  1727,  1533,  1727,
-    1533,  1727,  1533,  1727,  1533,  -465,  -465,  -465,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,    27,
-    1824,  1921,  1727,  1727,  1533,  -465,  1533,  1533,  -465,  1533,
-    2794,  -465,  -465,  1533,    89,  1533,    -6,    -6,    -6,    -6,
-      51,    51,  -465,    70,    -6,    -6,    -6,    -6,    70,     7,
-       7,  -465,  -465,    96,  1533,  1533,  1533,  1533,  1533,  1533,
-    1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,  1533,
-    1533,  1533,  -465,  2703,   180,  2463,  -465,   103,  -465,   104,
-     106,  1533,  1533,  2463,  1921,  3427,  3597,  2873,  -465,  -465,
-    -465,   -66,  -465,  3483,  -465,  -465,  -465,   110,  2463,  -465,
-    2463,  1533,  -465,   411,  -465,   603,  -465,   623,  -465,   657,
-    -465,  -465,  1727,    27,    27,    27,    27,  1727,  1727,    27,
-    1727,  1727,  -465,  -465,  -465,  -465,  -465,  -465,   -46,  3597,
-    3597,  3597,    68,    72,   101,  -465,  3597,  -465,  3597,  1533,
-    -465,    -6,    -6,    -6,    -6,    51,    51,  -465,    70,    -6,
-      -6,    -6,    -6,    70,     7,     7,  -465,  -465,    96,  -465,
-    -465,    -4,  2703,  -465,  2543,  -465,  -465,  -465,  -465,  3496,
-     165,   120,  -465,  2873,  -465,  -465,   118,  -465,   211,  3597,
-    1727,  1727,  1727,  1727,  -465,  1727,  1727,  1727,  1727,  -465,
-     194,   153,  -465,  -465,  -465,  -465,  2623,   128,  -465,  2703,
-    -465,  2463,   192,  1533,   132,   133,  -465,  2873,  -465,  -465,
-    -465,  -465,  -465,  -465,  -465,  -465,   157,  1727,  -465,  2703,
-    -465,  -465,   142,   146,  1533,  3509,  -465,  2463,   -38,  -465,
-    1727,   151,   140,   141,  3565,  2463,  -465,  -465,  2873,  -465,
-     143,  -465,  -465,  2463,   163,  -465,  -465,   166,   144,   145,
-    -465,  -465
+    2374,  -459,  -459,  -459,  -459,  -459,  -459,   -16,  -459,  2944,
+    1410,  1507,  -459,  -459,  2944,  -459,    42,  -459,  -459,  1604,
+      59,  3023,  -459,  2944,  -459,  -459,  2944,  1604,  1410,  2944,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,  1507,  2944,  2944,   -12,  3338,  -459,   111,
+    2374,  -459,  -459,  -459,  -459,  1604,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,    29,  -459,  -459,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,    30,    33,  -459,  -459,  -459,  -459,  1701,
+    1701,  1701,  1701,  1507,  1507,  1798,  1507,  1507,  1507,  1507,
+    3102,  1507,  1798,  1798,  1216,   632,    47,    51,    53,  -459,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+     731,  -459,  1507,  3534,  2944,    57,    64,   828,  2944,  1507,
+    3181,  -459,  -459,    -9,  -459,   107,    65,    66,   925,    68,
+      69,    71,  3460,    72,  2944,  -459,  -459,  -459,  -459,    73,
+    1022,  -459,  -459,  2944,  1313,  -459,  -459,  -459,  -459,  -459,
+    1119,  3869,  -459,   418,   518,   540,  3393,   -20,    41,    43,
+      44,    45,    84,   114,   116,  3815,  -459,  -459,  -459,  3547,
+      49,    70,    54,   -79,   -23,  -459,  3869,    75,    76,  1507,
+    -459,  -459,   145,  1507,  1507,  1507,  1507,  2089,  2089,  2283,
+    1507,  2186,  2186,  1507,  1507,  1507,  1507,  1507,  1507,  1507,
+    1507,  -459,  -459,  3632,  -459,  3619,  2454,  1507,  1507,  1507,
+    1507,  1507,    78,  -459,  -459,  3260,  3260,  3260,   -11,  3645,
+     157,  -459,  -459,  1507,  1507,   -66,  -459,  1507,  -459,  -459,
+    -459,  3338,  2534,  -459,    90,  -459,  -459,  -459,  3560,   162,
+    3882,  1798,  1507,  1798,  1507,  1798,  1507,  1798,  1507,  -459,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,    32,  1895,  1992,  1798,  1798,  1507,  -459,
+    1507,  1507,  -459,  1507,  2865,  -459,  -459,  1507,    91,  1507,
+      10,    10,    10,    10,  3895,  3895,  -459,    14,    10,    10,
+      10,    10,    14,   -26,   -26,  -459,  -459,    92,  1507,  1507,
+    1507,  1507,  1507,  1507,  1507,  1507,  1507,  1507,  1507,  1507,
+    1507,  1507,  1507,  1507,  1507,  1507,  -459,  2774,   176,  2534,
+    -459,    96,  -459,    97,    98,  1507,  1507,  2534,  1992,  3701,
+    3869,  2944,  -459,  -459,  -459,   -66,  -459,  3714,  -459,  -459,
+    -459,   109,  2534,  -459,  2534,  1507,  1507,  -459,   334,  -459,
+    3406,  -459,  3426,  -459,  3480,  -459,  -459,  1798,    32,    32,
+      32,    32,  1798,  1798,    32,  1798,  1798,  -459,  -459,  -459,
+    -459,  -459,  -459,   -72,  3869,  3869,  3869,    49,    70,    94,
+    -459,  3869,  -459,  3869,  1507,  -459,    10,    10,    10,    10,
+    3895,  3895,  -459,    14,    10,    10,    10,    10,    14,   -26,
+     -26,  -459,  -459,    92,  -459,  -459,    -5,  2774,  -459,  2614,
+    -459,  -459,  -459,  -459,  3727,    -2,   112,  -459,  2944,  -459,
+    -459,   102,  -459,   190,    24,  3869,  1798,  1798,  1798,  1798,
+    -459,  1798,  1798,  1798,  1798,  -459,   173,   131,  -459,  -459,
+    -459,  -459,  2694,   108,  -459,  2774,  -459,  2534,   170,  1507,
+     113,   115,  -459,  2944,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,   135,  1798,  -459,  2774,  -459,  -459,   123,
+     125,  1507,  3783,  -459,  2534,    18,  -459,  1798,   128,   118,
+     119,  3796,  2534,  -459,  -459,  2944,  -459,   120,  -459,  -459,
+    2534,   133,  -459,  -459,   134,   121,   124,  -459,  -459
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -890,71 +892,71 @@ static const yytype_int16 yydefact[] =
       93,    94,    81,    89,    90,    85,    67,    91,    88,    87,
       61,    77,    98,     0,    96,   171,   172,   174,   173,    31,
       37,    60,    72,    38,    52,    54,    32,    42,    45,    75,
-      68,    65,     0,     0,     0,   286,   183,     0,     0,   244,
-     178,   179,   180,   181,   200,   201,   202,   182,   245,   246,
-     130,   247,     0,     0,    95,     0,     0,   130,     0,     0,
+      68,    65,     0,     0,     0,   289,   183,     0,     0,   247,
+     178,   179,   180,   181,   203,   204,   205,   182,   248,   249,
+     130,   250,     0,     0,    95,     0,     0,   130,     0,     0,
       68,   183,   186,     0,   187,     0,     0,     0,   130,     0,
        0,     0,     0,     0,    95,   101,   122,     1,     4,     0,
-     130,   120,   143,    97,   189,   188,   198,   199,   132,   133,
-     175,     0,     0,     0,     0,    25,    26,    27,    47,    63,
-      44,    55,   210,     0,   242,   243,   128,     0,   174,   173,
-       0,   183,     0,   237,   288,     0,   287,   286,   113,   114,
-      56,     0,     0,     0,     0,    29,    57,    51,     0,    34,
-      66,     0,     0,     0,     0,     0,     0,     0,   131,   124,
-     265,   130,   266,     0,     0,     0,     0,     0,     0,     0,
-       0,   119,   112,    41,    28,    30,     0,     0,    55,   141,
-     142,     0,     0,    13,   117,    73,   115,   116,   145,     0,
-     159,   144,     0,   111,    99,    56,   136,     0,     0,     0,
-       0,     0,     0,     0,     0,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   228,   230,   231,   229,     0,
-       0,     0,     0,     0,     0,   177,     0,     0,   235,     0,
-       0,   236,   234,     0,     0,     0,   257,   258,   255,   256,
-     259,   260,   252,   262,   263,   264,   254,   253,   261,   248,
-     249,   250,   251,   130,     0,     0,     0,     0,     0,     0,
+     130,   120,   143,    97,     0,   189,   200,   188,   198,   199,
+     132,   133,   175,     0,     0,     0,     0,    25,    26,    27,
+      47,    63,    44,    55,   213,     0,   245,   246,   128,     0,
+     174,   173,     0,   183,     0,   240,   291,     0,   290,   289,
+     113,   114,    56,     0,     0,     0,     0,    29,    57,    51,
+       0,    34,    66,     0,     0,     0,     0,     0,     0,     0,
+     131,   124,   268,   130,   269,     0,     0,     0,     0,     0,
+       0,     0,     0,   119,   112,    41,    28,    30,     0,     0,
+      55,   141,   142,     0,     0,    13,   117,    73,   115,   116,
+     145,     0,   159,   144,     0,   111,    99,   201,     0,    56,
+     136,     0,     0,     0,     0,     0,     0,     0,     0,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   231,
+     233,   234,   232,     0,     0,     0,     0,     0,     0,   177,
+       0,     0,   238,     0,     0,   239,   237,     0,     0,     0,
+     260,   261,   258,   259,   262,   263,   255,   265,   266,   267,
+     257,   256,   264,   251,   252,   253,   254,   130,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   131,   126,   165,   146,   159,   184,     0,   185,     0,
-       0,     0,     0,   159,     0,     0,   158,     0,    17,    18,
-      11,    14,    15,     0,   156,   163,   164,     0,   160,   161,
-     159,     0,   190,     0,   194,     0,   196,     0,   192,     0,
-     232,   233,     0,    33,    43,    46,    76,    48,    49,    50,
-      64,    65,   212,   205,   204,   211,   284,   285,     0,   241,
-     239,   240,     0,     0,     0,   238,   289,   176,   135,   131,
-     125,   276,   277,   274,   275,   278,   279,   271,   281,   282,
-     283,   273,   272,   280,   267,   268,   269,   270,   130,   169,
-     170,     0,   166,   167,     0,    10,   137,   138,   139,     0,
-       0,     0,   140,    95,    16,   118,     0,   162,    20,   134,
-       0,     0,     0,     0,   203,     0,     0,     0,     0,   209,
-       0,     0,   207,   208,   129,   127,     0,     0,   168,   165,
-     148,   159,     0,     0,     0,     0,   157,    21,   191,   195,
-     197,   193,   223,   225,   226,   224,     0,     0,   227,   165,
-     150,   147,     0,     0,     0,     0,   152,   159,     0,    22,
-       0,     0,     0,     0,     0,   159,    12,    19,     0,   206,
-       0,   149,   155,   159,     0,    23,   151,     0,     0,     0,
-     153,   154
+       0,     0,     0,     0,     0,   131,   126,   165,   146,   159,
+     184,     0,   185,     0,     0,     0,     0,   159,     0,     0,
+     158,     0,    17,    18,    11,    14,    15,     0,   156,   163,
+     164,     0,   160,   161,   159,     0,     0,   190,     0,   194,
+       0,   196,     0,   192,     0,   235,   236,     0,    33,    43,
+      46,    76,    48,    49,    50,    64,    65,   215,   208,   207,
+     214,   287,   288,     0,   244,   242,   243,     0,     0,     0,
+     241,   292,   176,   135,   131,   125,   279,   280,   277,   278,
+     281,   282,   274,   284,   285,   286,   276,   275,   283,   270,
+     271,   272,   273,   130,   169,   170,     0,   166,   167,     0,
+      10,   137,   138,   139,     0,     0,     0,   140,    95,    16,
+     118,     0,   162,    20,     0,   134,     0,     0,     0,     0,
+     206,     0,     0,     0,     0,   212,     0,     0,   210,   211,
+     129,   127,     0,     0,   168,   165,   148,   159,     0,     0,
+       0,     0,   157,    21,   202,   191,   195,   197,   193,   226,
+     228,   229,   227,     0,     0,   230,   165,   150,   147,     0,
+       0,     0,     0,   152,   159,     0,    22,     0,     0,     0,
+       0,     0,   159,    12,    19,     0,   209,     0,   149,   155,
+     159,     0,    23,   151,     0,     0,     0,   153,   154
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -465,  -465,  -465,   169,  -465,  -465,  -465,  -465,  -465,  -126,
-    -465,  -465,     0,    -7,   -25,  -465,     6,  -343,   -64,  -465,
-       5,  -236,   225,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
-    -465,  -346,  -465,  -117,  -464,  -465,  -179,    -2,   -20,  -148,
-    -465,  -123,  -465,  -465,   -37,  -206,   245,  -465,  -465,  -465,
-    -278,  -465,  -465,   -43,  -465,   262,    64,    80,    63,    62,
-    -227
+    -459,  -459,  -459,   152,  -459,  -459,  -459,  -459,  -459,  -152,
+    -459,  -459,     0,    -7,   -25,  -459,     1,  -349,   -62,  -459,
+       2,  -240,   196,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -350,  -459,  -156,  -458,  -459,  -222,  -104,   -15,  -157,
+    -459,  -219,  -459,    38,  -459,   -78,  -249,   208,  -459,  -459,
+    -459,  -266,  -459,  -459,   -84,  -459,   132,    55,    46,   -96,
+      12,  -230
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    69,    70,    71,    72,    73,   369,   370,   371,   372,
-      74,   508,   111,   136,   113,   114,   376,    77,    78,    79,
-     137,   239,   138,    80,   261,    81,    82,    83,    84,    85,
-      86,   377,   378,   379,   441,   442,   443,   139,   140,   357,
-     163,   141,   142,   143,   402,   403,   144,   145,   146,   299,
-     392,   147,   212,   213,   148,   149,   214,   241,   151,   215,
-     216
+       0,    69,    70,    71,    72,    73,   373,   374,   375,   376,
+      74,   515,   111,   136,   113,   114,   380,    77,    78,    79,
+     137,   241,   138,    80,   263,    81,    82,    83,    84,    85,
+      86,   381,   382,   383,   446,   447,   448,   139,   140,   361,
+     163,   141,   142,   185,   143,   407,   408,   144,   145,   146,
+     303,   397,   147,   214,   215,   148,   149,   216,   243,   151,
+     217,   218
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -962,160 +964,138 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      75,   162,   112,   176,   171,   352,    76,   154,   361,   445,
-     440,   333,   476,    87,   161,   502,   165,   451,   367,   166,
-     259,   285,   112,   217,   156,   158,   159,   309,   286,   362,
-     260,   368,   167,   169,   458,   511,   310,   287,   289,   173,
-     311,   291,   293,   247,   288,   290,   228,   277,   292,   294,
-     390,   155,   313,   278,   474,   391,   247,   112,   174,   517,
-     518,   221,   222,   223,   224,   245,   246,    75,   247,   177,
-      75,   228,   248,   249,   150,   153,    76,   408,   175,    88,
-     179,   477,   183,   157,   181,   233,   234,   235,   236,   237,
-     217,   168,   150,   221,   222,   223,   224,   420,   182,   440,
-     247,   236,   237,   228,   248,   249,   359,   360,   231,   232,
-     233,   234,   235,   236,   237,   465,   466,   467,   468,   247,
-     218,   471,   219,   202,   438,   251,   252,   172,   211,   250,
-     358,   358,   358,   262,   263,   503,   440,   264,   266,   180,
-     231,   232,   233,   234,   235,   236,   237,   112,   240,   272,
-     267,   256,   268,   202,   271,   240,   440,   273,   300,   301,
-     308,   516,   234,   235,   236,   237,   240,   112,   295,   524,
-     296,   306,   297,   312,   298,   307,   274,   527,   240,   313,
-     482,   315,   355,   380,   364,   381,   240,   188,   189,   417,
-     191,   192,   193,   194,   419,   203,   444,   456,   207,   483,
-     446,   447,   475,   448,   309,   374,   484,   221,   222,   223,
-     224,   245,   246,   242,   247,   486,   243,   228,   248,   249,
-     242,   487,   496,   257,   497,   501,   504,   512,   510,   506,
-     507,   242,   513,   356,   356,   356,   520,   521,   522,   178,
-     526,   530,   531,   242,    75,   454,   161,   161,   161,   528,
-     354,   242,   529,   170,   231,   232,   233,   234,   235,   236,
-     237,   457,   244,   478,   405,   498,   164,   415,   276,    75,
-      75,   221,   222,   223,   224,   245,   246,     0,   247,   314,
-       0,   228,   248,   249,     0,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,     0,   414,     0,     0,     0,     0,     0,   320,
-     321,   322,   324,   325,     0,     0,     0,     0,   231,   232,
-     233,   234,   235,   236,   237,   365,   366,     0,     0,   373,
+      75,    76,   112,   356,   171,   176,   162,   154,   445,   450,
+     337,   482,   365,   488,   161,    87,   165,   456,   371,   166,
+     219,   156,   112,   249,   313,   261,   317,   509,   480,   167,
+     169,   372,   489,   366,   463,   262,   362,   362,   362,   173,
+     223,   224,   225,   226,   247,   248,   242,   249,   518,   289,
+     230,   250,   251,   242,   244,   395,   290,   112,   174,   249,
+     396,   244,   230,   249,   242,   150,   153,    75,   238,   239,
+      75,    76,   244,   155,   157,   314,   242,   179,   413,   315,
+     483,    88,   168,   150,   244,   175,   242,   233,   234,   235,
+     236,   237,   238,   239,   244,   158,   159,   425,   445,   363,
+     364,   235,   236,   237,   238,   239,   236,   237,   238,   239,
+     291,   177,   293,   295,   297,   524,   525,   292,   172,   294,
+     296,   298,   317,   204,   494,   443,   181,   182,   213,   252,
+     180,   183,   471,   472,   473,   474,   445,   510,   477,   299,
+     264,   300,   304,   301,   305,   302,   219,   112,   220,   274,
+     221,   258,   310,   204,   253,   464,   312,   445,   187,   188,
+     189,   254,   265,   266,   523,   268,   269,   112,   270,   273,
+     275,   319,   531,   311,   317,   359,   276,   316,   190,   191,
+     534,   193,   194,   195,   196,   368,   205,   384,   386,   209,
+     424,   422,   449,   451,   452,   453,   461,   313,   490,   492,
+     493,   503,   504,   481,   511,   508,   517,   245,   519,   378,
+     513,   520,   514,   527,   259,   528,   529,   533,   537,   535,
+     536,   538,   178,   459,   170,   484,   462,   410,   505,   164,
+     420,   318,     0,     0,     0,     0,   280,     0,     0,   278,
+     360,   360,   360,     0,     0,     0,    75,   358,   161,   161,
+     161,   186,   186,   186,   186,     0,     0,   192,     0,     0,
+       0,     0,     0,     0,   206,   207,     0,     0,     0,     0,
+       0,    75,    75,     0,     0,     0,     0,     0,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,   335,   336,     0,     0,     0,     0,     0,
+       0,     0,   324,   325,   326,   328,   329,   419,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   369,   370,
+       0,     0,   377,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   388,     0,   390,
+       0,   392,     0,   394,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    75,     0,    75,
+       0,     0,   466,     0,   458,   414,   415,    75,   416,     0,
+       0,     0,   421,     0,   423,     0,   223,   224,   225,   226,
+     247,   248,    75,   249,    75,     0,   230,   250,   251,     0,
+       0,     0,     0,   426,   427,   428,   429,   430,   431,   432,
+     433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
+       0,     0,     0,   387,     0,   389,     0,   391,     0,   393,
+     454,   455,     0,   233,   234,   235,   236,   237,   238,   239,
+       0,     0,     0,   491,     0,     0,   409,   409,   411,   412,
+       0,   465,     0,     0,     0,     0,   281,    75,     0,    75,
+     486,   112,   282,     0,     0,     0,     0,     0,     0,     0,
+     223,   224,   225,   226,   247,   248,     0,   249,     0,     0,
+     230,   250,   251,     0,     0,     0,     0,     0,     0,   421,
+       0,     0,    75,   507,     0,    75,   516,    75,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   383,     0,   385,     0,   387,     0,   389,     0,
-       0,     0,     0,    75,     0,    75,     0,     0,     0,     0,
-     453,     0,     0,    75,     0,     0,     0,     0,     0,     0,
-     409,   410,     0,   411,     0,     0,     0,   416,    75,   418,
-      75,   184,   185,   186,   187,     0,     0,   190,     0,     0,
-       0,     0,     0,     0,   204,   205,     0,     0,   421,   422,
-     423,   424,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,   434,   435,   436,   437,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   449,   450,     0,   485,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   460,
-       0,     0,    75,     0,    75,   459,   112,     0,     0,     0,
-     480,     0,     0,   221,   222,   223,   224,   245,   246,     0,
-     247,     0,     0,   228,   248,   249,     0,     0,     0,     0,
-       0,   279,     0,     0,     0,     0,    75,   280,     0,    75,
-     509,    75,   500,   416,     0,   221,   222,   223,   224,   245,
-     246,     0,   247,     0,     0,   228,   248,   249,     0,    75,
-     231,   232,   233,   234,   235,   236,   237,    75,     0,     0,
-       0,   525,     0,     0,     0,    75,     0,     0,     0,     0,
-       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
-       0,     0,   231,   232,   233,   234,   235,   236,   237,   382,
-       0,   384,     0,   386,     0,   388,     0,   505,     0,     0,
-       0,     0,     0,     0,     0,   281,     0,     0,     0,     0,
-       0,   282,   404,   404,   406,   407,     0,     0,   514,   221,
-     222,   223,   224,   245,   246,     0,   247,   283,     0,   228,
-     248,   249,     0,   284,     0,     0,     0,     0,     0,     0,
-       0,   221,   222,   223,   224,   245,   246,     0,   247,     0,
-       0,   228,   248,   249,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   231,   232,   233,   234,
-     235,   236,   237,     0,     0,     0,   404,     0,     0,     0,
-       0,   461,     0,     0,     0,     0,     0,     0,   231,   232,
-     233,   234,   235,   236,   237,   221,   222,   223,   224,   245,
-     246,   462,   247,     0,   464,   228,   248,   249,     0,   469,
-     470,     0,   472,   473,     0,   221,   222,   223,   224,   245,
-     246,     0,   247,     0,     0,   228,   248,   249,     0,     0,
-       0,     0,     0,     0,     0,   463,     0,     0,     0,     0,
-       0,     0,   231,   232,   233,   234,   235,   236,   237,   221,
-     222,   223,   224,   245,   246,     0,   247,     0,     0,   228,
-     248,   249,   231,   232,   233,   234,   235,   236,   237,     0,
-       0,     0,   488,   489,   490,   491,     0,   492,   493,   494,
-     495,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   231,   232,   233,   234,
-     235,   236,   237,     0,     0,     0,     0,     0,     0,   469,
-     115,   116,     1,   208,   209,    89,   119,   120,   121,   122,
-       6,    90,   519,    91,     8,    92,    93,    94,    12,    13,
-      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
-     101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
-       0,    30,    31,   125,    33,    34,    35,     0,    36,    37,
-     126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
-       0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
-       0,     0,     0,     0,   152,     0,   135,     0,   210,   115,
-     116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
-      90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
-      15,    96,   220,    18,    97,    98,    99,   100,    22,   101,
-      24,    25,   102,   103,   104,   105,   221,   222,   223,   224,
-     225,   226,   125,   227,    34,    35,   228,   229,   230,   126,
-      39,   127,    41,   128,    43,   129,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
-      58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
-       0,     0,   110,   231,   232,   233,   234,   235,   236,   237,
-       0,     0,   238,   152,     0,   135,   115,   116,     1,   117,
+     409,     0,     0,     0,     0,     0,    75,   233,   234,   235,
+     236,   237,   238,   239,    75,     0,     0,     0,   532,     0,
+       0,     0,    75,     0,     0,     0,     0,     0,     0,   470,
+      75,     0,     0,     0,   475,   476,     0,   478,   479,     0,
+       0,     0,     0,     0,   512,     0,   283,     0,     0,     0,
+       0,     0,   284,     0,     0,     0,     0,     0,     0,     0,
+     223,   224,   225,   226,   247,   248,   521,   249,   285,     0,
+     230,   250,   251,     0,   286,     0,     0,     0,     0,     0,
+       0,     0,   223,   224,   225,   226,   247,   248,     0,   249,
+       0,     0,   230,   250,   251,     0,     0,     0,   495,   496,
+     497,   498,     0,   499,   500,   501,   502,   233,   234,   235,
+     236,   237,   238,   239,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   233,
+     234,   235,   236,   237,   238,   239,   475,   115,   116,     1,
+     210,   211,    89,   119,   120,   121,   122,     6,    90,   526,
+      91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
+      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+     102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
+     125,    33,    34,    35,     0,    36,    37,   126,    39,   127,
+      41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
+     131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
+     110,     0,     0,     0,   132,   133,     0,     0,     0,     0,
+       0,   152,     0,   135,     0,   212,   115,   116,     1,   117,
      118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
-       8,    92,    93,    94,    12,   253,    95,    15,    96,    17,
+       8,    92,    93,    94,    12,    13,    95,    15,    96,   222,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
-     103,   104,   105,   221,   222,   223,   224,   225,   226,   125,
-     227,   254,   255,   228,   229,   230,   126,    39,   127,    41,
+     103,   104,   105,   223,   224,   225,   226,   227,   228,   125,
+     229,    34,    35,   230,   231,   232,   126,    39,   127,    41,
      128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
       51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
       61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
-     231,   232,   233,   234,   235,   236,   237,     0,     0,   238,
+     233,   234,   235,   236,   237,   238,   239,     0,     0,   240,
      152,     0,   135,   115,   116,     1,   117,   118,    89,   119,
      120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
-      94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
-      99,   100,    22,   101,   265,    25,   102,   103,   104,   105,
-     221,   222,   223,   224,   225,   226,   125,   227,    34,    35,
-     228,   229,   230,   126,    39,   127,    41,   128,    43,   129,
+      94,    12,   255,    95,    15,    96,    17,    18,    97,    98,
+      99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
+     223,   224,   225,   226,   227,   228,   125,   229,   256,   257,
+     230,   231,   232,   126,    39,   127,    41,   128,    43,   129,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
       54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
-     107,   108,   109,     0,     0,     0,   110,   231,   232,   233,
-     234,   235,   236,   237,     0,     0,   238,   152,     0,   135,
+     107,   108,   109,     0,     0,     0,   110,   233,   234,   235,
+     236,   237,   238,   239,     0,     0,   240,   152,     0,   135,
      115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
        6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
-     101,    24,    25,   102,   103,   104,   105,   221,   222,   223,
-     224,   225,   226,   125,   227,    34,    35,   228,   229,   230,
+     101,   267,    25,   102,   103,   104,   105,   223,   224,   225,
+     226,   227,   228,   125,   229,    34,    35,   230,   231,   232,
      126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
      130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
-       0,     0,     0,   110,   231,   232,   233,   234,   235,   236,
-     237,     0,     0,   238,   152,     0,   135,   115,   116,     1,
+       0,     0,     0,   110,   233,   234,   235,   236,   237,   238,
+     239,     0,     0,   240,   152,     0,   135,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
-     275,    18,    97,    98,    99,   100,    22,   101,    24,    25,
-     102,   103,   104,   105,   221,   222,   223,   224,   225,   226,
-     125,   227,    34,    35,   228,   229,   230,   126,    39,   127,
+      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+     102,   103,   104,   105,   223,   224,   225,   226,   227,   228,
+     125,   229,    34,    35,   230,   231,   232,   126,    39,   127,
       41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
        0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
      131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
-     110,   231,   232,   233,   234,   235,   236,   237,     0,     0,
-       0,   152,     0,   135,   115,   116,     1,   117,   118,    89,
+     110,   233,   234,   235,   236,   237,   238,   239,     0,     0,
+     240,   152,     0,   135,   115,   116,     1,   117,   118,    89,
      119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
-      93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
+      93,    94,    12,    13,    95,    15,    96,   279,    18,    97,
       98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
-     105,     0,     0,     0,     0,    30,    31,   125,    33,    34,
-      35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
+     105,   223,   224,   225,   226,   227,   228,   125,   229,    34,
+      35,   230,   231,   232,   126,    39,   127,    41,   128,    43,
      129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
-     106,   107,   108,   109,     0,     0,     0,   110,     0,     0,
-       0,   132,   133,     0,     0,     0,     0,     0,   152,   206,
+     106,   107,   108,   109,     0,     0,     0,   110,   233,   234,
+     235,   236,   237,   238,   239,     0,     0,     0,   152,     0,
      135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
-     122,     6,    90,     0,    91,   123,    92,    93,    94,    12,
-      13,    95,   124,    96,    17,    18,    97,    98,    99,   100,
+     122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
+      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
       22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
        0,     0,    30,    31,   125,    33,    34,    35,     0,    36,
       37,   126,    39,   127,    41,   128,    43,   129,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
       56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
      109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
-       0,     0,     0,     0,     0,   134,     0,   135,   115,   116,
+       0,     0,     0,     0,     0,   152,   208,   135,   115,   116,
        1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
@@ -1125,9 +1105,9 @@ static const yytype_int16 yytable[] =
       50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
       59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
        0,   110,     0,     0,     0,   132,   133,     0,     0,     0,
-       0,     0,   152,     0,   135,   115,   116,     1,   117,   118,
-      89,   119,   120,   121,   122,     6,    90,     0,    91,     8,
-      92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
+       0,     0,   152,   277,   135,   115,   116,     1,   117,   118,
+      89,   119,   120,   121,   122,     6,    90,     0,    91,   123,
+      92,    93,    94,    12,    13,    95,   124,    96,    17,    18,
       97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
      104,   105,     0,     0,     0,     0,    30,    31,   125,    33,
       34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
@@ -1142,7 +1122,7 @@ static const yytype_int16 yytable[] =
        0,     0,     0,    30,    31,   125,    33,    34,    35,     0,
       36,    37,   126,    39,   127,    41,   128,    43,   129,    45,
       46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,   130,    58,    59,    60,    61,    62,   106,   107,
+      55,    56,   130,    58,    59,   131,    61,    62,   106,   107,
      108,   109,     0,     0,     0,   110,     0,     0,     0,   132,
      133,     0,     0,     0,     0,     0,   152,     0,   135,   115,
      116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
@@ -1150,99 +1130,136 @@ static const yytype_int16 yytable[] =
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
       30,    31,   125,    33,    34,    35,     0,    36,    37,   126,
-     393,   127,   394,   128,   395,   129,   396,    46,    47,    48,
-      49,    50,     0,    51,    52,   397,   398,   399,    56,   130,
-      58,   400,   401,    61,    62,   106,   107,   108,   109,     0,
+      39,   127,    41,   128,    43,   129,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
+      58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
        0,     0,   110,     0,     0,     0,   132,   133,     0,     0,
-       0,     0,     0,   152,     0,   135,   115,   116,     1,   117,
+       0,     0,     0,   134,     0,   135,   115,   116,     1,   117,
      118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
        8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
      103,   104,   105,     0,     0,     0,     0,    30,    31,   125,
       33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
      128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,   397,   398,    55,    56,   130,    58,   400,   401,
+      51,    52,    53,    54,    55,    56,   130,    58,    59,    60,
       61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
        0,     0,     0,   132,   133,     0,     0,     0,     0,     0,
-     152,     0,   135,   115,   116,     1,   117,   118,    89,   119,
+     184,     0,   135,   115,   116,     1,   117,   118,    89,   119,
      120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
       94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
       99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
-       0,     0,     0,     0,     0,     0,   125,    33,    34,    35,
+       0,     0,     0,     0,    30,    31,   125,    33,    34,    35,
        0,    36,    37,   126,    39,   127,    41,   128,    43,   129,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
+      54,    55,    56,   130,    58,    59,    60,    61,    62,   106,
      107,   108,   109,     0,     0,     0,   110,     0,     0,     0,
      132,   133,     0,     0,     0,     0,     0,   152,     0,   135,
      115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
        6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
      101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
-       0,     0,     0,   125,    33,    34,    35,     0,     0,     0,
-     126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
+       0,    30,    31,   125,    33,    34,    35,     0,    36,    37,
+     126,   398,   127,   399,   128,   400,   129,   401,    46,    47,
+      48,    49,    50,     0,    51,    52,   402,   403,   404,    56,
+     130,    58,   405,   406,    61,    62,   106,   107,   108,   109,
        0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
        0,     0,     0,     0,   152,     0,   135,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
-     102,   103,   104,   105,     0,     0,     0,     0,     0,     0,
-     125,     0,    34,    35,     0,     0,     0,   126,    39,   127,
+     102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
+     125,    33,    34,    35,     0,    36,    37,   126,    39,   127,
       41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
-     131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
-     110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       1,   152,     0,   135,     2,     3,     4,     5,     6,     0,
-       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,     0,    66,     0,
-       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
-      68,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
-       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
-     353,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
-       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
-     375,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
-       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
-     479,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
-       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
-     499,     7,     8,     9,    10,    11,    12,    13,     0,    15,
-      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
-      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
-       0,    67,     0,     0,     0,     0,     0,     0,     0,     0,
-     439,     1,   412,   413,    89,     2,     3,     4,     5,     6,
+       0,    51,    52,   402,   403,    55,    56,   130,    58,   405,
+     406,    61,    62,   106,   107,   108,   109,     0,     0,     0,
+     110,     0,     0,     0,   132,   133,     0,     0,     0,     0,
+       0,   152,     0,   135,   115,   116,     1,   117,   118,    89,
+     119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
+      93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
+      98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
+     105,     0,     0,     0,     0,     0,     0,   125,    33,    34,
+      35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
+     129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
+     106,   107,   108,   109,     0,     0,     0,   110,     0,     0,
+       0,   132,   133,     0,     0,     0,     0,     0,   152,     0,
+     135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
+     122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
+      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
+      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
+       0,     0,     0,     0,   125,    33,    34,    35,     0,     0,
+       0,   126,    39,   127,    41,   128,    43,   129,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
+     109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
+       0,     0,     0,     0,     0,   152,     0,   135,   115,   116,
+       1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
+       0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
+      96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
+      25,   102,   103,   104,   105,     0,     0,     0,     0,     0,
+       0,   125,     0,    34,    35,     0,     0,     0,   126,    39,
+     127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
+      59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
+       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     1,   152,     0,   135,     2,     3,     4,     5,     6,
+       0,     0,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,    26,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,    68,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,   357,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,   379,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,   485,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
+       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
+       0,   506,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
+      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
+       0,     0,    67,     0,     0,     0,     0,     0,     0,     0,
+       0,   444,     1,   417,   418,    89,     2,     3,     4,     5,
+       6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
+      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
+     101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,   106,   107,   108,   109,
+       0,     1,     0,   110,    89,     2,     3,     4,     5,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
@@ -1256,187 +1273,175 @@ static const yytype_int16 yytable[] =
       25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      50,     0,    51,    52,    53,    54,    55,    56,   160,    58,
       59,    60,    61,    62,   106,   107,   108,   109,     0,     1,
        0,   110,    89,     2,     3,     4,     5,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
       32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   160,    58,    59,
+      41,    42,    43,    44,    45,   197,   198,   199,   200,   201,
+       0,    51,   202,    53,    54,    55,   203,    57,    58,    59,
       60,    61,    62,   106,   107,   108,   109,     0,     1,     0,
      110,    89,     2,     3,     4,     5,     6,    90,     0,    91,
        8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
      103,   104,   105,     0,     0,     0,     0,    30,    31,    32,
       33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,   195,   196,   197,   198,   199,     0,
-      51,   200,    53,    54,    55,   201,    57,    58,    59,    60,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,   260,    57,    58,    59,    60,
       61,    62,   106,   107,   108,   109,     0,     1,     0,   110,
-      89,     2,     3,     4,     5,     6,    90,     0,    91,     8,
+      89,   119,   120,     4,     5,     6,    90,     0,    91,     8,
       92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
       97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
      104,   105,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,   258,    57,    58,    59,    60,    61,
-      62,   106,   107,   108,   109,     0,     1,     0,   110,    89,
-     119,   120,     4,     5,     6,    90,     0,    91,     8,    92,
-      93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
-      98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
-     105,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
-     129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-     106,   107,   108,   109,     1,     0,     0,   110,     2,     3,
-       4,     5,     6,     0,     0,     7,     8,     9,    10,     0,
-      12,    13,     0,    15,    16,    17,    18,    19,    98,    21,
-       0,    22,     0,    24,    25,     0,    27,    28,    29,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,   106,    64,
-     269,     0,     0,     0,     0,    67,     0,     0,   221,   222,
-     223,   224,   245,   246,     0,   247,     0,     0,   228,   248,
-     249,   221,   222,   223,   224,   245,   246,     0,   247,     0,
-       0,   228,   248,   249,   221,   222,   223,   224,   245,   246,
-       0,   247,     0,     0,   228,   248,   249,     0,     0,     0,
-       0,     0,     0,     0,     0,   231,   232,   233,   234,   235,
-     236,   237,     0,   270,     0,     0,     0,     0,   231,   232,
-     233,   234,   235,   236,   237,     0,     0,   304,     0,   305,
-       0,   231,   232,   233,   234,   235,   236,   237,     0,     0,
-       0,     0,   305,   334,   335,   336,   337,   338,   339,     0,
-     340,     0,     0,   341,   342,   343,   221,   222,   223,   224,
-     245,   246,     0,   247,     0,     0,   228,   248,   249,   221,
-     222,   223,   224,   245,   246,     0,   247,     0,     0,   228,
-     248,   249,     0,     0,     0,     0,     0,     0,     0,     0,
-     344,   345,   346,   347,   348,   349,   350,     0,     0,   351,
-       0,     0,     0,   231,   232,   233,   234,   235,   236,   237,
-       0,   363,     0,     0,     0,     0,   231,   232,   233,   234,
-     235,   236,   237,     0,   452,   221,   222,   223,   224,   245,
-     246,     0,   247,     0,     0,   228,   248,   249,   221,   222,
-     223,   224,   245,   246,     0,   247,     0,     0,   228,   248,
-     249,   221,   222,   223,   224,   245,   246,     0,   247,     0,
-       0,   228,   248,   249,     0,     0,     0,     0,     0,     0,
-       0,     0,   231,   232,   233,   234,   235,   236,   237,     0,
-     455,     0,     0,     0,     0,   231,   232,   233,   234,   235,
-     236,   237,     0,   481,     0,     0,     0,     0,   231,   232,
-     233,   234,   235,   236,   237,     0,   515,   221,   222,   223,
-     224,   245,   246,     0,   247,     0,     0,   228,   248,   249,
-       0,     0,     0,     0,     0,     0,   221,   222,   223,   224,
-     245,   246,     0,   247,     0,     0,   228,   248,   249,   221,
-     222,   223,   224,   245,   246,     0,   247,     0,     0,   228,
-     248,   249,     0,     0,   231,   232,   233,   234,   235,   236,
-     237,     0,   523,   302,   303,     0,     0,     0,     0,     0,
-       0,     0,     0,   231,   232,   233,   234,   235,   236,   237,
-       0,     0,     0,     0,     0,     0,   231,   232,   233,   234,
-     235,   236,   237,   334,   335,   336,   337,   338,   339,     0,
-     340,     0,     0,   341,   342,   343,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     344,   345,   346,   347,   348,   349,   350
+      34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
+      43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,   106,   107,   108,   109,     1,     0,     0,   110,     2,
+       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
+       0,    12,    13,     0,    15,    16,    17,    18,    19,    98,
+      21,     0,    22,     0,    24,    25,     0,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,   106,
+      64,   287,     0,     0,     0,     0,    67,   288,     0,     0,
+       0,     0,     0,     0,   467,   223,   224,   225,   226,   247,
+     248,     0,   249,     0,     0,   230,   250,   251,   223,   224,
+     225,   226,   247,   248,   468,   249,     0,     0,   230,   250,
+     251,     0,     0,     0,     0,     0,     0,     0,   223,   224,
+     225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
+     251,     0,   233,   234,   235,   236,   237,   238,   239,     0,
+       0,     0,     0,     0,   271,   233,   234,   235,   236,   237,
+     238,   239,   223,   224,   225,   226,   247,   248,   469,   249,
+       0,     0,   230,   250,   251,   233,   234,   235,   236,   237,
+     238,   239,   223,   224,   225,   226,   247,   248,     0,   249,
+       0,     0,   230,   250,   251,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   233,
+     234,   235,   236,   237,   238,   239,     0,   272,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   246,     0,   233,
+     234,   235,   236,   237,   238,   239,   223,   224,   225,   226,
+     247,   248,     0,   249,     0,     0,   230,   250,   251,   223,
+     224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
+     250,   251,   223,   224,   225,   226,   247,   248,     0,   249,
+       0,     0,   230,   250,   251,     0,     0,     0,     0,     0,
+       0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
+       0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
+     237,   238,   239,     0,     0,   308,     0,   309,     0,   233,
+     234,   235,   236,   237,   238,   239,     0,     0,   385,     0,
+     309,   223,   224,   225,   226,   247,   248,     0,   249,     0,
+       0,   230,   250,   251,   338,   339,   340,   341,   342,   343,
+       0,   344,     0,     0,   345,   346,   347,   223,   224,   225,
+     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
+       0,     0,     0,     0,     0,     0,     0,     0,   233,   234,
+     235,   236,   237,   238,   239,     0,     0,     0,     0,   309,
+       0,   348,   349,   350,   351,   352,   353,   354,     0,     0,
+     355,     0,     0,     0,   233,   234,   235,   236,   237,   238,
+     239,     0,   367,   223,   224,   225,   226,   247,   248,     0,
+     249,     0,     0,   230,   250,   251,   223,   224,   225,   226,
+     247,   248,     0,   249,     0,     0,   230,   250,   251,   223,
+     224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
+     250,   251,     0,     0,     0,     0,     0,     0,     0,     0,
+     233,   234,   235,   236,   237,   238,   239,     0,   457,     0,
+       0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
+       0,   460,     0,     0,     0,     0,   233,   234,   235,   236,
+     237,   238,   239,     0,   487,   223,   224,   225,   226,   247,
+     248,     0,   249,     0,     0,   230,   250,   251,   223,   224,
+     225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
+     251,     0,     0,     0,     0,     0,     0,   223,   224,   225,
+     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
+       0,     0,   233,   234,   235,   236,   237,   238,   239,     0,
+     522,     0,     0,     0,     0,   233,   234,   235,   236,   237,
+     238,   239,     0,   530,   306,   307,     0,     0,     0,     0,
+       0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
+     239,   223,   224,   225,   226,   247,   248,     0,   249,     0,
+       0,   230,   250,   251,   338,   339,   340,   341,   342,   343,
+       0,   344,     0,     0,   345,   346,   347,   223,   224,   225,
+     226,     0,     0,     0,   249,     0,     0,   230,   250,   251,
+       0,     0,     0,     0,     0,     0,     0,     0,   233,   234,
+     235,   236,   237,   238,   239,     0,     0,     0,     0,     0,
+       0,   348,   349,   350,   351,   352,   353,   354,     0,     0,
+       0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
+     239
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    21,     9,    67,    29,   241,     0,    14,    23,   355,
-     353,   238,    16,    31,    21,   479,    23,   363,    84,    26,
-      34,    69,    29,    99,    19,    36,    37,   103,    76,    44,
-      44,    97,    27,    28,   380,   499,    98,    69,    69,    64,
-     102,    69,    69,    49,    76,    76,    52,    28,    76,    76,
-      23,    31,    98,    34,   100,    28,    49,    64,    65,    97,
-      98,    42,    43,    44,    45,    46,    47,    67,    49,     0,
-      70,    52,    53,    54,    10,    11,    70,   304,    97,    97,
-      75,    85,    98,    19,    97,    91,    92,    93,    94,    95,
-      99,    27,    28,    42,    43,    44,    45,   333,    97,   442,
-      49,    94,    95,    52,    53,    54,   254,   255,    89,    90,
-      91,    92,    93,    94,    95,   393,   394,   395,   396,    49,
-      97,   399,    97,   130,   351,    97,    97,    63,   135,   154,
-     253,   254,   255,    33,    97,   481,   479,    97,    97,    75,
-      89,    90,    91,    92,    93,    94,    95,   154,   150,   174,
-      97,   158,    97,   160,    97,   157,   499,    97,    28,    28,
-     102,   507,    92,    93,    94,    95,   168,   174,    55,   515,
-      57,   103,    59,   102,    61,   103,   183,   523,   180,    98,
-      15,    26,    97,    97,    28,    26,   188,   123,   124,   100,
-     126,   127,   128,   129,    98,   131,    16,    87,   134,    34,
-      97,    97,   438,    97,   103,   269,    86,    42,    43,    44,
-      45,    46,    47,   150,    49,    97,   152,    52,    53,    54,
-     157,    10,    28,   159,    71,    97,    34,    85,    71,    97,
-      97,   168,    86,   253,   254,   255,    85,    97,    97,    70,
-      97,    97,    97,   180,   244,   371,   253,   254,   255,    86,
-     244,   188,    86,    28,    89,    90,    91,    92,    93,    94,
-      95,   378,    33,   442,   301,   471,    21,   310,   188,   269,
-     270,    42,    43,    44,    45,    46,    47,    -1,    49,   217,
-      -1,    52,    53,    54,    -1,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,    -1,   310,    -1,    -1,    -1,    -1,    -1,   245,
-     246,   247,   248,   249,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,   261,   262,    -1,    -1,   265,
+       0,     0,     9,   243,    29,    67,    21,    14,   357,   359,
+     240,    16,    23,    15,    21,    31,    23,   367,    84,    26,
+      99,    19,    29,    49,   103,    34,    98,   485,   100,    27,
+      28,    97,    34,    44,   384,    44,   255,   256,   257,    64,
+      42,    43,    44,    45,    46,    47,   150,    49,   506,    69,
+      52,    53,    54,   157,   150,    23,    76,    64,    65,    49,
+      28,   157,    52,    49,   168,    10,    11,    67,    94,    95,
+      70,    70,   168,    31,    19,    98,   180,    75,   308,   102,
+      85,    97,    27,    28,   180,    97,   190,    89,    90,    91,
+      92,    93,    94,    95,   190,    36,    37,   337,   447,   256,
+     257,    91,    92,    93,    94,    95,    92,    93,    94,    95,
+      69,     0,    69,    69,    69,    97,    98,    76,    63,    76,
+      76,    76,    98,   130,   100,   355,    97,    97,   135,   154,
+      75,    98,   398,   399,   400,   401,   485,   487,   404,    55,
+      33,    57,    28,    59,    28,    61,    99,   154,    97,   174,
+      97,   158,   103,   160,    97,   385,   102,   506,   120,   121,
+     122,    97,    97,    97,   514,    97,    97,   174,    97,    97,
+      97,    26,   522,   103,    98,    97,   183,   102,   123,   124,
+     530,   126,   127,   128,   129,    28,   131,    97,    26,   134,
+      98,   100,    16,    97,    97,    97,    87,   103,    86,    97,
+      10,    28,    71,   443,    34,    97,    71,   152,    85,   271,
+      97,    86,    97,    85,   159,    97,    97,    97,    97,    86,
+      86,    97,    70,   375,    28,   447,   382,   305,   477,    21,
+     314,   219,    -1,    -1,    -1,    -1,   190,    -1,    -1,   184,
+     255,   256,   257,    -1,    -1,    -1,   246,   246,   255,   256,
+     257,   119,   120,   121,   122,    -1,    -1,   125,    -1,    -1,
+      -1,    -1,    -1,    -1,   132,   133,    -1,    -1,    -1,    -1,
+      -1,   271,   272,    -1,    -1,    -1,    -1,    -1,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   247,   248,   249,   250,   251,   314,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   263,   264,
+      -1,    -1,   267,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   282,    -1,   284,
+      -1,   286,    -1,   288,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,   359,
+      -1,    -1,    28,    -1,   371,   310,   311,   367,   313,    -1,
+      -1,    -1,   317,    -1,   319,    -1,    42,    43,    44,    45,
+      46,    47,   382,    49,   384,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+      -1,    -1,    -1,   281,    -1,   283,    -1,   285,    -1,   287,
+     365,   366,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,   458,    -1,    -1,   304,   305,   306,   307,
+      -1,   386,    -1,    -1,    -1,    -1,    28,   447,    -1,   449,
+     449,   458,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,   424,
+      -1,    -1,   482,   482,    -1,   485,   493,   487,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   278,    -1,   280,    -1,   282,    -1,   284,    -1,
-      -1,    -1,    -1,   353,    -1,   355,    -1,    -1,    -1,    -1,
-     367,    -1,    -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,
-     306,   307,    -1,   309,    -1,    -1,    -1,   313,   378,   315,
-     380,   119,   120,   121,   122,    -1,    -1,   125,    -1,    -1,
-      -1,    -1,    -1,    -1,   132,   133,    -1,    -1,   334,   335,
-     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
-     346,   347,   348,   349,   350,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   361,   362,    -1,   453,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-      -1,    -1,   442,    -1,   444,   381,   453,    -1,    -1,    -1,
-     444,    -1,    -1,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
-      -1,    28,    -1,    -1,    -1,    -1,   476,    34,    -1,   479,
-     487,   481,   476,   419,    -1,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,   499,
-      89,    90,    91,    92,    93,    94,    95,   507,    -1,    -1,
-      -1,   518,    -1,    -1,    -1,   515,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   523,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,   277,
-      -1,   279,    -1,   281,    -1,   283,    -1,   483,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,
-      -1,    34,   300,   301,   302,   303,    -1,    -1,   504,    42,
-      43,    44,    45,    46,    47,    -1,    49,    28,    -1,    52,
-      53,    54,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,   364,    -1,    -1,    -1,
-      -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    42,    43,    44,    45,    46,
-      47,    28,    49,    -1,   392,    52,    53,    54,    -1,   397,
-     398,    -1,   400,   401,    -1,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    -1,   460,   461,   462,   463,    -1,   465,   466,   467,
-     468,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,   497,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,   510,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    99,    -1,   101,    -1,   103,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    98,    99,    -1,   101,     5,     6,     7,     8,
+     368,    -1,    -1,    -1,    -1,    -1,   506,    89,    90,    91,
+      92,    93,    94,    95,   514,    -1,    -1,    -1,   525,    -1,
+      -1,    -1,   522,    -1,    -1,    -1,    -1,    -1,    -1,   397,
+     530,    -1,    -1,    -1,   402,   403,    -1,   405,   406,    -1,
+      -1,    -1,    -1,    -1,   489,    -1,    28,    -1,    -1,    -1,
+      -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    43,    44,    45,    46,    47,   511,    49,    28,    -1,
+      52,    53,    54,    -1,    34,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,   466,   467,
+     468,   469,    -1,   471,   472,   473,   474,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,   504,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,   517,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
+      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
+      -1,    99,    -1,   101,    -1,   103,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
@@ -1475,16 +1480,16 @@ static const yytype_int16 yycheck[] =
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
       88,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
+      98,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,   100,
+      81,    82,    83,    84,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,
      101,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
@@ -1494,7 +1499,7 @@ static const yytype_int16 yycheck[] =
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
       84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
-      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
@@ -1504,7 +1509,7 @@ static const yytype_int16 yycheck[] =
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
       -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
-      -1,    -1,    99,    -1,   101,     5,     6,     7,     8,     9,
+      -1,    -1,    99,   100,   101,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
@@ -1547,7 +1552,7 @@ static const yytype_int16 yycheck[] =
       12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
       -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
@@ -1557,7 +1562,7 @@ static const yytype_int16 yycheck[] =
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
@@ -1566,62 +1571,99 @@ static const yytype_int16 yycheck[] =
        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,
-      48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,    57,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
-      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       7,    99,    -1,   101,    11,    12,    13,    14,    15,    -1,
+      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
+      -1,    99,    -1,   101,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,
+      -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,
+     101,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      -1,    -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,
+      -1,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
+      -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    -1,    85,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
-       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
-      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,
+      -1,    48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
       -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      97,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      -1,     7,    99,    -1,   101,    11,    12,    13,    14,    15,
+      -1,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
+      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    -1,
+      -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    97,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      -1,     7,    -1,    88,    10,    11,    12,    13,    14,    15,
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
@@ -1660,62 +1702,72 @@ static const yytype_int16 yycheck[] =
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    -1,     7,    -1,    88,    10,
-      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,     7,    -1,    -1,    88,    11,    12,
-      13,    14,    15,    -1,    -1,    18,    19,    20,    21,    -1,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    -1,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      34,    -1,    -1,    -1,    -1,    88,    -1,    -1,    42,    43,
+      80,    81,    82,    83,    84,     7,    -1,    -1,    88,    11,
+      12,    13,    14,    15,    -1,    -1,    18,    19,    20,    21,
+      -1,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    -1,    36,    37,    -1,    39,    40,    41,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    28,    -1,    -1,    -1,    -1,    88,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    28,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
+      44,    45,    46,    47,    28,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
       44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      54,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    -1,    -1,    -1,    34,    89,    90,    91,    92,    93,
+      94,    95,    42,    43,    44,    45,    46,    47,    28,    49,
+      -1,    -1,    52,    53,    54,    89,    90,    91,    92,    93,
+      94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    -1,    89,
+      90,    91,    92,    93,    94,    95,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    98,    -1,   100,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    98,    -1,
+     100,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
       -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    98,    -1,   100,
+      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,   100,
       -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      -1,    -1,   100,    42,    43,    44,    45,    46,    47,    -1,
+      98,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    97,    42,    43,    44,    45,    46,    47,    -1,
       49,    -1,    -1,    52,    53,    54,    42,    43,    44,    45,
       46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
       53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
+      89,    90,    91,    92,    93,    94,    95,    -1,    97,    -1,
       -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
       -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
       93,    94,    95,    -1,    97,    42,    43,    44,    45,    46,
       47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
       44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
       -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
       97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    97,    79,    80,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95
+      94,    95,    -1,    97,    79,    80,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
+      45,    -1,    -1,    -1,    49,    -1,    -1,    52,    53,    54,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1736,46 +1788,46 @@ static const yytype_uint8 yystos[] =
       88,   116,   117,   118,   119,     5,     6,     8,     9,    11,
       12,    13,    14,    19,    26,    48,    55,    57,    59,    61,
       75,    78,    92,    93,    99,   101,   117,   124,   126,   141,
-     142,   145,   146,   147,   150,   151,   152,   155,   158,   159,
-     160,   162,    99,   160,   117,    31,   124,   160,    36,    37,
-      75,   117,   142,   144,   150,   117,   117,   124,   160,   124,
-     126,   118,   160,   118,   117,    97,   122,     0,   107,   124,
-     160,    97,    97,    98,   159,   159,   159,   159,   160,   160,
-     159,   160,   160,   160,   160,    63,    64,    65,    66,    67,
-      70,    74,   117,   160,   159,   159,   100,   160,     8,     9,
-     103,   117,   156,   157,   160,   163,   164,    99,    97,    97,
-      28,    42,    43,    44,    45,    46,    47,    49,    52,    53,
-      54,    89,    90,    91,    92,    93,    94,    95,    98,   125,
-     141,   161,   162,   160,    33,    46,    47,    49,    53,    54,
-     118,    97,    97,    24,    50,    51,   117,   160,    74,    34,
-      44,   128,    33,    97,    97,    36,    97,    97,    97,    34,
-      97,    97,   118,    97,   117,    28,   161,    28,    34,    28,
-      34,    28,    34,    28,    34,    69,    76,    69,    76,    69,
-      76,    69,    76,    69,    76,    55,    57,    59,    61,   153,
-      28,    28,    79,    80,    98,   100,   103,   103,   102,   103,
-      98,   102,   102,    98,   163,    26,   160,   160,   160,   160,
-     160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-     160,   160,   160,   164,    42,    43,    44,    45,    46,    47,
-      49,    52,    53,    54,    89,    90,    91,    92,    93,    94,
-      95,    98,   125,    97,   120,    97,   142,   143,   145,   143,
-     143,    23,    44,    97,    28,   160,   160,    84,    97,   110,
-     111,   112,   113,   160,   122,    97,   120,   135,   136,   137,
-      97,    26,   159,   160,   159,   160,   159,   160,   159,   160,
-      23,    28,   154,    56,    58,    60,    62,    71,    72,    73,
-      77,    78,   148,   149,   159,   148,   159,   159,   164,   160,
-     160,   160,     8,     9,   117,   157,   160,   100,   160,    98,
-     125,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-     160,   160,   160,   160,   160,   160,   160,   160,   164,    97,
-     121,   138,   139,   140,    16,   135,    97,    97,    97,   160,
-     160,   135,    97,   117,   113,    97,    87,   137,   135,   160,
-      28,    28,    28,    28,   159,   154,   154,   154,   154,   159,
-     159,   154,   159,   159,   100,   125,    16,    85,   140,    97,
-     120,    97,    15,    34,    86,   118,    97,    10,   159,   159,
-     159,   159,   159,   159,   159,   159,    28,    71,   149,    97,
-     120,    97,   138,   135,    34,   160,    97,    97,   115,   117,
-      71,   138,    85,    86,   160,    97,   135,    97,    98,   159,
-      85,    97,    97,    97,   135,   117,    97,   135,    86,    86,
-      97,    97
+     142,   145,   146,   148,   151,   152,   153,   156,   159,   160,
+     161,   163,    99,   161,   117,    31,   124,   161,    36,    37,
+      75,   117,   142,   144,   151,   117,   117,   124,   161,   124,
+     126,   118,   161,   118,   117,    97,   122,     0,   107,   124,
+     161,    97,    97,    98,    99,   147,   160,   147,   147,   147,
+     161,   161,   160,   161,   161,   161,   161,    63,    64,    65,
+      66,    67,    70,    74,   117,   161,   160,   160,   100,   161,
+       8,     9,   103,   117,   157,   158,   161,   164,   165,    99,
+      97,    97,    28,    42,    43,    44,    45,    46,    47,    49,
+      52,    53,    54,    89,    90,    91,    92,    93,    94,    95,
+      98,   125,   141,   162,   163,   161,    33,    46,    47,    49,
+      53,    54,   118,    97,    97,    24,    50,    51,   117,   161,
+      74,    34,    44,   128,    33,    97,    97,    36,    97,    97,
+      97,    34,    97,    97,   118,    97,   117,   100,   161,    28,
+     162,    28,    34,    28,    34,    28,    34,    28,    34,    69,
+      76,    69,    76,    69,    76,    69,    76,    69,    76,    55,
+      57,    59,    61,   154,    28,    28,    79,    80,    98,   100,
+     103,   103,   102,   103,    98,   102,   102,    98,   164,    26,
+     161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
+     161,   161,   161,   161,   161,   161,   161,   165,    42,    43,
+      44,    45,    46,    47,    49,    52,    53,    54,    89,    90,
+      91,    92,    93,    94,    95,    98,   125,    97,   120,    97,
+     142,   143,   145,   143,   143,    23,    44,    97,    28,   161,
+     161,    84,    97,   110,   111,   112,   113,   161,   122,    97,
+     120,   135,   136,   137,    97,    98,    26,   160,   161,   160,
+     161,   160,   161,   160,   161,    23,    28,   155,    56,    58,
+      60,    62,    71,    72,    73,    77,    78,   149,   150,   160,
+     149,   160,   160,   165,   161,   161,   161,     8,     9,   117,
+     158,   161,   100,   161,    98,   125,   161,   161,   161,   161,
+     161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
+     161,   161,   161,   165,    97,   121,   138,   139,   140,    16,
+     135,    97,    97,    97,   161,   161,   135,    97,   117,   113,
+      97,    87,   137,   135,   165,   161,    28,    28,    28,    28,
+     160,   155,   155,   155,   155,   160,   160,   155,   160,   160,
+     100,   125,    16,    85,   140,    97,   120,    97,    15,    34,
+      86,   118,    97,    10,   100,   160,   160,   160,   160,   160,
+     160,   160,   160,    28,    71,   150,    97,   120,    97,   138,
+     135,    34,   161,    97,    97,   115,   117,    71,   138,    85,
+      86,   161,    97,   135,    97,    98,   160,    85,    97,    97,
+      97,   135,   117,    97,   135,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1801,15 +1853,16 @@ static const yytype_uint8 yyr1[] =
      140,   141,   141,   141,   141,   141,   141,   141,   141,   141,
      141,   141,   141,   142,   143,   143,   144,   144,   145,   145,
      145,   145,   145,   145,   145,   145,   145,   145,   146,   146,
-     147,   147,   147,   147,   148,   148,   148,   148,   148,   149,
-     150,   150,   150,   151,   151,   151,   151,   151,   151,   151,
-     151,   151,   151,   152,   152,   152,   152,   152,   153,   153,
-     153,   153,   154,   154,   155,   155,   155,   156,   156,   157,
-     157,   157,   158,   158,   159,   159,   160,   160,   160,   160,
-     160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-     160,   160,   160,   160,   160,   161,   161,   161,   161,   161,
+     147,   147,   147,   148,   148,   148,   148,   149,   149,   149,
+     149,   149,   150,   151,   151,   151,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,   152,   153,   153,   153,   153,
+     153,   154,   154,   154,   154,   155,   155,   156,   156,   156,
+     157,   157,   158,   158,   158,   159,   159,   160,   160,   161,
      161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
-     161,   161,   161,   161,   162,   162,   163,   163,   164,   164
+     161,   161,   161,   161,   161,   161,   161,   161,   162,   162,
+     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     162,   162,   162,   162,   162,   162,   162,   163,   163,   164,
+     164,   165,   165
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1835,15 +1888,16 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     2,     4,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
        4,     6,     4,     6,     4,     6,     4,     6,     2,     2,
-       1,     1,     1,     5,     1,     1,     5,     2,     2,     2,
-       2,     4,     4,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     6,     6,     6,     6,     6,     1,     1,
-       1,     1,     1,     1,     3,     3,     3,     1,     3,     3,
-       3,     3,     2,     2,     1,     1,     1,     1,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     1,     1,     3,     3,     3,
+       1,     2,     5,     1,     1,     1,     5,     1,     1,     5,
+       2,     2,     2,     2,     4,     4,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     6,     6,     6,     6,
+       6,     1,     1,     1,     1,     1,     1,     3,     3,     3,
+       1,     3,     3,     3,     3,     2,     2,     1,     1,     1,
+       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     1,     1,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     3,     3,     3,     3,     3,     4,     4,     0,
+       1,     1,     3
 };
 
 
@@ -2117,37 +2171,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2121 "engines/director/lingo/lingo-gr.cpp"
+#line 2175 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2127 "engines/director/lingo/lingo-gr.cpp"
+#line 2181 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2133 "engines/director/lingo/lingo-gr.cpp"
+#line 2187 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2139 "engines/director/lingo/lingo-gr.cpp"
+#line 2193 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2145 "engines/director/lingo/lingo-gr.cpp"
+#line 2199 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2151 "engines/director/lingo/lingo-gr.cpp"
+#line 2205 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2415,7 +2469,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2419 "engines/director/lingo/lingo-gr.cpp"
+#line 2473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2426,7 +2480,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2430 "engines/director/lingo/lingo-gr.cpp"
+#line 2484 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2436,37 +2490,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2440 "engines/director/lingo/lingo-gr.cpp"
+#line 2494 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2446 "engines/director/lingo/lingo-gr.cpp"
+#line 2500 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2452 "engines/director/lingo/lingo-gr.cpp"
+#line 2506 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2458 "engines/director/lingo/lingo-gr.cpp"
+#line 2512 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2464 "engines/director/lingo/lingo-gr.cpp"
+#line 2518 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2470 "engines/director/lingo/lingo-gr.cpp"
+#line 2524 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2477,7 +2531,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2481 "engines/director/lingo/lingo-gr.cpp"
+#line 2535 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
@@ -2487,13 +2541,13 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2491 "engines/director/lingo/lingo-gr.cpp"
+#line 2545 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2497 "engines/director/lingo/lingo-gr.cpp"
+#line 2551 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2502,446 +2556,446 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2506 "engines/director/lingo/lingo-gr.cpp"
+#line 2560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2513 "engines/director/lingo/lingo-gr.cpp"
+#line 2567 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2519 "engines/director/lingo/lingo-gr.cpp"
+#line 2573 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2579 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2531 "engines/director/lingo/lingo-gr.cpp"
+#line 2585 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2537 "engines/director/lingo/lingo-gr.cpp"
+#line 2591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2543 "engines/director/lingo/lingo-gr.cpp"
+#line 2597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2549 "engines/director/lingo/lingo-gr.cpp"
+#line 2603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2555 "engines/director/lingo/lingo-gr.cpp"
+#line 2609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2561 "engines/director/lingo/lingo-gr.cpp"
+#line 2615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2567 "engines/director/lingo/lingo-gr.cpp"
+#line 2621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2573 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2585 "engines/director/lingo/lingo-gr.cpp"
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2591 "engines/director/lingo/lingo-gr.cpp"
+#line 2645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2597 "engines/director/lingo/lingo-gr.cpp"
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2603 "engines/director/lingo/lingo-gr.cpp"
+#line 2657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2609 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2621 "engines/director/lingo/lingo-gr.cpp"
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2645 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2657 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2669 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2675 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+#line 2747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2717 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2723 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2747 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSET  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2759 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2765 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2771 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tSTARTS  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2777 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTELL  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTHE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tTIME  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tTO  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWHILE  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWINDOW  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWITH  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWITHIN  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* CMDID: tWORD  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* CMDID: tWORDS  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tELSE  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2897 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tENDCLAUSE  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2903 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tEXIT  */
 #line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2909 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tFACTORY  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2915 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tGLOBAL  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2921 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tGO  */
 #line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tIF  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tINSTANCE  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tMACRO  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2891 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tMETHOD  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2897 "engines/director/lingo/lingo-gr.cpp"
+#line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tON  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 2903 "engines/director/lingo/lingo-gr.cpp"
+#line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tOPEN  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2909 "engines/director/lingo/lingo-gr.cpp"
+#line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPLAY  */
 #line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2915 "engines/director/lingo/lingo-gr.cpp"
+#line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tPROPERTY  */
 #line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 2921 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 2927 "engines/director/lingo/lingo-gr.cpp"
+#line 2981 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
 #line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 2933 "engines/director/lingo/lingo-gr.cpp"
+#line 2987 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
 #line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 2993 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
 #line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: ID  */
@@ -2950,7 +3004,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 3008 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -2958,55 +3012,55 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 2962 "engines/director/lingo/lingo-gr.cpp"
+#line 3016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* stmt: tENDIF '\n'  */
 #line 386 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2968 "engines/director/lingo/lingo-gr.cpp"
+#line 3022 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* proc: CMDID cmdargs '\n'  */
 #line 402 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 2974 "engines/director/lingo/lingo-gr.cpp"
+#line 3028 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* proc: tPUT cmdargs '\n'  */
 #line 403 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 2980 "engines/director/lingo/lingo-gr.cpp"
+#line 3034 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* proc: tGO cmdargs '\n'  */
 #line 404 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2986 "engines/director/lingo/lingo-gr.cpp"
+#line 3040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* proc: tGO frameargs '\n'  */
 #line 405 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 2992 "engines/director/lingo/lingo-gr.cpp"
+#line 3046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* proc: tPLAY cmdargs '\n'  */
 #line 406 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 2998 "engines/director/lingo/lingo-gr.cpp"
+#line 3052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* proc: tPLAY frameargs '\n'  */
 #line 407 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3004 "engines/director/lingo/lingo-gr.cpp"
+#line 3058 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* proc: tOPEN cmdargs '\n'  */
 #line 408 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 3010 "engines/director/lingo/lingo-gr.cpp"
+#line 3064 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* proc: tOPEN expr tWITH expr '\n'  */
@@ -3016,31 +3070,31 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 3020 "engines/director/lingo/lingo-gr.cpp"
+#line 3074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* proc: tNEXT tREPEAT '\n'  */
 #line 414 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 3026 "engines/director/lingo/lingo-gr.cpp"
+#line 3080 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* proc: tEXIT tREPEAT '\n'  */
 #line 415 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* proc: tEXIT '\n'  */
 #line 416 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 3038 "engines/director/lingo/lingo-gr.cpp"
+#line 3092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* proc: tASSERTERROR stmtoneliner  */
 #line 417 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 3044 "engines/director/lingo/lingo-gr.cpp"
+#line 3098 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* cmdargs: %empty  */
@@ -3048,7 +3102,7 @@ yyreduce:
                                                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* cmdargs: expr trailingcomma  */
@@ -3058,7 +3112,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3062 "engines/director/lingo/lingo-gr.cpp"
+#line 3116 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* cmdargs: expr ',' nonemptyexprlist trailingcomma  */
@@ -3067,7 +3121,7 @@ yyreduce:
 		// This matches `cmd args, ...)
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3071 "engines/director/lingo/lingo-gr.cpp"
+#line 3125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* cmdargs: expr expr_nounarymath trailingcomma  */
@@ -3078,7 +3132,7 @@ yyreduce:
 		args->push_back((yyvsp[-2].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3136 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist trailingcomma  */
@@ -3088,7 +3142,7 @@ yyreduce:
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-4].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3092 "engines/director/lingo/lingo-gr.cpp"
+#line 3146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* cmdargs: '(' ')'  */
@@ -3096,7 +3150,7 @@ yyreduce:
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3100 "engines/director/lingo/lingo-gr.cpp"
+#line 3154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
@@ -3105,7 +3159,7 @@ yyreduce:
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3109 "engines/director/lingo/lingo-gr.cpp"
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* frameargs: tFRAME expr  */
@@ -3115,7 +3169,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3119 "engines/director/lingo/lingo-gr.cpp"
+#line 3173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* frameargs: tMOVIE expr  */
@@ -3126,7 +3180,7 @@ yyreduce:
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3130 "engines/director/lingo/lingo-gr.cpp"
+#line 3184 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* frameargs: tFRAME expr tOF tMOVIE expr  */
@@ -3137,7 +3191,7 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3141 "engines/director/lingo/lingo-gr.cpp"
+#line 3195 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* frameargs: expr tOF tMOVIE expr  */
@@ -3148,7 +3202,7 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3152 "engines/director/lingo/lingo-gr.cpp"
+#line 3206 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* frameargs: tFRAME expr expr_nounarymath  */
@@ -3159,49 +3213,49 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3163 "engines/director/lingo/lingo-gr.cpp"
+#line 3217 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* asgn: tPUT expr tINTO varorchunk '\n'  */
 #line 489 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3169 "engines/director/lingo/lingo-gr.cpp"
+#line 3223 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
 #line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3175 "engines/director/lingo/lingo-gr.cpp"
+#line 3229 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
 #line 491 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3181 "engines/director/lingo/lingo-gr.cpp"
+#line 3235 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* asgn: tSET varorthe to expr '\n'  */
 #line 492 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3187 "engines/director/lingo/lingo-gr.cpp"
+#line 3241 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* definevars: tGLOBAL idlist '\n'  */
 #line 497 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3193 "engines/director/lingo/lingo-gr.cpp"
+#line 3247 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* definevars: tPROPERTY idlist '\n'  */
 #line 498 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3199 "engines/director/lingo/lingo-gr.cpp"
+#line 3253 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* definevars: tINSTANCE idlist '\n'  */
 #line 499 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3205 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* ifstmt: tIF expr tTHEN stmt  */
@@ -3210,14 +3264,14 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3214 "engines/director/lingo/lingo-gr.cpp"
+#line 3268 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif tENDIF '\n'  */
 #line 506 "engines/director/lingo/lingo-gr.y"
                                                             {
 		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3221 "engines/director/lingo/lingo-gr.cpp"
+#line 3275 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
@@ -3228,7 +3282,7 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3232 "engines/director/lingo/lingo-gr.cpp"
+#line 3286 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif tENDIF '\n'  */
@@ -3237,7 +3291,7 @@ yyreduce:
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-5].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3241 "engines/director/lingo/lingo-gr.cpp"
+#line 3295 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
@@ -3246,42 +3300,42 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3304 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif tENDIF '\n'  */
 #line 524 "engines/director/lingo/lingo-gr.y"
                                                                                                                {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3257 "engines/director/lingo/lingo-gr.cpp"
+#line 3311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 528 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3264 "engines/director/lingo/lingo-gr.cpp"
+#line 3318 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 530 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3271 "engines/director/lingo/lingo-gr.cpp"
+#line 3325 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 532 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3278 "engines/director/lingo/lingo-gr.cpp"
+#line 3332 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
 #line 534 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3285 "engines/director/lingo/lingo-gr.cpp"
+#line 3339 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156: /* tell: tTELL expr tTO stmtoneliner  */
@@ -3290,26 +3344,26 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3294 "engines/director/lingo/lingo-gr.cpp"
+#line 3348 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
 #line 542 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3301 "engines/director/lingo/lingo-gr.cpp"
+#line 3355 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158: /* when: tWHEN ID tTHEN expr  */
 #line 546 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3307 "engines/director/lingo/lingo-gr.cpp"
+#line 3361 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159: /* stmtlist: %empty  */
 #line 548 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3313 "engines/director/lingo/lingo-gr.cpp"
+#line 3367 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161: /* nonemptystmtlist: stmtlistline  */
@@ -3320,7 +3374,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3324 "engines/director/lingo/lingo-gr.cpp"
+#line 3378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
@@ -3330,19 +3384,19 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3334 "engines/director/lingo/lingo-gr.cpp"
+#line 3388 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163: /* stmtlistline: '\n'  */
 #line 566 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3340 "engines/director/lingo/lingo-gr.cpp"
+#line 3394 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165: /* stmtlist_insideif: %empty  */
 #line 570 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.nodelist) = new NodeList; }
-#line 3346 "engines/director/lingo/lingo-gr.cpp"
+#line 3400 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
@@ -3353,7 +3407,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3411 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
@@ -3363,623 +3417,638 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3367 "engines/director/lingo/lingo-gr.cpp"
+#line 3421 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169: /* stmtlistline_insideif: '\n'  */
 #line 588 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 3373 "engines/director/lingo/lingo-gr.cpp"
+#line 3427 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171: /* simpleexpr_nounarymath: tINT  */
 #line 595 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3379 "engines/director/lingo/lingo-gr.cpp"
+#line 3433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172: /* simpleexpr_nounarymath: tFLOAT  */
 #line 596 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173: /* simpleexpr_nounarymath: tSYMBOL  */
 #line 597 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3391 "engines/director/lingo/lingo-gr.cpp"
+#line 3445 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 174: /* simpleexpr_nounarymath: tSTRING  */
 #line 598 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3397 "engines/director/lingo/lingo-gr.cpp"
+#line 3451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 175: /* simpleexpr_nounarymath: tNOT simpleexpr  */
 #line 599 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3403 "engines/director/lingo/lingo-gr.cpp"
+#line 3457 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 176: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
 #line 600 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3409 "engines/director/lingo/lingo-gr.cpp"
+#line 3463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 177: /* simpleexpr_nounarymath: '(' expr ')'  */
 #line 601 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3415 "engines/director/lingo/lingo-gr.cpp"
+#line 3469 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 183: /* var: ID  */
 #line 609 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3421 "engines/director/lingo/lingo-gr.cpp"
+#line 3475 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* chunk: tFIELD simpleexpr  */
+  case 188: /* chunk: tFIELD refargs  */
 #line 619 "engines/director/lingo/lingo-gr.y"
-                                {
-		NodeList *args = new NodeList;
-		args->push_back((yyvsp[0].node));
-		(yyval.node) = new FuncNode(new Common::String("field"), args); }
-#line 3430 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.node) = new FuncNode(new Common::String("field"), (yyvsp[0].nodelist)); }
+#line 3481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* chunk: tCAST simpleexpr  */
-#line 623 "engines/director/lingo/lingo-gr.y"
-                                        {
-		NodeList *args = new NodeList;
-		args->push_back((yyvsp[0].node));
-		(yyval.node) = new FuncNode(new Common::String("cast"), args); }
-#line 3439 "engines/director/lingo/lingo-gr.cpp"
+  case 189: /* chunk: tCAST refargs  */
+#line 620 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new FuncNode(new Common::String("cast"), (yyvsp[0].nodelist)); }
+#line 3487 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 190: /* chunk: tCHAR expr tOF simpleexpr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
+#line 621 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3446 "engines/director/lingo/lingo-gr.cpp"
+#line 3494 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 191: /* chunk: tCHAR expr tTO expr tOF simpleexpr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+#line 623 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3453 "engines/director/lingo/lingo-gr.cpp"
+#line 3501 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 192: /* chunk: tWORD expr tOF simpleexpr  */
-#line 631 "engines/director/lingo/lingo-gr.y"
+#line 625 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3460 "engines/director/lingo/lingo-gr.cpp"
+#line 3508 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 193: /* chunk: tWORD expr tTO expr tOF simpleexpr  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+#line 627 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3467 "engines/director/lingo/lingo-gr.cpp"
+#line 3515 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 194: /* chunk: tITEM expr tOF simpleexpr  */
-#line 635 "engines/director/lingo/lingo-gr.y"
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3474 "engines/director/lingo/lingo-gr.cpp"
+#line 3522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 195: /* chunk: tITEM expr tTO expr tOF simpleexpr  */
-#line 637 "engines/director/lingo/lingo-gr.y"
+#line 631 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3481 "engines/director/lingo/lingo-gr.cpp"
+#line 3529 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 196: /* chunk: tLINE expr tOF simpleexpr  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3488 "engines/director/lingo/lingo-gr.cpp"
+#line 3536 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 197: /* chunk: tLINE expr tTO expr tOF simpleexpr  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3495 "engines/director/lingo/lingo-gr.cpp"
+#line 3543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* object: tSCRIPT simpleexpr  */
-#line 645 "engines/director/lingo/lingo-gr.y"
-                                        {
-		NodeList *args = new NodeList;
-		args->push_back((yyvsp[0].node));
-		(yyval.node) = new FuncNode(new Common::String("script"), args); }
-#line 3504 "engines/director/lingo/lingo-gr.cpp"
+  case 198: /* object: tSCRIPT refargs  */
+#line 639 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.node) = new FuncNode(new Common::String("script"), (yyvsp[0].nodelist)); }
+#line 3549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* object: tWINDOW simpleexpr  */
-#line 649 "engines/director/lingo/lingo-gr.y"
-                                                {
+  case 199: /* object: tWINDOW refargs  */
+#line 640 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.node) = new FuncNode(new Common::String("window"), (yyvsp[0].nodelist)); }
+#line 3555 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 200: /* refargs: simpleexpr  */
+#line 643 "engines/director/lingo/lingo-gr.y"
+                                                                                {
+		// This matches `ref arg` and `ref(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
-		(yyval.node) = new FuncNode(new Common::String("window"), args); }
-#line 3513 "engines/director/lingo/lingo-gr.cpp"
+		(yyval.nodelist) = args; }
+#line 3565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 658 "engines/director/lingo/lingo-gr.y"
+  case 201: /* refargs: '(' ')'  */
+#line 648 "engines/director/lingo/lingo-gr.y"
+                                                                                        {
+		// This matches `ref()`
+		(yyval.nodelist) = new NodeList; }
+#line 3573 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 202: /* refargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 651 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		// This matches `ref(args, ...)`
+		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
+		(yyval.nodelist) = (yyvsp[-1].nodelist); }
+#line 3582 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 206: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 660 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3519 "engines/director/lingo/lingo-gr.cpp"
+#line 3588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 206: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 663 "engines/director/lingo/lingo-gr.y"
+  case 209: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 665 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3525 "engines/director/lingo/lingo-gr.cpp"
+#line 3594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 207: /* theobj: tSOUND simpleexpr  */
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 210: /* theobj: tSOUND simpleexpr  */
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3531 "engines/director/lingo/lingo-gr.cpp"
+#line 3600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* theobj: tSPRITE simpleexpr  */
-#line 665 "engines/director/lingo/lingo-gr.y"
+  case 211: /* theobj: tSPRITE simpleexpr  */
+#line 667 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3537 "engines/director/lingo/lingo-gr.cpp"
+#line 3606 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* menu: tMENU simpleexpr  */
-#line 668 "engines/director/lingo/lingo-gr.y"
+  case 212: /* menu: tMENU simpleexpr  */
+#line 670 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3543 "engines/director/lingo/lingo-gr.cpp"
+#line 3612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* writablethe: tTHE ID  */
-#line 670 "engines/director/lingo/lingo-gr.y"
+  case 213: /* writablethe: tTHE ID  */
+#line 672 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3549 "engines/director/lingo/lingo-gr.cpp"
+#line 3618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* writablethe: tTHE ID tOF theobj  */
-#line 671 "engines/director/lingo/lingo-gr.y"
+  case 214: /* writablethe: tTHE ID tOF theobj  */
+#line 673 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3555 "engines/director/lingo/lingo-gr.cpp"
+#line 3624 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 215: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 674 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3561 "engines/director/lingo/lingo-gr.cpp"
+#line 3630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 213: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 216: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 677 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3567 "engines/director/lingo/lingo-gr.cpp"
+#line 3636 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 217: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 678 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3573 "engines/director/lingo/lingo-gr.cpp"
+#line 3642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* thedatetime: tTHE tABBREV tDATE  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+  case 218: /* thedatetime: tTHE tABBREV tDATE  */
+#line 679 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3579 "engines/director/lingo/lingo-gr.cpp"
+#line 3648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* thedatetime: tTHE tABBREV tTIME  */
-#line 678 "engines/director/lingo/lingo-gr.y"
+  case 219: /* thedatetime: tTHE tABBREV tTIME  */
+#line 680 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3585 "engines/director/lingo/lingo-gr.cpp"
+#line 3654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* thedatetime: tTHE tABBR tDATE  */
-#line 679 "engines/director/lingo/lingo-gr.y"
+  case 220: /* thedatetime: tTHE tABBR tDATE  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3591 "engines/director/lingo/lingo-gr.cpp"
+#line 3660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* thedatetime: tTHE tABBR tTIME  */
-#line 680 "engines/director/lingo/lingo-gr.y"
+  case 221: /* thedatetime: tTHE tABBR tTIME  */
+#line 682 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3597 "engines/director/lingo/lingo-gr.cpp"
+#line 3666 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* thedatetime: tTHE tLONG tDATE  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 222: /* thedatetime: tTHE tLONG tDATE  */
+#line 683 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3603 "engines/director/lingo/lingo-gr.cpp"
+#line 3672 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* thedatetime: tTHE tLONG tTIME  */
-#line 682 "engines/director/lingo/lingo-gr.y"
+  case 223: /* thedatetime: tTHE tLONG tTIME  */
+#line 684 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3609 "engines/director/lingo/lingo-gr.cpp"
+#line 3678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 221: /* thedatetime: tTHE tSHORT tDATE  */
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 224: /* thedatetime: tTHE tSHORT tDATE  */
+#line 685 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3615 "engines/director/lingo/lingo-gr.cpp"
+#line 3684 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* thedatetime: tTHE tSHORT tTIME  */
-#line 684 "engines/director/lingo/lingo-gr.y"
+  case 225: /* thedatetime: tTHE tSHORT tTIME  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3621 "engines/director/lingo/lingo-gr.cpp"
+#line 3690 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 688 "engines/director/lingo/lingo-gr.y"
+  case 226: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 690 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3627 "engines/director/lingo/lingo-gr.cpp"
+#line 3696 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 689 "engines/director/lingo/lingo-gr.y"
+  case 227: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 691 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3633 "engines/director/lingo/lingo-gr.cpp"
+#line 3702 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 690 "engines/director/lingo/lingo-gr.y"
+  case 228: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 692 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3639 "engines/director/lingo/lingo-gr.cpp"
+#line 3708 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 691 "engines/director/lingo/lingo-gr.y"
+  case 229: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 693 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3645 "engines/director/lingo/lingo-gr.cpp"
+#line 3714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 692 "engines/director/lingo/lingo-gr.y"
+  case 230: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 694 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3651 "engines/director/lingo/lingo-gr.cpp"
+#line 3720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* chunktype: tCHAR  */
-#line 695 "engines/director/lingo/lingo-gr.y"
+  case 231: /* chunktype: tCHAR  */
+#line 697 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3657 "engines/director/lingo/lingo-gr.cpp"
+#line 3726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* chunktype: tWORD  */
-#line 696 "engines/director/lingo/lingo-gr.y"
+  case 232: /* chunktype: tWORD  */
+#line 698 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3663 "engines/director/lingo/lingo-gr.cpp"
+#line 3732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* chunktype: tITEM  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+  case 233: /* chunktype: tITEM  */
+#line 699 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3669 "engines/director/lingo/lingo-gr.cpp"
+#line 3738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* chunktype: tLINE  */
-#line 698 "engines/director/lingo/lingo-gr.y"
+  case 234: /* chunktype: tLINE  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3675 "engines/director/lingo/lingo-gr.cpp"
+#line 3744 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 234: /* list: '[' exprlist ']'  */
-#line 703 "engines/director/lingo/lingo-gr.y"
+  case 237: /* list: '[' exprlist ']'  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3681 "engines/director/lingo/lingo-gr.cpp"
+#line 3750 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 235: /* list: '[' ':' ']'  */
-#line 704 "engines/director/lingo/lingo-gr.y"
+  case 238: /* list: '[' ':' ']'  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3687 "engines/director/lingo/lingo-gr.cpp"
+#line 3756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 236: /* list: '[' proplist ']'  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 239: /* list: '[' proplist ']'  */
+#line 707 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3693 "engines/director/lingo/lingo-gr.cpp"
+#line 3762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* proplist: proppair  */
-#line 708 "engines/director/lingo/lingo-gr.y"
+  case 240: /* proplist: proppair  */
+#line 710 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3702 "engines/director/lingo/lingo-gr.cpp"
+#line 3771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* proplist: proplist ',' proppair  */
-#line 712 "engines/director/lingo/lingo-gr.y"
+  case 241: /* proplist: proplist ',' proppair  */
+#line 714 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3710 "engines/director/lingo/lingo-gr.cpp"
+#line 3779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* proppair: tSYMBOL ':' expr  */
-#line 717 "engines/director/lingo/lingo-gr.y"
+  case 242: /* proppair: tSYMBOL ':' expr  */
+#line 719 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3716 "engines/director/lingo/lingo-gr.cpp"
+#line 3785 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* proppair: ID ':' expr  */
-#line 718 "engines/director/lingo/lingo-gr.y"
+  case 243: /* proppair: ID ':' expr  */
+#line 720 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3722 "engines/director/lingo/lingo-gr.cpp"
+#line 3791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 241: /* proppair: tSTRING ':' expr  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 244: /* proppair: tSTRING ':' expr  */
+#line 721 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3728 "engines/director/lingo/lingo-gr.cpp"
+#line 3797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* unarymath: '+' simpleexpr  */
-#line 722 "engines/director/lingo/lingo-gr.y"
+  case 245: /* unarymath: '+' simpleexpr  */
+#line 724 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3734 "engines/director/lingo/lingo-gr.cpp"
+#line 3803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* unarymath: '-' simpleexpr  */
-#line 723 "engines/director/lingo/lingo-gr.y"
+  case 246: /* unarymath: '-' simpleexpr  */
+#line 725 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3740 "engines/director/lingo/lingo-gr.cpp"
+#line 3809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* expr: expr '+' expr  */
-#line 733 "engines/director/lingo/lingo-gr.y"
+  case 251: /* expr: expr '+' expr  */
+#line 735 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3746 "engines/director/lingo/lingo-gr.cpp"
+#line 3815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 249: /* expr: expr '-' expr  */
-#line 734 "engines/director/lingo/lingo-gr.y"
+  case 252: /* expr: expr '-' expr  */
+#line 736 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3752 "engines/director/lingo/lingo-gr.cpp"
+#line 3821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 250: /* expr: expr '*' expr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 253: /* expr: expr '*' expr  */
+#line 737 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3758 "engines/director/lingo/lingo-gr.cpp"
+#line 3827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 251: /* expr: expr '/' expr  */
-#line 736 "engines/director/lingo/lingo-gr.y"
+  case 254: /* expr: expr '/' expr  */
+#line 738 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3764 "engines/director/lingo/lingo-gr.cpp"
+#line 3833 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 252: /* expr: expr tMOD expr  */
-#line 737 "engines/director/lingo/lingo-gr.y"
+  case 255: /* expr: expr tMOD expr  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3770 "engines/director/lingo/lingo-gr.cpp"
+#line 3839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 253: /* expr: expr '>' expr  */
-#line 738 "engines/director/lingo/lingo-gr.y"
+  case 256: /* expr: expr '>' expr  */
+#line 740 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3776 "engines/director/lingo/lingo-gr.cpp"
+#line 3845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 254: /* expr: expr '<' expr  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+  case 257: /* expr: expr '<' expr  */
+#line 741 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3782 "engines/director/lingo/lingo-gr.cpp"
+#line 3851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 255: /* expr: expr tEQ expr  */
-#line 740 "engines/director/lingo/lingo-gr.y"
+  case 258: /* expr: expr tEQ expr  */
+#line 742 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3788 "engines/director/lingo/lingo-gr.cpp"
+#line 3857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 256: /* expr: expr tNEQ expr  */
-#line 741 "engines/director/lingo/lingo-gr.y"
+  case 259: /* expr: expr tNEQ expr  */
+#line 743 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3794 "engines/director/lingo/lingo-gr.cpp"
+#line 3863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* expr: expr tGE expr  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+  case 260: /* expr: expr tGE expr  */
+#line 744 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3800 "engines/director/lingo/lingo-gr.cpp"
+#line 3869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* expr: expr tLE expr  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 261: /* expr: expr tLE expr  */
+#line 745 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3806 "engines/director/lingo/lingo-gr.cpp"
+#line 3875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 259: /* expr: expr tAND expr  */
-#line 744 "engines/director/lingo/lingo-gr.y"
+  case 262: /* expr: expr tAND expr  */
+#line 746 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3812 "engines/director/lingo/lingo-gr.cpp"
+#line 3881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 260: /* expr: expr tOR expr  */
-#line 745 "engines/director/lingo/lingo-gr.y"
+  case 263: /* expr: expr tOR expr  */
+#line 747 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3818 "engines/director/lingo/lingo-gr.cpp"
+#line 3887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 261: /* expr: expr '&' expr  */
-#line 746 "engines/director/lingo/lingo-gr.y"
+  case 264: /* expr: expr '&' expr  */
+#line 748 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3824 "engines/director/lingo/lingo-gr.cpp"
+#line 3893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 262: /* expr: expr tCONCAT expr  */
-#line 747 "engines/director/lingo/lingo-gr.y"
+  case 265: /* expr: expr tCONCAT expr  */
+#line 749 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3830 "engines/director/lingo/lingo-gr.cpp"
+#line 3899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 263: /* expr: expr tCONTAINS expr  */
-#line 748 "engines/director/lingo/lingo-gr.y"
+  case 266: /* expr: expr tCONTAINS expr  */
+#line 750 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3836 "engines/director/lingo/lingo-gr.cpp"
+#line 3905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 264: /* expr: expr tSTARTS expr  */
-#line 749 "engines/director/lingo/lingo-gr.y"
+  case 267: /* expr: expr tSTARTS expr  */
+#line 751 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3842 "engines/director/lingo/lingo-gr.cpp"
+#line 3911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 267: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 758 "engines/director/lingo/lingo-gr.y"
+  case 270: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 760 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3848 "engines/director/lingo/lingo-gr.cpp"
+#line 3917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 268: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 759 "engines/director/lingo/lingo-gr.y"
+  case 271: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 761 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3854 "engines/director/lingo/lingo-gr.cpp"
+#line 3923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 269: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 760 "engines/director/lingo/lingo-gr.y"
+  case 272: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 762 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3860 "engines/director/lingo/lingo-gr.cpp"
+#line 3929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 270: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 761 "engines/director/lingo/lingo-gr.y"
+  case 273: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 763 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3866 "engines/director/lingo/lingo-gr.cpp"
+#line 3935 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 271: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 762 "engines/director/lingo/lingo-gr.y"
+  case 274: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 764 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3872 "engines/director/lingo/lingo-gr.cpp"
+#line 3941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 272: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 763 "engines/director/lingo/lingo-gr.y"
+  case 275: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 765 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3878 "engines/director/lingo/lingo-gr.cpp"
+#line 3947 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 273: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 764 "engines/director/lingo/lingo-gr.y"
+  case 276: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 766 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3884 "engines/director/lingo/lingo-gr.cpp"
+#line 3953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 274: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 765 "engines/director/lingo/lingo-gr.y"
+  case 277: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 767 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3890 "engines/director/lingo/lingo-gr.cpp"
+#line 3959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 275: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 766 "engines/director/lingo/lingo-gr.y"
+  case 278: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 768 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3896 "engines/director/lingo/lingo-gr.cpp"
+#line 3965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 276: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 767 "engines/director/lingo/lingo-gr.y"
+  case 279: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 769 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3902 "engines/director/lingo/lingo-gr.cpp"
+#line 3971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 277: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 768 "engines/director/lingo/lingo-gr.y"
+  case 280: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 770 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3908 "engines/director/lingo/lingo-gr.cpp"
+#line 3977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 278: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 769 "engines/director/lingo/lingo-gr.y"
+  case 281: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 771 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3914 "engines/director/lingo/lingo-gr.cpp"
+#line 3983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 279: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 770 "engines/director/lingo/lingo-gr.y"
+  case 282: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 772 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3920 "engines/director/lingo/lingo-gr.cpp"
+#line 3989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 280: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 771 "engines/director/lingo/lingo-gr.y"
+  case 283: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 773 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3926 "engines/director/lingo/lingo-gr.cpp"
+#line 3995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 281: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 772 "engines/director/lingo/lingo-gr.y"
+  case 284: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 774 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3932 "engines/director/lingo/lingo-gr.cpp"
+#line 4001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 282: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 773 "engines/director/lingo/lingo-gr.y"
+  case 285: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 775 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3938 "engines/director/lingo/lingo-gr.cpp"
+#line 4007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 283: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 774 "engines/director/lingo/lingo-gr.y"
+  case 286: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 776 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3944 "engines/director/lingo/lingo-gr.cpp"
+#line 4013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 284: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 777 "engines/director/lingo/lingo-gr.y"
+  case 287: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 779 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3950 "engines/director/lingo/lingo-gr.cpp"
+#line 4019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 285: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 778 "engines/director/lingo/lingo-gr.y"
+  case 288: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 780 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3956 "engines/director/lingo/lingo-gr.cpp"
+#line 4025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 286: /* exprlist: %empty  */
-#line 781 "engines/director/lingo/lingo-gr.y"
+  case 289: /* exprlist: %empty  */
+#line 783 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 3962 "engines/director/lingo/lingo-gr.cpp"
+#line 4031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 288: /* nonemptyexprlist: expr  */
-#line 785 "engines/director/lingo/lingo-gr.y"
+  case 291: /* nonemptyexprlist: expr  */
+#line 787 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3971 "engines/director/lingo/lingo-gr.cpp"
+#line 4040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 289: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 789 "engines/director/lingo/lingo-gr.y"
+  case 292: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 791 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3979 "engines/director/lingo/lingo-gr.cpp"
+#line 4048 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3983 "engines/director/lingo/lingo-gr.cpp"
+#line 4052 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4178,7 +4247,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 794 "engines/director/lingo/lingo-gr.y"
+#line 796 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index f7fa71b5e9..84ba87e555 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -175,7 +175,7 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 %type<node> the writablethe theobj menu thedatetime thenumberof
 %type<node> list proppair
 %type<node> chunk object
-%type<nodelist> proplist exprlist nonemptyexprlist
+%type<nodelist> refargs proplist exprlist nonemptyexprlist
 
 %left tAND tOR
 %left '<' tLE '>' tGE tEQ tNEQ tCONTAINS tSTARTS
@@ -616,14 +616,8 @@ varorthe: var
 	| writablethe
 	;
 
-chunk: tFIELD simpleexpr[arg]	{
-		NodeList *args = new NodeList;
-		args->push_back($arg);
-		$$ = new FuncNode(new Common::String("field"), args); }
-	| tCAST simpleexpr[arg]		{
-		NodeList *args = new NodeList;
-		args->push_back($arg);
-		$$ = new FuncNode(new Common::String("cast"), args); }
+chunk: tFIELD refargs		{ $$ = new FuncNode(new Common::String("field"), $refargs); }
+	| tCAST refargs			{ $$ = new FuncNode(new Common::String("cast"), $refargs); }
 	| tCHAR expr[idx] tOF simpleexpr[src]	{
 		$$ = new ChunkExprNode(kChunkChar, $idx, nullptr, $src); }
 	| tCHAR expr[start] tTO expr[end] tOF simpleexpr[src]	{
@@ -642,14 +636,22 @@ chunk: tFIELD simpleexpr[arg]	{
 		$$ = new ChunkExprNode(kChunkLine, $start, $end, $src); }
 	;
 
-object: tSCRIPT simpleexpr[arg]		{
-		NodeList *args = new NodeList;
-		args->push_back($arg);
-		$$ = new FuncNode(new Common::String("script"), args); }
-	| tWINDOW simpleexpr[arg]		{
+object: tSCRIPT refargs		{ $$ = new FuncNode(new Common::String("script"), $refargs); }
+	| tWINDOW refargs		{ $$ = new FuncNode(new Common::String("window"), $refargs); }
+	;
+
+refargs: simpleexpr								{
+		// This matches `ref arg` and `ref(arg)`
 		NodeList *args = new NodeList;
-		args->push_back($arg);
-		$$ = new FuncNode(new Common::String("window"), args); }
+		args->push_back($simpleexpr);
+		$$ = args; }
+	| '(' ')'									{
+		// This matches `ref()`
+		$$ = new NodeList; }
+	| '(' expr ',' nonemptyexprlist[args] ')'	{
+		// This matches `ref(args, ...)`
+		$args->insert_at(0, $expr);
+		$$ = $args; }
 	;
 
 the: writablethe


Commit: 2aa766754fc86494d2304cefd658384a4e75aabd
    https://github.com/scummvm/scummvm/commit/2aa766754fc86494d2304cefd658384a4e75aabd
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Make getObjectProp use stack

LC::call only pushes a stack frame and may not evaluate until later, so
we can't immediately pop its return value. This avoids that issue.

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 03b9bcac3c..e28c72fded 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -549,7 +549,7 @@ void LC::cb_objectfieldpush() {
 	int fieldNameId = g_lingo->readInt();
 	Common::String fieldName = g_lingo->_currentArchive->getName(fieldNameId);
 	Datum object = g_lingo->pop();
-	g_lingo->push(g_lingo->getObjectProp(object, fieldName));
+	g_lingo->getObjectProp(object, fieldName);
 }
 
 void LC::cb_varrefpush() {
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 2b590e6ccd..e8c7dd2d2d 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -565,7 +565,7 @@ void LC::c_objectproppush() {
 	Datum obj = g_lingo->pop();
 	Common::String propName = g_lingo->readString();
 
-	g_lingo->push(g_lingo->getObjectProp(obj, propName));
+	g_lingo->getObjectProp(obj, propName);
 }
 
 void LC::c_objectpropassign() {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 85de260f80..b65bce59fe 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1595,25 +1595,31 @@ void Lingo::setTheField(Datum &id1, int field, Datum &d) {
 	member->setField(field, d);
 }
 
-Datum Lingo::getObjectProp(Datum &obj, Common::String &propName) {
+void Lingo::getObjectProp(Datum &obj, Common::String &propName) {
 	Datum d;
 	if (obj.type == OBJECT) {
 		if (obj.u.obj->hasProp(propName)) {
-			return obj.u.obj->getProp(propName);
+			d = obj.u.obj->getProp(propName);
 		} else {
 			warning("Lingo::getObjectProp: Object <%s> has no property '%s'", obj.asString(true).c_str(), propName.c_str());
 		}
-	} else if (obj.type == PARRAY) {
+		g_lingo->push(d);
+		return;
+	}
+	if (obj.type == PARRAY) {
 		int index = LC::compareArrays(LC::eqData, obj, propName, true).u.i;
 		if (index > 0) {
 			d = obj.u.parr->operator[](index - 1).v;
 		}
-		return d;
-	} else if (obj.type == CASTREF) {
+		g_lingo->push(d);
+		return;
+	}
+	if (obj.type == CASTREF) {
 		Movie *movie = _vm->getCurrentMovie();
 		if (!movie) {
 			warning("Lingo::getObjectProp(): No movie loaded");
-			return d;
+			g_lingo->push(d);
+			return;
 		}
 
 		int id = obj.u.i;
@@ -1624,22 +1630,25 @@ Datum Lingo::getObjectProp(Datum &obj, Common::String &propName) {
 			} else {
 				warning("Lingo::getObjectProp(): CastMember %d not found", id);
 			}
-			return d;
+			g_lingo->push(d);
+			return;
 		}
 
 		if (member->hasProp(propName)) {
-			return member->getProp(propName);
+			d = member->getProp(propName);
 		} else {
 			warning("Lingo::getObjectProp(): CastMember %d has no property '%s'", id, propName.c_str());
 		}
-	} else if (_builtinFuncs.contains(propName) && _builtinFuncs[propName].nargs == 1) {
+		g_lingo->push(d);
+		return;
+	}
+	if (_builtinFuncs.contains(propName) && _builtinFuncs[propName].nargs == 1) {
 		push(obj);
 		LC::call(_builtinFuncs[propName], 1, true);
-		d = pop();
-	} else {
-		warning("Lingo::getObjectProp: Invalid object: %s", obj.asString(true).c_str());
+		return;
 	}
-	return d;
+	warning("Lingo::getObjectProp: Invalid object: %s", obj.asString(true).c_str());
+	g_lingo->push(d);
 }
 
 void Lingo::setObjectProp(Datum &obj, Common::String &propName, Datum &val) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 13b71e2fe8..e3a031959c 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -336,7 +336,7 @@ public:
 	void setTheCast(Datum &id, int field, Datum &d);
 	Datum getTheField(Datum &id1, int field);
 	void setTheField(Datum &id1, int field, Datum &d);
-	Datum getObjectProp(Datum &obj, Common::String &propName);
+	void getObjectProp(Datum &obj, Common::String &propName);
 	void setObjectProp(Datum &obj, Common::String &propName, Datum &d);
 	Datum getTheDate(int field);
 	Datum getTheTime(int field);


Commit: 8f836f321c5e44caa04669795c33af61778311c6
    https://github.com/scummvm/scummvm/commit/8f836f321c5e44caa04669795c33af61778311c6
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: Don't load shared cast twice

If the a shared cast was loaded with --start-movie, it was being
loaded twice. Since I meade the Lingo compiler complain if
factories are redefined, this was causing buildbot failures.

Changed paths:
    engines/director/resource.cpp


diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index 57972c0c31..2abdd0314a 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -71,7 +71,9 @@ Common::Error Window::loadInitialMovie() {
 
 	_currentMovie = new Movie(this);
 	_currentPath = getPath(movie, _currentPath);
-	_currentMovie->loadSharedCastsFrom(_currentPath + g_director->_sharedCastFile);
+	Common::String sharedCastPath = _currentPath + g_director->_sharedCastFile;
+	if (sharedCastPath != movie)
+		_currentMovie->loadSharedCastsFrom(sharedCastPath);
 	_currentMovie->setArchive(_mainArchive);
 
 	return Common::kNoError;


Commit: d9877305e79e3669524ca9b8e11cb53df632ad2e
    https://github.com/scummvm/scummvm/commit/d9877305e79e3669524ca9b8e11cb53df632ad2e
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix varFetch warnings

Changed paths:
    engines/director/lingo/lingo.cpp


diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index d47f197677..364e9f6caf 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1249,7 +1249,7 @@ Datum Lingo::varFetch(const Datum &var, DatumHash *localvars, bool silent) {
 			if (_globalvars.contains(name)) {
 				return _globalvars[name];
 			}
-			warning("varAssign: global variable %s not defined", name.c_str());
+			warning("varFetch: global variable %s not defined", name.c_str());
 			return result;
 		}
 		break;
@@ -1259,7 +1259,7 @@ Datum Lingo::varFetch(const Datum &var, DatumHash *localvars, bool silent) {
 			if (localvars && localvars->contains(name)) {
 				return (*localvars)[name];
 			}
-			warning("varAssign: local variable %s not defined", name.c_str());
+			warning("varFetch: local variable %s not defined", name.c_str());
 			return result;
 		}
 		break;
@@ -1269,7 +1269,7 @@ Datum Lingo::varFetch(const Datum &var, DatumHash *localvars, bool silent) {
 			if (_currentMe.type == OBJECT && _currentMe.u.obj->hasProp(name)) {
 				return _currentMe.u.obj->getProp(name);
 			}
-			warning("varAssign: property %s not defined", name.c_str());
+			warning("varFetch: property %s not defined", name.c_str());
 			return result;
 		}
 		break;


Commit: e38939fe4aad09be48772fbc08c38b144d9f7a55
    https://github.com/scummvm/scummvm/commit/e38939fe4aad09be48772fbc08c38b144d9f7a55
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Fix D2-3 cast numbers

Changed paths:
    engines/director/lingo/lingo-codegen.cpp


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index ca8774c5e0..286e4c6299 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -1051,6 +1051,14 @@ bool LingoCompiler::visitFuncNode(FuncNode *node) {
 /* VarNode */
 
 bool LingoCompiler::visitVarNode(VarNode *node) {
+	if (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
+		int val = castNumToNum(node->name->c_str());
+		if (val != -1) {
+			code1(LC::c_intpush);
+			codeInt(val);
+			return true;
+		}
+	}
 	if (_refMode) {
 		codeVarRef(*node->name);
 		return true;
@@ -1060,14 +1068,6 @@ bool LingoCompiler::visitVarNode(VarNode *node) {
 		codeString(node->name->c_str());
 		return true;
 	}
-	if (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
-		int val = castNumToNum(node->name->c_str());
-		if (val != -1) {
-			code1(LC::c_intpush);
-			codeInt(val);
-			return true;
-		}
-	}
 	codeVarGet(*node->name);
 	return true;
 }


Commit: 8abdb0df16d679cf122b219ad53a0939b2061bda
    https://github.com/scummvm/scummvm/commit/8abdb0df16d679cf122b219ad53a0939b2061bda
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Allow missing end if

It just outputs a warning instead of failing now.

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index aeeff82866..7fa5499a95 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -285,40 +285,41 @@ enum yysymbol_kind_t
   YYSYMBOL_definevars = 129,               /* definevars  */
   YYSYMBOL_ifstmt = 130,                   /* ifstmt  */
   YYSYMBOL_ifelsestmt = 131,               /* ifelsestmt  */
-  YYSYMBOL_loop = 132,                     /* loop  */
-  YYSYMBOL_tell = 133,                     /* tell  */
-  YYSYMBOL_when = 134,                     /* when  */
-  YYSYMBOL_stmtlist = 135,                 /* stmtlist  */
-  YYSYMBOL_nonemptystmtlist = 136,         /* nonemptystmtlist  */
-  YYSYMBOL_stmtlistline = 137,             /* stmtlistline  */
-  YYSYMBOL_stmtlist_insideif = 138,        /* stmtlist_insideif  */
-  YYSYMBOL_nonemptystmtlist_insideif = 139, /* nonemptystmtlist_insideif  */
-  YYSYMBOL_stmtlistline_insideif = 140,    /* stmtlistline_insideif  */
-  YYSYMBOL_simpleexpr_nounarymath = 141,   /* simpleexpr_nounarymath  */
-  YYSYMBOL_var = 142,                      /* var  */
-  YYSYMBOL_varorchunk = 143,               /* varorchunk  */
-  YYSYMBOL_varorthe = 144,                 /* varorthe  */
-  YYSYMBOL_chunk = 145,                    /* chunk  */
-  YYSYMBOL_object = 146,                   /* object  */
-  YYSYMBOL_refargs = 147,                  /* refargs  */
-  YYSYMBOL_the = 148,                      /* the  */
-  YYSYMBOL_theobj = 149,                   /* theobj  */
-  YYSYMBOL_menu = 150,                     /* menu  */
-  YYSYMBOL_writablethe = 151,              /* writablethe  */
-  YYSYMBOL_thedatetime = 152,              /* thedatetime  */
-  YYSYMBOL_thenumberof = 153,              /* thenumberof  */
-  YYSYMBOL_chunktype = 154,                /* chunktype  */
-  YYSYMBOL_inof = 155,                     /* inof  */
-  YYSYMBOL_list = 156,                     /* list  */
-  YYSYMBOL_proplist = 157,                 /* proplist  */
-  YYSYMBOL_proppair = 158,                 /* proppair  */
-  YYSYMBOL_unarymath = 159,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 160,               /* simpleexpr  */
-  YYSYMBOL_expr = 161,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 162,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 163,                   /* sprite  */
-  YYSYMBOL_exprlist = 164,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 165          /* nonemptyexprlist  */
+  YYSYMBOL_endif = 132,                    /* endif  */
+  YYSYMBOL_loop = 133,                     /* loop  */
+  YYSYMBOL_tell = 134,                     /* tell  */
+  YYSYMBOL_when = 135,                     /* when  */
+  YYSYMBOL_stmtlist = 136,                 /* stmtlist  */
+  YYSYMBOL_nonemptystmtlist = 137,         /* nonemptystmtlist  */
+  YYSYMBOL_stmtlistline = 138,             /* stmtlistline  */
+  YYSYMBOL_stmtlist_insideif = 139,        /* stmtlist_insideif  */
+  YYSYMBOL_nonemptystmtlist_insideif = 140, /* nonemptystmtlist_insideif  */
+  YYSYMBOL_stmtlistline_insideif = 141,    /* stmtlistline_insideif  */
+  YYSYMBOL_simpleexpr_nounarymath = 142,   /* simpleexpr_nounarymath  */
+  YYSYMBOL_var = 143,                      /* var  */
+  YYSYMBOL_varorchunk = 144,               /* varorchunk  */
+  YYSYMBOL_varorthe = 145,                 /* varorthe  */
+  YYSYMBOL_chunk = 146,                    /* chunk  */
+  YYSYMBOL_object = 147,                   /* object  */
+  YYSYMBOL_refargs = 148,                  /* refargs  */
+  YYSYMBOL_the = 149,                      /* the  */
+  YYSYMBOL_theobj = 150,                   /* theobj  */
+  YYSYMBOL_menu = 151,                     /* menu  */
+  YYSYMBOL_writablethe = 152,              /* writablethe  */
+  YYSYMBOL_thedatetime = 153,              /* thedatetime  */
+  YYSYMBOL_thenumberof = 154,              /* thenumberof  */
+  YYSYMBOL_chunktype = 155,                /* chunktype  */
+  YYSYMBOL_inof = 156,                     /* inof  */
+  YYSYMBOL_list = 157,                     /* list  */
+  YYSYMBOL_proplist = 158,                 /* proplist  */
+  YYSYMBOL_proppair = 159,                 /* proppair  */
+  YYSYMBOL_unarymath = 160,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 161,               /* simpleexpr  */
+  YYSYMBOL_expr = 162,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 163,         /* expr_nounarymath  */
+  YYSYMBOL_sprite = 164,                   /* sprite  */
+  YYSYMBOL_exprlist = 165,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 166          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -640,16 +641,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  177
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3990
+#define YYLAST   4008
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  62
+#define YYNNTS  63
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  292
+#define YYNRULES  294
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  539
+#define YYNSTATES  538
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -722,21 +723,21 @@ static const yytype_int16 yyrline[] =
      415,   416,   417,   420,   423,   428,   432,   438,   443,   446,
      452,   452,   458,   463,   469,   475,   481,   489,   490,   491,
      492,   495,   495,   497,   498,   499,   502,   506,   510,   516,
-     520,   524,   528,   530,   532,   534,   538,   542,   546,   548,
-     549,   553,   559,   566,   567,   570,   571,   575,   581,   588,
-     589,   595,   596,   597,   598,   599,   600,   601,   602,   603,
-     604,   605,   606,   609,   611,   612,   615,   616,   619,   620,
-     621,   623,   625,   627,   629,   631,   633,   635,   639,   640,
-     643,   648,   651,   657,   658,   659,   660,   663,   664,   665,
-     666,   667,   670,   672,   673,   674,   677,   678,   679,   680,
-     681,   682,   683,   684,   685,   686,   690,   691,   692,   693,
-     694,   697,   698,   699,   700,   703,   703,   705,   706,   707,
-     710,   714,   719,   720,   721,   724,   725,   728,   729,   733,
-     734,   735,   736,   737,   738,   739,   740,   741,   742,   743,
-     744,   745,   746,   747,   748,   749,   750,   751,   758,   759,
-     760,   761,   762,   763,   764,   765,   766,   767,   768,   769,
-     770,   771,   772,   773,   774,   775,   776,   779,   780,   783,
-     784,   787,   791
+     520,   524,   528,   529,   531,   533,   535,   537,   541,   545,
+     549,   551,   552,   556,   562,   569,   570,   573,   574,   578,
+     584,   591,   592,   598,   599,   600,   601,   602,   603,   604,
+     605,   606,   607,   608,   609,   612,   614,   615,   618,   619,
+     622,   623,   624,   626,   628,   630,   632,   634,   636,   638,
+     642,   643,   646,   651,   654,   660,   661,   662,   663,   666,
+     667,   668,   669,   670,   673,   675,   676,   677,   680,   681,
+     682,   683,   684,   685,   686,   687,   688,   689,   693,   694,
+     695,   696,   697,   700,   701,   702,   703,   706,   706,   708,
+     709,   710,   713,   717,   722,   723,   724,   727,   728,   731,
+     732,   736,   737,   738,   739,   740,   741,   742,   743,   744,
+     745,   746,   747,   748,   749,   750,   751,   752,   753,   754,
+     761,   762,   763,   764,   765,   766,   767,   768,   769,   770,
+     771,   772,   773,   774,   775,   776,   777,   778,   779,   782,
+     783,   786,   787,   790,   794
 };
 #endif
 
@@ -772,14 +773,14 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "nonemptymethodlist", "methodlistline", "handler", "endargdef", "CMDID",
   "ID", "idlist", "nonemptyidlist", "stmt", "stmt_insideif",
   "stmtoneliner", "proc", "cmdargs", "trailingcomma", "frameargs", "asgn",
-  "to", "definevars", "ifstmt", "ifelsestmt", "loop", "tell", "when",
-  "stmtlist", "nonemptystmtlist", "stmtlistline", "stmtlist_insideif",
-  "nonemptystmtlist_insideif", "stmtlistline_insideif",
-  "simpleexpr_nounarymath", "var", "varorchunk", "varorthe", "chunk",
-  "object", "refargs", "the", "theobj", "menu", "writablethe",
-  "thedatetime", "thenumberof", "chunktype", "inof", "list", "proplist",
-  "proppair", "unarymath", "simpleexpr", "expr", "expr_nounarymath",
-  "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "to", "definevars", "ifstmt", "ifelsestmt", "endif", "loop", "tell",
+  "when", "stmtlist", "nonemptystmtlist", "stmtlistline",
+  "stmtlist_insideif", "nonemptystmtlist_insideif",
+  "stmtlistline_insideif", "simpleexpr_nounarymath", "var", "varorchunk",
+  "varorthe", "chunk", "object", "refargs", "the", "theobj", "menu",
+  "writablethe", "thedatetime", "thenumberof", "chunktype", "inof", "list",
+  "proplist", "proppair", "unarymath", "simpleexpr", "expr",
+  "expr_nounarymath", "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -804,7 +805,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-459)
+#define YYPACT_NINF (-483)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -818,60 +819,60 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2374,  -459,  -459,  -459,  -459,  -459,  -459,   -16,  -459,  2944,
-    1410,  1507,  -459,  -459,  2944,  -459,    42,  -459,  -459,  1604,
-      59,  3023,  -459,  2944,  -459,  -459,  2944,  1604,  1410,  2944,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,  1507,  2944,  2944,   -12,  3338,  -459,   111,
-    2374,  -459,  -459,  -459,  -459,  1604,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,    29,  -459,  -459,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,    30,    33,  -459,  -459,  -459,  -459,  1701,
-    1701,  1701,  1701,  1507,  1507,  1798,  1507,  1507,  1507,  1507,
-    3102,  1507,  1798,  1798,  1216,   632,    47,    51,    53,  -459,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-     731,  -459,  1507,  3534,  2944,    57,    64,   828,  2944,  1507,
-    3181,  -459,  -459,    -9,  -459,   107,    65,    66,   925,    68,
-      69,    71,  3460,    72,  2944,  -459,  -459,  -459,  -459,    73,
-    1022,  -459,  -459,  2944,  1313,  -459,  -459,  -459,  -459,  -459,
-    1119,  3869,  -459,   418,   518,   540,  3393,   -20,    41,    43,
-      44,    45,    84,   114,   116,  3815,  -459,  -459,  -459,  3547,
-      49,    70,    54,   -79,   -23,  -459,  3869,    75,    76,  1507,
-    -459,  -459,   145,  1507,  1507,  1507,  1507,  2089,  2089,  2283,
-    1507,  2186,  2186,  1507,  1507,  1507,  1507,  1507,  1507,  1507,
-    1507,  -459,  -459,  3632,  -459,  3619,  2454,  1507,  1507,  1507,
-    1507,  1507,    78,  -459,  -459,  3260,  3260,  3260,   -11,  3645,
-     157,  -459,  -459,  1507,  1507,   -66,  -459,  1507,  -459,  -459,
-    -459,  3338,  2534,  -459,    90,  -459,  -459,  -459,  3560,   162,
-    3882,  1798,  1507,  1798,  1507,  1798,  1507,  1798,  1507,  -459,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,    32,  1895,  1992,  1798,  1798,  1507,  -459,
-    1507,  1507,  -459,  1507,  2865,  -459,  -459,  1507,    91,  1507,
-      10,    10,    10,    10,  3895,  3895,  -459,    14,    10,    10,
-      10,    10,    14,   -26,   -26,  -459,  -459,    92,  1507,  1507,
-    1507,  1507,  1507,  1507,  1507,  1507,  1507,  1507,  1507,  1507,
-    1507,  1507,  1507,  1507,  1507,  1507,  -459,  2774,   176,  2534,
-    -459,    96,  -459,    97,    98,  1507,  1507,  2534,  1992,  3701,
-    3869,  2944,  -459,  -459,  -459,   -66,  -459,  3714,  -459,  -459,
-    -459,   109,  2534,  -459,  2534,  1507,  1507,  -459,   334,  -459,
-    3406,  -459,  3426,  -459,  3480,  -459,  -459,  1798,    32,    32,
-      32,    32,  1798,  1798,    32,  1798,  1798,  -459,  -459,  -459,
-    -459,  -459,  -459,   -72,  3869,  3869,  3869,    49,    70,    94,
-    -459,  3869,  -459,  3869,  1507,  -459,    10,    10,    10,    10,
-    3895,  3895,  -459,    14,    10,    10,    10,    10,    14,   -26,
-     -26,  -459,  -459,    92,  -459,  -459,    -5,  2774,  -459,  2614,
-    -459,  -459,  -459,  -459,  3727,    -2,   112,  -459,  2944,  -459,
-    -459,   102,  -459,   190,    24,  3869,  1798,  1798,  1798,  1798,
-    -459,  1798,  1798,  1798,  1798,  -459,   173,   131,  -459,  -459,
-    -459,  -459,  2694,   108,  -459,  2774,  -459,  2534,   170,  1507,
-     113,   115,  -459,  2944,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,   135,  1798,  -459,  2774,  -459,  -459,   123,
-     125,  1507,  3783,  -459,  2534,    18,  -459,  1798,   128,   118,
-     119,  3796,  2534,  -459,  -459,  2944,  -459,   120,  -459,  -459,
-    2534,   133,  -459,  -459,   134,   121,   124,  -459,  -459
+    2375,  -483,  -483,  -483,  -483,  -483,  -483,   -16,  -483,  2945,
+    1411,  1508,  -483,  -483,  2945,  -483,     5,  -483,  -483,  1605,
+      59,  3024,  -483,  2945,  -483,  -483,  2945,  1605,  1411,  2945,
+    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
+    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
+    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
+    -483,  -483,  -483,  1508,  2945,  2945,   -71,  3339,  -483,    38,
+    2375,  -483,  -483,  -483,  -483,  1605,  -483,  -483,  -483,  -483,
+    -483,  -483,  -483,  -483,  -483,  -483,  -483,   -24,  -483,  -483,
+    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
+    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
+    -483,  -483,  -483,   -12,    13,  -483,  -483,  -483,  -483,  1702,
+    1702,  1702,  1702,  1508,  1508,  1799,  1508,  1508,  1508,  1508,
+    3103,  1508,  1799,  1799,  1217,   633,    27,    30,    34,  -483,
+    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
+     732,  -483,  1508,  3524,  2945,    35,    46,   829,  2945,  1508,
+    3182,  -483,  -483,    -9,  -483,   108,    57,    60,   926,    62,
+      66,    67,   419,    69,  2945,  -483,  -483,  -483,  -483,    74,
+    1023,  -483,  -483,  2945,  1314,  -483,  -483,  -483,  -483,  -483,
+    1120,  3887,  -483,   497,   519,  3394,  3416,   -20,    41,    43,
+      44,    45,    85,   117,   124,  3833,  -483,  -483,  -483,  3556,
+      53,    71,    70,   -79,   -23,  -483,  3887,    73,    79,  1508,
+    -483,  -483,   159,  1508,  1508,  1508,  1508,  2090,  2090,  2284,
+    1508,  2187,  2187,  1508,  1508,  1508,  1508,  1508,  1508,  1508,
+    1508,  -483,  -483,  3650,  -483,  3637,  2455,  1508,  1508,  1508,
+    1508,  1508,    90,  -483,  -483,  3261,  3261,  3261,   -11,  3663,
+     160,  -483,  -483,  1508,  1508,   -66,  -483,  1508,  -483,  -483,
+    -483,  3339,  2535,  -483,    93,  -483,  -483,  -483,  3578,   165,
+    3900,  1799,  1508,  1799,  1508,  1799,  1508,  1799,  1508,  -483,
+    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
+    -483,  -483,  -483,    32,  1896,  1993,  1799,  1799,  1508,  -483,
+    1508,  1508,  -483,  1508,  2866,  -483,  -483,  1508,    92,  1508,
+      10,    10,    10,    10,  3913,  3913,  -483,    14,    10,    10,
+      10,    10,    14,   -26,   -26,  -483,  -483,    95,  1508,  1508,
+    1508,  1508,  1508,  1508,  1508,  1508,  1508,  1508,  1508,  1508,
+    1508,  1508,  1508,  1508,  1508,  1508,  -483,  2775,   178,  2535,
+    -483,    98,  -483,    99,   100,  1508,  1508,  2535,  1993,  3719,
+    3887,  2945,  -483,  -483,  -483,   -66,  -483,  3732,  -483,  -483,
+    -483,   111,  2535,  -483,  2535,  1508,  1508,  -483,   334,  -483,
+    3448,  -483,  3470,  -483,  3502,  -483,  -483,  1799,    32,    32,
+      32,    32,  1799,  1799,    32,  1799,  1799,  -483,  -483,  -483,
+    -483,  -483,  -483,    24,  3887,  3887,  3887,    53,    71,    96,
+    -483,  3887,  -483,  3887,  1508,  -483,    10,    10,    10,    10,
+    3913,  3913,  -483,    14,    10,    10,    10,    10,    14,   -26,
+     -26,  -483,  -483,    95,  -483,  -483,    -5,  2775,  -483,  2615,
+    -483,  -483,  -483,  -483,  3745,    -2,   114,  -483,  2945,  -483,
+    -483,   104,  -483,   192,    50,  3887,  1799,  1799,  1799,  1799,
+    -483,  1799,  1799,  1799,  1799,  -483,   176,   134,  -483,  -483,
+    -483,  -483,  2695,   109,  -483,  -483,  2775,  -483,  2535,   174,
+    1508,   113,   115,  -483,  2945,  -483,  -483,  -483,  -483,  -483,
+    -483,  -483,  -483,  -483,   140,  1799,  -483,  2775,  -483,  -483,
+     128,   129,  1508,  3801,  -483,  2535,    18,  -483,  1799,   128,
+    -483,   119,  3814,  2535,  -483,  -483,  2945,  -483,  -483,  -483,
+    2535,   131,  -483,   133,   121,   123,  -483,  -483
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -890,73 +891,73 @@ static const yytype_int16 yydefact[] =
      109,   110,   103,   104,   105,   106,   107,     0,   121,    79,
       78,    80,    82,    83,    84,    86,    53,    92,    59,    62,
       93,    94,    81,    89,    90,    85,    67,    91,    88,    87,
-      61,    77,    98,     0,    96,   171,   172,   174,   173,    31,
+      61,    77,    98,     0,    96,   173,   174,   176,   175,    31,
       37,    60,    72,    38,    52,    54,    32,    42,    45,    75,
-      68,    65,     0,     0,     0,   289,   183,     0,     0,   247,
-     178,   179,   180,   181,   203,   204,   205,   182,   248,   249,
-     130,   250,     0,     0,    95,     0,     0,   130,     0,     0,
-      68,   183,   186,     0,   187,     0,     0,     0,   130,     0,
+      68,    65,     0,     0,     0,   291,   185,     0,     0,   249,
+     180,   181,   182,   183,   205,   206,   207,   184,   250,   251,
+     130,   252,     0,     0,    95,     0,     0,   130,     0,     0,
+      68,   185,   188,     0,   189,     0,     0,     0,   130,     0,
        0,     0,     0,     0,    95,   101,   122,     1,     4,     0,
-     130,   120,   143,    97,     0,   189,   200,   188,   198,   199,
-     132,   133,   175,     0,     0,     0,     0,    25,    26,    27,
-      47,    63,    44,    55,   213,     0,   245,   246,   128,     0,
-     174,   173,     0,   183,     0,   240,   291,     0,   290,   289,
+     130,   120,   143,    97,     0,   191,   202,   190,   200,   201,
+     132,   133,   177,     0,     0,     0,     0,    25,    26,    27,
+      47,    63,    44,    55,   215,     0,   247,   248,   128,     0,
+     176,   175,     0,   185,     0,   242,   293,     0,   292,   291,
      113,   114,    56,     0,     0,     0,     0,    29,    57,    51,
        0,    34,    66,     0,     0,     0,     0,     0,     0,     0,
-     131,   124,   268,   130,   269,     0,     0,     0,     0,     0,
+     131,   124,   270,   130,   271,     0,     0,     0,     0,     0,
        0,     0,     0,   119,   112,    41,    28,    30,     0,     0,
       55,   141,   142,     0,     0,    13,   117,    73,   115,   116,
-     145,     0,   159,   144,     0,   111,    99,   201,     0,    56,
-     136,     0,     0,     0,     0,     0,     0,     0,     0,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   231,
-     233,   234,   232,     0,     0,     0,     0,     0,     0,   177,
-       0,     0,   238,     0,     0,   239,   237,     0,     0,     0,
-     260,   261,   258,   259,   262,   263,   255,   265,   266,   267,
-     257,   256,   264,   251,   252,   253,   254,   130,     0,     0,
+     145,     0,   161,   144,     0,   111,    99,   203,     0,    56,
+     136,     0,     0,     0,     0,     0,     0,     0,     0,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   233,
+     235,   236,   234,     0,     0,     0,     0,     0,     0,   179,
+       0,     0,   240,     0,     0,   241,   239,     0,     0,     0,
+     262,   263,   260,   261,   264,   265,   257,   267,   268,   269,
+     259,   258,   266,   253,   254,   255,   256,   130,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   131,   126,   165,   146,   159,
-     184,     0,   185,     0,     0,     0,     0,   159,     0,     0,
-     158,     0,    17,    18,    11,    14,    15,     0,   156,   163,
-     164,     0,   160,   161,   159,     0,     0,   190,     0,   194,
-       0,   196,     0,   192,     0,   235,   236,     0,    33,    43,
-      46,    76,    48,    49,    50,    64,    65,   215,   208,   207,
-     214,   287,   288,     0,   244,   242,   243,     0,     0,     0,
-     241,   292,   176,   135,   131,   125,   279,   280,   277,   278,
-     281,   282,   274,   284,   285,   286,   276,   275,   283,   270,
-     271,   272,   273,   130,   169,   170,     0,   166,   167,     0,
+       0,     0,     0,     0,     0,   131,   126,   167,   146,   161,
+     186,     0,   187,     0,     0,     0,     0,   161,     0,     0,
+     160,     0,    17,    18,    11,    14,    15,     0,   158,   165,
+     166,     0,   162,   163,   161,     0,     0,   192,     0,   196,
+       0,   198,     0,   194,     0,   237,   238,     0,    33,    43,
+      46,    76,    48,    49,    50,    64,    65,   217,   210,   209,
+     216,   289,   290,     0,   246,   244,   245,     0,     0,     0,
+     243,   294,   178,   135,   131,   125,   281,   282,   279,   280,
+     283,   284,   276,   286,   287,   288,   278,   277,   285,   272,
+     273,   274,   275,   130,   171,   172,   152,   168,   169,     0,
       10,   137,   138,   139,     0,     0,     0,   140,    95,    16,
-     118,     0,   162,    20,     0,   134,     0,     0,     0,     0,
-     206,     0,     0,     0,     0,   212,     0,     0,   210,   211,
-     129,   127,     0,     0,   168,   165,   148,   159,     0,     0,
-       0,     0,   157,    21,   202,   191,   195,   197,   193,   226,
-     228,   229,   227,     0,     0,   230,   165,   150,   147,     0,
-       0,     0,     0,   152,   159,     0,    22,     0,     0,     0,
-       0,     0,   159,    12,    19,     0,   209,     0,   149,   155,
-     159,     0,    23,   151,     0,     0,     0,   153,   154
+     118,     0,   164,    20,     0,   134,     0,     0,     0,     0,
+     208,     0,     0,     0,     0,   214,     0,     0,   212,   213,
+     129,   127,     0,     0,   147,   170,   167,   148,   161,     0,
+       0,     0,     0,   159,    21,   204,   193,   197,   199,   195,
+     228,   230,   231,   229,     0,     0,   232,   167,   150,   153,
+     152,     0,     0,     0,   154,   161,     0,    22,     0,   152,
+     149,     0,     0,   161,    12,    19,     0,   211,   151,   157,
+     161,     0,    23,     0,     0,     0,   155,   156
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -459,  -459,  -459,   152,  -459,  -459,  -459,  -459,  -459,  -152,
-    -459,  -459,     0,    -7,   -25,  -459,     1,  -349,   -62,  -459,
-       2,  -240,   196,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -350,  -459,  -156,  -458,  -459,  -222,  -104,   -15,  -157,
-    -459,  -219,  -459,    38,  -459,   -78,  -249,   208,  -459,  -459,
-    -459,  -266,  -459,  -459,   -84,  -459,   132,    55,    46,   -96,
-      12,  -230
+    -483,  -483,  -483,   151,  -483,  -483,  -483,  -483,  -483,  -153,
+    -483,  -483,     0,    -7,   -25,  -483,     1,  -349,   -62,  -483,
+       2,  -240,   195,  -483,  -483,  -483,  -483,  -483,  -482,  -483,
+    -483,  -483,  -350,  -483,  -158,  -459,  -483,  -222,  -104,   -15,
+    -157,  -483,   -95,  -483,    48,  -483,   -78,  -251,   207,  -483,
+    -483,  -483,  -265,  -483,  -483,   -85,  -483,   132,    55,    40,
+     -96,    12,  -230
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
        0,    69,    70,    71,    72,    73,   373,   374,   375,   376,
-      74,   515,   111,   136,   113,   114,   380,    77,    78,    79,
-     137,   241,   138,    80,   263,    81,    82,    83,    84,    85,
-      86,   381,   382,   383,   446,   447,   448,   139,   140,   361,
-     163,   141,   142,   185,   143,   407,   408,   144,   145,   146,
-     303,   397,   147,   214,   215,   148,   149,   216,   243,   151,
-     217,   218
+      74,   516,   111,   136,   113,   114,   380,    77,    78,    79,
+     137,   241,   138,    80,   263,    81,    82,    83,   484,    84,
+      85,    86,   381,   382,   383,   446,   447,   448,   139,   140,
+     361,   163,   141,   142,   185,   143,   407,   408,   144,   145,
+     146,   303,   397,   147,   214,   215,   148,   149,   216,   243,
+     151,   217,   218
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -965,29 +966,29 @@ static const yytype_int16 yydefgoto[] =
 static const yytype_int16 yytable[] =
 {
       75,    76,   112,   356,   171,   176,   162,   154,   445,   450,
-     337,   482,   365,   488,   161,    87,   165,   456,   371,   166,
-     219,   156,   112,   249,   313,   261,   317,   509,   480,   167,
-     169,   372,   489,   366,   463,   262,   362,   362,   362,   173,
-     223,   224,   225,   226,   247,   248,   242,   249,   518,   289,
+     337,   482,   365,   489,   161,    87,   165,   456,   371,   166,
+     219,   156,   112,   249,   313,   261,   175,   510,   520,   167,
+     169,   372,   490,   366,   463,   262,   155,   528,   177,   173,
+     223,   224,   225,   226,   247,   248,   242,   249,   519,   289,
      230,   250,   251,   242,   244,   395,   290,   112,   174,   249,
      396,   244,   230,   249,   242,   150,   153,    75,   238,   239,
-      75,    76,   244,   155,   157,   314,   242,   179,   413,   315,
-     483,    88,   168,   150,   244,   175,   242,   233,   234,   235,
+      75,    76,   244,   181,   157,   314,   242,   179,   413,   315,
+     483,    88,   168,   150,   244,   182,   242,   233,   234,   235,
      236,   237,   238,   239,   244,   158,   159,   425,   445,   363,
      364,   235,   236,   237,   238,   239,   236,   237,   238,   239,
-     291,   177,   293,   295,   297,   524,   525,   292,   172,   294,
-     296,   298,   317,   204,   494,   443,   181,   182,   213,   252,
-     180,   183,   471,   472,   473,   474,   445,   510,   477,   299,
-     264,   300,   304,   301,   305,   302,   219,   112,   220,   274,
-     221,   258,   310,   204,   253,   464,   312,   445,   187,   188,
-     189,   254,   265,   266,   523,   268,   269,   112,   270,   273,
-     275,   319,   531,   311,   317,   359,   276,   316,   190,   191,
-     534,   193,   194,   195,   196,   368,   205,   384,   386,   209,
-     424,   422,   449,   451,   452,   453,   461,   313,   490,   492,
-     493,   503,   504,   481,   511,   508,   517,   245,   519,   378,
-     513,   520,   514,   527,   259,   528,   529,   533,   537,   535,
-     536,   538,   178,   459,   170,   484,   462,   410,   505,   164,
-     420,   318,     0,     0,     0,     0,   280,     0,     0,   278,
+     291,   183,   293,   295,   297,   525,   526,   292,   172,   294,
+     296,   298,   317,   204,   480,   443,   219,   220,   213,   252,
+     180,   221,   253,   471,   472,   473,   474,   445,   511,   477,
+     299,   264,   300,   254,   301,   304,   302,   112,   317,   274,
+     495,   258,   305,   204,   265,   464,   310,   266,   445,   268,
+     362,   362,   362,   269,   270,   524,   273,   112,   187,   188,
+     189,   275,   312,   531,   311,   316,   276,   317,   190,   191,
+     533,   193,   194,   195,   196,   319,   205,   359,   368,   209,
+     384,   386,   422,   424,   449,   451,   452,   453,   461,   313,
+     491,   493,   494,   481,   504,   505,   509,   245,   512,   378,
+     514,   518,   515,   483,   259,   521,   529,   534,   536,   535,
+     537,   178,   459,   170,   462,   485,   506,   410,   164,   420,
+     280,   318,     0,     0,     0,     0,     0,     0,     0,   278,
      360,   360,   360,     0,     0,     0,    75,   358,   161,   161,
      161,   186,   186,   186,   186,     0,     0,   192,     0,     0,
        0,     0,     0,     0,   206,   207,     0,     0,     0,     0,
@@ -1007,69 +1008,40 @@ static const yytype_int16 yytable[] =
      433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
        0,     0,     0,   387,     0,   389,     0,   391,     0,   393,
      454,   455,     0,   233,   234,   235,   236,   237,   238,   239,
-       0,     0,     0,   491,     0,     0,   409,   409,   411,   412,
-       0,   465,     0,     0,     0,     0,   281,    75,     0,    75,
-     486,   112,   282,     0,     0,     0,     0,     0,     0,     0,
-     223,   224,   225,   226,   247,   248,     0,   249,     0,     0,
-     230,   250,   251,     0,     0,     0,     0,     0,     0,   421,
-       0,     0,    75,   507,     0,    75,   516,    75,     0,     0,
+       0,     0,     0,   492,     0,     0,   409,   409,   411,   412,
+       0,   465,     0,     0,     0,     0,     0,    75,     0,    75,
+     487,   112,     0,   271,     0,     0,     0,     0,     0,     0,
+       0,   223,   224,   225,   226,   247,   248,     0,   249,     0,
+       0,   230,   250,   251,     0,     0,     0,     0,     0,   421,
+       0,     0,    75,   508,     0,     0,    75,   517,    75,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     409,     0,     0,     0,     0,     0,    75,   233,   234,   235,
-     236,   237,   238,   239,    75,     0,     0,     0,   532,     0,
-       0,     0,    75,     0,     0,     0,     0,     0,     0,   470,
-      75,     0,     0,     0,   475,   476,     0,   478,   479,     0,
-       0,     0,     0,     0,   512,     0,   283,     0,     0,     0,
-       0,     0,   284,     0,     0,     0,     0,     0,     0,     0,
-     223,   224,   225,   226,   247,   248,   521,   249,   285,     0,
-     230,   250,   251,     0,   286,     0,     0,     0,     0,     0,
-       0,     0,   223,   224,   225,   226,   247,   248,     0,   249,
-       0,     0,   230,   250,   251,     0,     0,     0,   495,   496,
-     497,   498,     0,   499,   500,   501,   502,   233,   234,   235,
-     236,   237,   238,   239,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   233,
-     234,   235,   236,   237,   238,   239,   475,   115,   116,     1,
-     210,   211,    89,   119,   120,   121,   122,     6,    90,   526,
-      91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
-      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
-     102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
-     125,    33,    34,    35,     0,    36,    37,   126,    39,   127,
-      41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
-     131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
-     110,     0,     0,     0,   132,   133,     0,     0,     0,     0,
-       0,   152,     0,   135,     0,   212,   115,   116,     1,   117,
-     118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
-       8,    92,    93,    94,    12,    13,    95,    15,    96,   222,
-      18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
-     103,   104,   105,   223,   224,   225,   226,   227,   228,   125,
-     229,    34,    35,   230,   231,   232,   126,    39,   127,    41,
-     128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
-      61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
-     233,   234,   235,   236,   237,   238,   239,     0,     0,   240,
-     152,     0,   135,   115,   116,     1,   117,   118,    89,   119,
-     120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
-      94,    12,   255,    95,    15,    96,    17,    18,    97,    98,
-      99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
-     223,   224,   225,   226,   227,   228,   125,   229,   256,   257,
-     230,   231,   232,   126,    39,   127,    41,   128,    43,   129,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
-     107,   108,   109,     0,     0,     0,   110,   233,   234,   235,
-     236,   237,   238,   239,     0,     0,   240,   152,     0,   135,
-     115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
-       6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
-      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
-     101,   267,    25,   102,   103,   104,   105,   223,   224,   225,
-     226,   227,   228,   125,   229,    34,    35,   230,   231,   232,
-     126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
-       0,     0,     0,   110,   233,   234,   235,   236,   237,   238,
-     239,     0,     0,   240,   152,     0,   135,   115,   116,     1,
+     409,     0,     0,     0,     0,     0,     0,    75,   233,   234,
+     235,   236,   237,   238,   239,    75,   272,     0,     0,   532,
+       0,     0,     0,    75,     0,   281,     0,     0,     0,   470,
+      75,   282,     0,     0,   475,   476,     0,   478,   479,   223,
+     224,   225,   226,   247,   248,   513,   249,   283,     0,   230,
+     250,   251,     0,   284,     0,     0,     0,     0,     0,     0,
+       0,   223,   224,   225,   226,   247,   248,   522,   249,     0,
+       0,   230,   250,   251,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
+     237,   238,   239,     0,     0,     0,     0,     0,   496,   497,
+     498,   499,     0,   500,   501,   502,   503,     0,   233,   234,
+     235,   236,   237,   238,   239,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   475,   115,   116,
+       1,   210,   211,    89,   119,   120,   121,   122,     6,    90,
+     527,    91,     8,    92,    93,    94,    12,    13,    95,    15,
+      96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
+      25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
+      31,   125,    33,    34,    35,     0,    36,    37,   126,    39,
+     127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
+      59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
+       0,   110,     0,     0,     0,   132,   133,     0,     0,     0,
+       0,     0,   152,     0,   135,     0,   212,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
-      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+     222,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,   223,   224,   225,   226,   227,   228,
      125,   229,    34,    35,   230,   231,   232,   126,    39,   127,
       41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
@@ -1078,43 +1050,43 @@ static const yytype_int16 yytable[] =
      110,   233,   234,   235,   236,   237,   238,   239,     0,     0,
      240,   152,     0,   135,   115,   116,     1,   117,   118,    89,
      119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
-      93,    94,    12,    13,    95,    15,    96,   279,    18,    97,
+      93,    94,    12,   255,    95,    15,    96,    17,    18,    97,
       98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
-     105,   223,   224,   225,   226,   227,   228,   125,   229,    34,
-      35,   230,   231,   232,   126,    39,   127,    41,   128,    43,
+     105,   223,   224,   225,   226,   227,   228,   125,   229,   256,
+     257,   230,   231,   232,   126,    39,   127,    41,   128,    43,
      129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
      106,   107,   108,   109,     0,     0,     0,   110,   233,   234,
-     235,   236,   237,   238,   239,     0,     0,     0,   152,     0,
+     235,   236,   237,   238,   239,     0,     0,   240,   152,     0,
      135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
      122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
       13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
-      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
-       0,     0,    30,    31,   125,    33,    34,    35,     0,    36,
-      37,   126,    39,   127,    41,   128,    43,   129,    45,    46,
+      22,   101,   267,    25,   102,   103,   104,   105,   223,   224,
+     225,   226,   227,   228,   125,   229,    34,    35,   230,   231,
+     232,   126,    39,   127,    41,   128,    43,   129,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
       56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
-     109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
-       0,     0,     0,     0,     0,   152,   208,   135,   115,   116,
+     109,     0,     0,     0,   110,   233,   234,   235,   236,   237,
+     238,   239,     0,     0,   240,   152,     0,   135,   115,   116,
        1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
-      25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
-      31,   125,    33,    34,    35,     0,    36,    37,   126,    39,
+      25,   102,   103,   104,   105,   223,   224,   225,   226,   227,
+     228,   125,   229,    34,    35,   230,   231,   232,   126,    39,
      127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
       50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
       59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
-       0,   110,     0,     0,     0,   132,   133,     0,     0,     0,
-       0,     0,   152,   277,   135,   115,   116,     1,   117,   118,
-      89,   119,   120,   121,   122,     6,    90,     0,    91,   123,
-      92,    93,    94,    12,    13,    95,   124,    96,    17,    18,
+       0,   110,   233,   234,   235,   236,   237,   238,   239,     0,
+       0,   240,   152,     0,   135,   115,   116,     1,   117,   118,
+      89,   119,   120,   121,   122,     6,    90,     0,    91,     8,
+      92,    93,    94,    12,    13,    95,    15,    96,   279,    18,
       97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
-     104,   105,     0,     0,     0,     0,    30,    31,   125,    33,
-      34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
+     104,   105,   223,   224,   225,   226,   227,   228,   125,   229,
+      34,    35,   230,   231,   232,   126,    39,   127,    41,   128,
       43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,   130,    58,    59,   131,    61,
-      62,   106,   107,   108,   109,     0,     0,     0,   110,     0,
-       0,     0,   132,   133,     0,     0,     0,     0,     0,   134,
+      62,   106,   107,   108,   109,     0,     0,     0,   110,   233,
+     234,   235,   236,   237,   238,   239,     0,     0,     0,   152,
        0,   135,   115,   116,     1,   117,   118,    89,   119,   120,
      121,   122,     6,    90,     0,    91,     8,    92,    93,    94,
       12,    13,    95,    15,    96,    17,    18,    97,    98,    99,
@@ -1124,7 +1096,7 @@ static const yytype_int16 yytable[] =
       46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
       55,    56,   130,    58,    59,   131,    61,    62,   106,   107,
      108,   109,     0,     0,     0,   110,     0,     0,     0,   132,
-     133,     0,     0,     0,     0,     0,   152,     0,   135,   115,
+     133,     0,     0,     0,     0,     0,   152,   208,   135,   115,
      116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
@@ -1134,24 +1106,24 @@ static const yytype_int16 yytable[] =
       49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
       58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
        0,     0,   110,     0,     0,     0,   132,   133,     0,     0,
-       0,     0,     0,   134,     0,   135,   115,   116,     1,   117,
+       0,     0,     0,   152,   277,   135,   115,   116,     1,   117,
      118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
-       8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
+     123,    92,    93,    94,    12,    13,    95,   124,    96,    17,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
      103,   104,   105,     0,     0,     0,     0,    30,    31,   125,
       33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
      128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   130,    58,    59,    60,
+      51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
       61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
        0,     0,     0,   132,   133,     0,     0,     0,     0,     0,
-     184,     0,   135,   115,   116,     1,   117,   118,    89,   119,
+     134,     0,   135,   115,   116,     1,   117,   118,    89,   119,
      120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
       94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
       99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
        0,     0,     0,     0,    30,    31,   125,    33,    34,    35,
        0,    36,    37,   126,    39,   127,    41,   128,    43,   129,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,   130,    58,    59,    60,    61,    62,   106,
+      54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
      107,   108,   109,     0,     0,     0,   110,     0,     0,     0,
      132,   133,     0,     0,     0,     0,     0,   152,     0,   135,
      115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
@@ -1159,99 +1131,136 @@ static const yytype_int16 yytable[] =
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
      101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
        0,    30,    31,   125,    33,    34,    35,     0,    36,    37,
-     126,   398,   127,   399,   128,   400,   129,   401,    46,    47,
-      48,    49,    50,     0,    51,    52,   402,   403,   404,    56,
-     130,    58,   405,   406,    61,    62,   106,   107,   108,   109,
+     126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+     130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
        0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
-       0,     0,     0,     0,   152,     0,   135,   115,   116,     1,
+       0,     0,     0,     0,   134,     0,   135,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
      125,    33,    34,    35,     0,    36,    37,   126,    39,   127,
       41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,   402,   403,    55,    56,   130,    58,   405,
-     406,    61,    62,   106,   107,   108,   109,     0,     0,     0,
+       0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
+      60,    61,    62,   106,   107,   108,   109,     0,     0,     0,
      110,     0,     0,     0,   132,   133,     0,     0,     0,     0,
-       0,   152,     0,   135,   115,   116,     1,   117,   118,    89,
+       0,   184,     0,   135,   115,   116,     1,   117,   118,    89,
      119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
       93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
       98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
-     105,     0,     0,     0,     0,     0,     0,   125,    33,    34,
+     105,     0,     0,     0,     0,    30,    31,   125,    33,    34,
       35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
      129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
+      53,    54,    55,    56,   130,    58,    59,    60,    61,    62,
      106,   107,   108,   109,     0,     0,     0,   110,     0,     0,
        0,   132,   133,     0,     0,     0,     0,     0,   152,     0,
      135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
      122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
       13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
       22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
-       0,     0,     0,     0,   125,    33,    34,    35,     0,     0,
-       0,   126,    39,   127,    41,   128,    43,   129,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
+       0,     0,    30,    31,   125,    33,    34,    35,     0,    36,
+      37,   126,   398,   127,   399,   128,   400,   129,   401,    46,
+      47,    48,    49,    50,     0,    51,    52,   402,   403,   404,
+      56,   130,    58,   405,   406,    61,    62,   106,   107,   108,
      109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
        0,     0,     0,     0,     0,   152,     0,   135,   115,   116,
        1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
-      25,   102,   103,   104,   105,     0,     0,     0,     0,     0,
-       0,   125,     0,    34,    35,     0,     0,     0,   126,    39,
+      25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
+      31,   125,    33,    34,    35,     0,    36,    37,   126,    39,
      127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
-      59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
-       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     1,   152,     0,   135,     2,     3,     4,     5,     6,
-       0,     0,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,    26,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,    68,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,   357,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,   379,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,   485,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,    66,
-       0,     1,    67,     0,     0,     2,     3,     4,     5,     6,
-       0,   506,     7,     8,     9,    10,    11,    12,    13,     0,
-      15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
-      24,    25,     0,    27,    28,    29,     0,     0,     0,     0,
-      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
-       0,     0,    67,     0,     0,     0,     0,     0,     0,     0,
-       0,   444,     1,   417,   418,    89,     2,     3,     4,     5,
+      50,     0,    51,    52,   402,   403,    55,    56,   130,    58,
+     405,   406,    61,    62,   106,   107,   108,   109,     0,     0,
+       0,   110,     0,     0,     0,   132,   133,     0,     0,     0,
+       0,     0,   152,     0,   135,   115,   116,     1,   117,   118,
+      89,   119,   120,   121,   122,     6,    90,     0,    91,     8,
+      92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
+      97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
+     104,   105,     0,     0,     0,     0,     0,     0,   125,    33,
+      34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
+      43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,   130,    58,    59,   131,    61,
+      62,   106,   107,   108,   109,     0,     0,     0,   110,     0,
+       0,     0,   132,   133,     0,     0,     0,     0,     0,   152,
+       0,   135,   115,   116,     1,   117,   118,    89,   119,   120,
+     121,   122,     6,    90,     0,    91,     8,    92,    93,    94,
+      12,    13,    95,    15,    96,    17,    18,    97,    98,    99,
+     100,    22,   101,    24,    25,   102,   103,   104,   105,     0,
+       0,     0,     0,     0,     0,   125,    33,    34,    35,     0,
+       0,     0,   126,    39,   127,    41,   128,    43,   129,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,   130,    58,    59,   131,    61,    62,   106,   107,
+     108,   109,     0,     0,     0,   110,     0,     0,     0,   132,
+     133,     0,     0,     0,     0,     0,   152,     0,   135,   115,
+     116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
+      90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
+      15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
+      24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
+       0,     0,   125,     0,    34,    35,     0,     0,     0,   126,
+      39,   127,    41,   128,    43,   129,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
+      58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
+       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     1,   152,     0,   135,     2,     3,     4,     5,
+       6,     0,     0,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,     0,    22,
+      23,    24,    25,    26,    27,    28,    29,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,     0,
+      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
+       6,     0,    68,     7,     8,     9,    10,    11,    12,    13,
+       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
+      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
+      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
+       6,     0,   357,     7,     8,     9,    10,    11,    12,    13,
+       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
+      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
+      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
+       6,     0,   379,     7,     8,     9,    10,    11,    12,    13,
+       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
+      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
+      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
+       6,     0,   486,     7,     8,     9,    10,    11,    12,    13,
+       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
+      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
+      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
+       6,     0,   507,     7,     8,     9,    10,    11,    12,    13,
+       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
+      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
+       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
+       0,     0,     0,    67,     0,     0,     0,     0,     0,     0,
+       0,     0,   444,     1,   417,   418,    89,     2,     3,     4,
+       5,     6,    90,     0,    91,     8,    92,    93,    94,    12,
+      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
+      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,   106,   107,   108,
+     109,     0,     1,     0,   110,    89,     2,     3,     4,     5,
        6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
      101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
@@ -1265,133 +1274,126 @@ static const yytype_int16 yytable[] =
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
       30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,   160,
       58,    59,    60,    61,    62,   106,   107,   108,   109,     0,
        1,     0,   110,    89,     2,     3,     4,     5,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
       25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,    56,   160,    58,
+      40,    41,    42,    43,    44,    45,   197,   198,   199,   200,
+     201,     0,    51,   202,    53,    54,    55,   203,    57,    58,
       59,    60,    61,    62,   106,   107,   108,   109,     0,     1,
        0,   110,    89,     2,     3,     4,     5,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
       32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,   197,   198,   199,   200,   201,
-       0,    51,   202,    53,    54,    55,   203,    57,    58,    59,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,   260,    57,    58,    59,
       60,    61,    62,   106,   107,   108,   109,     0,     1,     0,
-     110,    89,     2,     3,     4,     5,     6,    90,     0,    91,
+     110,    89,   119,   120,     4,     5,     6,    90,     0,    91,
        8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
      103,   104,   105,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,   260,    57,    58,    59,    60,
-      61,    62,   106,   107,   108,   109,     0,     1,     0,   110,
-      89,   119,   120,     4,     5,     6,    90,     0,    91,     8,
-      92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
-      97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
-     104,   105,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
-      43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,   106,   107,   108,   109,     1,     0,     0,   110,     2,
-       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
-       0,    12,    13,     0,    15,    16,    17,    18,    19,    98,
-      21,     0,    22,     0,    24,    25,     0,    27,    28,    29,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,   106,
-      64,   287,     0,     0,     0,     0,    67,   288,     0,     0,
-       0,     0,     0,     0,   467,   223,   224,   225,   226,   247,
-     248,     0,   249,     0,     0,   230,   250,   251,   223,   224,
-     225,   226,   247,   248,   468,   249,     0,     0,   230,   250,
-     251,     0,     0,     0,     0,     0,     0,     0,   223,   224,
+      33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
+     128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,   106,   107,   108,   109,     1,     0,     0,   110,
+       2,     3,     4,     5,     6,     0,     0,     7,     8,     9,
+      10,     0,    12,    13,     0,    15,    16,    17,    18,    19,
+      98,    21,     0,    22,     0,    24,    25,     0,    27,    28,
+      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+     106,    64,   285,     0,     0,     0,     0,    67,   286,     0,
+       0,     0,     0,     0,     0,     0,   223,   224,   225,   226,
+     247,   248,     0,   249,   287,     0,   230,   250,   251,     0,
+     288,     0,     0,     0,     0,     0,     0,     0,   223,   224,
      225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
-     251,     0,   233,   234,   235,   236,   237,   238,   239,     0,
-       0,     0,     0,     0,   271,   233,   234,   235,   236,   237,
-     238,   239,   223,   224,   225,   226,   247,   248,   469,   249,
-       0,     0,   230,   250,   251,   233,   234,   235,   236,   237,
+     251,     0,     0,     0,     0,     0,   467,     0,     0,     0,
+       0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
+     223,   224,   225,   226,   247,   248,     0,   249,   468,     0,
+     230,   250,   251,     0,     0,   233,   234,   235,   236,   237,
      238,   239,   223,   224,   225,   226,   247,   248,     0,   249,
        0,     0,   230,   250,   251,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   233,
-     234,   235,   236,   237,   238,   239,     0,   272,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   246,     0,   233,
+     469,     0,     0,     0,     0,     0,     0,   233,   234,   235,
+     236,   237,   238,   239,   223,   224,   225,   226,   247,   248,
+       0,   249,     0,     0,   230,   250,   251,   246,     0,   233,
      234,   235,   236,   237,   238,   239,   223,   224,   225,   226,
-     247,   248,     0,   249,     0,     0,   230,   250,   251,   223,
+     247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   233,   234,   235,   236,   237,   238,   239,   223,   224,
+     225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
+     251,     0,     0,   233,   234,   235,   236,   237,   238,   239,
+     223,   224,   225,   226,   247,   248,     0,   249,     0,     0,
+     230,   250,   251,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   233,   234,   235,   236,   237,
+     238,   239,     0,     0,   308,     0,   309,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   233,   234,   235,
+     236,   237,   238,   239,     0,     0,   385,     0,   309,   223,
      224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
-     250,   251,   223,   224,   225,   226,   247,   248,     0,   249,
-       0,     0,   230,   250,   251,     0,     0,     0,     0,     0,
-       0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
+     250,   251,   338,   339,   340,   341,   342,   343,     0,   344,
+       0,     0,   345,   346,   347,   223,   224,   225,   226,   247,
+     248,     0,   249,     0,     0,   230,   250,   251,     0,     0,
        0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
-     237,   238,   239,     0,     0,   308,     0,   309,     0,   233,
-     234,   235,   236,   237,   238,   239,     0,     0,   385,     0,
-     309,   223,   224,   225,   226,   247,   248,     0,   249,     0,
-       0,   230,   250,   251,   338,   339,   340,   341,   342,   343,
-       0,   344,     0,     0,   345,   346,   347,   223,   224,   225,
+     237,   238,   239,     0,     0,     0,     0,   309,     0,   348,
+     349,   350,   351,   352,   353,   354,     0,     0,   355,     0,
+       0,     0,   233,   234,   235,   236,   237,   238,   239,     0,
+     367,   223,   224,   225,   226,   247,   248,     0,   249,     0,
+       0,   230,   250,   251,   223,   224,   225,   226,   247,   248,
+       0,   249,     0,     0,   230,   250,   251,   223,   224,   225,
      226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
        0,     0,     0,     0,     0,     0,     0,     0,   233,   234,
-     235,   236,   237,   238,   239,     0,     0,     0,     0,   309,
-       0,   348,   349,   350,   351,   352,   353,   354,     0,     0,
-     355,     0,     0,     0,   233,   234,   235,   236,   237,   238,
-     239,     0,   367,   223,   224,   225,   226,   247,   248,     0,
+     235,   236,   237,   238,   239,     0,   457,     0,     0,     0,
+       0,   233,   234,   235,   236,   237,   238,   239,     0,   460,
+       0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
+     239,     0,   488,   223,   224,   225,   226,   247,   248,     0,
      249,     0,     0,   230,   250,   251,   223,   224,   225,   226,
-     247,   248,     0,   249,     0,     0,   230,   250,   251,   223,
-     224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
-     250,   251,     0,     0,     0,     0,     0,     0,     0,     0,
-     233,   234,   235,   236,   237,   238,   239,     0,   457,     0,
+     247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
+       0,     0,     0,     0,     0,   223,   224,   225,   226,   247,
+     248,     0,   249,     0,     0,   230,   250,   251,     0,     0,
+     233,   234,   235,   236,   237,   238,   239,     0,   523,     0,
        0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
-       0,   460,     0,     0,     0,     0,   233,   234,   235,   236,
-     237,   238,   239,     0,   487,   223,   224,   225,   226,   247,
-     248,     0,   249,     0,     0,   230,   250,   251,   223,   224,
-     225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
-     251,     0,     0,     0,     0,     0,     0,   223,   224,   225,
-     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
-       0,     0,   233,   234,   235,   236,   237,   238,   239,     0,
-     522,     0,     0,     0,     0,   233,   234,   235,   236,   237,
-     238,   239,     0,   530,   306,   307,     0,     0,     0,     0,
-       0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
-     239,   223,   224,   225,   226,   247,   248,     0,   249,     0,
-       0,   230,   250,   251,   338,   339,   340,   341,   342,   343,
-       0,   344,     0,     0,   345,   346,   347,   223,   224,   225,
-     226,     0,     0,     0,   249,     0,     0,   230,   250,   251,
-       0,     0,     0,     0,     0,     0,     0,     0,   233,   234,
-     235,   236,   237,   238,   239,     0,     0,     0,     0,     0,
-       0,   348,   349,   350,   351,   352,   353,   354,     0,     0,
-       0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
-     239
+       0,   530,   306,   307,     0,     0,     0,     0,     0,     0,
+       0,     0,   233,   234,   235,   236,   237,   238,   239,   223,
+     224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
+     250,   251,   338,   339,   340,   341,   342,   343,     0,   344,
+       0,     0,   345,   346,   347,   223,   224,   225,   226,     0,
+       0,     0,   249,     0,     0,   230,   250,   251,     0,     0,
+       0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
+     237,   238,   239,     0,     0,     0,     0,     0,     0,   348,
+     349,   350,   351,   352,   353,   354,     0,     0,     0,     0,
+       0,     0,   233,   234,   235,   236,   237,   238,   239
 };
 
 static const yytype_int16 yycheck[] =
 {
        0,     0,     9,   243,    29,    67,    21,    14,   357,   359,
      240,    16,    23,    15,    21,    31,    23,   367,    84,    26,
-      99,    19,    29,    49,   103,    34,    98,   485,   100,    27,
-      28,    97,    34,    44,   384,    44,   255,   256,   257,    64,
-      42,    43,    44,    45,    46,    47,   150,    49,   506,    69,
+      99,    19,    29,    49,   103,    34,    97,   486,   510,    27,
+      28,    97,    34,    44,   384,    44,    31,   519,     0,    64,
+      42,    43,    44,    45,    46,    47,   150,    49,   507,    69,
       52,    53,    54,   157,   150,    23,    76,    64,    65,    49,
       28,   157,    52,    49,   168,    10,    11,    67,    94,    95,
-      70,    70,   168,    31,    19,    98,   180,    75,   308,   102,
+      70,    70,   168,    97,    19,    98,   180,    75,   308,   102,
       85,    97,    27,    28,   180,    97,   190,    89,    90,    91,
       92,    93,    94,    95,   190,    36,    37,   337,   447,   256,
      257,    91,    92,    93,    94,    95,    92,    93,    94,    95,
-      69,     0,    69,    69,    69,    97,    98,    76,    63,    76,
-      76,    76,    98,   130,   100,   355,    97,    97,   135,   154,
-      75,    98,   398,   399,   400,   401,   485,   487,   404,    55,
-      33,    57,    28,    59,    28,    61,    99,   154,    97,   174,
-      97,   158,   103,   160,    97,   385,   102,   506,   120,   121,
-     122,    97,    97,    97,   514,    97,    97,   174,    97,    97,
-      97,    26,   522,   103,    98,    97,   183,   102,   123,   124,
-     530,   126,   127,   128,   129,    28,   131,    97,    26,   134,
-      98,   100,    16,    97,    97,    97,    87,   103,    86,    97,
-      10,    28,    71,   443,    34,    97,    71,   152,    85,   271,
-      97,    86,    97,    85,   159,    97,    97,    97,    97,    86,
-      86,    97,    70,   375,    28,   447,   382,   305,   477,    21,
-     314,   219,    -1,    -1,    -1,    -1,   190,    -1,    -1,   184,
+      69,    98,    69,    69,    69,    97,    98,    76,    63,    76,
+      76,    76,    98,   130,   100,   355,    99,    97,   135,   154,
+      75,    97,    97,   398,   399,   400,   401,   486,   488,   404,
+      55,    33,    57,    97,    59,    28,    61,   154,    98,   174,
+     100,   158,    28,   160,    97,   385,   103,    97,   507,    97,
+     255,   256,   257,    97,    97,   515,    97,   174,   120,   121,
+     122,    97,   102,   523,   103,   102,   183,    98,   123,   124,
+     530,   126,   127,   128,   129,    26,   131,    97,    28,   134,
+      97,    26,   100,    98,    16,    97,    97,    97,    87,   103,
+      86,    97,    10,   443,    28,    71,    97,   152,    34,   271,
+      97,    71,    97,    85,   159,    86,    97,    86,    97,    86,
+      97,    70,   375,    28,   382,   447,   477,   305,    21,   314,
+     190,   219,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   184,
      255,   256,   257,    -1,    -1,    -1,   246,   246,   255,   256,
      257,   119,   120,   121,   122,    -1,    -1,   125,    -1,    -1,
       -1,    -1,    -1,    -1,   132,   133,    -1,    -1,    -1,    -1,
@@ -1412,65 +1414,36 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,   281,    -1,   283,    -1,   285,    -1,   287,
      365,   366,    -1,    89,    90,    91,    92,    93,    94,    95,
       -1,    -1,    -1,   458,    -1,    -1,   304,   305,   306,   307,
-      -1,   386,    -1,    -1,    -1,    -1,    28,   447,    -1,   449,
-     449,   458,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,   424,
-      -1,    -1,   482,   482,    -1,   485,   493,   487,    -1,    -1,
+      -1,   386,    -1,    -1,    -1,    -1,    -1,   447,    -1,   449,
+     449,   458,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,   424,
+      -1,    -1,   482,   482,    -1,    -1,   486,   494,   488,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     368,    -1,    -1,    -1,    -1,    -1,   506,    89,    90,    91,
-      92,    93,    94,    95,   514,    -1,    -1,    -1,   525,    -1,
-      -1,    -1,   522,    -1,    -1,    -1,    -1,    -1,    -1,   397,
-     530,    -1,    -1,    -1,   402,   403,    -1,   405,   406,    -1,
-      -1,    -1,    -1,    -1,   489,    -1,    28,    -1,    -1,    -1,
-      -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      42,    43,    44,    45,    46,    47,   511,    49,    28,    -1,
-      52,    53,    54,    -1,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,   466,   467,
-     468,   469,    -1,   471,   472,   473,   474,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,   504,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,   517,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
-      88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
-      -1,    99,    -1,   101,    -1,   103,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    98,
-      99,    -1,   101,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    98,    99,    -1,   101,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    98,    99,    -1,   101,     5,     6,     7,
+     368,    -1,    -1,    -1,    -1,    -1,    -1,   507,    89,    90,
+      91,    92,    93,    94,    95,   515,    97,    -1,    -1,   526,
+      -1,    -1,    -1,   523,    -1,    28,    -1,    -1,    -1,   397,
+     530,    34,    -1,    -1,   402,   403,    -1,   405,   406,    42,
+      43,    44,    45,    46,    47,   490,    49,    28,    -1,    52,
+      53,    54,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    42,    43,    44,    45,    46,    47,   512,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,    -1,    -1,   466,   467,
+     468,   469,    -1,   471,   472,   473,   474,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   505,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+     518,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+      -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
+      -1,    -1,    99,    -1,   101,    -1,   103,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
@@ -1489,36 +1462,36 @@ static const yytype_int16 yycheck[] =
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
       81,    82,    83,    84,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,
+      91,    92,    93,    94,    95,    -1,    -1,    98,    99,    -1,
      101,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
-      -1,    -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,
+      84,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
+      94,    95,    -1,    -1,    98,    99,    -1,   101,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
-      -1,    -1,    99,   100,   101,     5,     6,     7,     8,     9,
+      -1,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    98,    99,    -1,   101,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,
-      -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,
+      80,    81,    82,    83,    84,    -1,    -1,    -1,    88,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    99,
       -1,   101,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
@@ -1528,7 +1501,7 @@ static const yytype_int16 yycheck[] =
       63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,
-      93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,
+      93,    -1,    -1,    -1,    -1,    -1,    99,   100,   101,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
@@ -1538,7 +1511,7 @@ static const yytype_int16 yycheck[] =
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
       -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,
-      -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,     8,
+      -1,    -1,    -1,    99,   100,   101,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
@@ -1581,7 +1554,7 @@ static const yytype_int16 yycheck[] =
       11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
       51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
@@ -1591,8 +1564,8 @@ static const yytype_int16 yycheck[] =
       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,
-      -1,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
       84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,
@@ -1600,62 +1573,99 @@ static const yytype_int16 yycheck[] =
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     7,    99,    -1,   101,    11,    12,    13,    14,    15,
-      -1,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
+      -1,    -1,    99,    -1,   101,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,
+      -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,    99,
+      -1,   101,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,    -1,
+      -1,    -1,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,
+      93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      -1,     7,    88,    -1,    -1,    11,    12,    13,    14,    15,
-      -1,    97,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      -1,    -1,    48,    -1,    50,    51,    -1,    -1,    -1,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    -1,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
       -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    97,     7,     8,     9,    10,    11,    12,    13,    14,
+      -1,    -1,     7,    99,    -1,   101,    11,    12,    13,    14,
+      15,    -1,    -1,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
+      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
+      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
+      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
+      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
+      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
+      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    97,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    -1,     7,    -1,    88,    10,    11,    12,    13,    14,
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
@@ -1694,80 +1704,73 @@ static const yytype_int16 yycheck[] =
       49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,     7,    -1,    88,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,     7,    -1,    -1,    88,    11,
-      12,    13,    14,    15,    -1,    -1,    18,    19,    20,    21,
-      -1,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
-      32,    -1,    34,    -1,    36,    37,    -1,    39,    40,    41,
-      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    28,    -1,    -1,    -1,    -1,    88,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,    28,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
-      44,    45,    46,    47,    28,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
+      79,    80,    81,    82,    83,    84,     7,    -1,    -1,    88,
+      11,    12,    13,    14,    15,    -1,    -1,    18,    19,    20,
+      21,    -1,    23,    24,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    40,
+      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    28,    -1,    -1,    -1,    -1,    88,    34,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    -1,    49,    28,    -1,    52,    53,    54,    -1,
+      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
       44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    -1,    -1,    -1,    34,    89,    90,    91,    92,    93,
-      94,    95,    42,    43,    44,    45,    46,    47,    28,    49,
-      -1,    -1,    52,    53,    54,    89,    90,    91,    92,    93,
+      54,    -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      42,    43,    44,    45,    46,    47,    -1,    49,    28,    -1,
+      52,    53,    54,    -1,    -1,    89,    90,    91,    92,    93,
       94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
       -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    -1,    89,
+      28,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    33,    -1,    89,
       90,    91,    92,    93,    94,    95,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    -1,    98,    -1,   100,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    98,    -1,   100,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
       53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    98,    -1,   100,    -1,    89,
+      93,    94,    95,    -1,    -1,    -1,    -1,   100,    -1,    89,
       90,    91,    92,    93,    94,    95,    -1,    -1,    98,    -1,
-     100,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      97,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
       -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
       -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
       45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,   100,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      98,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
       95,    -1,    97,    42,    43,    44,    45,    46,    47,    -1,
       49,    -1,    -1,    52,    53,    54,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
       89,    90,    91,    92,    93,    94,    95,    -1,    97,    -1,
       -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    97,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    97,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    -1,    -1,    52,    53,    54,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95
+      -1,    97,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    -1,
+      -1,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1782,52 +1785,52 @@ static const yytype_uint8 yystos[] =
       67,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    85,    88,    97,   105,
      106,   107,   108,   109,   114,   116,   120,   121,   122,   123,
-     127,   129,   130,   131,   132,   133,   134,    31,    97,    10,
+     127,   129,   130,   131,   133,   134,   135,    31,    97,    10,
       16,    18,    20,    21,    22,    25,    27,    30,    31,    32,
       33,    35,    38,    39,    40,    41,    81,    82,    83,    84,
       88,   116,   117,   118,   119,     5,     6,     8,     9,    11,
       12,    13,    14,    19,    26,    48,    55,    57,    59,    61,
-      75,    78,    92,    93,    99,   101,   117,   124,   126,   141,
-     142,   145,   146,   148,   151,   152,   153,   156,   159,   160,
-     161,   163,    99,   161,   117,    31,   124,   161,    36,    37,
-      75,   117,   142,   144,   151,   117,   117,   124,   161,   124,
-     126,   118,   161,   118,   117,    97,   122,     0,   107,   124,
-     161,    97,    97,    98,    99,   147,   160,   147,   147,   147,
-     161,   161,   160,   161,   161,   161,   161,    63,    64,    65,
-      66,    67,    70,    74,   117,   161,   160,   160,   100,   161,
-       8,     9,   103,   117,   157,   158,   161,   164,   165,    99,
+      75,    78,    92,    93,    99,   101,   117,   124,   126,   142,
+     143,   146,   147,   149,   152,   153,   154,   157,   160,   161,
+     162,   164,    99,   162,   117,    31,   124,   162,    36,    37,
+      75,   117,   143,   145,   152,   117,   117,   124,   162,   124,
+     126,   118,   162,   118,   117,    97,   122,     0,   107,   124,
+     162,    97,    97,    98,    99,   148,   161,   148,   148,   148,
+     162,   162,   161,   162,   162,   162,   162,    63,    64,    65,
+      66,    67,    70,    74,   117,   162,   161,   161,   100,   162,
+       8,     9,   103,   117,   158,   159,   162,   165,   166,    99,
       97,    97,    28,    42,    43,    44,    45,    46,    47,    49,
       52,    53,    54,    89,    90,    91,    92,    93,    94,    95,
-      98,   125,   141,   162,   163,   161,    33,    46,    47,    49,
-      53,    54,   118,    97,    97,    24,    50,    51,   117,   161,
+      98,   125,   142,   163,   164,   162,    33,    46,    47,    49,
+      53,    54,   118,    97,    97,    24,    50,    51,   117,   162,
       74,    34,    44,   128,    33,    97,    97,    36,    97,    97,
-      97,    34,    97,    97,   118,    97,   117,   100,   161,    28,
-     162,    28,    34,    28,    34,    28,    34,    28,    34,    69,
+      97,    34,    97,    97,   118,    97,   117,   100,   162,    28,
+     163,    28,    34,    28,    34,    28,    34,    28,    34,    69,
       76,    69,    76,    69,    76,    69,    76,    69,    76,    55,
-      57,    59,    61,   154,    28,    28,    79,    80,    98,   100,
-     103,   103,   102,   103,    98,   102,   102,    98,   164,    26,
-     161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
-     161,   161,   161,   161,   161,   161,   161,   165,    42,    43,
+      57,    59,    61,   155,    28,    28,    79,    80,    98,   100,
+     103,   103,   102,   103,    98,   102,   102,    98,   165,    26,
+     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     162,   162,   162,   162,   162,   162,   162,   166,    42,    43,
       44,    45,    46,    47,    49,    52,    53,    54,    89,    90,
       91,    92,    93,    94,    95,    98,   125,    97,   120,    97,
-     142,   143,   145,   143,   143,    23,    44,    97,    28,   161,
-     161,    84,    97,   110,   111,   112,   113,   161,   122,    97,
-     120,   135,   136,   137,    97,    98,    26,   160,   161,   160,
-     161,   160,   161,   160,   161,    23,    28,   155,    56,    58,
-      60,    62,    71,    72,    73,    77,    78,   149,   150,   160,
-     149,   160,   160,   165,   161,   161,   161,     8,     9,   117,
-     158,   161,   100,   161,    98,   125,   161,   161,   161,   161,
-     161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
-     161,   161,   161,   165,    97,   121,   138,   139,   140,    16,
-     135,    97,    97,    97,   161,   161,   135,    97,   117,   113,
-      97,    87,   137,   135,   165,   161,    28,    28,    28,    28,
-     160,   155,   155,   155,   155,   160,   160,   155,   160,   160,
-     100,   125,    16,    85,   140,    97,   120,    97,    15,    34,
-      86,   118,    97,    10,   100,   160,   160,   160,   160,   160,
-     160,   160,   160,    28,    71,   150,    97,   120,    97,   138,
-     135,    34,   161,    97,    97,   115,   117,    71,   138,    85,
-      86,   161,    97,   135,    97,    98,   160,    85,    97,    97,
-      97,   135,   117,    97,   135,    86,    86,    97,    97
+     143,   144,   146,   144,   144,    23,    44,    97,    28,   162,
+     162,    84,    97,   110,   111,   112,   113,   162,   122,    97,
+     120,   136,   137,   138,    97,    98,    26,   161,   162,   161,
+     162,   161,   162,   161,   162,    23,    28,   156,    56,    58,
+      60,    62,    71,    72,    73,    77,    78,   150,   151,   161,
+     150,   161,   161,   166,   162,   162,   162,     8,     9,   117,
+     159,   162,   100,   162,    98,   125,   162,   162,   162,   162,
+     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     162,   162,   162,   166,    97,   121,   139,   140,   141,    16,
+     136,    97,    97,    97,   162,   162,   136,    97,   117,   113,
+      97,    87,   138,   136,   166,   162,    28,    28,    28,    28,
+     161,   156,   156,   156,   156,   161,   161,   156,   161,   161,
+     100,   125,    16,    85,   132,   141,    97,   120,    97,    15,
+      34,    86,   118,    97,    10,   100,   161,   161,   161,   161,
+     161,   161,   161,   161,    28,    71,   151,    97,   120,    97,
+     139,   136,    34,   162,    97,    97,   115,   117,    71,   139,
+     132,    86,   162,    97,   136,    97,    98,   161,   132,    97,
+      97,   136,   117,   136,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1848,21 +1851,21 @@ static const yytype_uint8 yyr1[] =
      123,   123,   123,   124,   124,   124,   124,   124,   124,   124,
      125,   125,   126,   126,   126,   126,   126,   127,   127,   127,
      127,   128,   128,   129,   129,   129,   130,   130,   131,   131,
-     131,   131,   132,   132,   132,   132,   133,   133,   134,   135,
+     131,   131,   132,   132,   133,   133,   133,   133,   134,   134,
      135,   136,   136,   137,   137,   138,   138,   139,   139,   140,
-     140,   141,   141,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   142,   143,   143,   144,   144,   145,   145,
-     145,   145,   145,   145,   145,   145,   145,   145,   146,   146,
-     147,   147,   147,   148,   148,   148,   148,   149,   149,   149,
-     149,   149,   150,   151,   151,   151,   152,   152,   152,   152,
-     152,   152,   152,   152,   152,   152,   153,   153,   153,   153,
-     153,   154,   154,   154,   154,   155,   155,   156,   156,   156,
-     157,   157,   158,   158,   158,   159,   159,   160,   160,   161,
-     161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
-     161,   161,   161,   161,   161,   161,   161,   161,   162,   162,
+     140,   141,   141,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   143,   144,   144,   145,   145,
+     146,   146,   146,   146,   146,   146,   146,   146,   146,   146,
+     147,   147,   148,   148,   148,   149,   149,   149,   149,   150,
+     150,   150,   150,   150,   151,   152,   152,   152,   153,   153,
+     153,   153,   153,   153,   153,   153,   153,   153,   154,   154,
+     154,   154,   154,   155,   155,   155,   155,   156,   156,   157,
+     157,   157,   158,   158,   159,   159,   159,   160,   160,   161,
+     161,   162,   162,   162,   162,   162,   162,   162,   162,   162,
      162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   163,   163,   164,
-     164,   165,   165
+     163,   163,   163,   163,   163,   163,   163,   163,   163,   163,
+     163,   163,   163,   163,   163,   163,   163,   163,   163,   164,
+     164,   165,   165,   166,   166
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1882,22 +1885,22 @@ static const yytype_int8 yyr2[] =
        1,     3,     3,     3,     3,     3,     3,     3,     5,     3,
        3,     2,     2,     0,     2,     4,     3,     5,     2,     5,
        0,     1,     2,     2,     5,     4,     3,     5,     5,     5,
-       5,     1,     1,     3,     3,     3,     4,     7,     6,     9,
-       7,    10,     7,    11,    12,     9,     4,     6,     4,     0,
-       1,     1,     2,     1,     1,     0,     1,     1,     2,     1,
-       1,     1,     1,     1,     1,     2,     4,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
-       4,     6,     4,     6,     4,     6,     4,     6,     2,     2,
-       1,     2,     5,     1,     1,     1,     5,     1,     1,     5,
-       2,     2,     2,     2,     4,     4,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     6,     6,     6,     6,
-       6,     1,     1,     1,     1,     1,     1,     3,     3,     3,
-       1,     3,     3,     3,     3,     2,     2,     1,     1,     1,
-       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     1,     1,
+       5,     1,     1,     3,     3,     3,     4,     6,     6,     8,
+       7,     9,     0,     2,     7,    11,    12,     9,     4,     6,
+       4,     0,     1,     1,     2,     1,     1,     0,     1,     1,
+       2,     1,     1,     1,     1,     1,     1,     2,     4,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     4,     6,     4,     6,     4,     6,     4,     6,
+       2,     2,     1,     2,     5,     1,     1,     1,     5,     1,
+       1,     5,     2,     2,     2,     2,     4,     4,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     6,     6,
+       6,     6,     6,     1,     1,     1,     1,     1,     1,     3,
+       3,     3,     1,     3,     3,     3,     3,     2,     2,     1,
+       1,     1,     1,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     4,     4,     0,
-       1,     1,     3
+       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     4,
+       4,     0,     1,     1,     3
 };
 
 
@@ -2171,37 +2174,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2175 "engines/director/lingo/lingo-gr.cpp"
+#line 2178 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2181 "engines/director/lingo/lingo-gr.cpp"
+#line 2184 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2187 "engines/director/lingo/lingo-gr.cpp"
+#line 2190 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2193 "engines/director/lingo/lingo-gr.cpp"
+#line 2196 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2199 "engines/director/lingo/lingo-gr.cpp"
+#line 2202 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2205 "engines/director/lingo/lingo-gr.cpp"
+#line 2208 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2469,7 +2472,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2473 "engines/director/lingo/lingo-gr.cpp"
+#line 2476 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2480,7 +2483,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2484 "engines/director/lingo/lingo-gr.cpp"
+#line 2487 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2490,37 +2493,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2494 "engines/director/lingo/lingo-gr.cpp"
+#line 2497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2500 "engines/director/lingo/lingo-gr.cpp"
+#line 2503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2506 "engines/director/lingo/lingo-gr.cpp"
+#line 2509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2512 "engines/director/lingo/lingo-gr.cpp"
+#line 2515 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2518 "engines/director/lingo/lingo-gr.cpp"
+#line 2521 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2524 "engines/director/lingo/lingo-gr.cpp"
+#line 2527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2531,7 +2534,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2535 "engines/director/lingo/lingo-gr.cpp"
+#line 2538 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
@@ -2541,13 +2544,13 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2545 "engines/director/lingo/lingo-gr.cpp"
+#line 2548 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2551 "engines/director/lingo/lingo-gr.cpp"
+#line 2554 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2556,446 +2559,446 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2560 "engines/director/lingo/lingo-gr.cpp"
+#line 2563 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2567 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2573 "engines/director/lingo/lingo-gr.cpp"
+#line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2585 "engines/director/lingo/lingo-gr.cpp"
+#line 2588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2591 "engines/director/lingo/lingo-gr.cpp"
+#line 2594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2597 "engines/director/lingo/lingo-gr.cpp"
+#line 2600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2603 "engines/director/lingo/lingo-gr.cpp"
+#line 2606 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2609 "engines/director/lingo/lingo-gr.cpp"
+#line 2612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2621 "engines/director/lingo/lingo-gr.cpp"
+#line 2624 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
+#line 2630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2636 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2645 "engines/director/lingo/lingo-gr.cpp"
+#line 2648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2657 "engines/director/lingo/lingo-gr.cpp"
+#line 2660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2666 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2669 "engines/director/lingo/lingo-gr.cpp"
+#line 2672 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2675 "engines/director/lingo/lingo-gr.cpp"
+#line 2678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2684 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2690 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+#line 2696 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2702 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2708 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2717 "engines/director/lingo/lingo-gr.cpp"
+#line 2720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2723 "engines/director/lingo/lingo-gr.cpp"
+#line 2726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2744 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2747 "engines/director/lingo/lingo-gr.cpp"
+#line 2750 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2759 "engines/director/lingo/lingo-gr.cpp"
+#line 2762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2765 "engines/director/lingo/lingo-gr.cpp"
+#line 2768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2771 "engines/director/lingo/lingo-gr.cpp"
+#line 2774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2777 "engines/director/lingo/lingo-gr.cpp"
+#line 2780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2804 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSET  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2810 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2816 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2822 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2828 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tSTARTS  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2834 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTELL  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2840 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTHE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2846 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tTIME  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2852 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tTO  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2858 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWHILE  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2864 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWINDOW  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2870 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWITH  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2876 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWITHIN  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2882 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* CMDID: tWORD  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 2888 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* CMDID: tWORDS  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2891 "engines/director/lingo/lingo-gr.cpp"
+#line 2894 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tELSE  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2897 "engines/director/lingo/lingo-gr.cpp"
+#line 2900 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tENDCLAUSE  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2903 "engines/director/lingo/lingo-gr.cpp"
+#line 2906 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tEXIT  */
 #line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2909 "engines/director/lingo/lingo-gr.cpp"
+#line 2912 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tFACTORY  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2915 "engines/director/lingo/lingo-gr.cpp"
+#line 2918 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tGLOBAL  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2921 "engines/director/lingo/lingo-gr.cpp"
+#line 2924 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tGO  */
 #line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2927 "engines/director/lingo/lingo-gr.cpp"
+#line 2930 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tIF  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2933 "engines/director/lingo/lingo-gr.cpp"
+#line 2936 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tINSTANCE  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 2942 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tMACRO  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 2948 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tMETHOD  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2951 "engines/director/lingo/lingo-gr.cpp"
+#line 2954 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tON  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 2957 "engines/director/lingo/lingo-gr.cpp"
+#line 2960 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tOPEN  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2963 "engines/director/lingo/lingo-gr.cpp"
+#line 2966 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPLAY  */
 #line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2969 "engines/director/lingo/lingo-gr.cpp"
+#line 2972 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tPROPERTY  */
 #line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 2978 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 2981 "engines/director/lingo/lingo-gr.cpp"
+#line 2984 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
 #line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 2987 "engines/director/lingo/lingo-gr.cpp"
+#line 2990 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
 #line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2993 "engines/director/lingo/lingo-gr.cpp"
+#line 2996 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
 #line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 2999 "engines/director/lingo/lingo-gr.cpp"
+#line 3002 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: ID  */
@@ -3004,7 +3007,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 3008 "engines/director/lingo/lingo-gr.cpp"
+#line 3011 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -3012,55 +3015,55 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 3016 "engines/director/lingo/lingo-gr.cpp"
+#line 3019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* stmt: tENDIF '\n'  */
 #line 386 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 3022 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* proc: CMDID cmdargs '\n'  */
 #line 402 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 3028 "engines/director/lingo/lingo-gr.cpp"
+#line 3031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* proc: tPUT cmdargs '\n'  */
 #line 403 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 3034 "engines/director/lingo/lingo-gr.cpp"
+#line 3037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* proc: tGO cmdargs '\n'  */
 #line 404 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3040 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* proc: tGO frameargs '\n'  */
 #line 405 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3046 "engines/director/lingo/lingo-gr.cpp"
+#line 3049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* proc: tPLAY cmdargs '\n'  */
 #line 406 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* proc: tPLAY frameargs '\n'  */
 #line 407 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+#line 3061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* proc: tOPEN cmdargs '\n'  */
 #line 408 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 3064 "engines/director/lingo/lingo-gr.cpp"
+#line 3067 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* proc: tOPEN expr tWITH expr '\n'  */
@@ -3070,31 +3073,31 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 3074 "engines/director/lingo/lingo-gr.cpp"
+#line 3077 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* proc: tNEXT tREPEAT '\n'  */
 #line 414 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 3080 "engines/director/lingo/lingo-gr.cpp"
+#line 3083 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* proc: tEXIT tREPEAT '\n'  */
 #line 415 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 3086 "engines/director/lingo/lingo-gr.cpp"
+#line 3089 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* proc: tEXIT '\n'  */
 #line 416 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 3092 "engines/director/lingo/lingo-gr.cpp"
+#line 3095 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* proc: tASSERTERROR stmtoneliner  */
 #line 417 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 3098 "engines/director/lingo/lingo-gr.cpp"
+#line 3101 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* cmdargs: %empty  */
@@ -3102,7 +3105,7 @@ yyreduce:
                                                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* cmdargs: expr trailingcomma  */
@@ -3112,7 +3115,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3116 "engines/director/lingo/lingo-gr.cpp"
+#line 3119 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* cmdargs: expr ',' nonemptyexprlist trailingcomma  */
@@ -3121,7 +3124,7 @@ yyreduce:
 		// This matches `cmd args, ...)
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3125 "engines/director/lingo/lingo-gr.cpp"
+#line 3128 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* cmdargs: expr expr_nounarymath trailingcomma  */
@@ -3132,7 +3135,7 @@ yyreduce:
 		args->push_back((yyvsp[-2].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3136 "engines/director/lingo/lingo-gr.cpp"
+#line 3139 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist trailingcomma  */
@@ -3142,7 +3145,7 @@ yyreduce:
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-4].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3146 "engines/director/lingo/lingo-gr.cpp"
+#line 3149 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* cmdargs: '(' ')'  */
@@ -3150,7 +3153,7 @@ yyreduce:
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+#line 3157 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
@@ -3159,7 +3162,7 @@ yyreduce:
 		// This matches `cmd(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3163 "engines/director/lingo/lingo-gr.cpp"
+#line 3166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* frameargs: tFRAME expr  */
@@ -3169,7 +3172,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3173 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* frameargs: tMOVIE expr  */
@@ -3180,7 +3183,7 @@ yyreduce:
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3184 "engines/director/lingo/lingo-gr.cpp"
+#line 3187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* frameargs: tFRAME expr tOF tMOVIE expr  */
@@ -3191,7 +3194,7 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3195 "engines/director/lingo/lingo-gr.cpp"
+#line 3198 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* frameargs: expr tOF tMOVIE expr  */
@@ -3202,7 +3205,7 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3206 "engines/director/lingo/lingo-gr.cpp"
+#line 3209 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* frameargs: tFRAME expr expr_nounarymath  */
@@ -3213,49 +3216,49 @@ yyreduce:
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3217 "engines/director/lingo/lingo-gr.cpp"
+#line 3220 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* asgn: tPUT expr tINTO varorchunk '\n'  */
 #line 489 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3223 "engines/director/lingo/lingo-gr.cpp"
+#line 3226 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
 #line 490 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3229 "engines/director/lingo/lingo-gr.cpp"
+#line 3232 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
 #line 491 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3235 "engines/director/lingo/lingo-gr.cpp"
+#line 3238 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* asgn: tSET varorthe to expr '\n'  */
 #line 492 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3241 "engines/director/lingo/lingo-gr.cpp"
+#line 3244 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* definevars: tGLOBAL idlist '\n'  */
 #line 497 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3247 "engines/director/lingo/lingo-gr.cpp"
+#line 3250 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* definevars: tPROPERTY idlist '\n'  */
 #line 498 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3253 "engines/director/lingo/lingo-gr.cpp"
+#line 3256 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* definevars: tINSTANCE idlist '\n'  */
 #line 499 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3259 "engines/director/lingo/lingo-gr.cpp"
+#line 3262 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* ifstmt: tIF expr tTHEN stmt  */
@@ -3264,14 +3267,14 @@ yyreduce:
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3268 "engines/director/lingo/lingo-gr.cpp"
+#line 3271 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif tENDIF '\n'  */
+  case 147: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif endif  */
 #line 506 "engines/director/lingo/lingo-gr.y"
-                                                            {
-		(yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); }
-#line 3275 "engines/director/lingo/lingo-gr.cpp"
+                                                      {
+		(yyval.node) = new IfStmtNode((yyvsp[-4].node), (yyvsp[-1].nodelist)); }
+#line 3278 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
@@ -3282,16 +3285,16 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3286 "engines/director/lingo/lingo-gr.cpp"
+#line 3289 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif tENDIF '\n'  */
+  case 149: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif endif  */
 #line 516 "engines/director/lingo/lingo-gr.y"
-                                                                                         {
+                                                                                   {
 		NodeList *stmtlist1 = new NodeList;
-		stmtlist1->push_back((yyvsp[-5].node));
-		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), stmtlist1, (yyvsp[-2].nodelist)); }
-#line 3295 "engines/director/lingo/lingo-gr.cpp"
+		stmtlist1->push_back((yyvsp[-4].node));
+		(yyval.node) = new IfElseStmtNode((yyvsp[-6].node), stmtlist1, (yyvsp[-1].nodelist)); }
+#line 3298 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
@@ -3300,755 +3303,761 @@ yyreduce:
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3304 "engines/director/lingo/lingo-gr.cpp"
+#line 3307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif tENDIF '\n'  */
+  case 151: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif endif  */
 #line 524 "engines/director/lingo/lingo-gr.y"
-                                                                                                               {
-		(yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); }
-#line 3311 "engines/director/lingo/lingo-gr.cpp"
+                                                                                                         {
+		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), (yyvsp[-4].nodelist), (yyvsp[-1].nodelist)); }
+#line 3314 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+  case 152: /* endif: %empty  */
 #line 528 "engines/director/lingo/lingo-gr.y"
+                        { warning("LingoCompiler::parse: no end if"); }
+#line 3320 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 154: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 531 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3318 "engines/director/lingo/lingo-gr.cpp"
+#line 3327 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 530 "engines/director/lingo/lingo-gr.y"
+  case 155: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 533 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3325 "engines/director/lingo/lingo-gr.cpp"
+#line 3334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 532 "engines/director/lingo/lingo-gr.y"
+  case 156: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 535 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3332 "engines/director/lingo/lingo-gr.cpp"
+#line 3341 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 534 "engines/director/lingo/lingo-gr.y"
+  case 157: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3339 "engines/director/lingo/lingo-gr.cpp"
+#line 3348 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* tell: tTELL expr tTO stmtoneliner  */
-#line 538 "engines/director/lingo/lingo-gr.y"
+  case 158: /* tell: tTELL expr tTO stmtoneliner  */
+#line 541 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3348 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 542 "engines/director/lingo/lingo-gr.y"
+  case 159: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
+#line 545 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3355 "engines/director/lingo/lingo-gr.cpp"
+#line 3364 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* when: tWHEN ID tTHEN expr  */
-#line 546 "engines/director/lingo/lingo-gr.y"
+  case 160: /* when: tWHEN ID tTHEN expr  */
+#line 549 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3361 "engines/director/lingo/lingo-gr.cpp"
+#line 3370 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* stmtlist: %empty  */
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 161: /* stmtlist: %empty  */
+#line 551 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3367 "engines/director/lingo/lingo-gr.cpp"
+#line 3376 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* nonemptystmtlist: stmtlistline  */
-#line 553 "engines/director/lingo/lingo-gr.y"
+  case 163: /* nonemptystmtlist: stmtlistline  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3378 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 164: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
+#line 562 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3388 "engines/director/lingo/lingo-gr.cpp"
+#line 3397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* stmtlistline: '\n'  */
-#line 566 "engines/director/lingo/lingo-gr.y"
+  case 165: /* stmtlistline: '\n'  */
+#line 569 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3394 "engines/director/lingo/lingo-gr.cpp"
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* stmtlist_insideif: %empty  */
-#line 570 "engines/director/lingo/lingo-gr.y"
+  case 167: /* stmtlist_insideif: %empty  */
+#line 573 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.nodelist) = new NodeList; }
-#line 3400 "engines/director/lingo/lingo-gr.cpp"
+#line 3409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
-#line 575 "engines/director/lingo/lingo-gr.y"
+  case 169: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
+#line 578 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3411 "engines/director/lingo/lingo-gr.cpp"
+#line 3420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
-#line 581 "engines/director/lingo/lingo-gr.y"
+  case 170: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
+#line 584 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3421 "engines/director/lingo/lingo-gr.cpp"
+#line 3430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* stmtlistline_insideif: '\n'  */
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 171: /* stmtlistline_insideif: '\n'  */
+#line 591 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 3427 "engines/director/lingo/lingo-gr.cpp"
+#line 3436 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* simpleexpr_nounarymath: tINT  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 173: /* simpleexpr_nounarymath: tINT  */
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3433 "engines/director/lingo/lingo-gr.cpp"
+#line 3442 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* simpleexpr_nounarymath: tFLOAT  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+  case 174: /* simpleexpr_nounarymath: tFLOAT  */
+#line 599 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3439 "engines/director/lingo/lingo-gr.cpp"
+#line 3448 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 175: /* simpleexpr_nounarymath: tSYMBOL  */
+#line 600 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3445 "engines/director/lingo/lingo-gr.cpp"
+#line 3454 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* simpleexpr_nounarymath: tSTRING  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 176: /* simpleexpr_nounarymath: tSTRING  */
+#line 601 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3451 "engines/director/lingo/lingo-gr.cpp"
+#line 3460 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 177: /* simpleexpr_nounarymath: tNOT simpleexpr  */
+#line 602 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3457 "engines/director/lingo/lingo-gr.cpp"
+#line 3466 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
-#line 600 "engines/director/lingo/lingo-gr.y"
+  case 178: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
+#line 603 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3463 "engines/director/lingo/lingo-gr.cpp"
+#line 3472 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 601 "engines/director/lingo/lingo-gr.y"
+  case 179: /* simpleexpr_nounarymath: '(' expr ')'  */
+#line 604 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3469 "engines/director/lingo/lingo-gr.cpp"
+#line 3478 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* var: ID  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+  case 185: /* var: ID  */
+#line 612 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3475 "engines/director/lingo/lingo-gr.cpp"
+#line 3484 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* chunk: tFIELD refargs  */
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 190: /* chunk: tFIELD refargs  */
+#line 622 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.node) = new FuncNode(new Common::String("field"), (yyvsp[0].nodelist)); }
-#line 3481 "engines/director/lingo/lingo-gr.cpp"
+#line 3490 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* chunk: tCAST refargs  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 191: /* chunk: tCAST refargs  */
+#line 623 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("cast"), (yyvsp[0].nodelist)); }
-#line 3487 "engines/director/lingo/lingo-gr.cpp"
+#line 3496 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* chunk: tCHAR expr tOF simpleexpr  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 192: /* chunk: tCHAR expr tOF simpleexpr  */
+#line 624 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3494 "engines/director/lingo/lingo-gr.cpp"
+#line 3503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* chunk: tCHAR expr tTO expr tOF simpleexpr  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 193: /* chunk: tCHAR expr tTO expr tOF simpleexpr  */
+#line 626 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3501 "engines/director/lingo/lingo-gr.cpp"
+#line 3510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* chunk: tWORD expr tOF simpleexpr  */
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 194: /* chunk: tWORD expr tOF simpleexpr  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3508 "engines/director/lingo/lingo-gr.cpp"
+#line 3517 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* chunk: tWORD expr tTO expr tOF simpleexpr  */
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 195: /* chunk: tWORD expr tTO expr tOF simpleexpr  */
+#line 630 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3515 "engines/director/lingo/lingo-gr.cpp"
+#line 3524 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* chunk: tITEM expr tOF simpleexpr  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+  case 196: /* chunk: tITEM expr tOF simpleexpr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3522 "engines/director/lingo/lingo-gr.cpp"
+#line 3531 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* chunk: tITEM expr tTO expr tOF simpleexpr  */
-#line 631 "engines/director/lingo/lingo-gr.y"
+  case 197: /* chunk: tITEM expr tTO expr tOF simpleexpr  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3529 "engines/director/lingo/lingo-gr.cpp"
+#line 3538 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* chunk: tLINE expr tOF simpleexpr  */
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 198: /* chunk: tLINE expr tOF simpleexpr  */
+#line 636 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3536 "engines/director/lingo/lingo-gr.cpp"
+#line 3545 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* chunk: tLINE expr tTO expr tOF simpleexpr  */
-#line 635 "engines/director/lingo/lingo-gr.y"
+  case 199: /* chunk: tLINE expr tTO expr tOF simpleexpr  */
+#line 638 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3543 "engines/director/lingo/lingo-gr.cpp"
+#line 3552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* object: tSCRIPT refargs  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 200: /* object: tSCRIPT refargs  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.node) = new FuncNode(new Common::String("script"), (yyvsp[0].nodelist)); }
-#line 3549 "engines/director/lingo/lingo-gr.cpp"
+#line 3558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* object: tWINDOW refargs  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 201: /* object: tWINDOW refargs  */
+#line 643 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("window"), (yyvsp[0].nodelist)); }
-#line 3555 "engines/director/lingo/lingo-gr.cpp"
+#line 3564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* refargs: simpleexpr  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 202: /* refargs: simpleexpr  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `ref arg` and `ref(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3565 "engines/director/lingo/lingo-gr.cpp"
+#line 3574 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 201: /* refargs: '(' ')'  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+  case 203: /* refargs: '(' ')'  */
+#line 651 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `ref()`
 		(yyval.nodelist) = new NodeList; }
-#line 3573 "engines/director/lingo/lingo-gr.cpp"
+#line 3582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 202: /* refargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 204: /* refargs: '(' expr ',' nonemptyexprlist ')'  */
+#line 654 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `ref(args, ...)`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3582 "engines/director/lingo/lingo-gr.cpp"
+#line 3591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 206: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 208: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 663 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3588 "engines/director/lingo/lingo-gr.cpp"
+#line 3597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 209: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 665 "engines/director/lingo/lingo-gr.y"
+  case 211: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 668 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3594 "engines/director/lingo/lingo-gr.cpp"
+#line 3603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 210: /* theobj: tSOUND simpleexpr  */
-#line 666 "engines/director/lingo/lingo-gr.y"
+  case 212: /* theobj: tSOUND simpleexpr  */
+#line 669 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3600 "engines/director/lingo/lingo-gr.cpp"
+#line 3609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* theobj: tSPRITE simpleexpr  */
-#line 667 "engines/director/lingo/lingo-gr.y"
+  case 213: /* theobj: tSPRITE simpleexpr  */
+#line 670 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3606 "engines/director/lingo/lingo-gr.cpp"
+#line 3615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* menu: tMENU simpleexpr  */
-#line 670 "engines/director/lingo/lingo-gr.y"
+  case 214: /* menu: tMENU simpleexpr  */
+#line 673 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3612 "engines/director/lingo/lingo-gr.cpp"
+#line 3621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 213: /* writablethe: tTHE ID  */
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 215: /* writablethe: tTHE ID  */
+#line 675 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3618 "engines/director/lingo/lingo-gr.cpp"
+#line 3627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* writablethe: tTHE ID tOF theobj  */
-#line 673 "engines/director/lingo/lingo-gr.y"
+  case 216: /* writablethe: tTHE ID tOF theobj  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3624 "engines/director/lingo/lingo-gr.cpp"
+#line 3633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 674 "engines/director/lingo/lingo-gr.y"
+  case 217: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 677 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3630 "engines/director/lingo/lingo-gr.cpp"
+#line 3639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+  case 218: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 680 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3636 "engines/director/lingo/lingo-gr.cpp"
+#line 3645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 678 "engines/director/lingo/lingo-gr.y"
+  case 219: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3642 "engines/director/lingo/lingo-gr.cpp"
+#line 3651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* thedatetime: tTHE tABBREV tDATE  */
-#line 679 "engines/director/lingo/lingo-gr.y"
+  case 220: /* thedatetime: tTHE tABBREV tDATE  */
+#line 682 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3648 "engines/director/lingo/lingo-gr.cpp"
+#line 3657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* thedatetime: tTHE tABBREV tTIME  */
-#line 680 "engines/director/lingo/lingo-gr.y"
+  case 221: /* thedatetime: tTHE tABBREV tTIME  */
+#line 683 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3654 "engines/director/lingo/lingo-gr.cpp"
+#line 3663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* thedatetime: tTHE tABBR tDATE  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 222: /* thedatetime: tTHE tABBR tDATE  */
+#line 684 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3660 "engines/director/lingo/lingo-gr.cpp"
+#line 3669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 221: /* thedatetime: tTHE tABBR tTIME  */
-#line 682 "engines/director/lingo/lingo-gr.y"
+  case 223: /* thedatetime: tTHE tABBR tTIME  */
+#line 685 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3666 "engines/director/lingo/lingo-gr.cpp"
+#line 3675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* thedatetime: tTHE tLONG tDATE  */
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 224: /* thedatetime: tTHE tLONG tDATE  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3672 "engines/director/lingo/lingo-gr.cpp"
+#line 3681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* thedatetime: tTHE tLONG tTIME  */
-#line 684 "engines/director/lingo/lingo-gr.y"
+  case 225: /* thedatetime: tTHE tLONG tTIME  */
+#line 687 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3678 "engines/director/lingo/lingo-gr.cpp"
+#line 3687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* thedatetime: tTHE tSHORT tDATE  */
-#line 685 "engines/director/lingo/lingo-gr.y"
+  case 226: /* thedatetime: tTHE tSHORT tDATE  */
+#line 688 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3684 "engines/director/lingo/lingo-gr.cpp"
+#line 3693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* thedatetime: tTHE tSHORT tTIME  */
-#line 686 "engines/director/lingo/lingo-gr.y"
+  case 227: /* thedatetime: tTHE tSHORT tTIME  */
+#line 689 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3690 "engines/director/lingo/lingo-gr.cpp"
+#line 3699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 690 "engines/director/lingo/lingo-gr.y"
+  case 228: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 693 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3696 "engines/director/lingo/lingo-gr.cpp"
+#line 3705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 691 "engines/director/lingo/lingo-gr.y"
+  case 229: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 694 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3702 "engines/director/lingo/lingo-gr.cpp"
+#line 3711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 692 "engines/director/lingo/lingo-gr.y"
+  case 230: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 695 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3708 "engines/director/lingo/lingo-gr.cpp"
+#line 3717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 693 "engines/director/lingo/lingo-gr.y"
+  case 231: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 696 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3714 "engines/director/lingo/lingo-gr.cpp"
+#line 3723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 232: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 697 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3720 "engines/director/lingo/lingo-gr.cpp"
+#line 3729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* chunktype: tCHAR  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+  case 233: /* chunktype: tCHAR  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3726 "engines/director/lingo/lingo-gr.cpp"
+#line 3735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 232: /* chunktype: tWORD  */
-#line 698 "engines/director/lingo/lingo-gr.y"
+  case 234: /* chunktype: tWORD  */
+#line 701 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3732 "engines/director/lingo/lingo-gr.cpp"
+#line 3741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 233: /* chunktype: tITEM  */
-#line 699 "engines/director/lingo/lingo-gr.y"
+  case 235: /* chunktype: tITEM  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3738 "engines/director/lingo/lingo-gr.cpp"
+#line 3747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 234: /* chunktype: tLINE  */
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 236: /* chunktype: tLINE  */
+#line 703 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3744 "engines/director/lingo/lingo-gr.cpp"
+#line 3753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* list: '[' exprlist ']'  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 239: /* list: '[' exprlist ']'  */
+#line 708 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3750 "engines/director/lingo/lingo-gr.cpp"
+#line 3759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* list: '[' ':' ']'  */
-#line 706 "engines/director/lingo/lingo-gr.y"
+  case 240: /* list: '[' ':' ']'  */
+#line 709 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3756 "engines/director/lingo/lingo-gr.cpp"
+#line 3765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* list: '[' proplist ']'  */
-#line 707 "engines/director/lingo/lingo-gr.y"
+  case 241: /* list: '[' proplist ']'  */
+#line 710 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3762 "engines/director/lingo/lingo-gr.cpp"
+#line 3771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* proplist: proppair  */
-#line 710 "engines/director/lingo/lingo-gr.y"
+  case 242: /* proplist: proppair  */
+#line 713 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3771 "engines/director/lingo/lingo-gr.cpp"
+#line 3780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 241: /* proplist: proplist ',' proppair  */
-#line 714 "engines/director/lingo/lingo-gr.y"
+  case 243: /* proplist: proplist ',' proppair  */
+#line 717 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3779 "engines/director/lingo/lingo-gr.cpp"
+#line 3788 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* proppair: tSYMBOL ':' expr  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 244: /* proppair: tSYMBOL ':' expr  */
+#line 722 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3785 "engines/director/lingo/lingo-gr.cpp"
+#line 3794 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* proppair: ID ':' expr  */
-#line 720 "engines/director/lingo/lingo-gr.y"
+  case 245: /* proppair: ID ':' expr  */
+#line 723 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3791 "engines/director/lingo/lingo-gr.cpp"
+#line 3800 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 244: /* proppair: tSTRING ':' expr  */
-#line 721 "engines/director/lingo/lingo-gr.y"
+  case 246: /* proppair: tSTRING ':' expr  */
+#line 724 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3797 "engines/director/lingo/lingo-gr.cpp"
+#line 3806 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* unarymath: '+' simpleexpr  */
-#line 724 "engines/director/lingo/lingo-gr.y"
+  case 247: /* unarymath: '+' simpleexpr  */
+#line 727 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3803 "engines/director/lingo/lingo-gr.cpp"
+#line 3812 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* unarymath: '-' simpleexpr  */
-#line 725 "engines/director/lingo/lingo-gr.y"
+  case 248: /* unarymath: '-' simpleexpr  */
+#line 728 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3809 "engines/director/lingo/lingo-gr.cpp"
+#line 3818 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 251: /* expr: expr '+' expr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 253: /* expr: expr '+' expr  */
+#line 738 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3815 "engines/director/lingo/lingo-gr.cpp"
+#line 3824 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 252: /* expr: expr '-' expr  */
-#line 736 "engines/director/lingo/lingo-gr.y"
+  case 254: /* expr: expr '-' expr  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3821 "engines/director/lingo/lingo-gr.cpp"
+#line 3830 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 253: /* expr: expr '*' expr  */
-#line 737 "engines/director/lingo/lingo-gr.y"
+  case 255: /* expr: expr '*' expr  */
+#line 740 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3827 "engines/director/lingo/lingo-gr.cpp"
+#line 3836 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 254: /* expr: expr '/' expr  */
-#line 738 "engines/director/lingo/lingo-gr.y"
+  case 256: /* expr: expr '/' expr  */
+#line 741 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3833 "engines/director/lingo/lingo-gr.cpp"
+#line 3842 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 255: /* expr: expr tMOD expr  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+  case 257: /* expr: expr tMOD expr  */
+#line 742 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3839 "engines/director/lingo/lingo-gr.cpp"
+#line 3848 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 256: /* expr: expr '>' expr  */
-#line 740 "engines/director/lingo/lingo-gr.y"
+  case 258: /* expr: expr '>' expr  */
+#line 743 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3845 "engines/director/lingo/lingo-gr.cpp"
+#line 3854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* expr: expr '<' expr  */
-#line 741 "engines/director/lingo/lingo-gr.y"
+  case 259: /* expr: expr '<' expr  */
+#line 744 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3851 "engines/director/lingo/lingo-gr.cpp"
+#line 3860 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* expr: expr tEQ expr  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+  case 260: /* expr: expr tEQ expr  */
+#line 745 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3857 "engines/director/lingo/lingo-gr.cpp"
+#line 3866 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 259: /* expr: expr tNEQ expr  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 261: /* expr: expr tNEQ expr  */
+#line 746 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3863 "engines/director/lingo/lingo-gr.cpp"
+#line 3872 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 260: /* expr: expr tGE expr  */
-#line 744 "engines/director/lingo/lingo-gr.y"
+  case 262: /* expr: expr tGE expr  */
+#line 747 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3869 "engines/director/lingo/lingo-gr.cpp"
+#line 3878 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 261: /* expr: expr tLE expr  */
-#line 745 "engines/director/lingo/lingo-gr.y"
+  case 263: /* expr: expr tLE expr  */
+#line 748 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3875 "engines/director/lingo/lingo-gr.cpp"
+#line 3884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 262: /* expr: expr tAND expr  */
-#line 746 "engines/director/lingo/lingo-gr.y"
+  case 264: /* expr: expr tAND expr  */
+#line 749 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3881 "engines/director/lingo/lingo-gr.cpp"
+#line 3890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 263: /* expr: expr tOR expr  */
-#line 747 "engines/director/lingo/lingo-gr.y"
+  case 265: /* expr: expr tOR expr  */
+#line 750 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3887 "engines/director/lingo/lingo-gr.cpp"
+#line 3896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 264: /* expr: expr '&' expr  */
-#line 748 "engines/director/lingo/lingo-gr.y"
+  case 266: /* expr: expr '&' expr  */
+#line 751 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3893 "engines/director/lingo/lingo-gr.cpp"
+#line 3902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 265: /* expr: expr tCONCAT expr  */
-#line 749 "engines/director/lingo/lingo-gr.y"
+  case 267: /* expr: expr tCONCAT expr  */
+#line 752 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3899 "engines/director/lingo/lingo-gr.cpp"
+#line 3908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 266: /* expr: expr tCONTAINS expr  */
-#line 750 "engines/director/lingo/lingo-gr.y"
+  case 268: /* expr: expr tCONTAINS expr  */
+#line 753 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3905 "engines/director/lingo/lingo-gr.cpp"
+#line 3914 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 267: /* expr: expr tSTARTS expr  */
-#line 751 "engines/director/lingo/lingo-gr.y"
+  case 269: /* expr: expr tSTARTS expr  */
+#line 754 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3911 "engines/director/lingo/lingo-gr.cpp"
+#line 3920 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 270: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 760 "engines/director/lingo/lingo-gr.y"
+  case 272: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 763 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3917 "engines/director/lingo/lingo-gr.cpp"
+#line 3926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 271: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 761 "engines/director/lingo/lingo-gr.y"
+  case 273: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 764 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3923 "engines/director/lingo/lingo-gr.cpp"
+#line 3932 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 272: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 762 "engines/director/lingo/lingo-gr.y"
+  case 274: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 765 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3929 "engines/director/lingo/lingo-gr.cpp"
+#line 3938 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 273: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 763 "engines/director/lingo/lingo-gr.y"
+  case 275: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 766 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3935 "engines/director/lingo/lingo-gr.cpp"
+#line 3944 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 274: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 764 "engines/director/lingo/lingo-gr.y"
+  case 276: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 767 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3941 "engines/director/lingo/lingo-gr.cpp"
+#line 3950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 275: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 765 "engines/director/lingo/lingo-gr.y"
+  case 277: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 768 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3947 "engines/director/lingo/lingo-gr.cpp"
+#line 3956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 276: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 766 "engines/director/lingo/lingo-gr.y"
+  case 278: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 769 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3953 "engines/director/lingo/lingo-gr.cpp"
+#line 3962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 277: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 767 "engines/director/lingo/lingo-gr.y"
+  case 279: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 770 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3959 "engines/director/lingo/lingo-gr.cpp"
+#line 3968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 278: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 768 "engines/director/lingo/lingo-gr.y"
+  case 280: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 771 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3965 "engines/director/lingo/lingo-gr.cpp"
+#line 3974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 279: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 769 "engines/director/lingo/lingo-gr.y"
+  case 281: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 772 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3971 "engines/director/lingo/lingo-gr.cpp"
+#line 3980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 280: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 770 "engines/director/lingo/lingo-gr.y"
+  case 282: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 773 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3977 "engines/director/lingo/lingo-gr.cpp"
+#line 3986 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 281: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 771 "engines/director/lingo/lingo-gr.y"
+  case 283: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 774 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3983 "engines/director/lingo/lingo-gr.cpp"
+#line 3992 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 282: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 772 "engines/director/lingo/lingo-gr.y"
+  case 284: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 775 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3989 "engines/director/lingo/lingo-gr.cpp"
+#line 3998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 283: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 773 "engines/director/lingo/lingo-gr.y"
+  case 285: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 776 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3995 "engines/director/lingo/lingo-gr.cpp"
+#line 4004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 284: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 774 "engines/director/lingo/lingo-gr.y"
+  case 286: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 777 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4001 "engines/director/lingo/lingo-gr.cpp"
+#line 4010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 285: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 775 "engines/director/lingo/lingo-gr.y"
+  case 287: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 778 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4007 "engines/director/lingo/lingo-gr.cpp"
+#line 4016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 286: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 776 "engines/director/lingo/lingo-gr.y"
+  case 288: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 779 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4013 "engines/director/lingo/lingo-gr.cpp"
+#line 4022 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 287: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 779 "engines/director/lingo/lingo-gr.y"
+  case 289: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 782 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4019 "engines/director/lingo/lingo-gr.cpp"
+#line 4028 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 288: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 780 "engines/director/lingo/lingo-gr.y"
+  case 290: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 783 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4025 "engines/director/lingo/lingo-gr.cpp"
+#line 4034 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 289: /* exprlist: %empty  */
-#line 783 "engines/director/lingo/lingo-gr.y"
+  case 291: /* exprlist: %empty  */
+#line 786 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 4031 "engines/director/lingo/lingo-gr.cpp"
+#line 4040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 291: /* nonemptyexprlist: expr  */
-#line 787 "engines/director/lingo/lingo-gr.y"
+  case 293: /* nonemptyexprlist: expr  */
+#line 790 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 4040 "engines/director/lingo/lingo-gr.cpp"
+#line 4049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 292: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 791 "engines/director/lingo/lingo-gr.y"
+  case 294: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 794 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 4048 "engines/director/lingo/lingo-gr.cpp"
+#line 4057 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 4052 "engines/director/lingo/lingo-gr.cpp"
+#line 4061 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4247,7 +4256,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 796 "engines/director/lingo/lingo-gr.y"
+#line 799 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 84ba87e555..e45a4de448 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -503,7 +503,7 @@ ifstmt: tIF expr tTHEN stmt {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back($stmt);
 		$$ = new IfStmtNode($expr, stmtlist); }
-	| tIF expr tTHEN '\n' stmtlist_insideif tENDIF '\n' {
+	| tIF expr tTHEN '\n' stmtlist_insideif endif {
 		$$ = new IfStmtNode($expr, $stmtlist_insideif); }
 	;
 
@@ -513,7 +513,7 @@ ifelsestmt: tIF expr tTHEN stmt[stmt1] tELSE stmt[stmt2] {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back($stmt2);
 		$$ = new IfElseStmtNode($expr, stmtlist1, stmtlist2); }
-	| tIF expr tTHEN stmt[stmt1] tELSE '\n' stmtlist_insideif[stmtlist2] tENDIF '\n' {
+	| tIF expr tTHEN stmt[stmt1] tELSE '\n' stmtlist_insideif[stmtlist2] endif {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back($stmt1);
 		$$ = new IfElseStmtNode($expr, stmtlist1, $stmtlist2); }
@@ -521,10 +521,13 @@ ifelsestmt: tIF expr tTHEN stmt[stmt1] tELSE stmt[stmt2] {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back($stmt2);
 		$$ = new IfElseStmtNode($expr, $stmtlist1, stmtlist2); }
-	| tIF expr tTHEN '\n' stmtlist_insideif[stmtlist1] tELSE '\n' stmtlist_insideif[stmtlist2] tENDIF '\n' {
+	| tIF expr tTHEN '\n' stmtlist_insideif[stmtlist1] tELSE '\n' stmtlist_insideif[stmtlist2] endif {
 		$$ = new IfElseStmtNode($expr, $stmtlist1, $stmtlist2); }
 	;
 
+endif: /* empty */	{ warning("LingoCompiler::parse: no end if"); }
+	| tENDIF '\n' ;
+
 loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n' {
 		$$ = new RepeatWhileNode($expr, $stmtlist); }
 	| tREPEAT tWITH ID tEQ expr[start] tTO expr[end] '\n' stmtlist tENDREPEAT '\n' {


Commit: ace4d11cf7d33563950cf9e488d270205c7c0fd9
    https://github.com/scummvm/scummvm/commit/ace4d11cf7d33563950cf9e488d270205c7c0fd9
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Allow trailing comma in function args

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 7fa5499a95..75f29cf293 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -641,16 +641,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  177
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4008
+#define YYLAST   4279
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  63
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  294
+#define YYNRULES  297
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  538
+#define YYNSTATES  544
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -721,23 +721,23 @@ static const yytype_int16 yyrline[] =
      385,   386,   389,   390,   391,   392,   393,   394,   397,   398,
      399,   402,   403,   404,   405,   406,   407,   408,   409,   414,
      415,   416,   417,   420,   423,   428,   432,   438,   443,   446,
-     452,   452,   458,   463,   469,   475,   481,   489,   490,   491,
-     492,   495,   495,   497,   498,   499,   502,   506,   510,   516,
-     520,   524,   528,   529,   531,   533,   535,   537,   541,   545,
-     549,   551,   552,   556,   562,   569,   570,   573,   574,   578,
-     584,   591,   592,   598,   599,   600,   601,   602,   603,   604,
-     605,   606,   607,   608,   609,   612,   614,   615,   618,   619,
-     622,   623,   624,   626,   628,   630,   632,   634,   636,   638,
-     642,   643,   646,   651,   654,   660,   661,   662,   663,   666,
-     667,   668,   669,   670,   673,   675,   676,   677,   680,   681,
-     682,   683,   684,   685,   686,   687,   688,   689,   693,   694,
-     695,   696,   697,   700,   701,   702,   703,   706,   706,   708,
-     709,   710,   713,   717,   722,   723,   724,   727,   728,   731,
-     732,   736,   737,   738,   739,   740,   741,   742,   743,   744,
-     745,   746,   747,   748,   749,   750,   751,   752,   753,   754,
-     761,   762,   763,   764,   765,   766,   767,   768,   769,   770,
-     771,   772,   773,   774,   775,   776,   777,   778,   779,   782,
-     783,   786,   787,   790,   794
+     451,   457,   457,   463,   468,   474,   480,   486,   494,   495,
+     496,   497,   500,   500,   502,   503,   504,   507,   511,   515,
+     521,   525,   529,   533,   534,   536,   538,   540,   542,   546,
+     550,   554,   556,   557,   561,   567,   574,   575,   578,   579,
+     583,   589,   596,   597,   603,   604,   605,   606,   607,   608,
+     609,   610,   611,   612,   613,   614,   615,   618,   620,   621,
+     624,   625,   628,   629,   630,   632,   634,   636,   638,   640,
+     642,   644,   648,   649,   652,   657,   660,   665,   671,   672,
+     673,   674,   677,   678,   679,   680,   681,   684,   686,   687,
+     688,   691,   692,   693,   694,   695,   696,   697,   698,   699,
+     700,   704,   705,   706,   707,   708,   711,   712,   713,   714,
+     717,   717,   719,   720,   721,   724,   728,   733,   734,   735,
+     738,   739,   742,   743,   747,   748,   749,   750,   751,   752,
+     753,   754,   755,   756,   757,   758,   759,   760,   761,   762,
+     763,   764,   765,   772,   773,   774,   775,   776,   777,   778,
+     779,   780,   781,   782,   783,   784,   785,   786,   787,   788,
+     789,   790,   793,   794,   797,   798,   801,   805
 };
 #endif
 
@@ -805,7 +805,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-483)
+#define YYPACT_NINF (-484)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -819,60 +819,61 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2375,  -483,  -483,  -483,  -483,  -483,  -483,   -16,  -483,  2945,
-    1411,  1508,  -483,  -483,  2945,  -483,     5,  -483,  -483,  1605,
-      59,  3024,  -483,  2945,  -483,  -483,  2945,  1605,  1411,  2945,
-    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
-    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
-    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
-    -483,  -483,  -483,  1508,  2945,  2945,   -71,  3339,  -483,    38,
-    2375,  -483,  -483,  -483,  -483,  1605,  -483,  -483,  -483,  -483,
-    -483,  -483,  -483,  -483,  -483,  -483,  -483,   -24,  -483,  -483,
-    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
-    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
-    -483,  -483,  -483,   -12,    13,  -483,  -483,  -483,  -483,  1702,
-    1702,  1702,  1702,  1508,  1508,  1799,  1508,  1508,  1508,  1508,
-    3103,  1508,  1799,  1799,  1217,   633,    27,    30,    34,  -483,
-    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
-     732,  -483,  1508,  3524,  2945,    35,    46,   829,  2945,  1508,
-    3182,  -483,  -483,    -9,  -483,   108,    57,    60,   926,    62,
-      66,    67,   419,    69,  2945,  -483,  -483,  -483,  -483,    74,
-    1023,  -483,  -483,  2945,  1314,  -483,  -483,  -483,  -483,  -483,
-    1120,  3887,  -483,   497,   519,  3394,  3416,   -20,    41,    43,
-      44,    45,    85,   117,   124,  3833,  -483,  -483,  -483,  3556,
-      53,    71,    70,   -79,   -23,  -483,  3887,    73,    79,  1508,
-    -483,  -483,   159,  1508,  1508,  1508,  1508,  2090,  2090,  2284,
-    1508,  2187,  2187,  1508,  1508,  1508,  1508,  1508,  1508,  1508,
-    1508,  -483,  -483,  3650,  -483,  3637,  2455,  1508,  1508,  1508,
-    1508,  1508,    90,  -483,  -483,  3261,  3261,  3261,   -11,  3663,
-     160,  -483,  -483,  1508,  1508,   -66,  -483,  1508,  -483,  -483,
-    -483,  3339,  2535,  -483,    93,  -483,  -483,  -483,  3578,   165,
-    3900,  1799,  1508,  1799,  1508,  1799,  1508,  1799,  1508,  -483,
-    -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,  -483,
-    -483,  -483,  -483,    32,  1896,  1993,  1799,  1799,  1508,  -483,
-    1508,  1508,  -483,  1508,  2866,  -483,  -483,  1508,    92,  1508,
-      10,    10,    10,    10,  3913,  3913,  -483,    14,    10,    10,
-      10,    10,    14,   -26,   -26,  -483,  -483,    95,  1508,  1508,
-    1508,  1508,  1508,  1508,  1508,  1508,  1508,  1508,  1508,  1508,
-    1508,  1508,  1508,  1508,  1508,  1508,  -483,  2775,   178,  2535,
-    -483,    98,  -483,    99,   100,  1508,  1508,  2535,  1993,  3719,
-    3887,  2945,  -483,  -483,  -483,   -66,  -483,  3732,  -483,  -483,
-    -483,   111,  2535,  -483,  2535,  1508,  1508,  -483,   334,  -483,
-    3448,  -483,  3470,  -483,  3502,  -483,  -483,  1799,    32,    32,
-      32,    32,  1799,  1799,    32,  1799,  1799,  -483,  -483,  -483,
-    -483,  -483,  -483,    24,  3887,  3887,  3887,    53,    71,    96,
-    -483,  3887,  -483,  3887,  1508,  -483,    10,    10,    10,    10,
-    3913,  3913,  -483,    14,    10,    10,    10,    10,    14,   -26,
-     -26,  -483,  -483,    95,  -483,  -483,    -5,  2775,  -483,  2615,
-    -483,  -483,  -483,  -483,  3745,    -2,   114,  -483,  2945,  -483,
-    -483,   104,  -483,   192,    50,  3887,  1799,  1799,  1799,  1799,
-    -483,  1799,  1799,  1799,  1799,  -483,   176,   134,  -483,  -483,
-    -483,  -483,  2695,   109,  -483,  -483,  2775,  -483,  2535,   174,
-    1508,   113,   115,  -483,  2945,  -483,  -483,  -483,  -483,  -483,
-    -483,  -483,  -483,  -483,   140,  1799,  -483,  2775,  -483,  -483,
-     128,   129,  1508,  3801,  -483,  2535,    18,  -483,  1799,   128,
-    -483,   119,  3814,  2535,  -483,  -483,  2945,  -483,  -483,  -483,
-    2535,   131,  -483,   133,   121,   123,  -483,  -483
+    2676,  -484,  -484,  -484,  -484,  -484,  -484,   -22,  -484,  3246,
+    1712,  1809,  -484,  -484,  3246,  -484,    13,  -484,  -484,  1906,
+      10,  3325,  -484,  3246,  -484,  -484,  3246,  1906,  1712,  3246,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
+    -484,  -484,  -484,  1809,  3246,  3246,   -43,  3640,  -484,    60,
+    2676,  -484,  -484,  -484,  -484,  1906,  -484,  -484,  -484,  -484,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,    20,  -484,  -484,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
+    -484,  -484,  -484,    21,   -30,  -484,  -484,  -484,  -484,  2003,
+    2003,  2003,  2003,  1809,  1809,  2100,  1809,  1809,  1809,  1809,
+    3404,  1809,  2100,  2100,  1227,   643,     6,    28,    30,  -484,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
+     742,  -484,  1809,   344,  3246,    37,    43,   839,  3246,  1809,
+    3483,  -484,  -484,    -3,  -484,    74,    44,    51,   936,    52,
+      53,    55,  3762,    57,  3246,  -484,  -484,  -484,  -484,    66,
+    1033,  -484,  -484,  3246,  1324,  -484,  -484,  -484,  -484,  -484,
+    1130,  4114,  -484,   424,   455,   528,  3695,   -31,   -26,   -21,
+     -20,   -17,    47,   137,   140,  4101,  -484,  -484,  -484,  3795,
+     -24,    68,    62,   -16,    -8,  -484,  4114,    70,    71,  1421,
+    -484,  -484,   148,  1809,  1809,  1809,  1809,  2391,  2391,  2585,
+    1809,  2488,  2488,  1809,  1809,  1809,  1809,  1809,  1809,  1809,
+    1809,  -484,  -484,  3880,  -484,  3867,  2756,  1809,  1809,  1809,
+    1809,  1809,    78,  -484,  -484,  3562,  3562,  3562,   -10,  3937,
+     150,  -484,  -484,  1809,  1809,   -60,  -484,  1809,  -484,  -484,
+    -484,  3640,  2836,  -484,    83,  -484,  -484,  -484,  3854,   155,
+    4130,  2100,  1809,  2100,  1809,  2100,  1809,  2100,  1809,  -484,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
+    -484,  -484,  -484,    46,  2197,  2294,  2100,  2100,  1518,  -484,
+    1809,  1809,  -484,  1809,  3167,  -484,  -484,  1809,  -484,    84,
+    1809,   -29,   -29,   -29,   -29,  4184,  4184,  -484,     4,   -29,
+     -29,   -29,   -29,     4,    -9,    -9,  -484,  -484,    84,  1809,
+    1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,
+    1809,  1809,  1809,  1809,  1809,  1809,  1809,  -484,  3076,   167,
+    2836,  -484,    94,  -484,    96,    97,  1809,  1809,  2836,  2294,
+    3950,  4114,  3246,  -484,  -484,  -484,   -60,  -484,  3963,  -484,
+    -484,  -484,   109,  2836,  -484,  2836,  1615,  1809,  -484,   541,
+    -484,  3708,  -484,  3728,  -484,  3782,  -484,  -484,  2100,    46,
+      46,    46,    46,  2100,  2100,    46,  2100,  2100,  -484,  -484,
+    -484,  -484,  -484,  -484,  -484,    84,  4114,  4114,  4114,   -24,
+      68,    95,  -484,  4114,  1809,    99,  4114,  -484,   -29,   -29,
+     -29,   -29,  4184,  4184,  -484,     4,   -29,   -29,   -29,   -29,
+       4,    -9,    -9,  -484,  -484,    84,  -484,  -484,    -1,  3076,
+    -484,  2916,  -484,  -484,  -484,  -484,  4019,    67,   111,  -484,
+    3246,  -484,  -484,   103,  -484,   191,  -484,    84,  4114,  2100,
+    2100,  2100,  2100,  -484,  2100,  2100,  2100,  2100,  -484,   174,
+     132,  -484,  -484,   104,  -484,  -484,  2996,   108,  -484,  -484,
+    3076,  -484,  2836,   172,  1809,   112,   113,  -484,  3246,   114,
+    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,   141,  2100,
+    -484,  -484,  3076,  -484,  -484,   126,   129,  1809,  4032,  -484,
+    2836,   -68,  -484,  -484,  2100,   126,  -484,   119,  4045,  2836,
+    -484,  -484,  3246,  -484,  -484,  -484,  2836,   131,  -484,   133,
+     121,   124,  -484,  -484
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -891,72 +892,73 @@ static const yytype_int16 yydefact[] =
      109,   110,   103,   104,   105,   106,   107,     0,   121,    79,
       78,    80,    82,    83,    84,    86,    53,    92,    59,    62,
       93,    94,    81,    89,    90,    85,    67,    91,    88,    87,
-      61,    77,    98,     0,    96,   173,   174,   176,   175,    31,
+      61,    77,    98,     0,    96,   174,   175,   177,   176,    31,
       37,    60,    72,    38,    52,    54,    32,    42,    45,    75,
-      68,    65,     0,     0,     0,   291,   185,     0,     0,   249,
-     180,   181,   182,   183,   205,   206,   207,   184,   250,   251,
-     130,   252,     0,     0,    95,     0,     0,   130,     0,     0,
-      68,   185,   188,     0,   189,     0,     0,     0,   130,     0,
+      68,    65,     0,     0,     0,   294,   187,     0,     0,   252,
+     182,   183,   184,   185,   208,   209,   210,   186,   253,   254,
+     131,   255,     0,     0,    95,     0,     0,   131,     0,     0,
+      68,   187,   190,     0,   191,     0,     0,     0,   131,     0,
        0,     0,     0,     0,    95,   101,   122,     1,     4,     0,
-     130,   120,   143,    97,     0,   191,   202,   190,   200,   201,
-     132,   133,   177,     0,     0,     0,     0,    25,    26,    27,
-      47,    63,    44,    55,   215,     0,   247,   248,   128,     0,
-     176,   175,     0,   185,     0,   242,   293,     0,   292,   291,
+     131,   120,   144,    97,     0,   193,   204,   192,   202,   203,
+     133,   134,   178,     0,     0,     0,     0,    25,    26,    27,
+      47,    63,    44,    55,   218,     0,   250,   251,   128,     0,
+     177,   176,     0,   187,     0,   245,   296,     0,   295,     0,
      113,   114,    56,     0,     0,     0,     0,    29,    57,    51,
        0,    34,    66,     0,     0,     0,     0,     0,     0,     0,
-     131,   124,   270,   130,   271,     0,     0,     0,     0,     0,
+     132,   124,   273,   131,   274,     0,     0,     0,     0,     0,
        0,     0,     0,   119,   112,    41,    28,    30,     0,     0,
-      55,   141,   142,     0,     0,    13,   117,    73,   115,   116,
-     145,     0,   161,   144,     0,   111,    99,   203,     0,    56,
-     136,     0,     0,     0,     0,     0,     0,     0,     0,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   233,
-     235,   236,   234,     0,     0,     0,     0,     0,     0,   179,
-       0,     0,   240,     0,     0,   241,   239,     0,     0,     0,
-     262,   263,   260,   261,   264,   265,   257,   267,   268,   269,
-     259,   258,   266,   253,   254,   255,   256,   130,     0,     0,
+      55,   142,   143,     0,     0,    13,   117,    73,   115,   116,
+     146,     0,   162,   145,     0,   111,    99,   205,     0,    56,
+     137,     0,     0,     0,     0,     0,     0,     0,     0,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   236,
+     238,   239,   237,     0,     0,     0,     0,     0,     0,   181,
+       0,     0,   243,     0,     0,   244,   242,     0,   179,   131,
+       0,   265,   266,   263,   264,   267,   268,   260,   270,   271,
+     272,   262,   261,   269,   256,   257,   258,   259,   131,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   131,   126,   167,   146,   161,
-     186,     0,   187,     0,     0,     0,     0,   161,     0,     0,
-     160,     0,    17,    18,    11,    14,    15,     0,   158,   165,
-     166,     0,   162,   163,   161,     0,     0,   192,     0,   196,
-       0,   198,     0,   194,     0,   237,   238,     0,    33,    43,
-      46,    76,    48,    49,    50,    64,    65,   217,   210,   209,
-     216,   289,   290,     0,   246,   244,   245,     0,     0,     0,
-     243,   294,   178,   135,   131,   125,   281,   282,   279,   280,
-     283,   284,   276,   286,   287,   288,   278,   277,   285,   272,
-     273,   274,   275,   130,   171,   172,   152,   168,   169,     0,
-      10,   137,   138,   139,     0,     0,     0,   140,    95,    16,
-     118,     0,   164,    20,     0,   134,     0,     0,     0,     0,
-     208,     0,     0,     0,     0,   214,     0,     0,   212,   213,
-     129,   127,     0,     0,   147,   170,   167,   148,   161,     0,
-       0,     0,     0,   159,    21,   204,   193,   197,   199,   195,
-     228,   230,   231,   229,     0,     0,   232,   167,   150,   153,
-     152,     0,     0,     0,   154,   161,     0,    22,     0,   152,
-     149,     0,     0,   161,    12,    19,     0,   211,   151,   157,
-     161,     0,    23,     0,     0,     0,   155,   156
+       0,     0,     0,     0,     0,     0,   132,   126,   168,   147,
+     162,   188,     0,   189,     0,     0,     0,     0,   162,     0,
+       0,   161,     0,    17,    18,    11,    14,    15,     0,   159,
+     166,   167,     0,   163,   164,   162,     0,     0,   194,     0,
+     198,     0,   200,     0,   196,     0,   240,   241,     0,    33,
+      43,    46,    76,    48,    49,    50,    64,    65,   220,   213,
+     212,   219,   292,   293,   129,   131,   249,   247,   248,     0,
+       0,     0,   246,   297,   132,     0,   136,   125,   284,   285,
+     282,   283,   286,   287,   279,   289,   290,   291,   281,   280,
+     288,   275,   276,   277,   278,   131,   172,   173,   153,   169,
+     170,     0,    10,   138,   139,   140,     0,     0,     0,   141,
+      95,    16,   118,     0,   165,    20,   206,   131,   135,     0,
+       0,     0,     0,   211,     0,     0,     0,     0,   217,     0,
+       0,   215,   216,     0,   180,   127,     0,     0,   148,   171,
+     168,   149,   162,     0,     0,     0,     0,   160,    21,     0,
+     195,   199,   201,   197,   231,   233,   234,   232,     0,     0,
+     235,   130,   168,   151,   154,   153,     0,     0,     0,   155,
+     162,     0,    22,   207,     0,   153,   150,     0,     0,   162,
+      12,    19,     0,   214,   152,   158,   162,     0,    23,     0,
+       0,     0,   156,   157
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -483,  -483,  -483,   151,  -483,  -483,  -483,  -483,  -483,  -153,
-    -483,  -483,     0,    -7,   -25,  -483,     1,  -349,   -62,  -483,
-       2,  -240,   195,  -483,  -483,  -483,  -483,  -483,  -482,  -483,
-    -483,  -483,  -350,  -483,  -158,  -459,  -483,  -222,  -104,   -15,
-    -157,  -483,   -95,  -483,    48,  -483,   -78,  -251,   207,  -483,
-    -483,  -483,  -265,  -483,  -483,   -85,  -483,   132,    55,    40,
-     -96,    12,  -230
+    -484,  -484,  -484,   152,  -484,  -484,  -484,  -484,  -484,  -153,
+    -484,  -484,     0,    -7,   -28,  -484,     8,  -346,   -63,  -484,
+      -2,  -238,   196,  -484,  -484,  -484,  -484,  -484,  -483,  -484,
+    -484,  -484,  -350,  -484,  -158,  -479,  -484,  -223,  -129,   -18,
+    -180,  -484,  -164,  -484,    17,  -484,   -78,  -252,   209,  -484,
+    -484,  -484,  -270,  -484,  -484,   -83,  -484,   136,    61,    42,
+     -35,  -484,  -213
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    69,    70,    71,    72,    73,   373,   374,   375,   376,
-      74,   516,   111,   136,   113,   114,   380,    77,    78,    79,
-     137,   241,   138,    80,   263,    81,    82,    83,   484,    84,
-      85,    86,   381,   382,   383,   446,   447,   448,   139,   140,
-     361,   163,   141,   142,   185,   143,   407,   408,   144,   145,
-     146,   303,   397,   147,   214,   215,   148,   149,   216,   243,
+       0,    69,    70,    71,    72,    73,   374,   375,   376,   377,
+      74,   521,   111,   136,   113,   114,   381,    77,    78,    79,
+     137,   241,   138,    80,   263,    81,    82,    83,   488,    84,
+      85,    86,   382,   383,   384,   448,   449,   450,   139,   140,
+     362,   163,   141,   142,   185,   143,   408,   409,   144,   145,
+     146,   303,   398,   147,   214,   215,   148,   149,   216,   243,
      151,   217,   218
 };
 
@@ -965,72 +967,73 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      75,    76,   112,   356,   171,   176,   162,   154,   445,   450,
-     337,   482,   365,   489,   161,    87,   165,   456,   371,   166,
-     219,   156,   112,   249,   313,   261,   175,   510,   520,   167,
-     169,   372,   490,   366,   463,   262,   155,   528,   177,   173,
-     223,   224,   225,   226,   247,   248,   242,   249,   519,   289,
-     230,   250,   251,   242,   244,   395,   290,   112,   174,   249,
-     396,   244,   230,   249,   242,   150,   153,    75,   238,   239,
-      75,    76,   244,   181,   157,   314,   242,   179,   413,   315,
-     483,    88,   168,   150,   244,   182,   242,   233,   234,   235,
-     236,   237,   238,   239,   244,   158,   159,   425,   445,   363,
-     364,   235,   236,   237,   238,   239,   236,   237,   238,   239,
-     291,   183,   293,   295,   297,   525,   526,   292,   172,   294,
-     296,   298,   317,   204,   480,   443,   219,   220,   213,   252,
-     180,   221,   253,   471,   472,   473,   474,   445,   511,   477,
-     299,   264,   300,   254,   301,   304,   302,   112,   317,   274,
-     495,   258,   305,   204,   265,   464,   310,   266,   445,   268,
-     362,   362,   362,   269,   270,   524,   273,   112,   187,   188,
-     189,   275,   312,   531,   311,   316,   276,   317,   190,   191,
-     533,   193,   194,   195,   196,   319,   205,   359,   368,   209,
-     384,   386,   422,   424,   449,   451,   452,   453,   461,   313,
-     491,   493,   494,   481,   504,   505,   509,   245,   512,   378,
-     514,   518,   515,   483,   259,   521,   529,   534,   536,   535,
-     537,   178,   459,   170,   462,   485,   506,   410,   164,   420,
-     280,   318,     0,     0,     0,     0,     0,     0,     0,   278,
-     360,   360,   360,     0,     0,     0,    75,   358,   161,   161,
-     161,   186,   186,   186,   186,     0,     0,   192,     0,     0,
-       0,     0,     0,     0,   206,   207,     0,     0,     0,     0,
-       0,    75,    75,     0,     0,     0,     0,     0,   320,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
-     332,   333,   334,   335,   336,     0,     0,     0,     0,     0,
-       0,     0,   324,   325,   326,   328,   329,   419,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   369,   370,
-       0,     0,   377,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   388,     0,   390,
-       0,   392,     0,   394,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    75,     0,    75,
-       0,     0,   466,     0,   458,   414,   415,    75,   416,     0,
-       0,     0,   421,     0,   423,     0,   223,   224,   225,   226,
-     247,   248,    75,   249,    75,     0,   230,   250,   251,     0,
-       0,     0,     0,   426,   427,   428,   429,   430,   431,   432,
-     433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
-       0,     0,     0,   387,     0,   389,     0,   391,     0,   393,
-     454,   455,     0,   233,   234,   235,   236,   237,   238,   239,
-       0,     0,     0,   492,     0,     0,   409,   409,   411,   412,
-       0,   465,     0,     0,     0,     0,     0,    75,     0,    75,
-     487,   112,     0,   271,     0,     0,     0,     0,     0,     0,
-       0,   223,   224,   225,   226,   247,   248,     0,   249,     0,
-       0,   230,   250,   251,     0,     0,     0,     0,     0,   421,
-       0,     0,    75,   508,     0,     0,    75,   517,    75,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     409,     0,     0,     0,     0,     0,     0,    75,   233,   234,
-     235,   236,   237,   238,   239,    75,   272,     0,     0,   532,
-       0,     0,     0,    75,     0,   281,     0,     0,     0,   470,
-      75,   282,     0,     0,   475,   476,     0,   478,   479,   223,
-     224,   225,   226,   247,   248,   513,   249,   283,     0,   230,
-     250,   251,     0,   284,     0,     0,     0,     0,     0,     0,
-       0,   223,   224,   225,   226,   247,   248,   522,   249,     0,
-       0,   230,   250,   251,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
-     237,   238,   239,     0,     0,     0,     0,     0,   496,   497,
-     498,   499,     0,   500,   501,   502,   503,     0,   233,   234,
-     235,   236,   237,   238,   239,     0,     0,     0,     0,     0,
+      75,   171,   112,   162,   176,   357,   319,   154,    76,    87,
+     452,   515,   447,   366,   161,   486,   165,   156,   458,   166,
+     249,   242,   112,   230,   372,   167,   169,   338,   242,   531,
+     532,   261,   526,   525,   367,   465,   173,   373,   289,   242,
+     249,   262,   534,   291,   155,   290,   158,   159,   293,   295,
+     292,   242,   297,   249,   175,   294,   296,   112,   174,   298,
+     177,   242,   235,   236,   237,   238,   239,    75,   183,   396,
+      75,   150,   153,   179,   397,    88,   364,   365,    76,   310,
+     157,   425,   493,   219,   487,   238,   239,   313,   168,   150,
+     314,   363,   363,   363,   315,   415,   236,   237,   238,   239,
+     427,   494,   299,   447,   300,   219,   301,   264,   302,   223,
+     224,   225,   226,   247,   248,   244,   249,   181,   182,   230,
+     250,   251,   244,   204,   172,   220,   252,   221,   213,   474,
+     475,   476,   477,   244,   253,   480,   180,   187,   188,   189,
+     254,   265,   516,   445,   447,   244,   274,   112,   266,   268,
+     269,   258,   270,   204,   273,   244,   233,   234,   235,   236,
+     237,   238,   239,   275,   312,   304,   447,   112,   305,   317,
+     530,   311,   316,   467,   320,   360,   276,   483,   369,   537,
+     385,   387,   424,   451,   190,   191,   539,   193,   194,   195,
+     196,   453,   205,   454,   455,   209,   463,   495,   313,   484,
+     497,   498,   508,   509,   511,   514,   517,   485,   379,   519,
+     520,   487,   524,   245,   523,   527,   535,   540,   542,   541,
+     259,   543,   178,   461,   170,   464,   489,   411,   510,   499,
+     164,   422,   280,     0,     0,     0,     0,   361,   361,   361,
+       0,     0,     0,     0,     0,   278,    75,     0,   161,   161,
+     161,     0,     0,     0,   359,   186,   186,   186,   186,     0,
+       0,   192,     0,     0,     0,     0,     0,     0,   206,   207,
+       0,    75,    75,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,     0,     0,     0,     0,     0,     0,   421,   325,   326,
+     327,   329,   330,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   370,   371,     0,     0,   378,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   475,   115,   116,
+       0,     0,     0,   389,     0,   391,     0,   393,     0,   395,
+       0,     0,     0,     0,     0,     0,     0,     0,    75,     0,
+      75,     0,     0,     0,     0,   460,     0,     0,    75,     0,
+       0,   416,   417,     0,   418,     0,     0,   246,   423,     0,
+       0,   426,     0,    75,     0,    75,   223,   224,   225,   226,
+     247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
+     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
+     438,   439,   440,   441,   442,   443,   444,   388,     0,   390,
+       0,   392,     0,   394,     0,     0,     0,   456,   457,     0,
+       0,     0,   496,   233,   234,   235,   236,   237,   238,   239,
+     410,   410,   412,   413,     0,     0,     0,     0,   468,    75,
+       0,    75,   281,   112,     0,     0,     0,     0,   282,   491,
+       0,     0,     0,     0,     0,     0,   223,   224,   225,   226,
+     247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
+       0,     0,     0,   283,     0,   423,    75,     0,     0,   284,
+      75,   522,    75,     0,   513,     0,     0,   223,   224,   225,
+     226,   247,   248,     0,   249,   410,     0,   230,   250,   251,
+       0,     0,    75,   233,   234,   235,   236,   237,   238,   239,
+      75,     0,     0,     0,     0,   538,     0,     0,     0,    75,
+       0,     0,     0,     0,   473,     0,    75,     0,     0,   478,
+     479,     0,   481,   482,   233,   234,   235,   236,   237,   238,
+     239,     0,     0,     0,     0,   518,   285,     0,     0,     0,
+       0,     0,   286,     0,     0,     0,     0,     0,     0,   469,
+     223,   224,   225,   226,   247,   248,     0,   249,   528,     0,
+     230,   250,   251,   223,   224,   225,   226,   247,   248,     0,
+     249,     0,     0,   230,   250,   251,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   500,   501,   502,   503,     0,
+     504,   505,   506,   507,     0,     0,     0,   233,   234,   235,
+     236,   237,   238,   239,     0,     0,     0,     0,     0,     0,
+     233,   234,   235,   236,   237,   238,   239,     0,     0,     0,
+       0,     0,     0,     0,     0,   478,     0,     0,   115,   116,
        1,   210,   211,    89,   119,   120,   121,   122,     6,    90,
-     527,    91,     8,    92,    93,    94,    12,    13,    95,    15,
+     533,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
       25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,   125,    33,    34,    35,     0,    36,    37,   126,    39,
@@ -1108,7 +1111,7 @@ static const yytype_int16 yytable[] =
        0,     0,   110,     0,     0,     0,   132,   133,     0,     0,
        0,     0,     0,   152,   277,   135,   115,   116,     1,   117,
      118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
-     123,    92,    93,    94,    12,    13,    95,   124,    96,    17,
+       8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
      103,   104,   105,     0,     0,     0,     0,    30,    31,   125,
       33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
@@ -1116,7 +1119,7 @@ static const yytype_int16 yytable[] =
       51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
       61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
        0,     0,     0,   132,   133,     0,     0,     0,     0,     0,
-     134,     0,   135,   115,   116,     1,   117,   118,    89,   119,
+     152,   318,   135,   115,   116,     1,   117,   118,    89,   119,
      120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
       94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
       99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
@@ -1125,7 +1128,7 @@ static const yytype_int16 yytable[] =
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
       54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
      107,   108,   109,     0,     0,     0,   110,     0,     0,     0,
-     132,   133,     0,     0,     0,     0,     0,   152,     0,   135,
+     132,   133,     0,     0,     0,     0,     0,   152,   414,   135,
      115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
        6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
@@ -1135,24 +1138,24 @@ static const yytype_int16 yytable[] =
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
      130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
        0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
-       0,     0,     0,     0,   134,     0,   135,   115,   116,     1,
+       0,     0,     0,     0,   152,   466,   135,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
-      91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
+      91,   123,    92,    93,    94,    12,    13,    95,   124,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
      125,    33,    34,    35,     0,    36,    37,   126,    39,   127,
       41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
        0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
-      60,    61,    62,   106,   107,   108,   109,     0,     0,     0,
+     131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
      110,     0,     0,     0,   132,   133,     0,     0,     0,     0,
-       0,   184,     0,   135,   115,   116,     1,   117,   118,    89,
+       0,   134,     0,   135,   115,   116,     1,   117,   118,    89,
      119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
       93,    94,    12,    13,    95,    15,    96,    17,    18,    97,
       98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
      105,     0,     0,     0,     0,    30,    31,   125,    33,    34,
       35,     0,    36,    37,   126,    39,   127,    41,   128,    43,
      129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,   130,    58,    59,    60,    61,    62,
+      53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
      106,   107,   108,   109,     0,     0,     0,   110,     0,     0,
        0,   132,   133,     0,     0,     0,     0,     0,   152,     0,
      135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
@@ -1160,99 +1163,136 @@ static const yytype_int16 yytable[] =
       13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
       22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
        0,     0,    30,    31,   125,    33,    34,    35,     0,    36,
-      37,   126,   398,   127,   399,   128,   400,   129,   401,    46,
-      47,    48,    49,    50,     0,    51,    52,   402,   403,   404,
-      56,   130,    58,   405,   406,    61,    62,   106,   107,   108,
+      37,   126,    39,   127,    41,   128,    43,   129,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
      109,     0,     0,     0,   110,     0,     0,     0,   132,   133,
-       0,     0,     0,     0,     0,   152,     0,   135,   115,   116,
+       0,     0,     0,     0,     0,   134,     0,   135,   115,   116,
        1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
       25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,   125,    33,    34,    35,     0,    36,    37,   126,    39,
      127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,   402,   403,    55,    56,   130,    58,
-     405,   406,    61,    62,   106,   107,   108,   109,     0,     0,
+      50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
+      59,    60,    61,    62,   106,   107,   108,   109,     0,     0,
        0,   110,     0,     0,     0,   132,   133,     0,     0,     0,
-       0,     0,   152,     0,   135,   115,   116,     1,   117,   118,
+       0,     0,   184,     0,   135,   115,   116,     1,   117,   118,
       89,   119,   120,   121,   122,     6,    90,     0,    91,     8,
       92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
       97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
-     104,   105,     0,     0,     0,     0,     0,     0,   125,    33,
+     104,   105,     0,     0,     0,     0,    30,    31,   125,    33,
       34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
       43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
-      52,    53,    54,    55,    56,   130,    58,    59,   131,    61,
+      52,    53,    54,    55,    56,   130,    58,    59,    60,    61,
       62,   106,   107,   108,   109,     0,     0,     0,   110,     0,
        0,     0,   132,   133,     0,     0,     0,     0,     0,   152,
        0,   135,   115,   116,     1,   117,   118,    89,   119,   120,
      121,   122,     6,    90,     0,    91,     8,    92,    93,    94,
       12,    13,    95,    15,    96,    17,    18,    97,    98,    99,
      100,    22,   101,    24,    25,   102,   103,   104,   105,     0,
-       0,     0,     0,     0,     0,   125,    33,    34,    35,     0,
-       0,     0,   126,    39,   127,    41,   128,    43,   129,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,   130,    58,    59,   131,    61,    62,   106,   107,
+       0,     0,     0,    30,    31,   125,    33,    34,    35,     0,
+      36,    37,   126,   399,   127,   400,   128,   401,   129,   402,
+      46,    47,    48,    49,    50,     0,    51,    52,   403,   404,
+     405,    56,   130,    58,   406,   407,    61,    62,   106,   107,
      108,   109,     0,     0,     0,   110,     0,     0,     0,   132,
      133,     0,     0,     0,     0,     0,   152,     0,   135,   115,
      116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
-       0,     0,   125,     0,    34,    35,     0,     0,     0,   126,
+      30,    31,   125,    33,    34,    35,     0,    36,    37,   126,
       39,   127,    41,   128,    43,   129,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
-      58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
-       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     1,   152,     0,   135,     2,     3,     4,     5,
-       6,     0,     0,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,     0,    22,
-      23,    24,    25,    26,    27,    28,    29,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,     0,
-      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
-       6,     0,    68,     7,     8,     9,    10,    11,    12,    13,
-       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
-      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
-      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
-       6,     0,   357,     7,     8,     9,    10,    11,    12,    13,
-       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
-      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
-      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
-       6,     0,   379,     7,     8,     9,    10,    11,    12,    13,
-       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
-      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
-      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
-       6,     0,   486,     7,     8,     9,    10,    11,    12,    13,
-       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
-      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
-      66,     0,     1,    67,     0,     0,     2,     3,     4,     5,
-       6,     0,   507,     7,     8,     9,    10,    11,    12,    13,
-       0,    15,    16,    17,    18,    19,    20,    21,     0,    22,
-      23,    24,    25,     0,    27,    28,    29,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      49,    50,     0,    51,    52,   403,   404,    55,    56,   130,
+      58,   406,   407,    61,    62,   106,   107,   108,   109,     0,
+       0,     0,   110,     0,     0,     0,   132,   133,     0,     0,
+       0,     0,     0,   152,     0,   135,   115,   116,     1,   117,
+     118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
+       8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
+      18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
+     103,   104,   105,     0,     0,     0,     0,     0,     0,   125,
+      33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
+     128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
+      51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
+      61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
+       0,     0,     0,   132,   133,     0,     0,     0,     0,     0,
+     152,     0,   135,   115,   116,     1,   117,   118,    89,   119,
+     120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
+      94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
+      99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
+       0,     0,     0,     0,     0,     0,   125,    33,    34,    35,
+       0,     0,     0,   126,    39,   127,    41,   128,    43,   129,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
+     107,   108,   109,     0,     0,     0,   110,     0,     0,     0,
+     132,   133,     0,     0,     0,     0,     0,   152,     0,   135,
+     115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
+       6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
+      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
+     101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
+       0,     0,     0,   125,     0,    34,    35,     0,     0,     0,
+     126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
-       0,     0,     0,    67,     0,     0,     0,     0,     0,     0,
-       0,     0,   444,     1,   417,   418,    89,     2,     3,     4,
+     130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
+       0,     0,     0,   110,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     1,   152,     0,   135,     2,     3,     4,
+       5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
+       5,     6,     0,    68,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
+       5,     6,     0,   358,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
+       5,     6,     0,   380,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
+       5,     6,     0,   490,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
+       5,     6,     0,   512,     7,     8,     9,    10,    11,    12,
+      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
+      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
+       0,     0,     0,     0,    67,     0,     0,     0,     0,     0,
+       0,     0,     0,   446,     1,   419,   420,    89,     2,     3,
+       4,     5,     6,    90,     0,    91,     8,    92,    93,    94,
+      12,    13,    95,    15,    96,    17,    18,    97,    98,    99,
+     100,    22,   101,    24,    25,   102,   103,   104,   105,     0,
+       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,   106,   107,
+     108,   109,     0,     1,     0,   110,    89,     2,     3,     4,
        5,     6,    90,     0,    91,     8,    92,    93,    94,    12,
       13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
       22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
@@ -1267,175 +1307,165 @@ static const yytype_int16 yytable[] =
        0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,   106,   107,   108,   109,
+     160,    58,    59,    60,    61,    62,   106,   107,   108,   109,
        0,     1,     0,   110,    89,     2,     3,     4,     5,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
       30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,    53,    54,    55,    56,   160,
+      39,    40,    41,    42,    43,    44,    45,   197,   198,   199,
+     200,   201,     0,    51,   202,    53,    54,    55,   203,    57,
       58,    59,    60,    61,    62,   106,   107,   108,   109,     0,
        1,     0,   110,    89,     2,     3,     4,     5,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
       25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,   197,   198,   199,   200,
-     201,     0,    51,   202,    53,    54,    55,   203,    57,    58,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,   260,    57,    58,
       59,    60,    61,    62,   106,   107,   108,   109,     0,     1,
-       0,   110,    89,     2,     3,     4,     5,     6,    90,     0,
+       0,   110,    89,   119,   120,     4,     5,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,   260,    57,    58,    59,
-      60,    61,    62,   106,   107,   108,   109,     0,     1,     0,
-     110,    89,   119,   120,     4,     5,     6,    90,     0,    91,
-       8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
-      18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
-     103,   104,   105,     0,     0,     0,     0,    30,    31,    32,
-      33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
-     128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,   106,   107,   108,   109,     1,     0,     0,   110,
-       2,     3,     4,     5,     6,     0,     0,     7,     8,     9,
-      10,     0,    12,    13,     0,    15,    16,    17,    18,    19,
-      98,    21,     0,    22,     0,    24,    25,     0,    27,    28,
-      29,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-     106,    64,   285,     0,     0,     0,     0,    67,   286,     0,
-       0,     0,     0,     0,     0,     0,   223,   224,   225,   226,
-     247,   248,     0,   249,   287,     0,   230,   250,   251,     0,
-     288,     0,     0,     0,     0,     0,     0,     0,   223,   224,
-     225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
-     251,     0,     0,     0,     0,     0,   467,     0,     0,     0,
-       0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
-     223,   224,   225,   226,   247,   248,     0,   249,   468,     0,
-     230,   250,   251,     0,     0,   233,   234,   235,   236,   237,
-     238,   239,   223,   224,   225,   226,   247,   248,     0,   249,
-       0,     0,   230,   250,   251,     0,     0,     0,     0,     0,
-     469,     0,     0,     0,     0,     0,     0,   233,   234,   235,
+      32,    33,    34,    35,     0,    36,    37,   126,    39,   127,
+      41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,   106,   107,   108,   109,     1,     0,     0,
+     110,     2,     3,     4,     5,     6,     0,     0,     7,     8,
+       9,    10,     0,    12,    13,     0,    15,    16,    17,    18,
+      19,    98,    21,     0,    22,     0,    24,    25,     0,    27,
+      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,   106,    64,   287,     0,     0,     0,     0,    67,   288,
+       0,     0,     0,     0,     0,     0,   470,   223,   224,   225,
+     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
+     223,   224,   225,   226,   247,   248,   471,   249,     0,     0,
+     230,   250,   251,     0,     0,     0,     0,     0,     0,     0,
+     223,   224,   225,   226,   247,   248,     0,   249,     0,     0,
+     230,   250,   251,     0,   233,   234,   235,   236,   237,   238,
+     239,     0,     0,     0,     0,     0,   271,   233,   234,   235,
      236,   237,   238,   239,   223,   224,   225,   226,   247,   248,
-       0,   249,     0,     0,   230,   250,   251,   246,     0,   233,
-     234,   235,   236,   237,   238,   239,   223,   224,   225,   226,
-     247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
+     472,   249,     0,     0,   230,   250,   251,   233,   234,   235,
+     236,   237,   238,   239,   223,   224,   225,   226,   247,   248,
+       0,   249,     0,     0,   230,   250,   251,   223,   224,   225,
+     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
+       0,   233,   234,   235,   236,   237,   238,   239,     0,   272,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   233,   234,   235,   236,   237,   238,   239,   223,   224,
-     225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
-     251,     0,     0,   233,   234,   235,   236,   237,   238,   239,
-     223,   224,   225,   226,   247,   248,     0,   249,     0,     0,
-     230,   250,   251,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   233,   234,   235,   236,   237,
-     238,   239,     0,     0,   308,     0,   309,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   233,   234,   235,
-     236,   237,   238,   239,     0,     0,   385,     0,   309,   223,
+       0,   233,   234,   235,   236,   237,   238,   239,     0,     0,
+       0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
+     239,     0,     0,   308,     0,   309,   223,   224,   225,   226,
+     247,   248,     0,   249,     0,     0,   230,   250,   251,   223,
+     224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
+     250,   251,   339,   340,   341,   342,   343,   344,     0,   345,
+       0,     0,   346,   347,   348,     0,     0,     0,     0,     0,
+       0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
+       0,     0,   386,     0,   309,     0,   233,   234,   235,   236,
+     237,   238,   239,     0,     0,     0,     0,   309,     0,   349,
+     350,   351,   352,   353,   354,   355,     0,     0,   356,   223,
      224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
-     250,   251,   338,   339,   340,   341,   342,   343,     0,   344,
-       0,     0,   345,   346,   347,   223,   224,   225,   226,   247,
+     250,   251,   223,   224,   225,   226,   247,   248,     0,   249,
+       0,     0,   230,   250,   251,   223,   224,   225,   226,   247,
      248,     0,   249,     0,     0,   230,   250,   251,     0,     0,
        0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
-     237,   238,   239,     0,     0,     0,     0,   309,     0,   348,
-     349,   350,   351,   352,   353,   354,     0,     0,   355,     0,
+     237,   238,   239,     0,   368,     0,     0,     0,     0,   233,
+     234,   235,   236,   237,   238,   239,     0,   459,     0,     0,
        0,     0,   233,   234,   235,   236,   237,   238,   239,     0,
-     367,   223,   224,   225,   226,   247,   248,     0,   249,     0,
+     462,   223,   224,   225,   226,   247,   248,     0,   249,     0,
        0,   230,   250,   251,   223,   224,   225,   226,   247,   248,
        0,   249,     0,     0,   230,   250,   251,   223,   224,   225,
      226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
        0,     0,     0,     0,     0,     0,     0,     0,   233,   234,
-     235,   236,   237,   238,   239,     0,   457,     0,     0,     0,
-       0,   233,   234,   235,   236,   237,   238,   239,     0,   460,
+     235,   236,   237,   238,   239,     0,   492,     0,     0,     0,
+       0,   233,   234,   235,   236,   237,   238,   239,     0,   529,
        0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
-     239,     0,   488,   223,   224,   225,   226,   247,   248,     0,
+     239,     0,   536,   223,   224,   225,   226,   247,   248,     0,
      249,     0,     0,   230,   250,   251,   223,   224,   225,   226,
      247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
-       0,     0,     0,     0,     0,   223,   224,   225,   226,   247,
-     248,     0,   249,     0,     0,   230,   250,   251,     0,     0,
-     233,   234,   235,   236,   237,   238,   239,     0,   523,     0,
+       0,     0,   339,   340,   341,   342,   343,   344,     0,   345,
+     306,   307,   346,   347,   348,     0,     0,     0,     0,     0,
+     233,   234,   235,   236,   237,   238,   239,     0,     0,     0,
        0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
-       0,   530,   306,   307,     0,     0,     0,     0,     0,     0,
-       0,     0,   233,   234,   235,   236,   237,   238,   239,   223,
-     224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
-     250,   251,   338,   339,   340,   341,   342,   343,     0,   344,
-       0,     0,   345,   346,   347,   223,   224,   225,   226,     0,
-       0,     0,   249,     0,     0,   230,   250,   251,     0,     0,
-       0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
-     237,   238,   239,     0,     0,     0,     0,     0,     0,   348,
-     349,   350,   351,   352,   353,   354,     0,     0,     0,     0,
-       0,     0,   233,   234,   235,   236,   237,   238,   239
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   349,
+     350,   351,   352,   353,   354,   355,   223,   224,   225,   226,
+       0,     0,     0,   249,     0,     0,   230,   250,   251,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   233,   234,   235,   236,   237,   238,   239
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     0,     9,   243,    29,    67,    21,    14,   357,   359,
-     240,    16,    23,    15,    21,    31,    23,   367,    84,    26,
-      99,    19,    29,    49,   103,    34,    97,   486,   510,    27,
-      28,    97,    34,    44,   384,    44,    31,   519,     0,    64,
-      42,    43,    44,    45,    46,    47,   150,    49,   507,    69,
-      52,    53,    54,   157,   150,    23,    76,    64,    65,    49,
-      28,   157,    52,    49,   168,    10,    11,    67,    94,    95,
-      70,    70,   168,    97,    19,    98,   180,    75,   308,   102,
-      85,    97,    27,    28,   180,    97,   190,    89,    90,    91,
-      92,    93,    94,    95,   190,    36,    37,   337,   447,   256,
-     257,    91,    92,    93,    94,    95,    92,    93,    94,    95,
-      69,    98,    69,    69,    69,    97,    98,    76,    63,    76,
-      76,    76,    98,   130,   100,   355,    99,    97,   135,   154,
-      75,    97,    97,   398,   399,   400,   401,   486,   488,   404,
-      55,    33,    57,    97,    59,    28,    61,   154,    98,   174,
-     100,   158,    28,   160,    97,   385,   103,    97,   507,    97,
-     255,   256,   257,    97,    97,   515,    97,   174,   120,   121,
-     122,    97,   102,   523,   103,   102,   183,    98,   123,   124,
-     530,   126,   127,   128,   129,    26,   131,    97,    28,   134,
-      97,    26,   100,    98,    16,    97,    97,    97,    87,   103,
-      86,    97,    10,   443,    28,    71,    97,   152,    34,   271,
-      97,    71,    97,    85,   159,    86,    97,    86,    97,    86,
-      97,    70,   375,    28,   382,   447,   477,   305,    21,   314,
-     190,   219,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   184,
-     255,   256,   257,    -1,    -1,    -1,   246,   246,   255,   256,
-     257,   119,   120,   121,   122,    -1,    -1,   125,    -1,    -1,
-      -1,    -1,    -1,    -1,   132,   133,    -1,    -1,    -1,    -1,
-      -1,   271,   272,    -1,    -1,    -1,    -1,    -1,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   247,   248,   249,   250,   251,   314,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   263,   264,
-      -1,    -1,   267,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   282,    -1,   284,
-      -1,   286,    -1,   288,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,   359,
-      -1,    -1,    28,    -1,   371,   310,   311,   367,   313,    -1,
-      -1,    -1,   317,    -1,   319,    -1,    42,    43,    44,    45,
-      46,    47,   382,    49,   384,    -1,    52,    53,    54,    -1,
-      -1,    -1,    -1,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-      -1,    -1,    -1,   281,    -1,   283,    -1,   285,    -1,   287,
-     365,   366,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,   458,    -1,    -1,   304,   305,   306,   307,
-      -1,   386,    -1,    -1,    -1,    -1,    -1,   447,    -1,   449,
-     449,   458,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,   424,
-      -1,    -1,   482,   482,    -1,    -1,   486,   494,   488,    -1,
+       0,    29,     9,    21,    67,   243,   219,    14,     0,    31,
+     360,   490,   358,    23,    21,    16,    23,    19,   368,    26,
+      49,   150,    29,    52,    84,    27,    28,   240,   157,    97,
+      98,    34,   515,   512,    44,   385,    64,    97,    69,   168,
+      49,    44,   525,    69,    31,    76,    36,    37,    69,    69,
+      76,   180,    69,    49,    97,    76,    76,    64,    65,    76,
+       0,   190,    91,    92,    93,    94,    95,    67,    98,    23,
+      70,    10,    11,    75,    28,    97,   256,   257,    70,   103,
+      19,   319,    15,    99,    85,    94,    95,   103,    27,    28,
+      98,   255,   256,   257,   102,   308,    92,    93,    94,    95,
+     338,    34,    55,   449,    57,    99,    59,    33,    61,    42,
+      43,    44,    45,    46,    47,   150,    49,    97,    97,    52,
+      53,    54,   157,   130,    63,    97,   154,    97,   135,   399,
+     400,   401,   402,   168,    97,   405,    75,   120,   121,   122,
+      97,    97,   492,   356,   490,   180,   174,   154,    97,    97,
+      97,   158,    97,   160,    97,   190,    89,    90,    91,    92,
+      93,    94,    95,    97,   102,    28,   512,   174,    28,    98,
+     520,   103,   102,   386,    26,    97,   183,   415,    28,   529,
+      97,    26,    98,    16,   123,   124,   536,   126,   127,   128,
+     129,    97,   131,    97,    97,   134,    87,    86,   103,   100,
+      97,    10,    28,    71,   100,    97,    34,   445,   271,    97,
+      97,    85,    71,   152,   100,    86,    97,    86,    97,    86,
+     159,    97,    70,   376,    28,   383,   449,   305,   480,   467,
+      21,   314,   190,    -1,    -1,    -1,    -1,   255,   256,   257,
+      -1,    -1,    -1,    -1,    -1,   184,   246,    -1,   255,   256,
+     257,    -1,    -1,    -1,   246,   119,   120,   121,   122,    -1,
+      -1,   125,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,
+      -1,   271,   272,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,    -1,    -1,    -1,    -1,    -1,    -1,   314,   247,   248,
+     249,   250,   251,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   263,   264,    -1,    -1,   267,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     368,    -1,    -1,    -1,    -1,    -1,    -1,   507,    89,    90,
-      91,    92,    93,    94,    95,   515,    97,    -1,    -1,   526,
-      -1,    -1,    -1,   523,    -1,    28,    -1,    -1,    -1,   397,
-     530,    34,    -1,    -1,   402,   403,    -1,   405,   406,    42,
-      43,    44,    45,    46,    47,   490,    49,    28,    -1,    52,
-      53,    54,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    43,    44,    45,    46,    47,   512,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,    -1,    -1,   466,   467,
-     468,   469,    -1,   471,   472,   473,   474,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   505,     5,     6,
+      -1,    -1,    -1,   282,    -1,   284,    -1,   286,    -1,   288,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,
+     360,    -1,    -1,    -1,    -1,   372,    -1,    -1,   368,    -1,
+      -1,   310,   311,    -1,   313,    -1,    -1,    33,   317,    -1,
+      -1,   320,    -1,   383,    -1,   385,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
+     349,   350,   351,   352,   353,   354,   355,   281,    -1,   283,
+      -1,   285,    -1,   287,    -1,    -1,    -1,   366,   367,    -1,
+      -1,    -1,   460,    89,    90,    91,    92,    93,    94,    95,
+     304,   305,   306,   307,    -1,    -1,    -1,    -1,   387,   449,
+      -1,   451,    28,   460,    -1,    -1,    -1,    -1,    34,   451,
+      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    28,    -1,   424,   486,    -1,    -1,    34,
+     490,   498,   492,    -1,   486,    -1,    -1,    42,    43,    44,
+      45,    46,    47,    -1,    49,   369,    -1,    52,    53,    54,
+      -1,    -1,   512,    89,    90,    91,    92,    93,    94,    95,
+     520,    -1,    -1,    -1,    -1,   532,    -1,    -1,    -1,   529,
+      -1,    -1,    -1,    -1,   398,    -1,   536,    -1,    -1,   403,
+     404,    -1,   406,   407,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    -1,    -1,   494,    28,    -1,    -1,    -1,
+      -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+      42,    43,    44,    45,    46,    47,    -1,    49,   517,    -1,
+      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   469,   470,   471,   472,    -1,
+     474,   475,   476,   477,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   509,    -1,    -1,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-     518,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+     524,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
@@ -1521,7 +1551,7 @@ static const yytype_int16 yycheck[] =
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
       -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,
-      99,    -1,   101,     5,     6,     7,     8,     9,    10,    11,
+      99,   100,   101,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
@@ -1530,7 +1560,7 @@ static const yytype_int16 yycheck[] =
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    99,   100,   101,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -1540,7 +1570,7 @@ static const yytype_int16 yycheck[] =
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+      -1,    -1,    -1,    -1,    99,   100,   101,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
@@ -1583,7 +1613,7 @@ static const yytype_int16 yycheck[] =
       10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
@@ -1593,8 +1623,8 @@ static const yytype_int16 yycheck[] =
       13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,    -1,
-      -1,    -1,    55,    56,    57,    58,    59,    60,    61,    62,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,    92,
@@ -1603,61 +1633,98 @@ static const yytype_int16 yycheck[] =
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    -1,    50,    51,    -1,    -1,    -1,    55,
+      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    -1,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-      -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     7,    99,    -1,   101,    11,    12,    13,    14,
-      15,    -1,    -1,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,
+      -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,
+      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    88,
+      -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    -1,
+      99,    -1,   101,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
+      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,   101,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
-      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
-      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
-      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
-      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      -1,    -1,    -1,    48,    -1,    50,    51,    -1,    -1,    -1,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
-      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    -1,     7,    88,    -1,    -1,    11,    12,    13,    14,
-      15,    -1,    97,    18,    19,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    97,     7,     8,     9,    10,    11,    12,    13,
+      -1,    -1,    -1,     7,    99,    -1,   101,    11,    12,    13,
+      14,    15,    -1,    -1,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
+      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    97,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    -1,     7,    -1,    88,    10,    11,    12,    13,
       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
@@ -1696,55 +1763,47 @@ static const yytype_int16 yycheck[] =
       48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    -1,     7,    -1,
-      88,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,     7,    -1,    -1,    88,
-      11,    12,    13,    14,    15,    -1,    -1,    18,    19,    20,
-      21,    -1,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    -1,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    28,    -1,    -1,    -1,    -1,    88,    34,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
-      46,    47,    -1,    49,    28,    -1,    52,    53,    54,    -1,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      42,    43,    44,    45,    46,    47,    -1,    49,    28,    -1,
-      52,    53,    54,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      28,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      78,    79,    80,    81,    82,    83,    84,     7,    -1,    -1,
+      88,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
+      20,    21,    -1,    23,    24,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    28,    -1,    -1,    -1,    -1,    88,    34,
+      -1,    -1,    -1,    -1,    -1,    -1,    28,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    28,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    -1,    -1,    -1,    34,    89,    90,    91,
       92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    33,    -1,    89,
-      90,    91,    92,    93,    94,    95,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      28,    49,    -1,    -1,    52,    53,    54,    89,    90,    91,
+      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    -1,    -1,    98,    -1,   100,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    98,    -1,   100,    42,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    98,    -1,   100,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    98,    -1,   100,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    -1,    -1,   100,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    98,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
       53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
       -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
       47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,    -1,   100,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    98,    -1,
+      93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
       -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
       97,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
       -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
@@ -1757,20 +1816,17 @@ static const yytype_int16 yycheck[] =
       95,    -1,    97,    42,    43,    44,    45,    46,    47,    -1,
       49,    -1,    -1,    52,    53,    54,    42,    43,    44,    45,
       46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
-      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    97,    -1,
+      -1,    -1,    42,    43,    44,    45,    46,    47,    -1,    49,
+      79,    80,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
       -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    97,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    -1,
-      -1,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    42,    43,    44,    45,
+      -1,    -1,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1808,29 +1864,30 @@ static const yytype_uint8 yystos[] =
      163,    28,    34,    28,    34,    28,    34,    28,    34,    69,
       76,    69,    76,    69,    76,    69,    76,    69,    76,    55,
       57,    59,    61,   155,    28,    28,    79,    80,    98,   100,
-     103,   103,   102,   103,    98,   102,   102,    98,   165,    26,
-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   166,    42,    43,
-      44,    45,    46,    47,    49,    52,    53,    54,    89,    90,
-      91,    92,    93,    94,    95,    98,   125,    97,   120,    97,
-     143,   144,   146,   144,   144,    23,    44,    97,    28,   162,
-     162,    84,    97,   110,   111,   112,   113,   162,   122,    97,
-     120,   136,   137,   138,    97,    98,    26,   161,   162,   161,
-     162,   161,   162,   161,   162,    23,    28,   156,    56,    58,
-      60,    62,    71,    72,    73,    77,    78,   150,   151,   161,
-     150,   161,   161,   166,   162,   162,   162,     8,     9,   117,
-     159,   162,   100,   162,    98,   125,   162,   162,   162,   162,
+     103,   103,   102,   103,    98,   102,   102,    98,   100,   166,
+      26,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     162,   162,   162,   162,   162,   162,   162,   162,   166,    42,
+      43,    44,    45,    46,    47,    49,    52,    53,    54,    89,
+      90,    91,    92,    93,    94,    95,    98,   125,    97,   120,
+      97,   143,   144,   146,   144,   144,    23,    44,    97,    28,
+     162,   162,    84,    97,   110,   111,   112,   113,   162,   122,
+      97,   120,   136,   137,   138,    97,    98,    26,   161,   162,
+     161,   162,   161,   162,   161,   162,    23,    28,   156,    56,
+      58,    60,    62,    71,    72,    73,    77,    78,   150,   151,
+     161,   150,   161,   161,   100,   166,   162,   162,   162,     8,
+       9,   117,   159,   162,    98,   125,   162,   125,   162,   162,
      162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   166,    97,   121,   139,   140,   141,    16,
-     136,    97,    97,    97,   162,   162,   136,    97,   117,   113,
-      97,    87,   138,   136,   166,   162,    28,    28,    28,    28,
-     161,   156,   156,   156,   156,   161,   161,   156,   161,   161,
-     100,   125,    16,    85,   132,   141,    97,   120,    97,    15,
-      34,    86,   118,    97,    10,   100,   161,   161,   161,   161,
-     161,   161,   161,   161,    28,    71,   151,    97,   120,    97,
-     139,   136,    34,   162,    97,    97,   115,   117,    71,   139,
-     132,    86,   162,    97,   136,    97,    98,   161,   132,    97,
-      97,   136,   117,   136,    86,    86,    97,    97
+     162,   162,   162,   162,   162,   166,    97,   121,   139,   140,
+     141,    16,   136,    97,    97,    97,   162,   162,   136,    97,
+     117,   113,    97,    87,   138,   136,   100,   166,   162,    28,
+      28,    28,    28,   161,   156,   156,   156,   156,   161,   161,
+     156,   161,   161,   125,   100,   125,    16,    85,   132,   141,
+      97,   120,    97,    15,    34,    86,   118,    97,    10,   125,
+     161,   161,   161,   161,   161,   161,   161,   161,    28,    71,
+     151,   100,    97,   120,    97,   139,   136,    34,   162,    97,
+      97,   115,   117,   100,    71,   139,   132,    86,   162,    97,
+     136,    97,    98,   161,   132,    97,    97,   136,   117,   136,
+      86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1849,23 +1906,23 @@ static const yytype_uint8 yyr1[] =
      120,   120,   121,   121,   121,   121,   121,   121,   122,   122,
      122,   123,   123,   123,   123,   123,   123,   123,   123,   123,
      123,   123,   123,   124,   124,   124,   124,   124,   124,   124,
-     125,   125,   126,   126,   126,   126,   126,   127,   127,   127,
-     127,   128,   128,   129,   129,   129,   130,   130,   131,   131,
-     131,   131,   132,   132,   133,   133,   133,   133,   134,   134,
-     135,   136,   136,   137,   137,   138,   138,   139,   139,   140,
-     140,   141,   141,   142,   142,   142,   142,   142,   142,   142,
-     142,   142,   142,   142,   142,   143,   144,   144,   145,   145,
-     146,   146,   146,   146,   146,   146,   146,   146,   146,   146,
-     147,   147,   148,   148,   148,   149,   149,   149,   149,   150,
-     150,   150,   150,   150,   151,   152,   152,   152,   153,   153,
-     153,   153,   153,   153,   153,   153,   153,   153,   154,   154,
-     154,   154,   154,   155,   155,   155,   155,   156,   156,   157,
-     157,   157,   158,   158,   159,   159,   159,   160,   160,   161,
-     161,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     124,   125,   125,   126,   126,   126,   126,   126,   127,   127,
+     127,   127,   128,   128,   129,   129,   129,   130,   130,   131,
+     131,   131,   131,   132,   132,   133,   133,   133,   133,   134,
+     134,   135,   136,   136,   137,   137,   138,   138,   139,   139,
+     140,   140,   141,   141,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   143,   144,   144,
+     145,   145,   146,   146,   146,   146,   146,   146,   146,   146,
+     146,   146,   147,   147,   148,   148,   148,   148,   149,   149,
+     149,   149,   150,   150,   150,   150,   150,   151,   152,   152,
+     152,   153,   153,   153,   153,   153,   153,   153,   153,   153,
+     153,   154,   154,   154,   154,   154,   155,   155,   155,   155,
+     156,   156,   157,   157,   157,   158,   158,   159,   159,   159,
+     160,   160,   161,   161,   162,   162,   162,   162,   162,   162,
      162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     162,   162,   162,   163,   163,   163,   163,   163,   163,   163,
      163,   163,   163,   163,   163,   163,   163,   163,   163,   163,
-     163,   163,   163,   163,   163,   163,   163,   163,   163,   164,
-     164,   165,   165,   166,   166
+     163,   163,   164,   164,   165,   165,   166,   166
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1883,24 +1940,24 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     0,     1,     2,     1,     3,
        1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     3,     3,     3,     3,     3,     3,     3,     5,     3,
-       3,     2,     2,     0,     2,     4,     3,     5,     2,     5,
-       0,     1,     2,     2,     5,     4,     3,     5,     5,     5,
-       5,     1,     1,     3,     3,     3,     4,     6,     6,     8,
-       7,     9,     0,     2,     7,    11,    12,     9,     4,     6,
-       4,     0,     1,     1,     2,     1,     1,     0,     1,     1,
-       2,     1,     1,     1,     1,     1,     1,     2,     4,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     2,     4,     6,     4,     6,     4,     6,     4,     6,
-       2,     2,     1,     2,     5,     1,     1,     1,     5,     1,
-       1,     5,     2,     2,     2,     2,     4,     4,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     6,     6,
-       6,     6,     6,     1,     1,     1,     1,     1,     1,     3,
-       3,     3,     1,     3,     3,     3,     3,     2,     2,     1,
-       1,     1,     1,     3,     3,     3,     3,     3,     3,     3,
+       3,     2,     2,     0,     2,     4,     3,     5,     2,     4,
+       6,     0,     1,     2,     2,     5,     4,     3,     5,     5,
+       5,     5,     1,     1,     3,     3,     3,     4,     6,     6,
+       8,     7,     9,     0,     2,     7,    11,    12,     9,     4,
+       6,     4,     0,     1,     1,     2,     1,     1,     0,     1,
+       1,     2,     1,     1,     1,     1,     1,     1,     2,     3,
+       5,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     2,     2,     4,     6,     4,     6,     4,     6,
+       4,     6,     2,     2,     1,     2,     4,     6,     1,     1,
+       1,     5,     1,     1,     5,     2,     2,     2,     2,     4,
+       4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     6,     6,     6,     6,     6,     1,     1,     1,     1,
+       1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
+       2,     2,     1,     1,     1,     1,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     1,     1,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     4,
-       4,     0,     1,     1,     3
+       3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -2174,37 +2231,37 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_tVARID: /* tVARID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2178 "engines/director/lingo/lingo-gr.cpp"
+#line 2235 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2184 "engines/director/lingo/lingo-gr.cpp"
+#line 2241 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2190 "engines/director/lingo/lingo-gr.cpp"
+#line 2247 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2196 "engines/director/lingo/lingo-gr.cpp"
+#line 2253 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2202 "engines/director/lingo/lingo-gr.cpp"
+#line 2259 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 189 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2208 "engines/director/lingo/lingo-gr.cpp"
+#line 2265 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2472,7 +2529,7 @@ yyreduce:
   case 2: /* script: scriptpartlist  */
 #line 195 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2476 "engines/director/lingo/lingo-gr.cpp"
+#line 2533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
@@ -2483,7 +2540,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2487 "engines/director/lingo/lingo-gr.cpp"
+#line 2544 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
@@ -2493,37 +2550,37 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2497 "engines/director/lingo/lingo-gr.cpp"
+#line 2554 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
 #line 210 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2503 "engines/director/lingo/lingo-gr.cpp"
+#line 2560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 2566 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
 #line 247 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2515 "engines/director/lingo/lingo-gr.cpp"
+#line 2572 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
 #line 249 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2521 "engines/director/lingo/lingo-gr.cpp"
+#line 2578 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
 #line 251 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2527 "engines/director/lingo/lingo-gr.cpp"
+#line 2584 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
@@ -2534,7 +2591,7 @@ yyreduce:
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2538 "engines/director/lingo/lingo-gr.cpp"
+#line 2595 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
@@ -2544,13 +2601,13 @@ yyreduce:
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2548 "engines/director/lingo/lingo-gr.cpp"
+#line 2605 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
 #line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2554 "engines/director/lingo/lingo-gr.cpp"
+#line 2611 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
@@ -2559,446 +2616,446 @@ yyreduce:
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2563 "engines/director/lingo/lingo-gr.cpp"
+#line 2620 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
 #line 278 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2570 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
 #line 283 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2576 "engines/director/lingo/lingo-gr.cpp"
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
 #line 284 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2582 "engines/director/lingo/lingo-gr.cpp"
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
 #line 292 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2588 "engines/director/lingo/lingo-gr.cpp"
+#line 2645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
 #line 293 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2594 "engines/director/lingo/lingo-gr.cpp"
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
 #line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2600 "engines/director/lingo/lingo-gr.cpp"
+#line 2657 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
 #line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2606 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
 #line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2612 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
 #line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2618 "engines/director/lingo/lingo-gr.cpp"
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
 #line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2624 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
 #line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2630 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
 #line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2636 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
 #line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2642 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
 #line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2648 "engines/director/lingo/lingo-gr.cpp"
+#line 2705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
 #line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2654 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
 #line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2660 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
 #line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2666 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
 #line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2672 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
 #line 307 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2678 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
 #line 308 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2684 "engines/director/lingo/lingo-gr.cpp"
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
 #line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2690 "engines/director/lingo/lingo-gr.cpp"
+#line 2747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
 #line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2696 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
 #line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2702 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
 #line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2708 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
 #line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
 #line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2720 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
 #line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2726 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
 #line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2732 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
 #line 317 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2738 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
 #line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2744 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
 #line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2750 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
 #line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2756 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
 #line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2762 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
 #line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2768 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
 #line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2774 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
 #line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2780 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
 #line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2786 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
 #line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2792 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
 #line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2798 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
 #line 328 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2804 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSET  */
 #line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 2810 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
 #line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2816 "engines/director/lingo/lingo-gr.cpp"
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
 #line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2822 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
 #line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2828 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tSTARTS  */
 #line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2834 "engines/director/lingo/lingo-gr.cpp"
+#line 2891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTELL  */
 #line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 2840 "engines/director/lingo/lingo-gr.cpp"
+#line 2897 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTHE  */
 #line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2846 "engines/director/lingo/lingo-gr.cpp"
+#line 2903 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tTIME  */
 #line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2852 "engines/director/lingo/lingo-gr.cpp"
+#line 2909 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tTO  */
 #line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2858 "engines/director/lingo/lingo-gr.cpp"
+#line 2915 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWHILE  */
 #line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2864 "engines/director/lingo/lingo-gr.cpp"
+#line 2921 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWINDOW  */
 #line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2870 "engines/director/lingo/lingo-gr.cpp"
+#line 2927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWITH  */
 #line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2876 "engines/director/lingo/lingo-gr.cpp"
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWITHIN  */
 #line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2882 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* CMDID: tWORD  */
 #line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2888 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* CMDID: tWORDS  */
 #line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2894 "engines/director/lingo/lingo-gr.cpp"
+#line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tELSE  */
 #line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2900 "engines/director/lingo/lingo-gr.cpp"
+#line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tENDCLAUSE  */
 #line 348 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2906 "engines/director/lingo/lingo-gr.cpp"
+#line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tEXIT  */
 #line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2912 "engines/director/lingo/lingo-gr.cpp"
+#line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tFACTORY  */
 #line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2918 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tGLOBAL  */
 #line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2924 "engines/director/lingo/lingo-gr.cpp"
+#line 2981 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tGO  */
 #line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2930 "engines/director/lingo/lingo-gr.cpp"
+#line 2987 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tIF  */
 #line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2936 "engines/director/lingo/lingo-gr.cpp"
+#line 2993 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tINSTANCE  */
 #line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tMACRO  */
 #line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2948 "engines/director/lingo/lingo-gr.cpp"
+#line 3005 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tMETHOD  */
 #line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 3011 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tON  */
 #line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 3017 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tOPEN  */
 #line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+#line 3023 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPLAY  */
 #line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 2972 "engines/director/lingo/lingo-gr.cpp"
+#line 3029 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tPROPERTY  */
 #line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 2978 "engines/director/lingo/lingo-gr.cpp"
+#line 3035 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tPUT  */
 #line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 2984 "engines/director/lingo/lingo-gr.cpp"
+#line 3041 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
 #line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 2990 "engines/director/lingo/lingo-gr.cpp"
+#line 3047 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
 #line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 2996 "engines/director/lingo/lingo-gr.cpp"
+#line 3053 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
 #line 366 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 3002 "engines/director/lingo/lingo-gr.cpp"
+#line 3059 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: ID  */
@@ -3007,7 +3064,7 @@ yyreduce:
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 3011 "engines/director/lingo/lingo-gr.cpp"
+#line 3068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* nonemptyidlist: nonemptyidlist ',' ID  */
@@ -3015,55 +3072,55 @@ yyreduce:
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 3019 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* stmt: tENDIF '\n'  */
 #line 386 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 3025 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* proc: CMDID cmdargs '\n'  */
 #line 402 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 3031 "engines/director/lingo/lingo-gr.cpp"
+#line 3088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* proc: tPUT cmdargs '\n'  */
 #line 403 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 3037 "engines/director/lingo/lingo-gr.cpp"
+#line 3094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* proc: tGO cmdargs '\n'  */
 #line 404 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3043 "engines/director/lingo/lingo-gr.cpp"
+#line 3100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* proc: tGO frameargs '\n'  */
 #line 405 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3049 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* proc: tPLAY cmdargs '\n'  */
 #line 406 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3055 "engines/director/lingo/lingo-gr.cpp"
+#line 3112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* proc: tPLAY frameargs '\n'  */
 #line 407 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3061 "engines/director/lingo/lingo-gr.cpp"
+#line 3118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* proc: tOPEN cmdargs '\n'  */
 #line 408 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 3067 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* proc: tOPEN expr tWITH expr '\n'  */
@@ -3073,31 +3130,31 @@ yyreduce:
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 3077 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* proc: tNEXT tREPEAT '\n'  */
 #line 414 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 3083 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* proc: tEXIT tREPEAT '\n'  */
 #line 415 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 3089 "engines/director/lingo/lingo-gr.cpp"
+#line 3146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* proc: tEXIT '\n'  */
 #line 416 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 3095 "engines/director/lingo/lingo-gr.cpp"
+#line 3152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* proc: tASSERTERROR stmtoneliner  */
 #line 417 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 3101 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* cmdargs: %empty  */
@@ -3105,7 +3162,7 @@ yyreduce:
                                                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 3109 "engines/director/lingo/lingo-gr.cpp"
+#line 3166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* cmdargs: expr trailingcomma  */
@@ -3115,7 +3172,7 @@ yyreduce:
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3119 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* cmdargs: expr ',' nonemptyexprlist trailingcomma  */
@@ -3124,7 +3181,7 @@ yyreduce:
 		// This matches `cmd args, ...)
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3128 "engines/director/lingo/lingo-gr.cpp"
+#line 3185 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* cmdargs: expr expr_nounarymath trailingcomma  */
@@ -3135,7 +3192,7 @@ yyreduce:
 		args->push_back((yyvsp[-2].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3139 "engines/director/lingo/lingo-gr.cpp"
+#line 3196 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist trailingcomma  */
@@ -3145,7 +3202,7 @@ yyreduce:
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-4].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3149 "engines/director/lingo/lingo-gr.cpp"
+#line 3206 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* cmdargs: '(' ')'  */
@@ -3153,911 +3210,937 @@ yyreduce:
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3157 "engines/director/lingo/lingo-gr.cpp"
+#line 3214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* cmdargs: '(' expr ',' nonemptyexprlist ')'  */
+  case 129: /* cmdargs: '(' expr ',' ')'  */
 #line 446 "engines/director/lingo/lingo-gr.y"
-                                                  {
+                           {
+		// This matches `cmd(args,)`
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[-2].node));
+		(yyval.nodelist) = args; }
+#line 3224 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 130: /* cmdargs: '(' expr ',' nonemptyexprlist trailingcomma ')'  */
+#line 451 "engines/director/lingo/lingo-gr.y"
+                                                                {
 		// This matches `cmd(args, ...)`
-		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
-		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3166 "engines/director/lingo/lingo-gr.cpp"
+		(yyvsp[-2].nodelist)->insert_at(0, (yyvsp[-4].node));
+		(yyval.nodelist) = (yyvsp[-2].nodelist); }
+#line 3233 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* frameargs: tFRAME expr  */
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 133: /* frameargs: tFRAME expr  */
+#line 463 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3176 "engines/director/lingo/lingo-gr.cpp"
+#line 3243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* frameargs: tMOVIE expr  */
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 134: /* frameargs: tMOVIE expr  */
+#line 468 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3187 "engines/director/lingo/lingo-gr.cpp"
+#line 3254 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 469 "engines/director/lingo/lingo-gr.y"
+  case 135: /* frameargs: tFRAME expr tOF tMOVIE expr  */
+#line 474 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3198 "engines/director/lingo/lingo-gr.cpp"
+#line 3265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* frameargs: expr tOF tMOVIE expr  */
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 136: /* frameargs: expr tOF tMOVIE expr  */
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3209 "engines/director/lingo/lingo-gr.cpp"
+#line 3276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 137: /* frameargs: tFRAME expr expr_nounarymath  */
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3220 "engines/director/lingo/lingo-gr.cpp"
+#line 3287 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 138: /* asgn: tPUT expr tINTO varorchunk '\n'  */
+#line 494 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3226 "engines/director/lingo/lingo-gr.cpp"
+#line 3293 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 139: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
+#line 495 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3232 "engines/director/lingo/lingo-gr.cpp"
+#line 3299 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 140: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3238 "engines/director/lingo/lingo-gr.cpp"
+#line 3305 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* asgn: tSET varorthe to expr '\n'  */
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 141: /* asgn: tSET varorthe to expr '\n'  */
+#line 497 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3244 "engines/director/lingo/lingo-gr.cpp"
+#line 3311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* definevars: tGLOBAL idlist '\n'  */
-#line 497 "engines/director/lingo/lingo-gr.y"
+  case 144: /* definevars: tGLOBAL idlist '\n'  */
+#line 502 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3317 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* definevars: tPROPERTY idlist '\n'  */
-#line 498 "engines/director/lingo/lingo-gr.y"
+  case 145: /* definevars: tPROPERTY idlist '\n'  */
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3256 "engines/director/lingo/lingo-gr.cpp"
+#line 3323 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145: /* definevars: tINSTANCE idlist '\n'  */
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 146: /* definevars: tINSTANCE idlist '\n'  */
+#line 504 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3262 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* ifstmt: tIF expr tTHEN stmt  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 147: /* ifstmt: tIF expr tTHEN stmt  */
+#line 507 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3271 "engines/director/lingo/lingo-gr.cpp"
+#line 3338 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif endif  */
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 148: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif endif  */
+#line 511 "engines/director/lingo/lingo-gr.y"
                                                       {
 		(yyval.node) = new IfStmtNode((yyvsp[-4].node), (yyvsp[-1].nodelist)); }
-#line 3278 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 149: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
+#line 515 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3289 "engines/director/lingo/lingo-gr.cpp"
+#line 3356 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif endif  */
-#line 516 "engines/director/lingo/lingo-gr.y"
+  case 150: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif endif  */
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                                                    {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-4].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-6].node), stmtlist1, (yyvsp[-1].nodelist)); }
-#line 3298 "engines/director/lingo/lingo-gr.cpp"
+#line 3365 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
-#line 520 "engines/director/lingo/lingo-gr.y"
+  case 151: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
+#line 525 "engines/director/lingo/lingo-gr.y"
                                                                              {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3307 "engines/director/lingo/lingo-gr.cpp"
+#line 3374 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif endif  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 152: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif endif  */
+#line 529 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), (yyvsp[-4].nodelist), (yyvsp[-1].nodelist)); }
-#line 3314 "engines/director/lingo/lingo-gr.cpp"
+#line 3381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* endif: %empty  */
-#line 528 "engines/director/lingo/lingo-gr.y"
+  case 153: /* endif: %empty  */
+#line 533 "engines/director/lingo/lingo-gr.y"
                         { warning("LingoCompiler::parse: no end if"); }
-#line 3320 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 531 "engines/director/lingo/lingo-gr.y"
+  case 155: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 536 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3327 "engines/director/lingo/lingo-gr.cpp"
+#line 3394 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 533 "engines/director/lingo/lingo-gr.y"
+  case 156: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3334 "engines/director/lingo/lingo-gr.cpp"
+#line 3401 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 157: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 540 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3341 "engines/director/lingo/lingo-gr.cpp"
+#line 3408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 537 "engines/director/lingo/lingo-gr.y"
+  case 158: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
+#line 542 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3348 "engines/director/lingo/lingo-gr.cpp"
+#line 3415 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* tell: tTELL expr tTO stmtoneliner  */
-#line 541 "engines/director/lingo/lingo-gr.y"
+  case 159: /* tell: tTELL expr tTO stmtoneliner  */
+#line 546 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3424 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 545 "engines/director/lingo/lingo-gr.y"
+  case 160: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
+#line 550 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3364 "engines/director/lingo/lingo-gr.cpp"
+#line 3431 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* when: tWHEN ID tTHEN expr  */
-#line 549 "engines/director/lingo/lingo-gr.y"
+  case 161: /* when: tWHEN ID tTHEN expr  */
+#line 554 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3370 "engines/director/lingo/lingo-gr.cpp"
+#line 3437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* stmtlist: %empty  */
-#line 551 "engines/director/lingo/lingo-gr.y"
+  case 162: /* stmtlist: %empty  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3376 "engines/director/lingo/lingo-gr.cpp"
+#line 3443 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* nonemptystmtlist: stmtlistline  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 164: /* nonemptystmtlist: stmtlistline  */
+#line 561 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3387 "engines/director/lingo/lingo-gr.cpp"
+#line 3454 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
-#line 562 "engines/director/lingo/lingo-gr.y"
+  case 165: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
+#line 567 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3397 "engines/director/lingo/lingo-gr.cpp"
+#line 3464 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* stmtlistline: '\n'  */
-#line 569 "engines/director/lingo/lingo-gr.y"
+  case 166: /* stmtlistline: '\n'  */
+#line 574 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3403 "engines/director/lingo/lingo-gr.cpp"
+#line 3470 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* stmtlist_insideif: %empty  */
-#line 573 "engines/director/lingo/lingo-gr.y"
+  case 168: /* stmtlist_insideif: %empty  */
+#line 578 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.nodelist) = new NodeList; }
-#line 3409 "engines/director/lingo/lingo-gr.cpp"
+#line 3476 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
-#line 578 "engines/director/lingo/lingo-gr.y"
+  case 170: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
+#line 583 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3420 "engines/director/lingo/lingo-gr.cpp"
+#line 3487 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
-#line 584 "engines/director/lingo/lingo-gr.y"
+  case 171: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
+#line 589 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3430 "engines/director/lingo/lingo-gr.cpp"
+#line 3497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* stmtlistline_insideif: '\n'  */
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 172: /* stmtlistline_insideif: '\n'  */
+#line 596 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 3436 "engines/director/lingo/lingo-gr.cpp"
+#line 3503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* simpleexpr_nounarymath: tINT  */
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 174: /* simpleexpr_nounarymath: tINT  */
+#line 603 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3442 "engines/director/lingo/lingo-gr.cpp"
+#line 3509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174: /* simpleexpr_nounarymath: tFLOAT  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 175: /* simpleexpr_nounarymath: tFLOAT  */
+#line 604 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3448 "engines/director/lingo/lingo-gr.cpp"
+#line 3515 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 600 "engines/director/lingo/lingo-gr.y"
+  case 176: /* simpleexpr_nounarymath: tSYMBOL  */
+#line 605 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3454 "engines/director/lingo/lingo-gr.cpp"
+#line 3521 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* simpleexpr_nounarymath: tSTRING  */
-#line 601 "engines/director/lingo/lingo-gr.y"
+  case 177: /* simpleexpr_nounarymath: tSTRING  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3460 "engines/director/lingo/lingo-gr.cpp"
+#line 3527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 602 "engines/director/lingo/lingo-gr.y"
+  case 178: /* simpleexpr_nounarymath: tNOT simpleexpr  */
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3466 "engines/director/lingo/lingo-gr.cpp"
+#line 3533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* simpleexpr_nounarymath: ID '(' exprlist ')'  */
-#line 603 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); }
-#line 3472 "engines/director/lingo/lingo-gr.cpp"
+  case 179: /* simpleexpr_nounarymath: ID '(' ')'  */
+#line 608 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new FuncNode((yyvsp[-2].s), new NodeList); }
+#line 3539 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 180: /* simpleexpr_nounarymath: ID '(' nonemptyexprlist trailingcomma ')'  */
+#line 609 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new FuncNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
+#line 3545 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 181: /* simpleexpr_nounarymath: '(' expr ')'  */
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3478 "engines/director/lingo/lingo-gr.cpp"
+#line 3551 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* var: ID  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+  case 187: /* var: ID  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3484 "engines/director/lingo/lingo-gr.cpp"
+#line 3557 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* chunk: tFIELD refargs  */
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 192: /* chunk: tFIELD refargs  */
+#line 628 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.node) = new FuncNode(new Common::String("field"), (yyvsp[0].nodelist)); }
-#line 3490 "engines/director/lingo/lingo-gr.cpp"
+#line 3563 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* chunk: tCAST refargs  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 193: /* chunk: tCAST refargs  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("cast"), (yyvsp[0].nodelist)); }
-#line 3496 "engines/director/lingo/lingo-gr.cpp"
+#line 3569 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* chunk: tCHAR expr tOF simpleexpr  */
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 194: /* chunk: tCHAR expr tOF simpleexpr  */
+#line 630 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3503 "engines/director/lingo/lingo-gr.cpp"
+#line 3576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* chunk: tCHAR expr tTO expr tOF simpleexpr  */
-#line 626 "engines/director/lingo/lingo-gr.y"
+  case 195: /* chunk: tCHAR expr tTO expr tOF simpleexpr  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3510 "engines/director/lingo/lingo-gr.cpp"
+#line 3583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* chunk: tWORD expr tOF simpleexpr  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 196: /* chunk: tWORD expr tOF simpleexpr  */
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3517 "engines/director/lingo/lingo-gr.cpp"
+#line 3590 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* chunk: tWORD expr tTO expr tOF simpleexpr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 197: /* chunk: tWORD expr tTO expr tOF simpleexpr  */
+#line 636 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3524 "engines/director/lingo/lingo-gr.cpp"
+#line 3597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 196: /* chunk: tITEM expr tOF simpleexpr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 198: /* chunk: tITEM expr tOF simpleexpr  */
+#line 638 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3531 "engines/director/lingo/lingo-gr.cpp"
+#line 3604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 197: /* chunk: tITEM expr tTO expr tOF simpleexpr  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 199: /* chunk: tITEM expr tTO expr tOF simpleexpr  */
+#line 640 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3538 "engines/director/lingo/lingo-gr.cpp"
+#line 3611 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 198: /* chunk: tLINE expr tOF simpleexpr  */
-#line 636 "engines/director/lingo/lingo-gr.y"
+  case 200: /* chunk: tLINE expr tOF simpleexpr  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3545 "engines/director/lingo/lingo-gr.cpp"
+#line 3618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 199: /* chunk: tLINE expr tTO expr tOF simpleexpr  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+  case 201: /* chunk: tLINE expr tTO expr tOF simpleexpr  */
+#line 644 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3552 "engines/director/lingo/lingo-gr.cpp"
+#line 3625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 200: /* object: tSCRIPT refargs  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 202: /* object: tSCRIPT refargs  */
+#line 648 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.node) = new FuncNode(new Common::String("script"), (yyvsp[0].nodelist)); }
-#line 3558 "engines/director/lingo/lingo-gr.cpp"
+#line 3631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 201: /* object: tWINDOW refargs  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 203: /* object: tWINDOW refargs  */
+#line 649 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("window"), (yyvsp[0].nodelist)); }
-#line 3564 "engines/director/lingo/lingo-gr.cpp"
+#line 3637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 202: /* refargs: simpleexpr  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 204: /* refargs: simpleexpr  */
+#line 652 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `ref arg` and `ref(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3574 "engines/director/lingo/lingo-gr.cpp"
+#line 3647 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 203: /* refargs: '(' ')'  */
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 205: /* refargs: '(' ')'  */
+#line 657 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `ref()`
 		(yyval.nodelist) = new NodeList; }
-#line 3582 "engines/director/lingo/lingo-gr.cpp"
+#line 3655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 204: /* refargs: '(' expr ',' nonemptyexprlist ')'  */
-#line 654 "engines/director/lingo/lingo-gr.y"
-                                                        {
+  case 206: /* refargs: '(' expr ',' ')'  */
+#line 660 "engines/director/lingo/lingo-gr.y"
+                           {
+		// This matches `ref(args,)`
+		NodeList *args = new NodeList;
+		args->push_back((yyvsp[-2].node));
+		(yyval.nodelist) = args; }
+#line 3665 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 207: /* refargs: '(' expr ',' nonemptyexprlist trailingcomma ')'  */
+#line 665 "engines/director/lingo/lingo-gr.y"
+                                                                {
 		// This matches `ref(args, ...)`
-		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
-		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3591 "engines/director/lingo/lingo-gr.cpp"
+		(yyvsp[-2].nodelist)->insert_at(0, (yyvsp[-4].node));
+		(yyval.nodelist) = (yyvsp[-2].nodelist); }
+#line 3674 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 208: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 663 "engines/director/lingo/lingo-gr.y"
+  case 211: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 674 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3597 "engines/director/lingo/lingo-gr.cpp"
+#line 3680 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 668 "engines/director/lingo/lingo-gr.y"
+  case 214: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 679 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3603 "engines/director/lingo/lingo-gr.cpp"
+#line 3686 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 212: /* theobj: tSOUND simpleexpr  */
-#line 669 "engines/director/lingo/lingo-gr.y"
+  case 215: /* theobj: tSOUND simpleexpr  */
+#line 680 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3609 "engines/director/lingo/lingo-gr.cpp"
+#line 3692 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 213: /* theobj: tSPRITE simpleexpr  */
-#line 670 "engines/director/lingo/lingo-gr.y"
+  case 216: /* theobj: tSPRITE simpleexpr  */
+#line 681 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3615 "engines/director/lingo/lingo-gr.cpp"
+#line 3698 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* menu: tMENU simpleexpr  */
-#line 673 "engines/director/lingo/lingo-gr.y"
+  case 217: /* menu: tMENU simpleexpr  */
+#line 684 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3621 "engines/director/lingo/lingo-gr.cpp"
+#line 3704 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* writablethe: tTHE ID  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 218: /* writablethe: tTHE ID  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3627 "engines/director/lingo/lingo-gr.cpp"
+#line 3710 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* writablethe: tTHE ID tOF theobj  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 219: /* writablethe: tTHE ID tOF theobj  */
+#line 687 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3633 "engines/director/lingo/lingo-gr.cpp"
+#line 3716 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+  case 220: /* writablethe: tTHE tNUMBER tOF theobj  */
+#line 688 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3639 "engines/director/lingo/lingo-gr.cpp"
+#line 3722 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 680 "engines/director/lingo/lingo-gr.y"
+  case 221: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 691 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3645 "engines/director/lingo/lingo-gr.cpp"
+#line 3728 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 222: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 692 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3651 "engines/director/lingo/lingo-gr.cpp"
+#line 3734 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* thedatetime: tTHE tABBREV tDATE  */
-#line 682 "engines/director/lingo/lingo-gr.y"
+  case 223: /* thedatetime: tTHE tABBREV tDATE  */
+#line 693 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3657 "engines/director/lingo/lingo-gr.cpp"
+#line 3740 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 221: /* thedatetime: tTHE tABBREV tTIME  */
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 224: /* thedatetime: tTHE tABBREV tTIME  */
+#line 694 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3663 "engines/director/lingo/lingo-gr.cpp"
+#line 3746 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* thedatetime: tTHE tABBR tDATE  */
-#line 684 "engines/director/lingo/lingo-gr.y"
+  case 225: /* thedatetime: tTHE tABBR tDATE  */
+#line 695 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3669 "engines/director/lingo/lingo-gr.cpp"
+#line 3752 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* thedatetime: tTHE tABBR tTIME  */
-#line 685 "engines/director/lingo/lingo-gr.y"
+  case 226: /* thedatetime: tTHE tABBR tTIME  */
+#line 696 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3675 "engines/director/lingo/lingo-gr.cpp"
+#line 3758 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* thedatetime: tTHE tLONG tDATE  */
-#line 686 "engines/director/lingo/lingo-gr.y"
+  case 227: /* thedatetime: tTHE tLONG tDATE  */
+#line 697 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3681 "engines/director/lingo/lingo-gr.cpp"
+#line 3764 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* thedatetime: tTHE tLONG tTIME  */
-#line 687 "engines/director/lingo/lingo-gr.y"
+  case 228: /* thedatetime: tTHE tLONG tTIME  */
+#line 698 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3687 "engines/director/lingo/lingo-gr.cpp"
+#line 3770 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* thedatetime: tTHE tSHORT tDATE  */
-#line 688 "engines/director/lingo/lingo-gr.y"
+  case 229: /* thedatetime: tTHE tSHORT tDATE  */
+#line 699 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3693 "engines/director/lingo/lingo-gr.cpp"
+#line 3776 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* thedatetime: tTHE tSHORT tTIME  */
-#line 689 "engines/director/lingo/lingo-gr.y"
+  case 230: /* thedatetime: tTHE tSHORT tTIME  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3699 "engines/director/lingo/lingo-gr.cpp"
+#line 3782 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 693 "engines/director/lingo/lingo-gr.y"
+  case 231: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 704 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3705 "engines/director/lingo/lingo-gr.cpp"
+#line 3788 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 232: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3711 "engines/director/lingo/lingo-gr.cpp"
+#line 3794 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 695 "engines/director/lingo/lingo-gr.y"
+  case 233: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3717 "engines/director/lingo/lingo-gr.cpp"
+#line 3800 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 696 "engines/director/lingo/lingo-gr.y"
+  case 234: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 707 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3723 "engines/director/lingo/lingo-gr.cpp"
+#line 3806 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 232: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+  case 235: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 708 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3729 "engines/director/lingo/lingo-gr.cpp"
+#line 3812 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 233: /* chunktype: tCHAR  */
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 236: /* chunktype: tCHAR  */
+#line 711 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3735 "engines/director/lingo/lingo-gr.cpp"
+#line 3818 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 234: /* chunktype: tWORD  */
-#line 701 "engines/director/lingo/lingo-gr.y"
+  case 237: /* chunktype: tWORD  */
+#line 712 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3741 "engines/director/lingo/lingo-gr.cpp"
+#line 3824 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 235: /* chunktype: tITEM  */
-#line 702 "engines/director/lingo/lingo-gr.y"
+  case 238: /* chunktype: tITEM  */
+#line 713 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3747 "engines/director/lingo/lingo-gr.cpp"
+#line 3830 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 236: /* chunktype: tLINE  */
-#line 703 "engines/director/lingo/lingo-gr.y"
+  case 239: /* chunktype: tLINE  */
+#line 714 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3753 "engines/director/lingo/lingo-gr.cpp"
+#line 3836 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* list: '[' exprlist ']'  */
-#line 708 "engines/director/lingo/lingo-gr.y"
+  case 242: /* list: '[' exprlist ']'  */
+#line 719 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3759 "engines/director/lingo/lingo-gr.cpp"
+#line 3842 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 240: /* list: '[' ':' ']'  */
-#line 709 "engines/director/lingo/lingo-gr.y"
+  case 243: /* list: '[' ':' ']'  */
+#line 720 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3765 "engines/director/lingo/lingo-gr.cpp"
+#line 3848 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 241: /* list: '[' proplist ']'  */
-#line 710 "engines/director/lingo/lingo-gr.y"
+  case 244: /* list: '[' proplist ']'  */
+#line 721 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3771 "engines/director/lingo/lingo-gr.cpp"
+#line 3854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* proplist: proppair  */
-#line 713 "engines/director/lingo/lingo-gr.y"
+  case 245: /* proplist: proppair  */
+#line 724 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3780 "engines/director/lingo/lingo-gr.cpp"
+#line 3863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* proplist: proplist ',' proppair  */
-#line 717 "engines/director/lingo/lingo-gr.y"
+  case 246: /* proplist: proplist ',' proppair  */
+#line 728 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3788 "engines/director/lingo/lingo-gr.cpp"
+#line 3871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 244: /* proppair: tSYMBOL ':' expr  */
-#line 722 "engines/director/lingo/lingo-gr.y"
+  case 247: /* proppair: tSYMBOL ':' expr  */
+#line 733 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3794 "engines/director/lingo/lingo-gr.cpp"
+#line 3877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* proppair: ID ':' expr  */
-#line 723 "engines/director/lingo/lingo-gr.y"
+  case 248: /* proppair: ID ':' expr  */
+#line 734 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3800 "engines/director/lingo/lingo-gr.cpp"
+#line 3883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* proppair: tSTRING ':' expr  */
-#line 724 "engines/director/lingo/lingo-gr.y"
+  case 249: /* proppair: tSTRING ':' expr  */
+#line 735 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3806 "engines/director/lingo/lingo-gr.cpp"
+#line 3889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 247: /* unarymath: '+' simpleexpr  */
-#line 727 "engines/director/lingo/lingo-gr.y"
+  case 250: /* unarymath: '+' simpleexpr  */
+#line 738 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3812 "engines/director/lingo/lingo-gr.cpp"
+#line 3895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* unarymath: '-' simpleexpr  */
-#line 728 "engines/director/lingo/lingo-gr.y"
+  case 251: /* unarymath: '-' simpleexpr  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3818 "engines/director/lingo/lingo-gr.cpp"
+#line 3901 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 253: /* expr: expr '+' expr  */
-#line 738 "engines/director/lingo/lingo-gr.y"
+  case 256: /* expr: expr '+' expr  */
+#line 749 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3824 "engines/director/lingo/lingo-gr.cpp"
+#line 3907 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 254: /* expr: expr '-' expr  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+  case 257: /* expr: expr '-' expr  */
+#line 750 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3830 "engines/director/lingo/lingo-gr.cpp"
+#line 3913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 255: /* expr: expr '*' expr  */
-#line 740 "engines/director/lingo/lingo-gr.y"
+  case 258: /* expr: expr '*' expr  */
+#line 751 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3836 "engines/director/lingo/lingo-gr.cpp"
+#line 3919 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 256: /* expr: expr '/' expr  */
-#line 741 "engines/director/lingo/lingo-gr.y"
+  case 259: /* expr: expr '/' expr  */
+#line 752 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3842 "engines/director/lingo/lingo-gr.cpp"
+#line 3925 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* expr: expr tMOD expr  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+  case 260: /* expr: expr tMOD expr  */
+#line 753 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3848 "engines/director/lingo/lingo-gr.cpp"
+#line 3931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* expr: expr '>' expr  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 261: /* expr: expr '>' expr  */
+#line 754 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3854 "engines/director/lingo/lingo-gr.cpp"
+#line 3937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 259: /* expr: expr '<' expr  */
-#line 744 "engines/director/lingo/lingo-gr.y"
+  case 262: /* expr: expr '<' expr  */
+#line 755 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3860 "engines/director/lingo/lingo-gr.cpp"
+#line 3943 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 260: /* expr: expr tEQ expr  */
-#line 745 "engines/director/lingo/lingo-gr.y"
+  case 263: /* expr: expr tEQ expr  */
+#line 756 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3866 "engines/director/lingo/lingo-gr.cpp"
+#line 3949 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 261: /* expr: expr tNEQ expr  */
-#line 746 "engines/director/lingo/lingo-gr.y"
+  case 264: /* expr: expr tNEQ expr  */
+#line 757 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3872 "engines/director/lingo/lingo-gr.cpp"
+#line 3955 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 262: /* expr: expr tGE expr  */
-#line 747 "engines/director/lingo/lingo-gr.y"
+  case 265: /* expr: expr tGE expr  */
+#line 758 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3878 "engines/director/lingo/lingo-gr.cpp"
+#line 3961 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 263: /* expr: expr tLE expr  */
-#line 748 "engines/director/lingo/lingo-gr.y"
+  case 266: /* expr: expr tLE expr  */
+#line 759 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3884 "engines/director/lingo/lingo-gr.cpp"
+#line 3967 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 264: /* expr: expr tAND expr  */
-#line 749 "engines/director/lingo/lingo-gr.y"
+  case 267: /* expr: expr tAND expr  */
+#line 760 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3890 "engines/director/lingo/lingo-gr.cpp"
+#line 3973 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 265: /* expr: expr tOR expr  */
-#line 750 "engines/director/lingo/lingo-gr.y"
+  case 268: /* expr: expr tOR expr  */
+#line 761 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3896 "engines/director/lingo/lingo-gr.cpp"
+#line 3979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 266: /* expr: expr '&' expr  */
-#line 751 "engines/director/lingo/lingo-gr.y"
+  case 269: /* expr: expr '&' expr  */
+#line 762 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3902 "engines/director/lingo/lingo-gr.cpp"
+#line 3985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 267: /* expr: expr tCONCAT expr  */
-#line 752 "engines/director/lingo/lingo-gr.y"
+  case 270: /* expr: expr tCONCAT expr  */
+#line 763 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3908 "engines/director/lingo/lingo-gr.cpp"
+#line 3991 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 268: /* expr: expr tCONTAINS expr  */
-#line 753 "engines/director/lingo/lingo-gr.y"
+  case 271: /* expr: expr tCONTAINS expr  */
+#line 764 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3914 "engines/director/lingo/lingo-gr.cpp"
+#line 3997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 269: /* expr: expr tSTARTS expr  */
-#line 754 "engines/director/lingo/lingo-gr.y"
+  case 272: /* expr: expr tSTARTS expr  */
+#line 765 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3920 "engines/director/lingo/lingo-gr.cpp"
+#line 4003 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 272: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 763 "engines/director/lingo/lingo-gr.y"
+  case 275: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 774 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3926 "engines/director/lingo/lingo-gr.cpp"
+#line 4009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 273: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 764 "engines/director/lingo/lingo-gr.y"
+  case 276: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 775 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3932 "engines/director/lingo/lingo-gr.cpp"
+#line 4015 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 274: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 765 "engines/director/lingo/lingo-gr.y"
+  case 277: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 776 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3938 "engines/director/lingo/lingo-gr.cpp"
+#line 4021 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 275: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 766 "engines/director/lingo/lingo-gr.y"
+  case 278: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 777 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3944 "engines/director/lingo/lingo-gr.cpp"
+#line 4027 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 276: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 767 "engines/director/lingo/lingo-gr.y"
+  case 279: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 778 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3950 "engines/director/lingo/lingo-gr.cpp"
+#line 4033 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 277: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 768 "engines/director/lingo/lingo-gr.y"
+  case 280: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 779 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3956 "engines/director/lingo/lingo-gr.cpp"
+#line 4039 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 278: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 769 "engines/director/lingo/lingo-gr.y"
+  case 281: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 780 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3962 "engines/director/lingo/lingo-gr.cpp"
+#line 4045 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 279: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 770 "engines/director/lingo/lingo-gr.y"
+  case 282: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 781 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3968 "engines/director/lingo/lingo-gr.cpp"
+#line 4051 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 280: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 771 "engines/director/lingo/lingo-gr.y"
+  case 283: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 782 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3974 "engines/director/lingo/lingo-gr.cpp"
+#line 4057 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 281: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 772 "engines/director/lingo/lingo-gr.y"
+  case 284: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 783 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3980 "engines/director/lingo/lingo-gr.cpp"
+#line 4063 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 282: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 773 "engines/director/lingo/lingo-gr.y"
+  case 285: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 784 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3986 "engines/director/lingo/lingo-gr.cpp"
+#line 4069 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 283: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 774 "engines/director/lingo/lingo-gr.y"
+  case 286: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 785 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3992 "engines/director/lingo/lingo-gr.cpp"
+#line 4075 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 284: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 775 "engines/director/lingo/lingo-gr.y"
+  case 287: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 786 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3998 "engines/director/lingo/lingo-gr.cpp"
+#line 4081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 285: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 776 "engines/director/lingo/lingo-gr.y"
+  case 288: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 787 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4004 "engines/director/lingo/lingo-gr.cpp"
+#line 4087 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 286: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 777 "engines/director/lingo/lingo-gr.y"
+  case 289: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 788 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4010 "engines/director/lingo/lingo-gr.cpp"
+#line 4093 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 287: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 778 "engines/director/lingo/lingo-gr.y"
+  case 290: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 789 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4016 "engines/director/lingo/lingo-gr.cpp"
+#line 4099 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 288: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 779 "engines/director/lingo/lingo-gr.y"
+  case 291: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 790 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4022 "engines/director/lingo/lingo-gr.cpp"
+#line 4105 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 289: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 782 "engines/director/lingo/lingo-gr.y"
+  case 292: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 793 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4028 "engines/director/lingo/lingo-gr.cpp"
+#line 4111 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 290: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 783 "engines/director/lingo/lingo-gr.y"
+  case 293: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 794 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4034 "engines/director/lingo/lingo-gr.cpp"
+#line 4117 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 291: /* exprlist: %empty  */
-#line 786 "engines/director/lingo/lingo-gr.y"
+  case 294: /* exprlist: %empty  */
+#line 797 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 4040 "engines/director/lingo/lingo-gr.cpp"
+#line 4123 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 293: /* nonemptyexprlist: expr  */
-#line 790 "engines/director/lingo/lingo-gr.y"
+  case 296: /* nonemptyexprlist: expr  */
+#line 801 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 4049 "engines/director/lingo/lingo-gr.cpp"
+#line 4132 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 294: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 794 "engines/director/lingo/lingo-gr.y"
+  case 297: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 805 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 4057 "engines/director/lingo/lingo-gr.cpp"
+#line 4140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 4061 "engines/director/lingo/lingo-gr.cpp"
+#line 4144 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4256,7 +4339,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 799 "engines/director/lingo/lingo-gr.y"
+#line 810 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index e45a4de448..a94a9f3e9f 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -443,7 +443,12 @@ cmdargs: /* empty */									{
 	| '(' ')'							{
 		// This matches `cmd()`
 		$$ = new NodeList; }
-	| '(' expr ',' nonemptyexprlist[args] ')' {
+	| '(' expr ',' ')' {
+		// This matches `cmd(args,)`
+		NodeList *args = new NodeList;
+		args->push_back($expr);
+		$$ = args; }
+	| '(' expr ',' nonemptyexprlist[args] trailingcomma ')' {
 		// This matches `cmd(args, ...)`
 		$args->insert_at(0, $expr);
 		$$ = $args; }
@@ -600,7 +605,8 @@ simpleexpr_nounarymath:
 	| tSYMBOL						{ $$ = new SymbolNode($tSYMBOL); }	// D3
 	| tSTRING						{ $$ = new StringNode($tSTRING); }
 	| tNOT simpleexpr[arg]  %prec tUNARY	{ $$ = new UnaryOpNode(LC::c_not, $arg); }
-	| ID '(' exprlist[args] ')'		{ $$ = new FuncNode($ID, $args); }
+	| ID '(' ')'					{ $$ = new FuncNode($ID, new NodeList); }
+	| ID '(' nonemptyexprlist[args] trailingcomma ')'	{ $$ = new FuncNode($ID, $args); }
 	| '(' expr ')'					{ $$ = $expr; } ;
 	| var
 	| chunk
@@ -651,7 +657,12 @@ refargs: simpleexpr								{
 	| '(' ')'									{
 		// This matches `ref()`
 		$$ = new NodeList; }
-	| '(' expr ',' nonemptyexprlist[args] ')'	{
+	| '(' expr ',' ')' {
+		// This matches `ref(args,)`
+		NodeList *args = new NodeList;
+		args->push_back($expr);
+		$$ = args; }
+	| '(' expr ',' nonemptyexprlist[args] trailingcomma ')'	{
 		// This matches `ref(args, ...)`
 		$args->insert_at(0, $expr);
 		$$ = $args; }


Commit: 56718ceb8a2bfdf2fca93e1809266d623307ef78
    https://github.com/scummvm/scummvm/commit/56718ceb8a2bfdf2fca93e1809266d623307ef78
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Add trailing comma in function test

Changed paths:
    engines/director/lingo/tests/trailingcomma.lingo


diff --git a/engines/director/lingo/tests/trailingcomma.lingo b/engines/director/lingo/tests/trailingcomma.lingo
index 61a7398af7..4a263efbd9 100644
--- a/engines/director/lingo/tests/trailingcomma.lingo
+++ b/engines/director/lingo/tests/trailingcomma.lingo
@@ -6,3 +6,5 @@ global foo, bar,
 property baz,
 
 test "foo", "bar", "baz",
+
+put sqrt(4,)


Commit: 32534e2d7a930113989e39029b9d04b7102c2397
    https://github.com/scummvm/scummvm/commit/32534e2d7a930113989e39029b9d04b7102c2397
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Move tokens out of CMDID

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 75f29cf293..a5d09184e2 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -641,7 +641,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  177
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4279
+#define YYLAST   4277
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
@@ -715,7 +715,7 @@ static const yytype_int16 yyrline[] =
      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
      327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-     337,   338,   339,   340,   341,   342,   343,   346,   347,   348,
+     337,   338,   339,   340,   341,   344,   345,   346,   347,   348,
      349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
      359,   360,   361,   362,   363,   366,   367,   368,   371,   375,
      385,   386,   389,   390,   391,   392,   393,   394,   397,   398,
@@ -836,42 +836,42 @@ static const yytype_int16 yypact[] =
     -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
      742,  -484,  1809,   344,  3246,    37,    43,   839,  3246,  1809,
     3483,  -484,  -484,    -3,  -484,    74,    44,    51,   936,    52,
-      53,    55,  3762,    57,  3246,  -484,  -484,  -484,  -484,    66,
+      53,    55,  3760,    57,  3246,  -484,  -484,  -484,  -484,    66,
     1033,  -484,  -484,  3246,  1324,  -484,  -484,  -484,  -484,  -484,
-    1130,  4114,  -484,   424,   455,   528,  3695,   -31,   -26,   -21,
-     -20,   -17,    47,   137,   140,  4101,  -484,  -484,  -484,  3795,
-     -24,    68,    62,   -16,    -8,  -484,  4114,    70,    71,  1421,
+    1130,  4112,  -484,   424,   455,   528,  3693,   -31,   -26,   -21,
+     -20,   -17,    47,   137,   140,  4099,  -484,  -484,  -484,  3793,
+     -24,    68,    62,   -16,    -8,  -484,  4112,    70,    71,  1421,
     -484,  -484,   148,  1809,  1809,  1809,  1809,  2391,  2391,  2585,
     1809,  2488,  2488,  1809,  1809,  1809,  1809,  1809,  1809,  1809,
-    1809,  -484,  -484,  3880,  -484,  3867,  2756,  1809,  1809,  1809,
-    1809,  1809,    78,  -484,  -484,  3562,  3562,  3562,   -10,  3937,
+    1809,  -484,  -484,  3878,  -484,  3865,  2756,  1809,  1809,  1809,
+    1809,  1809,    78,  -484,  -484,  3562,  3562,  3562,   -10,  3935,
      150,  -484,  -484,  1809,  1809,   -60,  -484,  1809,  -484,  -484,
-    -484,  3640,  2836,  -484,    83,  -484,  -484,  -484,  3854,   155,
-    4130,  2100,  1809,  2100,  1809,  2100,  1809,  2100,  1809,  -484,
+    -484,  3640,  2836,  -484,    83,  -484,  -484,  -484,  3852,   155,
+    4128,  2100,  1809,  2100,  1809,  2100,  1809,  2100,  1809,  -484,
     -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
     -484,  -484,  -484,    46,  2197,  2294,  2100,  2100,  1518,  -484,
     1809,  1809,  -484,  1809,  3167,  -484,  -484,  1809,  -484,    84,
-    1809,   -29,   -29,   -29,   -29,  4184,  4184,  -484,     4,   -29,
+    1809,   -29,   -29,   -29,   -29,  4182,  4182,  -484,     4,   -29,
      -29,   -29,   -29,     4,    -9,    -9,  -484,  -484,    84,  1809,
     1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,
     1809,  1809,  1809,  1809,  1809,  1809,  1809,  -484,  3076,   167,
     2836,  -484,    94,  -484,    96,    97,  1809,  1809,  2836,  2294,
-    3950,  4114,  3246,  -484,  -484,  -484,   -60,  -484,  3963,  -484,
+    3948,  4112,  3246,  -484,  -484,  -484,   -60,  -484,  3961,  -484,
     -484,  -484,   109,  2836,  -484,  2836,  1615,  1809,  -484,   541,
-    -484,  3708,  -484,  3728,  -484,  3782,  -484,  -484,  2100,    46,
+    -484,  3706,  -484,  3726,  -484,  3780,  -484,  -484,  2100,    46,
       46,    46,    46,  2100,  2100,    46,  2100,  2100,  -484,  -484,
-    -484,  -484,  -484,  -484,  -484,    84,  4114,  4114,  4114,   -24,
-      68,    95,  -484,  4114,  1809,    99,  4114,  -484,   -29,   -29,
-     -29,   -29,  4184,  4184,  -484,     4,   -29,   -29,   -29,   -29,
+    -484,  -484,  -484,  -484,  -484,    84,  4112,  4112,  4112,   -24,
+      68,    95,  -484,  4112,  1809,    99,  4112,  -484,   -29,   -29,
+     -29,   -29,  4182,  4182,  -484,     4,   -29,   -29,   -29,   -29,
        4,    -9,    -9,  -484,  -484,    84,  -484,  -484,    -1,  3076,
-    -484,  2916,  -484,  -484,  -484,  -484,  4019,    67,   111,  -484,
-    3246,  -484,  -484,   103,  -484,   191,  -484,    84,  4114,  2100,
+    -484,  2916,  -484,  -484,  -484,  -484,  4017,    67,   111,  -484,
+    3246,  -484,  -484,   103,  -484,   191,  -484,    84,  4112,  2100,
     2100,  2100,  2100,  -484,  2100,  2100,  2100,  2100,  -484,   174,
      132,  -484,  -484,   104,  -484,  -484,  2996,   108,  -484,  -484,
     3076,  -484,  2836,   172,  1809,   112,   113,  -484,  3246,   114,
     -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,   141,  2100,
-    -484,  -484,  3076,  -484,  -484,   126,   129,  1809,  4032,  -484,
-    2836,   -68,  -484,  -484,  2100,   126,  -484,   119,  4045,  2836,
+    -484,  -484,  3076,  -484,  -484,   126,   129,  1809,  4030,  -484,
+    2836,   -68,  -484,  -484,  2100,   126,  -484,   119,  4043,  2836,
     -484,  -484,  3246,  -484,  -484,  -484,  2836,   131,  -484,   133,
      121,   124,  -484,  -484
 };
@@ -881,33 +881,33 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       0,    24,    31,    37,    60,    72,    36,     0,    38,    95,
+       0,    24,    31,    37,    60,    70,    36,     0,    38,    95,
      123,     0,    39,    41,     0,    52,    53,    56,    58,   123,
-      59,    62,    70,     0,    73,    71,     0,   123,   123,    95,
-      29,    57,    54,    51,    28,    30,    34,    66,    32,    33,
-      42,    43,    45,    46,    75,    76,    25,    26,    27,    47,
-      63,    35,    44,    48,    49,    50,    55,    68,    69,    64,
-      65,    40,    74,    67,    95,     0,     0,    61,     5,     0,
+      59,     0,    68,     0,    71,    69,     0,   123,   123,    95,
+      29,    57,    54,    51,    28,    30,    34,    65,    32,    33,
+      42,    43,    45,    46,    73,    74,    25,    26,    27,    47,
+      62,    35,    44,    48,    49,    50,    55,    66,    67,    63,
+      64,    40,    72,     0,    95,     0,     0,    61,     5,     0,
        2,     3,     6,     7,     8,   123,     9,   100,   102,   108,
-     109,   110,   103,   104,   105,   106,   107,     0,   121,    79,
-      78,    80,    82,    83,    84,    86,    53,    92,    59,    62,
-      93,    94,    81,    89,    90,    85,    67,    91,    88,    87,
-      61,    77,    98,     0,    96,   174,   175,   177,   176,    31,
-      37,    60,    72,    38,    52,    54,    32,    42,    45,    75,
-      68,    65,     0,     0,     0,   294,   187,     0,     0,   252,
+     109,   110,   103,   104,   105,   106,   107,     0,   121,    77,
+      76,    78,    80,    81,    82,    84,    53,    90,    59,    91,
+      93,    94,    79,    87,    88,    83,    92,    89,    86,    85,
+      61,    75,    98,     0,    96,   174,   175,   177,   176,    31,
+      37,    60,    70,    38,    52,    54,    32,    42,    45,    73,
+      66,    64,     0,     0,     0,   294,   187,     0,     0,   252,
      182,   183,   184,   185,   208,   209,   210,   186,   253,   254,
      131,   255,     0,     0,    95,     0,     0,   131,     0,     0,
-      68,   187,   190,     0,   191,     0,     0,     0,   131,     0,
+      66,   187,   190,     0,   191,     0,     0,     0,   131,     0,
        0,     0,     0,     0,    95,   101,   122,     1,     4,     0,
      131,   120,   144,    97,     0,   193,   204,   192,   202,   203,
      133,   134,   178,     0,     0,     0,     0,    25,    26,    27,
-      47,    63,    44,    55,   218,     0,   250,   251,   128,     0,
+      47,    62,    44,    55,   218,     0,   250,   251,   128,     0,
      177,   176,     0,   187,     0,   245,   296,     0,   295,     0,
      113,   114,    56,     0,     0,     0,     0,    29,    57,    51,
-       0,    34,    66,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,    65,     0,     0,     0,     0,     0,     0,     0,
      132,   124,   273,   131,   274,     0,     0,     0,     0,     0,
        0,     0,     0,   119,   112,    41,    28,    30,     0,     0,
-      55,   142,   143,     0,     0,    13,   117,    73,   115,   116,
+      55,   142,   143,     0,     0,    13,   117,    71,   115,   116,
      146,     0,   162,   145,     0,   111,    99,   205,     0,    56,
      137,     0,     0,     0,     0,     0,     0,     0,     0,   221,
      222,   223,   224,   225,   226,   227,   228,   229,   230,   236,
@@ -921,7 +921,7 @@ static const yytype_int16 yydefact[] =
        0,   161,     0,    17,    18,    11,    14,    15,     0,   159,
      166,   167,     0,   163,   164,   162,     0,     0,   194,     0,
      198,     0,   200,     0,   196,     0,   240,   241,     0,    33,
-      43,    46,    76,    48,    49,    50,    64,    65,   220,   213,
+      43,    46,    74,    48,    49,    50,    63,    64,   220,   213,
      212,   219,   292,   293,   129,   131,   249,   247,   248,     0,
        0,     0,   246,   297,   132,     0,   136,   125,   284,   285,
      282,   283,   286,   287,   279,   289,   290,   291,   281,   280,
@@ -1339,62 +1339,62 @@ static const yytype_int16 yytable[] =
       34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,   106,    64,   287,     0,     0,     0,     0,    67,   288,
-       0,     0,     0,     0,     0,     0,   470,   223,   224,   225,
-     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
-     223,   224,   225,   226,   247,   248,   471,   249,     0,     0,
-     230,   250,   251,     0,     0,     0,     0,     0,     0,     0,
-     223,   224,   225,   226,   247,   248,     0,   249,     0,     0,
-     230,   250,   251,     0,   233,   234,   235,   236,   237,   238,
-     239,     0,     0,     0,     0,     0,   271,   233,   234,   235,
-     236,   237,   238,   239,   223,   224,   225,   226,   247,   248,
-     472,   249,     0,     0,   230,   250,   251,   233,   234,   235,
-     236,   237,   238,   239,   223,   224,   225,   226,   247,   248,
+      62,   287,    64,     0,     0,     0,     0,   288,    67,     0,
+       0,     0,     0,     0,   470,   223,   224,   225,   226,   247,
+     248,     0,   249,     0,     0,   230,   250,   251,   223,   224,
+     225,   226,   247,   248,   471,   249,     0,     0,   230,   250,
+     251,     0,     0,     0,     0,     0,     0,     0,   223,   224,
+     225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
+     251,     0,   233,   234,   235,   236,   237,   238,   239,     0,
+       0,     0,     0,     0,   271,   233,   234,   235,   236,   237,
+     238,   239,   223,   224,   225,   226,   247,   248,   472,   249,
+       0,     0,   230,   250,   251,   233,   234,   235,   236,   237,
+     238,   239,   223,   224,   225,   226,   247,   248,     0,   249,
+       0,     0,   230,   250,   251,   223,   224,   225,   226,   247,
+     248,     0,   249,     0,     0,   230,   250,   251,     0,   233,
+     234,   235,   236,   237,   238,   239,     0,   272,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   233,
+     234,   235,   236,   237,   238,   239,     0,     0,     0,     0,
+       0,     0,   233,   234,   235,   236,   237,   238,   239,     0,
+       0,   308,     0,   309,   223,   224,   225,   226,   247,   248,
        0,   249,     0,     0,   230,   250,   251,   223,   224,   225,
      226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
-       0,   233,   234,   235,   236,   237,   238,   239,     0,   272,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     339,   340,   341,   342,   343,   344,     0,   345,     0,     0,
+     346,   347,   348,     0,     0,     0,     0,     0,     0,     0,
        0,   233,   234,   235,   236,   237,   238,   239,     0,     0,
+     386,     0,   309,     0,   233,   234,   235,   236,   237,   238,
+     239,     0,     0,     0,     0,   309,     0,   349,   350,   351,
+     352,   353,   354,   355,     0,     0,   356,   223,   224,   225,
+     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
+     223,   224,   225,   226,   247,   248,     0,   249,     0,     0,
+     230,   250,   251,   223,   224,   225,   226,   247,   248,     0,
+     249,     0,     0,   230,   250,   251,     0,     0,     0,     0,
        0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
-     239,     0,     0,   308,     0,   309,   223,   224,   225,   226,
-     247,   248,     0,   249,     0,     0,   230,   250,   251,   223,
-     224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
-     250,   251,   339,   340,   341,   342,   343,   344,     0,   345,
-       0,     0,   346,   347,   348,     0,     0,     0,     0,     0,
-       0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
-       0,     0,   386,     0,   309,     0,   233,   234,   235,   236,
-     237,   238,   239,     0,     0,     0,     0,   309,     0,   349,
-     350,   351,   352,   353,   354,   355,     0,     0,   356,   223,
+     239,     0,   368,     0,     0,     0,     0,   233,   234,   235,
+     236,   237,   238,   239,     0,   459,     0,     0,     0,     0,
+     233,   234,   235,   236,   237,   238,   239,     0,   462,   223,
      224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
      250,   251,   223,   224,   225,   226,   247,   248,     0,   249,
        0,     0,   230,   250,   251,   223,   224,   225,   226,   247,
      248,     0,   249,     0,     0,   230,   250,   251,     0,     0,
        0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
-     237,   238,   239,     0,   368,     0,     0,     0,     0,   233,
-     234,   235,   236,   237,   238,   239,     0,   459,     0,     0,
+     237,   238,   239,     0,   492,     0,     0,     0,     0,   233,
+     234,   235,   236,   237,   238,   239,     0,   529,     0,     0,
        0,     0,   233,   234,   235,   236,   237,   238,   239,     0,
-     462,   223,   224,   225,   226,   247,   248,     0,   249,     0,
+     536,   223,   224,   225,   226,   247,   248,     0,   249,     0,
        0,   230,   250,   251,   223,   224,   225,   226,   247,   248,
-       0,   249,     0,     0,   230,   250,   251,   223,   224,   225,
-     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
-       0,     0,     0,     0,     0,     0,     0,     0,   233,   234,
-     235,   236,   237,   238,   239,     0,   492,     0,     0,     0,
-       0,   233,   234,   235,   236,   237,   238,   239,     0,   529,
-       0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
-     239,     0,   536,   223,   224,   225,   226,   247,   248,     0,
-     249,     0,     0,   230,   250,   251,   223,   224,   225,   226,
-     247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
-       0,     0,   339,   340,   341,   342,   343,   344,     0,   345,
-     306,   307,   346,   347,   348,     0,     0,     0,     0,     0,
-     233,   234,   235,   236,   237,   238,   239,     0,     0,     0,
-       0,     0,     0,   233,   234,   235,   236,   237,   238,   239,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   349,
-     350,   351,   352,   353,   354,   355,   223,   224,   225,   226,
-       0,     0,     0,   249,     0,     0,   230,   250,   251,     0,
+       0,   249,     0,     0,   230,   250,   251,     0,     0,     0,
+     339,   340,   341,   342,   343,   344,     0,   345,   306,   307,
+     346,   347,   348,     0,     0,     0,     0,     0,   233,   234,
+     235,   236,   237,   238,   239,     0,     0,     0,     0,     0,
+       0,   233,   234,   235,   236,   237,   238,   239,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   349,   350,   351,
+     352,   353,   354,   355,   223,   224,   225,   226,     0,     0,
+       0,   249,     0,     0,   230,   250,   251,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   233,   234,   235,   236,   237,   238,   239
+       0,   233,   234,   235,   236,   237,   238,   239
 };
 
 static const yytype_int16 yycheck[] =
@@ -1771,32 +1771,40 @@ static const yytype_int16 yycheck[] =
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    28,    -1,    -1,    -1,    -1,    88,    34,
-      -1,    -1,    -1,    -1,    -1,    -1,    28,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      42,    43,    44,    45,    46,    47,    28,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,    -1,    34,    89,    90,    91,
-      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
-      28,    49,    -1,    -1,    52,    53,    54,    89,    90,    91,
-      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
+      80,    28,    82,    -1,    -1,    -1,    -1,    34,    88,    -1,
+      -1,    -1,    -1,    -1,    28,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
+      44,    45,    46,    47,    28,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    -1,    -1,    -1,    34,    89,    90,    91,    92,    93,
+      94,    95,    42,    43,    44,    45,    46,    47,    28,    49,
+      -1,    -1,    52,    53,    54,    89,    90,    91,    92,    93,
+      94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    98,    -1,   100,    42,    43,    44,    45,    46,    47,
       -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
       45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      98,    -1,   100,    -1,    89,    90,    91,    92,    93,    94,
+      95,    -1,    -1,    -1,    -1,   100,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    98,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    98,    -1,   100,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    98,    -1,   100,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    -1,    -1,    -1,   100,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    98,    42,
+      95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    97,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
       53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
       -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
@@ -1807,26 +1815,18 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
       97,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
       -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    97,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
-      -1,    -1,    42,    43,    44,    45,    46,    47,    -1,    49,
-      79,    80,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    42,    43,    44,    45,
-      -1,    -1,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+      42,    43,    44,    45,    46,    47,    -1,    49,    79,    80,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    42,    43,    44,    45,    -1,    -1,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95
+      -1,    89,    90,    91,    92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1900,7 +1900,7 @@ static const yytype_uint8 yyr1[] =
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,   116,   116,   116,   116,   117,   117,   117,
+     116,   116,   116,   116,   116,   117,   117,   117,   117,   117,
      117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
      117,   117,   117,   117,   117,   118,   118,   118,   119,   119,
      120,   120,   121,   121,   121,   121,   121,   121,   122,   122,
@@ -2860,183 +2860,183 @@ yyreduce:
 #line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62: /* CMDID: tSET  */
+  case 62: /* CMDID: tSHORT  */
 #line 329 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("set"); }
+                                { (yyval.s) = new Common::String("short"); }
 #line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63: /* CMDID: tSHORT  */
+  case 63: /* CMDID: tSOUND  */
 #line 330 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("short"); }
+                                { (yyval.s) = new Common::String("sound"); }
 #line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 64: /* CMDID: tSOUND  */
+  case 64: /* CMDID: tSPRITE  */
 #line 331 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("sound"); }
+                                { (yyval.s) = new Common::String("sprite"); }
 #line 2879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 65: /* CMDID: tSPRITE  */
+  case 65: /* CMDID: tSTARTS  */
 #line 332 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("sprite"); }
+                                { (yyval.s) = new Common::String("starts"); }
 #line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 66: /* CMDID: tSTARTS  */
+  case 66: /* CMDID: tTHE  */
 #line 333 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("starts"); }
+                                { (yyval.s) = new Common::String("the"); }
 #line 2891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 67: /* CMDID: tTELL  */
+  case 67: /* CMDID: tTIME  */
 #line 334 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("tell"); }
+                                { (yyval.s) = new Common::String("time"); }
 #line 2897 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 68: /* CMDID: tTHE  */
+  case 68: /* CMDID: tTO  */
 #line 335 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("the"); }
+                                { (yyval.s) = new Common::String("to"); }
 #line 2903 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 69: /* CMDID: tTIME  */
+  case 69: /* CMDID: tWHILE  */
 #line 336 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("time"); }
+                                { (yyval.s) = new Common::String("while"); }
 #line 2909 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 70: /* CMDID: tTO  */
+  case 70: /* CMDID: tWINDOW  */
 #line 337 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("to"); }
+                                { (yyval.s) = new Common::String("window"); }
 #line 2915 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71: /* CMDID: tWHILE  */
+  case 71: /* CMDID: tWITH  */
 #line 338 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("while"); }
+                                { (yyval.s) = new Common::String("with"); }
 #line 2921 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* CMDID: tWINDOW  */
+  case 72: /* CMDID: tWITHIN  */
 #line 339 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("window"); }
+                                { (yyval.s) = new Common::String("within"); }
 #line 2927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* CMDID: tWITH  */
+  case 73: /* CMDID: tWORD  */
 #line 340 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("with"); }
+                                { (yyval.s) = new Common::String("word"); }
 #line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74: /* CMDID: tWITHIN  */
+  case 74: /* CMDID: tWORDS  */
 #line 341 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("within"); }
+                                { (yyval.s) = new Common::String("words"); }
 #line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* CMDID: tWORD  */
-#line 342 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("word"); }
+  case 76: /* ID: tELSE  */
+#line 345 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.s) = new Common::String("else"); }
 #line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* CMDID: tWORDS  */
-#line 343 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("words"); }
+  case 77: /* ID: tENDCLAUSE  */
+#line 346 "engines/director/lingo/lingo-gr.y"
+                        { (yyval.s) = new Common::String("end"); }
 #line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* ID: tELSE  */
+  case 78: /* ID: tEXIT  */
 #line 347 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("else"); }
+                                { (yyval.s) = new Common::String("exit"); }
 #line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* ID: tENDCLAUSE  */
+  case 79: /* ID: tFACTORY  */
 #line 348 "engines/director/lingo/lingo-gr.y"
-                        { (yyval.s) = new Common::String("end"); }
+                                { (yyval.s) = new Common::String("factory"); }
 #line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* ID: tEXIT  */
+  case 80: /* ID: tGLOBAL  */
 #line 349 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("exit"); }
+                                { (yyval.s) = new Common::String("global"); }
 #line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* ID: tFACTORY  */
+  case 81: /* ID: tGO  */
 #line 350 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("factory"); }
+                                { (yyval.s) = new Common::String("go"); }
 #line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82: /* ID: tGLOBAL  */
+  case 82: /* ID: tIF  */
 #line 351 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("global"); }
+                                { (yyval.s) = new Common::String("if"); }
 #line 2981 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* ID: tGO  */
+  case 83: /* ID: tINSTANCE  */
 #line 352 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("go"); }
+                                { (yyval.s) = new Common::String("instance"); }
 #line 2987 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* ID: tIF  */
+  case 84: /* ID: tMACRO  */
 #line 353 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("if"); }
+                                { (yyval.s) = new Common::String("macro"); }
 #line 2993 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* ID: tINSTANCE  */
+  case 85: /* ID: tMETHOD  */
 #line 354 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("instance"); }
+                                { (yyval.s) = new Common::String("method"); }
 #line 2999 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* ID: tMACRO  */
+  case 86: /* ID: tON  */
 #line 355 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("macro"); }
+                                { (yyval.s) = new Common::String("on"); }
 #line 3005 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* ID: tMETHOD  */
+  case 87: /* ID: tOPEN  */
 #line 356 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("method"); }
+                                { (yyval.s) = new Common::String("open"); }
 #line 3011 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88: /* ID: tON  */
+  case 88: /* ID: tPLAY  */
 #line 357 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("on"); }
+                                { (yyval.s) = new Common::String("play"); }
 #line 3017 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* ID: tOPEN  */
+  case 89: /* ID: tPROPERTY  */
 #line 358 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("open"); }
+                                { (yyval.s) = new Common::String("property"); }
 #line 3023 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* ID: tPLAY  */
+  case 90: /* ID: tPUT  */
 #line 359 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("play"); }
+                                { (yyval.s) = new Common::String("put"); }
 #line 3029 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* ID: tPROPERTY  */
+  case 91: /* ID: tSET  */
 #line 360 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("property"); }
+                                { (yyval.s) = new Common::String("set"); }
 #line 3035 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* ID: tPUT  */
+  case 92: /* ID: tTELL  */
 #line 361 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.s) = new Common::String("put"); }
+                                { (yyval.s) = new Common::String("tell"); }
 #line 3041 "engines/director/lingo/lingo-gr.cpp"
     break;
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index a94a9f3e9f..457afca6ed 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -326,12 +326,10 @@ CMDID: tVARID
 	| tREPEAT		{ $$ = new Common::String("repeat"); }
 	| tSCRIPT		{ $$ = new Common::String("script"); }
 	| tASSERTERROR	{ $$ = new Common::String("scummvmAssertError"); }
-	| tSET			{ $$ = new Common::String("set"); }
 	| tSHORT		{ $$ = new Common::String("short"); }
 	| tSOUND		{ $$ = new Common::String("sound"); }
 	| tSPRITE		{ $$ = new Common::String("sprite"); }
 	| tSTARTS		{ $$ = new Common::String("starts"); }
-	| tTELL			{ $$ = new Common::String("tell"); }
 	| tTHE			{ $$ = new Common::String("the"); }
 	| tTIME			{ $$ = new Common::String("time"); }
 	| tTO			{ $$ = new Common::String("to"); }
@@ -359,6 +357,8 @@ ID: CMDID
 	| tPLAY			{ $$ = new Common::String("play"); }
 	| tPROPERTY		{ $$ = new Common::String("property"); }
 	| tPUT			{ $$ = new Common::String("put"); }
+	| tSET			{ $$ = new Common::String("set"); }
+	| tTELL			{ $$ = new Common::String("tell"); }
 	| tTHEN			{ $$ = new Common::String("then"); }
 	| tWHEN			{ $$ = new Common::String("when"); }
 	;


Commit: 784f8fe9d38d0de14badf29d39e52a95fe2c027e
    https://github.com/scummvm/scummvm/commit/784f8fe9d38d0de14badf29d39e52a95fe2c027e
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-22T18:16:53-04:00

Commit Message:
DIRECTOR: LINGO: Allow expression after sprite

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index a5d09184e2..521810d696 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -305,21 +305,23 @@ enum yysymbol_kind_t
   YYSYMBOL_the = 149,                      /* the  */
   YYSYMBOL_theobj = 150,                   /* theobj  */
   YYSYMBOL_menu = 151,                     /* menu  */
-  YYSYMBOL_writablethe = 152,              /* writablethe  */
-  YYSYMBOL_thedatetime = 153,              /* thedatetime  */
-  YYSYMBOL_thenumberof = 154,              /* thenumberof  */
-  YYSYMBOL_chunktype = 155,                /* chunktype  */
-  YYSYMBOL_inof = 156,                     /* inof  */
-  YYSYMBOL_list = 157,                     /* list  */
-  YYSYMBOL_proplist = 158,                 /* proplist  */
-  YYSYMBOL_proppair = 159,                 /* proppair  */
-  YYSYMBOL_unarymath = 160,                /* unarymath  */
-  YYSYMBOL_simpleexpr = 161,               /* simpleexpr  */
-  YYSYMBOL_expr = 162,                     /* expr  */
-  YYSYMBOL_expr_nounarymath = 163,         /* expr_nounarymath  */
-  YYSYMBOL_sprite = 164,                   /* sprite  */
-  YYSYMBOL_exprlist = 165,                 /* exprlist  */
-  YYSYMBOL_nonemptyexprlist = 166          /* nonemptyexprlist  */
+  YYSYMBOL_thedatetime = 152,              /* thedatetime  */
+  YYSYMBOL_thenumberof = 153,              /* thenumberof  */
+  YYSYMBOL_chunktype = 154,                /* chunktype  */
+  YYSYMBOL_inof = 155,                     /* inof  */
+  YYSYMBOL_writablethe = 156,              /* writablethe  */
+  YYSYMBOL_writabletheobj = 157,           /* writabletheobj  */
+  YYSYMBOL_list = 158,                     /* list  */
+  YYSYMBOL_proplist = 159,                 /* proplist  */
+  YYSYMBOL_proppair = 160,                 /* proppair  */
+  YYSYMBOL_unarymath = 161,                /* unarymath  */
+  YYSYMBOL_simpleexpr = 162,               /* simpleexpr  */
+  YYSYMBOL_expr = 163,                     /* expr  */
+  YYSYMBOL_expr_nounarymath = 164,         /* expr_nounarymath  */
+  YYSYMBOL_expr_noeq = 165,                /* expr_noeq  */
+  YYSYMBOL_sprite = 166,                   /* sprite  */
+  YYSYMBOL_exprlist = 167,                 /* exprlist  */
+  YYSYMBOL_nonemptyexprlist = 168          /* nonemptyexprlist  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -639,18 +641,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  177
+#define YYFINAL  176
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4277
+#define YYLAST   4448
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  63
+#define YYNNTS  65
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  297
+#define YYNRULES  321
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  544
+#define YYNSTATES  590
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   343
@@ -708,36 +710,39 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   195,   195,   197,   203,   210,   211,   212,   213,   214,
-     243,   247,   249,   251,   252,   255,   261,   268,   269,   274,
-     278,   282,   283,   284,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-     337,   338,   339,   340,   341,   344,   345,   346,   347,   348,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   366,   367,   368,   371,   375,
-     385,   386,   389,   390,   391,   392,   393,   394,   397,   398,
-     399,   402,   403,   404,   405,   406,   407,   408,   409,   414,
-     415,   416,   417,   420,   423,   428,   432,   438,   443,   446,
-     451,   457,   457,   463,   468,   474,   480,   486,   494,   495,
-     496,   497,   500,   500,   502,   503,   504,   507,   511,   515,
-     521,   525,   529,   533,   534,   536,   538,   540,   542,   546,
-     550,   554,   556,   557,   561,   567,   574,   575,   578,   579,
-     583,   589,   596,   597,   603,   604,   605,   606,   607,   608,
-     609,   610,   611,   612,   613,   614,   615,   618,   620,   621,
-     624,   625,   628,   629,   630,   632,   634,   636,   638,   640,
-     642,   644,   648,   649,   652,   657,   660,   665,   671,   672,
-     673,   674,   677,   678,   679,   680,   681,   684,   686,   687,
-     688,   691,   692,   693,   694,   695,   696,   697,   698,   699,
-     700,   704,   705,   706,   707,   708,   711,   712,   713,   714,
-     717,   717,   719,   720,   721,   724,   728,   733,   734,   735,
-     738,   739,   742,   743,   747,   748,   749,   750,   751,   752,
-     753,   754,   755,   756,   757,   758,   759,   760,   761,   762,
-     763,   764,   765,   772,   773,   774,   775,   776,   777,   778,
-     779,   780,   781,   782,   783,   784,   785,   786,   787,   788,
-     789,   790,   793,   794,   797,   798,   801,   805
+       0,   196,   196,   198,   204,   211,   212,   213,   214,   215,
+     244,   248,   250,   252,   253,   256,   262,   269,   270,   275,
+     279,   283,   284,   285,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
+     338,   339,   340,   341,   342,   345,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   367,   368,   369,   372,   376,
+     386,   387,   390,   391,   392,   393,   394,   395,   398,   399,
+     400,   403,   404,   405,   406,   407,   408,   409,   410,   415,
+     416,   417,   418,   421,   424,   429,   433,   439,   444,   447,
+     452,   458,   458,   464,   469,   475,   481,   487,   495,   496,
+     497,   498,   501,   501,   503,   504,   505,   508,   512,   516,
+     522,   526,   530,   534,   535,   537,   539,   541,   543,   547,
+     551,   555,   557,   558,   562,   568,   575,   576,   579,   580,
+     584,   590,   597,   598,   604,   605,   606,   607,   608,   609,
+     610,   611,   612,   613,   614,   615,   616,   619,   621,   622,
+     625,   626,   629,   630,   631,   633,   635,   637,   639,   641,
+     643,   645,   649,   650,   653,   658,   661,   666,   672,   673,
+     674,   675,   676,   677,   680,   681,   682,   683,   684,   687,
+     689,   690,   691,   692,   693,   694,   695,   696,   697,   698,
+     702,   703,   704,   705,   706,   709,   710,   711,   712,   715,
+     715,   717,   718,   721,   722,   723,   724,   725,   728,   729,
+     730,   733,   737,   742,   743,   744,   747,   748,   751,   752,
+     756,   757,   758,   759,   760,   761,   762,   763,   764,   765,
+     766,   767,   768,   769,   770,   771,   772,   773,   774,   781,
+     782,   783,   784,   785,   786,   787,   788,   789,   790,   791,
+     792,   793,   794,   795,   796,   797,   798,   799,   802,   803,
+     804,   805,   806,   807,   808,   809,   810,   811,   812,   813,
+     814,   815,   816,   817,   818,   819,   822,   823,   826,   827,
+     830,   834
 };
 #endif
 
@@ -778,9 +783,10 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "stmtlist_insideif", "nonemptystmtlist_insideif",
   "stmtlistline_insideif", "simpleexpr_nounarymath", "var", "varorchunk",
   "varorthe", "chunk", "object", "refargs", "the", "theobj", "menu",
-  "writablethe", "thedatetime", "thenumberof", "chunktype", "inof", "list",
-  "proplist", "proppair", "unarymath", "simpleexpr", "expr",
-  "expr_nounarymath", "sprite", "exprlist", "nonemptyexprlist", YY_NULLPTR
+  "thedatetime", "thenumberof", "chunktype", "inof", "writablethe",
+  "writabletheobj", "list", "proplist", "proppair", "unarymath",
+  "simpleexpr", "expr", "expr_nounarymath", "expr_noeq", "sprite",
+  "exprlist", "nonemptyexprlist", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -805,7 +811,7 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-484)
+#define YYPACT_NINF (-505)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -819,61 +825,65 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2676,  -484,  -484,  -484,  -484,  -484,  -484,   -22,  -484,  3246,
-    1712,  1809,  -484,  -484,  3246,  -484,    13,  -484,  -484,  1906,
-      10,  3325,  -484,  3246,  -484,  -484,  3246,  1906,  1712,  3246,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
-    -484,  -484,  -484,  1809,  3246,  3246,   -43,  3640,  -484,    60,
-    2676,  -484,  -484,  -484,  -484,  1906,  -484,  -484,  -484,  -484,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,    20,  -484,  -484,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
-    -484,  -484,  -484,    21,   -30,  -484,  -484,  -484,  -484,  2003,
-    2003,  2003,  2003,  1809,  1809,  2100,  1809,  1809,  1809,  1809,
-    3404,  1809,  2100,  2100,  1227,   643,     6,    28,    30,  -484,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
-     742,  -484,  1809,   344,  3246,    37,    43,   839,  3246,  1809,
-    3483,  -484,  -484,    -3,  -484,    74,    44,    51,   936,    52,
-      53,    55,  3760,    57,  3246,  -484,  -484,  -484,  -484,    66,
-    1033,  -484,  -484,  3246,  1324,  -484,  -484,  -484,  -484,  -484,
-    1130,  4112,  -484,   424,   455,   528,  3693,   -31,   -26,   -21,
-     -20,   -17,    47,   137,   140,  4099,  -484,  -484,  -484,  3793,
-     -24,    68,    62,   -16,    -8,  -484,  4112,    70,    71,  1421,
-    -484,  -484,   148,  1809,  1809,  1809,  1809,  2391,  2391,  2585,
-    1809,  2488,  2488,  1809,  1809,  1809,  1809,  1809,  1809,  1809,
-    1809,  -484,  -484,  3878,  -484,  3865,  2756,  1809,  1809,  1809,
-    1809,  1809,    78,  -484,  -484,  3562,  3562,  3562,   -10,  3935,
-     150,  -484,  -484,  1809,  1809,   -60,  -484,  1809,  -484,  -484,
-    -484,  3640,  2836,  -484,    83,  -484,  -484,  -484,  3852,   155,
-    4128,  2100,  1809,  2100,  1809,  2100,  1809,  2100,  1809,  -484,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,
-    -484,  -484,  -484,    46,  2197,  2294,  2100,  2100,  1518,  -484,
-    1809,  1809,  -484,  1809,  3167,  -484,  -484,  1809,  -484,    84,
-    1809,   -29,   -29,   -29,   -29,  4182,  4182,  -484,     4,   -29,
-     -29,   -29,   -29,     4,    -9,    -9,  -484,  -484,    84,  1809,
-    1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,  1809,
-    1809,  1809,  1809,  1809,  1809,  1809,  1809,  -484,  3076,   167,
-    2836,  -484,    94,  -484,    96,    97,  1809,  1809,  2836,  2294,
-    3948,  4112,  3246,  -484,  -484,  -484,   -60,  -484,  3961,  -484,
-    -484,  -484,   109,  2836,  -484,  2836,  1615,  1809,  -484,   541,
-    -484,  3706,  -484,  3726,  -484,  3780,  -484,  -484,  2100,    46,
-      46,    46,    46,  2100,  2100,    46,  2100,  2100,  -484,  -484,
-    -484,  -484,  -484,  -484,  -484,    84,  4112,  4112,  4112,   -24,
-      68,    95,  -484,  4112,  1809,    99,  4112,  -484,   -29,   -29,
-     -29,   -29,  4182,  4182,  -484,     4,   -29,   -29,   -29,   -29,
-       4,    -9,    -9,  -484,  -484,    84,  -484,  -484,    -1,  3076,
-    -484,  2916,  -484,  -484,  -484,  -484,  4017,    67,   111,  -484,
-    3246,  -484,  -484,   103,  -484,   191,  -484,    84,  4112,  2100,
-    2100,  2100,  2100,  -484,  2100,  2100,  2100,  2100,  -484,   174,
-     132,  -484,  -484,   104,  -484,  -484,  2996,   108,  -484,  -484,
-    3076,  -484,  2836,   172,  1809,   112,   113,  -484,  3246,   114,
-    -484,  -484,  -484,  -484,  -484,  -484,  -484,  -484,   141,  2100,
-    -484,  -484,  3076,  -484,  -484,   126,   129,  1809,  4030,  -484,
-    2836,   -68,  -484,  -484,  2100,   126,  -484,   119,  4043,  2836,
-    -484,  -484,  3246,  -484,  -484,  -484,  2836,   131,  -484,   133,
-     121,   124,  -484,  -484
+    2823,  -505,  -505,  -505,  -505,  -505,  -505,   -23,  -505,  3393,
+    1762,  1859,  -505,  -505,  3393,  -505,    -7,  -505,  -505,  1956,
+      92,  3472,  -505,  3393,  -505,  -505,  3393,  1956,  1762,  3393,
+    -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,
+    -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,
+    -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,
+    -505,  -505,  -505,  1859,  3393,  3393,   -67,  3708,  -505,    32,
+    2823,  -505,  -505,  -505,  -505,  1956,  -505,  -505,  -505,  -505,
+    -505,  -505,  -505,  -505,  -505,  -505,  -505,   -47,  -505,  -505,
+    -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,
+    -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,
+    -505,  -505,  -505,   -44,   -43,  -505,  -505,  -505,  -505,  2053,
+    2053,  2053,  2053,  1859,  1859,  2150,  1859,  1859,  1859,  1859,
+    3551,  1859,  2150,  2150,  1277,   693,    26,   -21,   -14,  -505,
+    -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,   792,
+    -505,  1859,  3935,  3393,    44,    51,   889,  3393,  1859,  3393,
+    -505,  -505,    -6,  -505,    40,    53,    65,   986,    70,    72,
+      78,  3902,    79,  3393,  -505,  -505,  -505,  -505,    81,  1083,
+    -505,  -505,  3393,  1374,  -505,  -505,  -505,  -505,  -505,  1180,
+    4245,  -505,   509,   531,   600,  3761,   -24,   -22,    27,    45,
+      47,   111,   116,   135,  4216,  -505,  -505,  -505,   436,    -5,
+      80,    71,    -2,     4,  -505,  4245,    77,    88,  1471,  -505,
+    -505,   165,  1859,  1859,  1859,  1859,  2538,  2538,  2732,  1859,
+    2635,  2635,  1859,  1859,  1859,  1859,  1859,  1859,  1859,  1859,
+    -505,  -505,  4017,  -505,  3989,  2903,  1859,  1859,  1859,  1859,
+    1859,   102,  -505,  -505,  3630,  3630,  3630,     2,  4048,   172,
+    -505,  -505,  1859,  1859,   -57,  -505,  1859,  -505,  -505,  -505,
+    3708,  2983,  -505,   104,  -505,  -505,  -505,  3958,   177,  4270,
+    2150,  1859,  2150,  1859,  2150,  1859,  2150,  1859,  -505,  -505,
+    -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,
+    -505,  -505,    13,  2247,  2344,  2150,  2150,  1568,  -505,  1859,
+    1859,  -505,  1859,  3314,  -505,  -505,  1859,  -505,   107,  1859,
+     -33,   -33,   -33,   -33,  4324,  4324,  -505,   -29,   -33,   -33,
+     -33,   -33,   -29,   -26,   -26,  -505,  -505,   107,  1859,  1859,
+    1859,  1859,  1859,  1859,  1859,  1859,  1859,  1859,  1859,  1859,
+    1859,  1859,  1859,  1859,  1859,  1859,  -505,  3223,   190,  2983,
+    -505,   110,  -505,   112,   117,  1859,  1859,  2983,  2441,  4074,
+    4245,  3393,  -505,  -505,  -505,   -57,  -505,  4104,  -505,  -505,
+    -505,   121,  2983,  -505,  2983,  1665,  1859,  -505,  3774,  -505,
+    3794,  -505,  3848,  -505,  3868,  -505,  -505,  2150,    13,    13,
+      13,    13,  2150,  2150,    13,  2150,  2150,  -505,  -505,  -505,
+    -505,  -505,  -505,  -505,   107,  4245,  4245,  4245,    -5,    80,
+     113,  -505,  4245,  1859,   115,  4245,  -505,   -33,   -33,   -33,
+     -33,  4324,  4324,  -505,   -29,   -33,   -33,   -33,   -33,   -29,
+     -26,   -26,  -505,  -505,   107,  -505,  -505,     1,  3223,  -505,
+    3063,  -505,  -505,  -505,  -505,  4130,    66,   127,  1859,  1859,
+    1859,  1859,  -505,  -505,  -505,  3393,  -505,  -505,   120,  -505,
+     208,  -505,   107,  4245,  2150,  2150,  2150,  2150,  -505,  2150,
+    2150,  2150,  2150,  -505,   192,   150,  -505,  -505,   122,  -505,
+    -505,  3143,   126,  -505,  -505,  3223,  -505,  2983,   191,  1859,
+     130,  -505,  4299,  -505,  3881,  4299,  4299,   131,  -505,  3393,
+     124,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,   158,
+    2150,  -505,  -505,  3223,  -505,  -505,   145,   146,  1859,  4160,
+    -505,  1859,  1859,  1859,  1859,  1859,  1859,  1859,  1859,  1859,
+    1859,  1859,  1859,  1859,  1859,  1859,  1859,   160,  2983,    37,
+    -505,  -505,  2150,   145,  -505,   137,  4186,  2983,    -1,    -1,
+      -1,  4353,  4353,  -505,    38,    -1,    -1,    -1,    -1,    38,
+     -16,   -16,  -505,  -505,  1859,  -505,  -505,  3393,  -505,  -505,
+    -505,  2983,   147,  4299,  -505,   149,   143,   144,  -505,  -505
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -894,72 +904,76 @@ static const yytype_int16 yydefact[] =
       93,    94,    79,    87,    88,    83,    92,    89,    86,    85,
       61,    75,    98,     0,    96,   174,   175,   177,   176,    31,
       37,    60,    70,    38,    52,    54,    32,    42,    45,    73,
-      66,    64,     0,     0,     0,   294,   187,     0,     0,   252,
-     182,   183,   184,   185,   208,   209,   210,   186,   253,   254,
-     131,   255,     0,     0,    95,     0,     0,   131,     0,     0,
-      66,   187,   190,     0,   191,     0,     0,     0,   131,     0,
-       0,     0,     0,     0,    95,   101,   122,     1,     4,     0,
-     131,   120,   144,    97,     0,   193,   204,   192,   202,   203,
-     133,   134,   178,     0,     0,     0,     0,    25,    26,    27,
-      47,    62,    44,    55,   218,     0,   250,   251,   128,     0,
-     177,   176,     0,   187,     0,   245,   296,     0,   295,     0,
-     113,   114,    56,     0,     0,     0,     0,    29,    57,    51,
-       0,    34,    65,     0,     0,     0,     0,     0,     0,     0,
-     132,   124,   273,   131,   274,     0,     0,     0,     0,     0,
-       0,     0,     0,   119,   112,    41,    28,    30,     0,     0,
-      55,   142,   143,     0,     0,    13,   117,    71,   115,   116,
-     146,     0,   162,   145,     0,   111,    99,   205,     0,    56,
-     137,     0,     0,     0,     0,     0,     0,     0,     0,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   236,
-     238,   239,   237,     0,     0,     0,     0,     0,     0,   181,
-       0,     0,   243,     0,     0,   244,   242,     0,   179,   131,
-       0,   265,   266,   263,   264,   267,   268,   260,   270,   271,
-     272,   262,   261,   269,   256,   257,   258,   259,   131,     0,
+      66,    64,     0,     0,     0,   318,   187,     0,     0,   258,
+     182,   183,   184,   185,   211,   212,   186,   259,   260,   131,
+     261,     0,     0,    95,     0,     0,   131,     0,     0,    66,
+     187,   190,     0,   191,     0,     0,     0,   131,     0,     0,
+       0,     0,     0,    95,   101,   122,     1,     4,     0,   131,
+     120,   144,    97,     0,   193,   204,   192,   202,   203,   133,
+     134,   178,     0,     0,     0,     0,    25,    26,    27,    47,
+      62,    44,    55,   208,     0,   256,   257,   128,     0,   177,
+     176,     0,   187,     0,   251,   320,     0,   319,     0,   113,
+     114,    56,     0,     0,     0,     0,    29,    57,    51,     0,
+      34,    65,     0,     0,     0,     0,     0,     0,     0,   132,
+     124,   279,   131,   280,     0,     0,     0,     0,     0,     0,
+       0,     0,   119,   112,    41,    28,    30,     0,     0,   241,
+     142,   143,     0,     0,    13,   117,    71,   115,   116,   146,
+       0,   162,   145,     0,   111,    99,   205,     0,    56,   137,
+       0,     0,     0,     0,     0,     0,     0,     0,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   235,   237,
+     238,   236,     0,     0,     0,     0,     0,     0,   181,     0,
+       0,   249,     0,     0,   250,   248,     0,   179,   131,     0,
+     271,   272,   269,   270,   273,   274,   266,   276,   277,   278,
+     268,   267,   275,   262,   263,   264,   265,   131,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   132,   126,   168,   147,
-     162,   188,     0,   189,     0,     0,     0,     0,   162,     0,
-       0,   161,     0,    17,    18,    11,    14,    15,     0,   159,
-     166,   167,     0,   163,   164,   162,     0,     0,   194,     0,
-     198,     0,   200,     0,   196,     0,   240,   241,     0,    33,
-      43,    46,    74,    48,    49,    50,    63,    64,   220,   213,
-     212,   219,   292,   293,   129,   131,   249,   247,   248,     0,
-       0,     0,   246,   297,   132,     0,   136,   125,   284,   285,
-     282,   283,   286,   287,   279,   289,   290,   291,   281,   280,
-     288,   275,   276,   277,   278,   131,   172,   173,   153,   169,
-     170,     0,    10,   138,   139,   140,     0,     0,     0,   141,
-      95,    16,   118,     0,   165,    20,   206,   131,   135,     0,
-       0,     0,     0,   211,     0,     0,     0,     0,   217,     0,
-       0,   215,   216,     0,   180,   127,     0,     0,   148,   171,
-     168,   149,   162,     0,     0,     0,     0,   160,    21,     0,
-     195,   199,   201,   197,   231,   233,   234,   232,     0,     0,
-     235,   130,   168,   151,   154,   153,     0,     0,     0,   155,
-     162,     0,    22,   207,     0,   153,   150,     0,     0,   162,
-      12,    19,     0,   214,   152,   158,   162,     0,    23,     0,
-       0,     0,   156,   157
+       0,     0,     0,     0,     0,   132,   126,   168,   147,   162,
+     188,     0,   189,     0,     0,     0,     0,   162,     0,     0,
+     161,     0,    17,    18,    11,    14,    15,     0,   159,   166,
+     167,     0,   163,   164,   162,     0,     0,   194,     0,   198,
+       0,   200,     0,   196,     0,   239,   240,     0,    33,    43,
+      46,    74,    48,    49,    50,    63,    64,   210,   215,   214,
+     209,   316,   317,   129,   131,   255,   253,   254,     0,     0,
+       0,   252,   321,   132,     0,   136,   125,   290,   291,   288,
+     289,   292,   293,   285,   295,   296,   297,   287,   286,   294,
+     281,   282,   283,   284,   131,   172,   173,   153,   169,   170,
+       0,    10,   138,   139,   140,     0,     0,     0,    48,    49,
+      63,    64,   242,   243,   141,    95,    16,   118,     0,   165,
+      20,   206,   131,   135,     0,     0,     0,     0,   213,     0,
+       0,     0,     0,   219,     0,     0,   217,   218,     0,   180,
+     127,     0,     0,   148,   171,   168,   149,   162,     0,     0,
+       0,   298,   244,   299,     0,   246,   247,     0,   160,    21,
+       0,   195,   199,   201,   197,   230,   232,   233,   231,     0,
+       0,   234,   130,   168,   151,   154,   153,     0,     0,     0,
+     155,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   162,     0,
+      22,   207,     0,   153,   150,     0,     0,   162,   308,   309,
+     307,   310,   311,   304,   313,   314,   315,   306,   305,   312,
+     300,   301,   302,   303,     0,    12,    19,     0,   216,   152,
+     158,   162,     0,   245,    23,     0,     0,     0,   156,   157
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -484,  -484,  -484,   152,  -484,  -484,  -484,  -484,  -484,  -153,
-    -484,  -484,     0,    -7,   -28,  -484,     8,  -346,   -63,  -484,
-      -2,  -238,   196,  -484,  -484,  -484,  -484,  -484,  -483,  -484,
-    -484,  -484,  -350,  -484,  -158,  -479,  -484,  -223,  -129,   -18,
-    -180,  -484,  -164,  -484,    17,  -484,   -78,  -252,   209,  -484,
-    -484,  -484,  -270,  -484,  -484,   -83,  -484,   136,    61,    42,
-     -35,  -484,  -213
+    -505,  -505,  -505,   173,  -505,  -505,  -505,  -505,  -505,  -133,
+    -505,  -505,     0,    -8,   -27,  -505,     5,  -343,   -60,  -505,
+       7,  -233,   221,  -505,  -505,  -505,  -505,  -505,  -504,  -505,
+    -505,  -505,  -355,  -505,  -131,  -484,  -505,  -196,    15,   -18,
+    -102,  -505,  -212,  -505,    76,  -505,   -51,  -231,  -505,  -505,
+    -505,  -261,  -505,  -505,  -505,  -505,   -54,  -505,   136,    61,
+      73,   -25,   -72,  -505,  -208
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,    69,    70,    71,    72,    73,   374,   375,   376,   377,
-      74,   521,   111,   136,   113,   114,   381,    77,    78,    79,
-     137,   241,   138,    80,   263,    81,    82,    83,   488,    84,
-      85,    86,   382,   383,   384,   448,   449,   450,   139,   140,
-     362,   163,   141,   142,   185,   143,   408,   409,   144,   145,
-     146,   303,   398,   147,   214,   215,   148,   149,   216,   243,
-     151,   217,   218
+       0,    69,    70,    71,    72,    73,   373,   374,   375,   376,
+      74,   549,   111,   136,   113,   114,   380,    77,    78,    79,
+     137,   240,   138,    80,   262,    81,    82,    83,   493,    84,
+      85,    86,   381,   382,   383,   447,   448,   449,   139,   140,
+     361,   162,   141,   142,   184,   143,   407,   408,   144,   145,
+     302,   397,   163,   462,   146,   213,   214,   147,   148,   215,
+     242,   502,   150,   216,   217
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -967,73 +981,78 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      75,   171,   112,   162,   176,   357,   319,   154,    76,    87,
-     452,   515,   447,   366,   161,   486,   165,   156,   458,   166,
-     249,   242,   112,   230,   372,   167,   169,   338,   242,   531,
-     532,   261,   526,   525,   367,   465,   173,   373,   289,   242,
-     249,   262,   534,   291,   155,   290,   158,   159,   293,   295,
-     292,   242,   297,   249,   175,   294,   296,   112,   174,   298,
-     177,   242,   235,   236,   237,   238,   239,    75,   183,   396,
-      75,   150,   153,   179,   397,    88,   364,   365,    76,   310,
-     157,   425,   493,   219,   487,   238,   239,   313,   168,   150,
-     314,   363,   363,   363,   315,   415,   236,   237,   238,   239,
-     427,   494,   299,   447,   300,   219,   301,   264,   302,   223,
-     224,   225,   226,   247,   248,   244,   249,   181,   182,   230,
-     250,   251,   244,   204,   172,   220,   252,   221,   213,   474,
-     475,   476,   477,   244,   253,   480,   180,   187,   188,   189,
-     254,   265,   516,   445,   447,   244,   274,   112,   266,   268,
-     269,   258,   270,   204,   273,   244,   233,   234,   235,   236,
-     237,   238,   239,   275,   312,   304,   447,   112,   305,   317,
-     530,   311,   316,   467,   320,   360,   276,   483,   369,   537,
-     385,   387,   424,   451,   190,   191,   539,   193,   194,   195,
-     196,   453,   205,   454,   455,   209,   463,   495,   313,   484,
-     497,   498,   508,   509,   511,   514,   517,   485,   379,   519,
-     520,   487,   524,   245,   523,   527,   535,   540,   542,   541,
-     259,   543,   178,   461,   170,   464,   489,   411,   510,   499,
-     164,   422,   280,     0,     0,     0,     0,   361,   361,   361,
-       0,     0,     0,     0,     0,   278,    75,     0,   161,   161,
-     161,     0,     0,     0,   359,   186,   186,   186,   186,     0,
-       0,   192,     0,     0,     0,     0,     0,     0,   206,   207,
-       0,    75,    75,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   321,   322,   323,   324,   325,   326,
+      75,   112,   170,   161,   451,    76,   153,   175,    87,   356,
+     318,   526,   457,   160,   446,   164,   248,   491,   165,   229,
+     248,   112,   554,   248,   154,   365,   155,   371,   260,   470,
+     174,   337,   176,   536,   166,   168,   395,   172,   261,   553,
+     372,   396,   362,   362,   362,   288,   366,   290,   536,   579,
+     180,   537,   289,   181,   291,   182,   112,   173,   234,   235,
+     236,   237,   238,   235,   236,   237,   238,    75,   237,   238,
+      75,   149,   152,   263,    88,    76,   219,   243,   545,   546,
+     156,   498,   178,   220,   243,   424,   492,   536,   167,   149,
+     542,   543,   544,   545,   546,   243,   292,   218,   309,   414,
+     499,   312,   313,   293,   426,   446,   314,   243,   222,   223,
+     224,   225,   246,   247,   294,   248,   296,   243,   229,   249,
+     250,   295,   203,   297,   171,   218,   251,   212,   157,   158,
+     543,   544,   545,   546,   576,   577,   179,   479,   480,   481,
+     482,   252,   527,   485,   303,   112,   273,   444,   253,   257,
+     264,   259,   446,   363,   364,   232,   233,   234,   235,   236,
+     237,   238,   265,   304,   241,   112,   298,   267,   299,   268,
+     300,   241,   301,   311,   275,   269,   272,   472,   274,   315,
+     446,   488,   241,   310,   189,   190,   316,   192,   193,   194,
+     195,   319,   204,   575,   241,   208,   186,   187,   188,   359,
+     368,   384,   582,   386,   241,   423,   450,   452,   468,   453,
+     378,   490,   244,   500,   454,   489,   312,   508,   509,   258,
+     519,   520,   522,   525,   551,   528,   585,   530,   548,   552,
+     492,   574,   555,   586,   580,   587,   360,   360,   360,   510,
+     588,   589,   466,   177,   277,    75,   160,   160,   160,   169,
+     358,   469,   494,   410,   521,   185,   185,   185,   185,   421,
+       0,   191,   279,     0,     0,     0,     0,     0,   205,   206,
+      75,    75,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   320,   321,   322,   323,   324,   325,   326,
      327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-     337,     0,     0,     0,     0,     0,     0,   421,   325,   326,
-     327,   329,   330,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   370,   371,     0,     0,   378,     0,
+       0,     0,     0,     0,     0,   420,     0,   324,   325,   326,
+     328,   329,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   369,   370,     0,     0,   377,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   389,     0,   391,     0,   393,     0,   395,
-       0,     0,     0,     0,     0,     0,     0,     0,    75,     0,
-      75,     0,     0,     0,     0,   460,     0,     0,    75,     0,
-       0,   416,   417,     0,   418,     0,     0,   246,   423,     0,
-       0,   426,     0,    75,     0,    75,   223,   224,   225,   226,
-     247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
+       0,     0,   388,     0,   390,     0,   392,     0,   394,     0,
+       0,     0,     0,     0,     0,     0,     0,    75,     0,    75,
+       0,     0,     0,   465,     0,     0,     0,    75,     0,     0,
+     415,   416,     0,   417,     0,     0,     0,   422,     0,     0,
+     425,     0,    75,     0,    75,     0,   503,   503,   503,   503,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   427,
      428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,   442,   443,   444,   388,     0,   390,
-       0,   392,     0,   394,     0,     0,     0,   456,   457,     0,
-       0,     0,   496,   233,   234,   235,   236,   237,   238,   239,
-     410,   410,   412,   413,     0,     0,     0,     0,   468,    75,
-       0,    75,   281,   112,     0,     0,     0,     0,   282,   491,
-       0,     0,     0,     0,     0,     0,   223,   224,   225,   226,
-     247,   248,     0,   249,     0,     0,   230,   250,   251,     0,
-       0,     0,     0,   283,     0,   423,    75,     0,     0,   284,
-      75,   522,    75,     0,   513,     0,     0,   223,   224,   225,
-     226,   247,   248,     0,   249,   410,     0,   230,   250,   251,
-       0,     0,    75,   233,   234,   235,   236,   237,   238,   239,
-      75,     0,     0,     0,     0,   538,     0,     0,     0,    75,
-       0,     0,     0,     0,   473,     0,    75,     0,     0,   478,
-     479,     0,   481,   482,   233,   234,   235,   236,   237,   238,
-     239,     0,     0,     0,     0,   518,   285,     0,     0,     0,
-       0,     0,   286,     0,     0,     0,     0,     0,     0,   469,
-     223,   224,   225,   226,   247,   248,     0,   249,   528,     0,
-     230,   250,   251,   223,   224,   225,   226,   247,   248,     0,
-     249,     0,     0,   230,   250,   251,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   500,   501,   502,   503,     0,
-     504,   505,   506,   507,     0,     0,     0,   233,   234,   235,
-     236,   237,   238,   239,     0,     0,     0,     0,     0,     0,
-     233,   234,   235,   236,   237,   238,   239,     0,     0,     0,
-       0,     0,     0,     0,     0,   478,     0,     0,   115,   116,
-       1,   210,   211,    89,   119,   120,   121,   122,     6,    90,
-     533,    91,     8,    92,    93,    94,    12,    13,    95,    15,
+     438,   439,   440,   441,   442,   443,   387,     0,   389,     0,
+     391,     0,   393,     0,     0,     0,   455,   456,     0,     0,
+       0,     0,     0,     0,   504,   505,   506,     0,   507,   409,
+     409,   411,   412,     0,     0,     0,     0,   473,    75,     0,
+      75,     0,     0,     0,     0,   496,     0,   112,     0,   503,
+     503,   503,   503,   503,   503,   503,   503,   503,   503,   503,
+     503,   503,   503,   503,   503,     0,     0,     0,   222,   223,
+     224,   225,   246,   247,   422,   248,     0,     0,   229,   249,
+     250,    75,     0,     0,     0,    75,   524,    75,     0,     0,
+       0,   550,   503,     0,   463,     0,   558,   559,   560,   561,
+     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
+     572,   573,     0,    75,     0,   232,   233,   234,   235,   236,
+     237,   238,     0,   478,   307,     0,   308,   280,   483,   484,
+       0,   486,   487,   281,     0,     0,     0,     0,    75,   583,
+       0,   222,   223,   224,   225,   246,   247,    75,   248,   282,
+     529,   229,   249,   250,     0,   283,     0,     0,     0,   584,
+       0,     0,     0,   222,   223,   224,   225,   246,   247,     0,
+     248,    75,     0,   229,   249,   250,     0,     0,     0,   556,
+       0,     0,     0,     0,   501,   501,   501,   501,   232,   233,
+     234,   235,   236,   237,   238,     0,     0,     0,     0,     0,
+     511,   512,   513,   514,     0,   515,   516,   517,   518,     0,
+     232,   233,   234,   235,   236,   237,   238,     0,   284,     0,
+       0,     0,     0,     0,   285,     0,     0,     0,     0,     0,
+       0,     0,   222,   223,   224,   225,   246,   247,     0,   248,
+       0,     0,   229,   249,   250,     0,   483,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   501,   501,   501,
+     501,   501,   501,   501,   501,   501,   501,   501,   501,   501,
+     501,   501,   501,     0,     0,     0,     0,     0,   578,   232,
+     233,   234,   235,   236,   237,   238,     0,     0,   115,   116,
+       1,   209,   210,    89,   119,   120,   121,   122,     6,    90,
+     501,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
       25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,   125,    33,    34,    35,     0,    36,    37,   126,    39,
@@ -1041,55 +1060,55 @@ static const yytype_int16 yytable[] =
       50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
       59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
        0,   110,     0,     0,     0,   132,   133,     0,     0,     0,
-       0,     0,   152,     0,   135,     0,   212,   115,   116,     1,
+       0,     0,   151,     0,   135,     0,   211,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
-     222,    18,    97,    98,    99,   100,    22,   101,    24,    25,
-     102,   103,   104,   105,   223,   224,   225,   226,   227,   228,
-     125,   229,    34,    35,   230,   231,   232,   126,    39,   127,
+     221,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+     102,   103,   104,   105,   222,   223,   224,   225,   226,   227,
+     125,   228,    34,    35,   229,   230,   231,   126,    39,   127,
       41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
        0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
      131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
-     110,   233,   234,   235,   236,   237,   238,   239,     0,     0,
-     240,   152,     0,   135,   115,   116,     1,   117,   118,    89,
+     110,   232,   233,   234,   235,   236,   237,   238,     0,     0,
+     239,   151,     0,   135,   115,   116,     1,   117,   118,    89,
      119,   120,   121,   122,     6,    90,     0,    91,     8,    92,
-      93,    94,    12,   255,    95,    15,    96,    17,    18,    97,
+      93,    94,    12,   254,    95,    15,    96,    17,    18,    97,
       98,    99,   100,    22,   101,    24,    25,   102,   103,   104,
-     105,   223,   224,   225,   226,   227,   228,   125,   229,   256,
-     257,   230,   231,   232,   126,    39,   127,    41,   128,    43,
+     105,   222,   223,   224,   225,   226,   227,   125,   228,   255,
+     256,   229,   230,   231,   126,    39,   127,    41,   128,    43,
      129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
-     106,   107,   108,   109,     0,     0,     0,   110,   233,   234,
-     235,   236,   237,   238,   239,     0,     0,   240,   152,     0,
+     106,   107,   108,   109,     0,     0,     0,   110,   232,   233,
+     234,   235,   236,   237,   238,     0,     0,   239,   151,     0,
      135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
      122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
       13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
-      22,   101,   267,    25,   102,   103,   104,   105,   223,   224,
-     225,   226,   227,   228,   125,   229,    34,    35,   230,   231,
-     232,   126,    39,   127,    41,   128,    43,   129,    45,    46,
+      22,   101,   266,    25,   102,   103,   104,   105,   222,   223,
+     224,   225,   226,   227,   125,   228,    34,    35,   229,   230,
+     231,   126,    39,   127,    41,   128,    43,   129,    45,    46,
       47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
       56,   130,    58,    59,   131,    61,    62,   106,   107,   108,
-     109,     0,     0,     0,   110,   233,   234,   235,   236,   237,
-     238,   239,     0,     0,   240,   152,     0,   135,   115,   116,
+     109,     0,     0,     0,   110,   232,   233,   234,   235,   236,
+     237,   238,     0,     0,   239,   151,     0,   135,   115,   116,
        1,   117,   118,    89,   119,   120,   121,   122,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
       96,    17,    18,    97,    98,    99,   100,    22,   101,    24,
-      25,   102,   103,   104,   105,   223,   224,   225,   226,   227,
-     228,   125,   229,    34,    35,   230,   231,   232,   126,    39,
+      25,   102,   103,   104,   105,   222,   223,   224,   225,   226,
+     227,   125,   228,    34,    35,   229,   230,   231,   126,    39,
      127,    41,   128,    43,   129,    45,    46,    47,    48,    49,
       50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
       59,   131,    61,    62,   106,   107,   108,   109,     0,     0,
-       0,   110,   233,   234,   235,   236,   237,   238,   239,     0,
-       0,   240,   152,     0,   135,   115,   116,     1,   117,   118,
+       0,   110,   232,   233,   234,   235,   236,   237,   238,     0,
+       0,   239,   151,     0,   135,   115,   116,     1,   117,   118,
       89,   119,   120,   121,   122,     6,    90,     0,    91,     8,
-      92,    93,    94,    12,    13,    95,    15,    96,   279,    18,
+      92,    93,    94,    12,    13,    95,    15,    96,   278,    18,
       97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
-     104,   105,   223,   224,   225,   226,   227,   228,   125,   229,
-      34,    35,   230,   231,   232,   126,    39,   127,    41,   128,
+     104,   105,   222,   223,   224,   225,   226,   227,   125,   228,
+      34,    35,   229,   230,   231,   126,    39,   127,    41,   128,
       43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,   130,    58,    59,   131,    61,
-      62,   106,   107,   108,   109,     0,     0,     0,   110,   233,
-     234,   235,   236,   237,   238,   239,     0,     0,     0,   152,
+      62,   106,   107,   108,   109,     0,     0,     0,   110,   232,
+     233,   234,   235,   236,   237,   238,     0,     0,     0,   151,
        0,   135,   115,   116,     1,   117,   118,    89,   119,   120,
      121,   122,     6,    90,     0,    91,     8,    92,    93,    94,
       12,    13,    95,    15,    96,    17,    18,    97,    98,    99,
@@ -1099,7 +1118,7 @@ static const yytype_int16 yytable[] =
       46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
       55,    56,   130,    58,    59,   131,    61,    62,   106,   107,
      108,   109,     0,     0,     0,   110,     0,     0,     0,   132,
-     133,     0,     0,     0,     0,     0,   152,   208,   135,   115,
+     133,     0,     0,     0,     0,     0,   151,   207,   135,   115,
      116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
@@ -1109,7 +1128,7 @@ static const yytype_int16 yytable[] =
       49,    50,     0,    51,    52,    53,    54,    55,    56,   130,
       58,    59,   131,    61,    62,   106,   107,   108,   109,     0,
        0,     0,   110,     0,     0,     0,   132,   133,     0,     0,
-       0,     0,     0,   152,   277,   135,   115,   116,     1,   117,
+       0,     0,     0,   151,   276,   135,   115,   116,     1,   117,
      118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
        8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
@@ -1119,7 +1138,7 @@ static const yytype_int16 yytable[] =
       51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
       61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
        0,     0,     0,   132,   133,     0,     0,     0,     0,     0,
-     152,   318,   135,   115,   116,     1,   117,   118,    89,   119,
+     151,   317,   135,   115,   116,     1,   117,   118,    89,   119,
      120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
       94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
       99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
@@ -1128,7 +1147,7 @@ static const yytype_int16 yytable[] =
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
       54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
      107,   108,   109,     0,     0,     0,   110,     0,     0,     0,
-     132,   133,     0,     0,     0,     0,     0,   152,   414,   135,
+     132,   133,     0,     0,     0,     0,     0,   151,   413,   135,
      115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
        6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
@@ -1138,7 +1157,7 @@ static const yytype_int16 yytable[] =
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
      130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
        0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
-       0,     0,     0,     0,   152,   466,   135,   115,   116,     1,
+       0,     0,     0,     0,   151,   471,   135,   115,   116,     1,
      117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
       91,   123,    92,    93,    94,    12,    13,    95,   124,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
@@ -1157,7 +1176,7 @@ static const yytype_int16 yytable[] =
      129,    45,    46,    47,    48,    49,    50,     0,    51,    52,
       53,    54,    55,    56,   130,    58,    59,   131,    61,    62,
      106,   107,   108,   109,     0,     0,     0,   110,     0,     0,
-       0,   132,   133,     0,     0,     0,     0,     0,   152,     0,
+       0,   132,   133,     0,     0,     0,     0,     0,   151,     0,
      135,   115,   116,     1,   117,   118,    89,   119,   120,   121,
      122,     6,    90,     0,    91,     8,    92,    93,    94,    12,
       13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
@@ -1177,7 +1196,7 @@ static const yytype_int16 yytable[] =
       50,     0,    51,    52,    53,    54,    55,    56,   130,    58,
       59,    60,    61,    62,   106,   107,   108,   109,     0,     0,
        0,   110,     0,     0,     0,   132,   133,     0,     0,     0,
-       0,     0,   184,     0,   135,   115,   116,     1,   117,   118,
+       0,     0,   183,     0,   135,   115,   116,     1,   117,   118,
       89,   119,   120,   121,   122,     6,    90,     0,    91,     8,
       92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
       97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
@@ -1186,135 +1205,121 @@ static const yytype_int16 yytable[] =
       43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,   130,    58,    59,    60,    61,
       62,   106,   107,   108,   109,     0,     0,     0,   110,     0,
-       0,     0,   132,   133,     0,     0,     0,     0,     0,   152,
+       0,     0,   132,   133,     0,     0,     0,     0,     0,   151,
        0,   135,   115,   116,     1,   117,   118,    89,   119,   120,
      121,   122,     6,    90,     0,    91,     8,    92,    93,    94,
       12,    13,    95,    15,    96,    17,    18,    97,    98,    99,
      100,    22,   101,    24,    25,   102,   103,   104,   105,     0,
        0,     0,     0,    30,    31,   125,    33,    34,    35,     0,
-      36,    37,   126,   399,   127,   400,   128,   401,   129,   402,
-      46,    47,    48,    49,    50,     0,    51,    52,   403,   404,
-     405,    56,   130,    58,   406,   407,    61,    62,   106,   107,
+      36,    37,   126,   398,   127,   399,   128,   400,   129,   401,
+      46,    47,    48,    49,    50,     0,    51,    52,   402,   403,
+     404,    56,   130,    58,   405,   406,    61,    62,   106,   107,
      108,   109,     0,     0,     0,   110,     0,     0,     0,   132,
-     133,     0,     0,     0,     0,     0,   152,     0,   135,   115,
+     133,     0,     0,     0,     0,     0,   151,     0,   135,   115,
      116,     1,   117,   118,    89,   119,   120,   121,   122,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
       30,    31,   125,    33,    34,    35,     0,    36,    37,   126,
       39,   127,    41,   128,    43,   129,    45,    46,    47,    48,
-      49,    50,     0,    51,    52,   403,   404,    55,    56,   130,
-      58,   406,   407,    61,    62,   106,   107,   108,   109,     0,
+      49,    50,     0,    51,    52,   402,   403,    55,    56,   130,
+      58,   405,   406,    61,    62,   106,   107,   108,   109,     0,
        0,     0,   110,     0,     0,     0,   132,   133,     0,     0,
-       0,     0,     0,   152,     0,   135,   115,   116,     1,   117,
+       0,     0,     0,   151,     0,   135,   115,   116,     1,   117,
      118,    89,   119,   120,   121,   122,     6,    90,     0,    91,
        8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
       18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
-     103,   104,   105,     0,     0,     0,     0,     0,     0,   125,
+     103,   104,   105,     0,     0,     0,     0,    30,    31,   125,
       33,    34,    35,     0,    36,    37,   126,    39,   127,    41,
      128,    43,   129,    45,    46,    47,    48,    49,    50,     0,
-      51,    52,    53,    54,    55,    56,   130,    58,    59,   131,
+      51,    52,   458,   459,    55,    56,   130,    58,   460,   461,
       61,    62,   106,   107,   108,   109,     0,     0,     0,   110,
        0,     0,     0,   132,   133,     0,     0,     0,     0,     0,
-     152,     0,   135,   115,   116,     1,   117,   118,    89,   119,
+     151,     0,   135,   115,   116,     1,   117,   118,    89,   119,
      120,   121,   122,     6,    90,     0,    91,     8,    92,    93,
       94,    12,    13,    95,    15,    96,    17,    18,    97,    98,
       99,   100,    22,   101,    24,    25,   102,   103,   104,   105,
        0,     0,     0,     0,     0,     0,   125,    33,    34,    35,
-       0,     0,     0,   126,    39,   127,    41,   128,    43,   129,
+       0,    36,    37,   126,    39,   127,    41,   128,    43,   129,
       45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
       54,    55,    56,   130,    58,    59,   131,    61,    62,   106,
      107,   108,   109,     0,     0,     0,   110,     0,     0,     0,
-     132,   133,     0,     0,     0,     0,     0,   152,     0,   135,
+     132,   133,     0,     0,     0,     0,     0,   151,     0,   135,
      115,   116,     1,   117,   118,    89,   119,   120,   121,   122,
        6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
       95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
      101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
-       0,     0,     0,   125,     0,    34,    35,     0,     0,     0,
+       0,     0,     0,   125,    33,    34,    35,     0,     0,     0,
      126,    39,   127,    41,   128,    43,   129,    45,    46,    47,
       48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
      130,    58,    59,   131,    61,    62,   106,   107,   108,   109,
-       0,     0,     0,   110,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     1,   152,     0,   135,     2,     3,     4,
-       5,     6,     0,     0,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
-       5,     6,     0,    68,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
-       5,     6,     0,   358,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
-       5,     6,     0,   380,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
-       5,     6,     0,   490,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,    66,     0,     1,    67,     0,     0,     2,     3,     4,
-       5,     6,     0,   512,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,     0,
-      22,    23,    24,    25,     0,    27,    28,    29,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
-       0,     0,     0,     0,    67,     0,     0,     0,     0,     0,
-       0,     0,     0,   446,     1,   419,   420,    89,     2,     3,
-       4,     5,     6,    90,     0,    91,     8,    92,    93,    94,
-      12,    13,    95,    15,    96,    17,    18,    97,    98,    99,
-     100,    22,   101,    24,    25,   102,   103,   104,   105,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,     0,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,   106,   107,
-     108,   109,     0,     1,     0,   110,    89,     2,     3,     4,
-       5,     6,    90,     0,    91,     8,    92,    93,    94,    12,
-      13,    95,    15,    96,    17,    18,    97,    98,    99,   100,
-      22,   101,    24,    25,   102,   103,   104,   105,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,     0,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,   106,   107,   108,
-     109,     0,     1,     0,   110,    89,     2,     3,     4,     5,
-       6,    90,     0,    91,     8,    92,    93,    94,    12,    13,
-      95,    15,    96,    17,    18,    97,    98,    99,   100,    22,
-     101,    24,    25,   102,   103,   104,   105,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,     0,    51,    52,    53,    54,    55,    56,
-     160,    58,    59,    60,    61,    62,   106,   107,   108,   109,
-       0,     1,     0,   110,    89,     2,     3,     4,     5,     6,
+       0,     0,     0,   110,     0,     0,     0,   132,   133,     0,
+       0,     0,     0,     0,   151,     0,   135,   115,   116,     1,
+     117,   118,    89,   119,   120,   121,   122,     6,    90,     0,
+      91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
+      17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
+     102,   103,   104,   105,     0,     0,     0,     0,     0,     0,
+     125,     0,    34,    35,     0,     0,     0,   126,    39,   127,
+      41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,   130,    58,    59,
+     131,    61,    62,   106,   107,   108,   109,     0,     0,     0,
+     110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       1,   151,     0,   135,     2,     3,     4,     5,     6,     0,
+       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,    26,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+      68,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+     357,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+     379,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+     495,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,    66,     0,
+       1,    67,     0,     0,     2,     3,     4,     5,     6,     0,
+     523,     7,     8,     9,    10,    11,    12,    13,     0,    15,
+      16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
+      25,     0,    27,    28,    29,     0,     0,     0,     0,    30,
+      31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
+       0,    67,     0,     0,     0,     0,     0,     0,     0,     0,
+     445,     1,   418,   419,    89,     2,     3,     4,     5,     6,
       90,     0,    91,     8,    92,    93,    94,    12,    13,    95,
       15,    96,    17,    18,    97,    98,    99,   100,    22,   101,
       24,    25,   102,   103,   104,   105,     0,     0,     0,     0,
       30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,   197,   198,   199,
-     200,   201,     0,    51,   202,    53,    54,    55,   203,    57,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,     0,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,   106,   107,   108,   109,     0,
        1,     0,   110,    89,     2,     3,     4,     5,     6,    90,
        0,    91,     8,    92,    93,    94,    12,    13,    95,    15,
@@ -1322,150 +1327,181 @@ static const yytype_int16 yytable[] =
       25,   102,   103,   104,   105,     0,     0,     0,     0,    30,
       31,    32,    33,    34,    35,     0,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,     0,    51,    52,    53,    54,    55,   260,    57,    58,
+      50,     0,    51,    52,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,   106,   107,   108,   109,     0,     1,
-       0,   110,    89,   119,   120,     4,     5,     6,    90,     0,
+       0,   110,    89,     2,     3,     4,     5,     6,    90,     0,
       91,     8,    92,    93,    94,    12,    13,    95,    15,    96,
       17,    18,    97,    98,    99,   100,    22,   101,    24,    25,
      102,   103,   104,   105,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,    36,    37,   126,    39,   127,
-      41,   128,    43,   129,    45,    46,    47,    48,    49,    50,
-       0,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,   106,   107,   108,   109,     1,     0,     0,
-     110,     2,     3,     4,     5,     6,     0,     0,     7,     8,
-       9,    10,     0,    12,    13,     0,    15,    16,    17,    18,
-      19,    98,    21,     0,    22,     0,    24,    25,     0,    27,
-      28,    29,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,     0,    51,
+      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+       0,    51,    52,    53,    54,    55,    56,   159,    58,    59,
+      60,    61,    62,   106,   107,   108,   109,     0,     1,     0,
+     110,    89,     2,     3,     4,     5,     6,    90,     0,    91,
+       8,    92,    93,    94,    12,    13,    95,    15,    96,    17,
+      18,    97,    98,    99,   100,    22,   101,    24,    25,   102,
+     103,   104,   105,     0,     0,     0,     0,    30,    31,    32,
+      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,   196,   197,   198,   199,   200,     0,
+      51,   201,    53,    54,    55,   202,    57,    58,    59,    60,
+      61,    62,   106,   107,   108,   109,     0,     1,     0,   110,
+      89,   119,   120,     4,     5,     6,    90,     0,    91,     8,
+      92,    93,    94,    12,    13,    95,    15,    96,    17,    18,
+      97,    98,    99,   100,    22,   101,    24,    25,   102,   103,
+     104,   105,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,    36,    37,   126,    39,   127,    41,   128,
+      43,   129,    45,    46,    47,    48,    49,    50,     0,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,   287,    64,     0,     0,     0,     0,   288,    67,     0,
-       0,     0,     0,     0,   470,   223,   224,   225,   226,   247,
-     248,     0,   249,     0,     0,   230,   250,   251,   223,   224,
-     225,   226,   247,   248,   471,   249,     0,     0,   230,   250,
-     251,     0,     0,     0,     0,     0,     0,     0,   223,   224,
-     225,   226,   247,   248,     0,   249,     0,     0,   230,   250,
-     251,     0,   233,   234,   235,   236,   237,   238,   239,     0,
-       0,     0,     0,     0,   271,   233,   234,   235,   236,   237,
-     238,   239,   223,   224,   225,   226,   247,   248,   472,   249,
-       0,     0,   230,   250,   251,   233,   234,   235,   236,   237,
-     238,   239,   223,   224,   225,   226,   247,   248,     0,   249,
-       0,     0,   230,   250,   251,   223,   224,   225,   226,   247,
-     248,     0,   249,     0,     0,   230,   250,   251,     0,   233,
-     234,   235,   236,   237,   238,   239,     0,   272,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   233,
-     234,   235,   236,   237,   238,   239,     0,     0,     0,     0,
-       0,     0,   233,   234,   235,   236,   237,   238,   239,     0,
-       0,   308,     0,   309,   223,   224,   225,   226,   247,   248,
-       0,   249,     0,     0,   230,   250,   251,   223,   224,   225,
-     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
-     339,   340,   341,   342,   343,   344,     0,   345,     0,     0,
-     346,   347,   348,     0,     0,     0,     0,     0,     0,     0,
-       0,   233,   234,   235,   236,   237,   238,   239,     0,     0,
-     386,     0,   309,     0,   233,   234,   235,   236,   237,   238,
-     239,     0,     0,     0,     0,   309,     0,   349,   350,   351,
-     352,   353,   354,   355,     0,     0,   356,   223,   224,   225,
-     226,   247,   248,     0,   249,     0,     0,   230,   250,   251,
-     223,   224,   225,   226,   247,   248,     0,   249,     0,     0,
-     230,   250,   251,   223,   224,   225,   226,   247,   248,     0,
-     249,     0,     0,   230,   250,   251,     0,     0,     0,     0,
-       0,     0,     0,     0,   233,   234,   235,   236,   237,   238,
-     239,     0,   368,     0,     0,     0,     0,   233,   234,   235,
-     236,   237,   238,   239,     0,   459,     0,     0,     0,     0,
-     233,   234,   235,   236,   237,   238,   239,     0,   462,   223,
-     224,   225,   226,   247,   248,     0,   249,     0,     0,   230,
-     250,   251,   223,   224,   225,   226,   247,   248,     0,   249,
-       0,     0,   230,   250,   251,   223,   224,   225,   226,   247,
-     248,     0,   249,     0,     0,   230,   250,   251,     0,     0,
-       0,     0,     0,     0,     0,     0,   233,   234,   235,   236,
-     237,   238,   239,     0,   492,     0,     0,     0,     0,   233,
-     234,   235,   236,   237,   238,   239,     0,   529,     0,     0,
-       0,     0,   233,   234,   235,   236,   237,   238,   239,     0,
-     536,   223,   224,   225,   226,   247,   248,     0,   249,     0,
-       0,   230,   250,   251,   223,   224,   225,   226,   247,   248,
-       0,   249,     0,     0,   230,   250,   251,     0,     0,     0,
-     339,   340,   341,   342,   343,   344,     0,   345,   306,   307,
-     346,   347,   348,     0,     0,     0,     0,     0,   233,   234,
-     235,   236,   237,   238,   239,     0,     0,     0,     0,     0,
-       0,   233,   234,   235,   236,   237,   238,   239,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   349,   350,   351,
-     352,   353,   354,   355,   223,   224,   225,   226,     0,     0,
-       0,   249,     0,     0,   230,   250,   251,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      62,   106,   107,   108,   109,     1,     0,     0,   110,     2,
+       3,     4,     5,     6,     0,     0,     7,     8,     9,    10,
+       0,    12,    13,     0,    15,    16,    17,    18,    19,    98,
+      21,     0,    22,     0,    24,    25,     0,    27,    28,    29,
+       0,     0,     0,     0,    30,    31,    32,    33,    34,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,     0,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,   286,
+      64,     0,     0,     0,     0,   287,    67,     0,     0,     0,
+       0,     0,   474,   222,   223,   224,   225,   246,   247,     0,
+     248,     0,     0,   229,   249,   250,   222,   223,   224,   225,
+     246,   247,   475,   248,     0,     0,   229,   249,   250,     0,
+       0,     0,     0,     0,     0,     0,   222,   223,   224,   225,
+     246,   247,     0,   248,     0,     0,   229,   249,   250,     0,
+     232,   233,   234,   235,   236,   237,   238,     0,     0,     0,
+       0,     0,     0,   232,   233,   234,   235,   236,   237,   238,
+       0,     0,     0,     0,     0,     0,   476,     0,     0,     0,
+       0,     0,     0,   232,   233,   234,   235,   236,   237,   238,
+     222,   223,   224,   225,   246,   247,   477,   248,     0,     0,
+     229,   249,   250,     0,     0,     0,     0,     0,     0,   547,
+     222,   223,   224,   225,   246,   247,     0,   248,     0,     0,
+     229,   249,   250,   531,   532,     0,   533,   534,   535,     0,
+     536,     0,     0,   537,   538,   539,   270,   232,   233,   234,
+     235,   236,   237,   238,   222,   223,   224,   225,   246,   247,
+       0,   248,     0,     0,   229,   249,   250,   232,   233,   234,
+     235,   236,   237,   238,     0,     0,     0,     0,   245,     0,
+     540,   541,   542,   543,   544,   545,   546,   222,   223,   224,
+     225,   246,   247,     0,   248,     0,     0,   229,   249,   250,
+       0,   232,   233,   234,   235,   236,   237,   238,     0,   271,
+     222,   223,   224,   225,   246,   247,     0,   248,     0,     0,
+     229,   249,   250,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   232,   233,   234,   235,   236,   237,
+     238,   222,   223,   224,   225,   246,   247,     0,   248,     0,
+       0,   229,   249,   250,     0,     0,     0,   232,   233,   234,
+     235,   236,   237,   238,     0,     0,   385,     0,   308,   338,
+     339,   340,   341,   342,   343,     0,   344,     0,     0,   345,
+     346,   347,     0,     0,     0,     0,     0,     0,   232,   233,
+     234,   235,   236,   237,   238,     0,     0,     0,     0,   308,
+     222,   223,   224,   225,   246,   247,     0,   248,     0,     0,
+     229,   249,   250,     0,     0,     0,   348,   349,   350,   351,
+     352,   353,   354,     0,     0,   355,   222,   223,   224,   225,
+     246,   247,     0,   248,     0,     0,   229,   249,   250,     0,
+       0,     0,     0,     0,     0,     0,     0,   232,   233,   234,
+     235,   236,   237,   238,     0,   367,   222,   223,   224,   225,
+     246,   247,     0,   248,     0,     0,   229,   249,   250,     0,
+       0,     0,     0,   232,   233,   234,   235,   236,   237,   238,
+       0,   464,   222,   223,   224,   225,   246,   247,     0,   248,
+       0,     0,   229,   249,   250,     0,     0,     0,     0,     0,
+       0,     0,     0,   232,   233,   234,   235,   236,   237,   238,
+       0,   467,   222,   223,   224,   225,   246,   247,     0,   248,
+       0,     0,   229,   249,   250,     0,     0,     0,     0,   232,
+     233,   234,   235,   236,   237,   238,     0,   497,   222,   223,
+     224,   225,   246,   247,     0,   248,     0,     0,   229,   249,
+     250,     0,     0,     0,     0,     0,     0,     0,     0,   232,
+     233,   234,   235,   236,   237,   238,     0,   557,   222,   223,
+     224,   225,   246,   247,     0,   248,     0,     0,   229,   249,
+     250,     0,     0,     0,     0,   232,   233,   234,   235,   236,
+     237,   238,     0,   581,     0,     0,     0,   222,   223,   224,
+     225,   246,   247,     0,   248,   305,   306,   229,   249,   250,
+       0,     0,     0,     0,     0,   232,   233,   234,   235,   236,
+     237,   238,   338,   339,   340,   341,   342,   343,     0,   344,
+       0,     0,   345,   346,   347,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   232,   233,   234,   235,   236,   237,
+     238,   531,   532,     0,   533,   534,   535,     0,   536,     0,
+       0,   537,   538,   539,     0,     0,     0,     0,     0,   348,
+     349,   350,   351,   352,   353,   354,   222,   223,   224,   225,
+       0,     0,     0,   248,     0,     0,   229,   249,   250,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   540,   541,
+     542,   543,   544,   545,   546,   531,   532,     0,   533,     0,
+       0,     0,   536,     0,     0,   537,   538,   539,     0,     0,
+       0,     0,     0,   232,   233,   234,   235,   236,   237,   238,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   233,   234,   235,   236,   237,   238,   239
+       0,     0,   540,   541,   542,   543,   544,   545,   546
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    29,     9,    21,    67,   243,   219,    14,     0,    31,
-     360,   490,   358,    23,    21,    16,    23,    19,   368,    26,
-      49,   150,    29,    52,    84,    27,    28,   240,   157,    97,
-      98,    34,   515,   512,    44,   385,    64,    97,    69,   168,
-      49,    44,   525,    69,    31,    76,    36,    37,    69,    69,
-      76,   180,    69,    49,    97,    76,    76,    64,    65,    76,
-       0,   190,    91,    92,    93,    94,    95,    67,    98,    23,
-      70,    10,    11,    75,    28,    97,   256,   257,    70,   103,
-      19,   319,    15,    99,    85,    94,    95,   103,    27,    28,
-      98,   255,   256,   257,   102,   308,    92,    93,    94,    95,
-     338,    34,    55,   449,    57,    99,    59,    33,    61,    42,
-      43,    44,    45,    46,    47,   150,    49,    97,    97,    52,
-      53,    54,   157,   130,    63,    97,   154,    97,   135,   399,
-     400,   401,   402,   168,    97,   405,    75,   120,   121,   122,
-      97,    97,   492,   356,   490,   180,   174,   154,    97,    97,
-      97,   158,    97,   160,    97,   190,    89,    90,    91,    92,
-      93,    94,    95,    97,   102,    28,   512,   174,    28,    98,
-     520,   103,   102,   386,    26,    97,   183,   415,    28,   529,
-      97,    26,    98,    16,   123,   124,   536,   126,   127,   128,
-     129,    97,   131,    97,    97,   134,    87,    86,   103,   100,
-      97,    10,    28,    71,   100,    97,    34,   445,   271,    97,
-      97,    85,    71,   152,   100,    86,    97,    86,    97,    86,
-     159,    97,    70,   376,    28,   383,   449,   305,   480,   467,
-      21,   314,   190,    -1,    -1,    -1,    -1,   255,   256,   257,
-      -1,    -1,    -1,    -1,    -1,   184,   246,    -1,   255,   256,
-     257,    -1,    -1,    -1,   246,   119,   120,   121,   122,    -1,
-      -1,   125,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,
-      -1,   271,   272,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   223,   224,   225,   226,   227,   228,
+       0,     9,    29,    21,   359,     0,    14,    67,    31,   242,
+     218,   495,   367,    21,   357,    23,    49,    16,    26,    52,
+      49,    29,   526,    49,    31,    23,    19,    84,    34,   384,
+      97,   239,     0,    49,    27,    28,    23,    64,    44,   523,
+      97,    28,   254,   255,   256,    69,    44,    69,    49,   553,
+      97,    52,    76,    97,    76,    98,    64,    65,    91,    92,
+      93,    94,    95,    92,    93,    94,    95,    67,    94,    95,
+      70,    10,    11,    33,    97,    70,    97,   149,    94,    95,
+      19,    15,    75,    97,   156,   318,    85,    49,    27,    28,
+      91,    92,    93,    94,    95,   167,    69,    99,   103,   307,
+      34,   103,    98,    76,   337,   448,   102,   179,    42,    43,
+      44,    45,    46,    47,    69,    49,    69,   189,    52,    53,
+      54,    76,   130,    76,    63,    99,   153,   135,    36,    37,
+      92,    93,    94,    95,    97,    98,    75,   398,   399,   400,
+     401,    97,   497,   404,    28,   153,   173,   355,    97,   157,
+      97,   159,   495,   255,   256,    89,    90,    91,    92,    93,
+      94,    95,    97,    28,   149,   173,    55,    97,    57,    97,
+      59,   156,    61,   102,   182,    97,    97,   385,    97,   102,
+     523,   414,   167,   103,   123,   124,    98,   126,   127,   128,
+     129,    26,   131,   548,   179,   134,   120,   121,   122,    97,
+      28,    97,   557,    26,   189,    98,    16,    97,    87,    97,
+     270,   444,   151,    86,    97,   100,   103,    97,    10,   158,
+      28,    71,   100,    97,   100,    34,   581,    97,    97,    71,
+      85,    71,    86,    86,    97,    86,   254,   255,   256,   472,
+      97,    97,   375,    70,   183,   245,   254,   255,   256,    28,
+     245,   382,   448,   304,   485,   119,   120,   121,   122,   313,
+      -1,   125,   189,    -1,    -1,    -1,    -1,    -1,   132,   133,
+     270,   271,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   222,   223,   224,   225,   226,   227,   228,
      229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,    -1,    -1,    -1,    -1,    -1,    -1,   314,   247,   248,
-     249,   250,   251,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   263,   264,    -1,    -1,   267,    -1,
+      -1,    -1,    -1,    -1,    -1,   313,    -1,   246,   247,   248,
+     249,   250,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   262,   263,    -1,    -1,   266,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   282,    -1,   284,    -1,   286,    -1,   288,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,
-     360,    -1,    -1,    -1,    -1,   372,    -1,    -1,   368,    -1,
-      -1,   310,   311,    -1,   313,    -1,    -1,    33,   317,    -1,
-      -1,   320,    -1,   383,    -1,   385,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,   281,    -1,   283,    -1,   285,    -1,   287,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,   359,
+      -1,    -1,    -1,   371,    -1,    -1,    -1,   367,    -1,    -1,
+     309,   310,    -1,   312,    -1,    -1,    -1,   316,    -1,    -1,
+     319,    -1,   382,    -1,   384,    -1,   458,   459,   460,   461,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,
      339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     349,   350,   351,   352,   353,   354,   355,   281,    -1,   283,
-      -1,   285,    -1,   287,    -1,    -1,    -1,   366,   367,    -1,
-      -1,    -1,   460,    89,    90,    91,    92,    93,    94,    95,
-     304,   305,   306,   307,    -1,    -1,    -1,    -1,   387,   449,
-      -1,   451,    28,   460,    -1,    -1,    -1,    -1,    34,   451,
-      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
-      -1,    -1,    -1,    28,    -1,   424,   486,    -1,    -1,    34,
-     490,   498,   492,    -1,   486,    -1,    -1,    42,    43,    44,
-      45,    46,    47,    -1,    49,   369,    -1,    52,    53,    54,
-      -1,    -1,   512,    89,    90,    91,    92,    93,    94,    95,
-     520,    -1,    -1,    -1,    -1,   532,    -1,    -1,    -1,   529,
-      -1,    -1,    -1,    -1,   398,    -1,   536,    -1,    -1,   403,
-     404,    -1,   406,   407,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,   494,    28,    -1,    -1,    -1,
-      -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-      42,    43,    44,    45,    46,    47,    -1,    49,   517,    -1,
-      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   469,   470,   471,   472,    -1,
-     474,   475,   476,   477,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   509,    -1,    -1,     5,     6,
+     349,   350,   351,   352,   353,   354,   280,    -1,   282,    -1,
+     284,    -1,   286,    -1,    -1,    -1,   365,   366,    -1,    -1,
+      -1,    -1,    -1,    -1,   459,   460,   461,    -1,   465,   303,
+     304,   305,   306,    -1,    -1,    -1,    -1,   386,   448,    -1,
+     450,    -1,    -1,    -1,    -1,   450,    -1,   465,    -1,   531,
+     532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
+     542,   543,   544,   545,   546,    -1,    -1,    -1,    42,    43,
+      44,    45,    46,    47,   423,    49,    -1,    -1,    52,    53,
+      54,   491,    -1,    -1,    -1,   495,   491,   497,    -1,    -1,
+      -1,   509,   574,    -1,   368,    -1,   531,   532,   533,   534,
+     535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
+     545,   546,    -1,   523,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,   397,    98,    -1,   100,    28,   402,   403,
+      -1,   405,   406,    34,    -1,    -1,    -1,    -1,   548,   574,
+      -1,    42,    43,    44,    45,    46,    47,   557,    49,    28,
+     499,    52,    53,    54,    -1,    34,    -1,    -1,    -1,   577,
+      -1,    -1,    -1,    42,    43,    44,    45,    46,    47,    -1,
+      49,   581,    -1,    52,    53,    54,    -1,    -1,    -1,   528,
+      -1,    -1,    -1,    -1,   458,   459,   460,   461,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
+     474,   475,   476,   477,    -1,   479,   480,   481,   482,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    28,    -1,
+      -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,   520,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   531,   532,   533,
+     534,   535,   536,   537,   538,   539,   540,   541,   542,   543,
+     544,   545,   546,    -1,    -1,    -1,    -1,    -1,   552,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-     524,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+     574,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
@@ -1642,7 +1678,7 @@ static const yytype_int16 yycheck[] =
        9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,
+      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
       49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
@@ -1653,7 +1689,7 @@ static const yytype_int16 yycheck[] =
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    51,
-      -1,    -1,    -1,    55,    56,    57,    58,    59,    60,    61,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    83,    84,    -1,    -1,    -1,    88,    -1,    -1,    -1,
@@ -1662,85 +1698,71 @@ static const yytype_int16 yycheck[] =
       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    -1,    50,    51,    -1,    -1,    -1,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     7,    99,    -1,   101,    11,    12,    13,
-      14,    15,    -1,    -1,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    -1,     7,    88,    -1,    -1,    11,    12,    13,
-      14,    15,    -1,    97,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    97,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    -1,     7,    -1,    88,    10,    11,    12,    13,
-      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,     7,    -1,    88,    10,    11,    12,    13,    14,
-      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,    -1,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,     7,    -1,    88,    10,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    -1,    99,    -1,   101,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
+      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       7,    99,    -1,   101,    11,    12,    13,    14,    15,    -1,
+      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    -1,
+       7,    88,    -1,    -1,    11,    12,    13,    14,    15,    -1,
+      97,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+      -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      97,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
@@ -1763,70 +1785,96 @@ static const yytype_int16 yycheck[] =
       48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,     7,    -1,    -1,
-      88,    11,    12,    13,    14,    15,    -1,    -1,    18,    19,
-      20,    21,    -1,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    -1,    36,    37,    -1,    39,
+      78,    79,    80,    81,    82,    83,    84,    -1,     7,    -1,
+      88,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,     7,    -1,    88,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
       50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    28,    82,    -1,    -1,    -1,    -1,    34,    88,    -1,
-      -1,    -1,    -1,    -1,    28,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
-      44,    45,    46,    47,    28,    49,    -1,    -1,    52,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
-      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    -1,    -1,    -1,    34,    89,    90,    91,    92,    93,
-      94,    95,    42,    43,    44,    45,    46,    47,    28,    49,
-      -1,    -1,    52,    53,    54,    89,    90,    91,    92,    93,
-      94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    98,    -1,   100,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      80,    81,    82,    83,    84,     7,    -1,    -1,    88,    11,
+      12,    13,    14,    15,    -1,    -1,    18,    19,    20,    21,
+      -1,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    -1,    36,    37,    -1,    39,    40,    41,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    28,
+      82,    -1,    -1,    -1,    -1,    34,    88,    -1,    -1,    -1,
+      -1,    -1,    28,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    42,    43,    44,    45,
+      46,    47,    28,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      42,    43,    44,    45,    46,    47,    28,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    28,
       42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
-      98,    -1,   100,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,   100,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    98,    42,    43,    44,
+      52,    53,    54,    42,    43,    -1,    45,    46,    47,    -1,
+      49,    -1,    -1,    52,    53,    54,    34,    89,    90,    91,
+      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    -1,    33,    -1,
+      89,    90,    91,    92,    93,    94,    95,    42,    43,    44,
       45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
+      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
       42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    97,    42,
+      95,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    98,    -1,   100,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
-      93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
-      42,    43,    44,    45,    46,    47,    -1,    49,    79,    80,
-      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    -1,    -1,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,   100,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    -1,    -1,    98,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    42,    43,    44,    45,    -1,    -1,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      92,    93,    94,    95,    -1,    97,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    97,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    -1,    97,    -1,    -1,    -1,    42,    43,    44,
+      45,    46,    47,    -1,    49,    79,    80,    52,    53,    54,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    42,    43,    -1,    45,    46,    47,    -1,    49,    -1,
+      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    42,    43,    44,    45,
+      -1,    -1,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      91,    92,    93,    94,    95,    42,    43,    -1,    45,    -1,
+      -1,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1847,47 +1895,51 @@ static const yytype_uint8 yystos[] =
       88,   116,   117,   118,   119,     5,     6,     8,     9,    11,
       12,    13,    14,    19,    26,    48,    55,    57,    59,    61,
       75,    78,    92,    93,    99,   101,   117,   124,   126,   142,
-     143,   146,   147,   149,   152,   153,   154,   157,   160,   161,
-     162,   164,    99,   162,   117,    31,   124,   162,    36,    37,
-      75,   117,   143,   145,   152,   117,   117,   124,   162,   124,
-     126,   118,   162,   118,   117,    97,   122,     0,   107,   124,
-     162,    97,    97,    98,    99,   148,   161,   148,   148,   148,
-     162,   162,   161,   162,   162,   162,   162,    63,    64,    65,
-      66,    67,    70,    74,   117,   162,   161,   161,   100,   162,
-       8,     9,   103,   117,   158,   159,   162,   165,   166,    99,
-      97,    97,    28,    42,    43,    44,    45,    46,    47,    49,
-      52,    53,    54,    89,    90,    91,    92,    93,    94,    95,
-      98,   125,   142,   163,   164,   162,    33,    46,    47,    49,
-      53,    54,   118,    97,    97,    24,    50,    51,   117,   162,
-      74,    34,    44,   128,    33,    97,    97,    36,    97,    97,
-      97,    34,    97,    97,   118,    97,   117,   100,   162,    28,
-     163,    28,    34,    28,    34,    28,    34,    28,    34,    69,
-      76,    69,    76,    69,    76,    69,    76,    69,    76,    55,
-      57,    59,    61,   155,    28,    28,    79,    80,    98,   100,
-     103,   103,   102,   103,    98,   102,   102,    98,   100,   166,
-      26,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   162,   166,    42,
-      43,    44,    45,    46,    47,    49,    52,    53,    54,    89,
-      90,    91,    92,    93,    94,    95,    98,   125,    97,   120,
-      97,   143,   144,   146,   144,   144,    23,    44,    97,    28,
-     162,   162,    84,    97,   110,   111,   112,   113,   162,   122,
-      97,   120,   136,   137,   138,    97,    98,    26,   161,   162,
-     161,   162,   161,   162,   161,   162,    23,    28,   156,    56,
-      58,    60,    62,    71,    72,    73,    77,    78,   150,   151,
-     161,   150,   161,   161,   100,   166,   162,   162,   162,     8,
-       9,   117,   159,   162,    98,   125,   162,   125,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   166,    97,   121,   139,   140,
-     141,    16,   136,    97,    97,    97,   162,   162,   136,    97,
-     117,   113,    97,    87,   138,   136,   100,   166,   162,    28,
-      28,    28,    28,   161,   156,   156,   156,   156,   161,   161,
-     156,   161,   161,   125,   100,   125,    16,    85,   132,   141,
-      97,   120,    97,    15,    34,    86,   118,    97,    10,   125,
-     161,   161,   161,   161,   161,   161,   161,   161,    28,    71,
-     151,   100,    97,   120,    97,   139,   136,    34,   162,    97,
-      97,   115,   117,   100,    71,   139,   132,    86,   162,    97,
-     136,    97,    98,   161,   132,    97,    97,   136,   117,   136,
-      86,    86,    97,    97
+     143,   146,   147,   149,   152,   153,   158,   161,   162,   163,
+     166,    99,   163,   117,    31,   124,   163,    36,    37,    75,
+     117,   143,   145,   156,   117,   117,   124,   163,   124,   126,
+     118,   163,   118,   117,    97,   122,     0,   107,   124,   163,
+      97,    97,    98,    99,   148,   162,   148,   148,   148,   163,
+     163,   162,   163,   163,   163,   163,    63,    64,    65,    66,
+      67,    70,    74,   117,   163,   162,   162,   100,   163,     8,
+       9,   103,   117,   159,   160,   163,   167,   168,    99,    97,
+      97,    28,    42,    43,    44,    45,    46,    47,    49,    52,
+      53,    54,    89,    90,    91,    92,    93,    94,    95,    98,
+     125,   142,   164,   166,   163,    33,    46,    47,    49,    53,
+      54,   118,    97,    97,    24,    50,    51,   117,   163,   117,
+      34,    44,   128,    33,    97,    97,    36,    97,    97,    97,
+      34,    97,    97,   118,    97,   117,   100,   163,    28,   164,
+      28,    34,    28,    34,    28,    34,    28,    34,    69,    76,
+      69,    76,    69,    76,    69,    76,    69,    76,    55,    57,
+      59,    61,   154,    28,    28,    79,    80,    98,   100,   103,
+     103,   102,   103,    98,   102,   102,    98,   100,   168,    26,
+     163,   163,   163,   163,   163,   163,   163,   163,   163,   163,
+     163,   163,   163,   163,   163,   163,   163,   168,    42,    43,
+      44,    45,    46,    47,    49,    52,    53,    54,    89,    90,
+      91,    92,    93,    94,    95,    98,   125,    97,   120,    97,
+     143,   144,   146,   144,   144,    23,    44,    97,    28,   163,
+     163,    84,    97,   110,   111,   112,   113,   163,   122,    97,
+     120,   136,   137,   138,    97,    98,    26,   162,   163,   162,
+     163,   162,   163,   162,   163,    23,    28,   155,    56,    58,
+      60,    62,    71,    72,    73,    77,    78,   150,   151,   162,
+     150,   162,   162,   100,   168,   163,   163,   163,     8,     9,
+     117,   160,   163,    98,   125,   163,   125,   163,   163,   163,
+     163,   163,   163,   163,   163,   163,   163,   163,   163,   163,
+     163,   163,   163,   163,   168,    97,   121,   139,   140,   141,
+      16,   136,    97,    97,    97,   163,   163,   136,    71,    72,
+      77,    78,   157,   162,    97,   117,   113,    97,    87,   138,
+     136,   100,   168,   163,    28,    28,    28,    28,   162,   155,
+     155,   155,   155,   162,   162,   155,   162,   162,   125,   100,
+     125,    16,    85,   132,   141,    97,   120,    97,    15,    34,
+      86,   162,   165,   166,   165,   165,   165,   118,    97,    10,
+     125,   162,   162,   162,   162,   162,   162,   162,   162,    28,
+      71,   151,   100,    97,   120,    97,   139,   136,    34,   163,
+      97,    42,    43,    45,    46,    47,    49,    52,    53,    54,
+      89,    90,    91,    92,    93,    94,    95,    28,    97,   115,
+     117,   100,    71,   139,   132,    86,   163,    97,   165,   165,
+     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
+     165,   165,   165,   165,    71,   136,    97,    98,   162,   132,
+      97,    97,   136,   165,   117,   136,    86,    86,    97,    97
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1914,15 +1966,18 @@ static const yytype_uint8 yyr1[] =
      142,   142,   142,   142,   142,   142,   142,   143,   144,   144,
      145,   145,   146,   146,   146,   146,   146,   146,   146,   146,
      146,   146,   147,   147,   148,   148,   148,   148,   149,   149,
-     149,   149,   150,   150,   150,   150,   150,   151,   152,   152,
-     152,   153,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   154,   154,   154,   154,   154,   155,   155,   155,   155,
-     156,   156,   157,   157,   157,   158,   158,   159,   159,   159,
-     160,   160,   161,   161,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   163,   163,   163,   163,   163,   163,   163,
+     149,   149,   149,   149,   150,   150,   150,   150,   150,   151,
+     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
+     153,   153,   153,   153,   153,   154,   154,   154,   154,   155,
+     155,   156,   156,   157,   157,   157,   157,   157,   158,   158,
+     158,   159,   159,   160,   160,   160,   161,   161,   162,   162,
      163,   163,   163,   163,   163,   163,   163,   163,   163,   163,
-     163,   163,   164,   164,   165,   165,   166,   166
+     163,   163,   163,   163,   163,   163,   163,   163,   163,   164,
+     164,   164,   164,   164,   164,   164,   164,   164,   164,   164,
+     164,   164,   164,   164,   164,   164,   164,   164,   165,   165,
+     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
+     165,   165,   165,   165,   165,   165,   166,   166,   167,   167,
+     168,   168
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1948,16 +2003,19 @@ static const yytype_int8 yyr2[] =
        1,     2,     1,     1,     1,     1,     1,     1,     2,     3,
        5,     3,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     2,     2,     4,     6,     4,     6,     4,     6,
-       4,     6,     2,     2,     1,     2,     4,     6,     1,     1,
-       1,     5,     1,     1,     5,     2,     2,     2,     2,     4,
-       4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     6,     6,     6,     6,     6,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     1,     3,     3,     3,     3,
-       2,     2,     1,     1,     1,     1,     3,     3,     3,     3,
+       4,     6,     2,     2,     1,     2,     4,     6,     2,     4,
+       4,     1,     1,     5,     1,     1,     5,     2,     2,     2,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     1,     1,     3,     3,     3,     3,     3,
+       6,     6,     6,     6,     6,     1,     1,     1,     1,     1,
+       1,     2,     4,     1,     2,     5,     2,     2,     3,     3,
+       3,     1,     3,     3,     3,     3,     2,     2,     1,     1,
+       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
+       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     1,     1,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     3,     3,     3,     3,     4,     4,     0,     1,
+       1,     3
 };
 
 
@@ -2229,39 +2287,39 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_tVARID: /* tVARID  */
-#line 189 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2235 "engines/director/lingo/lingo-gr.cpp"
+#line 2293 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
-#line 189 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2241 "engines/director/lingo/lingo-gr.cpp"
+#line 2299 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
-#line 189 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2247 "engines/director/lingo/lingo-gr.cpp"
+#line 2305 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
-#line 189 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2253 "engines/director/lingo/lingo-gr.cpp"
+#line 2311 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
-#line 189 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2259 "engines/director/lingo/lingo-gr.cpp"
+#line 2317 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 189 "engines/director/lingo/lingo-gr.y"
+#line 190 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2265 "engines/director/lingo/lingo-gr.cpp"
+#line 2323 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2527,1620 +2585,1752 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* script: scriptpartlist  */
-#line 195 "engines/director/lingo/lingo-gr.y"
+#line 196 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = new ScriptNode((yyvsp[0].nodelist)); }
-#line 2533 "engines/director/lingo/lingo-gr.cpp"
+#line 2591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
-#line 197 "engines/director/lingo/lingo-gr.y"
+#line 198 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2544 "engines/director/lingo/lingo-gr.cpp"
+#line 2602 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
-#line 203 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2554 "engines/director/lingo/lingo-gr.cpp"
+#line 2612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 5: /* scriptpart: '\n'  */
-#line 210 "engines/director/lingo/lingo-gr.y"
+#line 211 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 2560 "engines/director/lingo/lingo-gr.cpp"
+#line 2618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* macro: tMACRO ID idlist '\n' stmtlist  */
-#line 243 "engines/director/lingo/lingo-gr.y"
+#line 244 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2566 "engines/director/lingo/lingo-gr.cpp"
+#line 2624 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* factory: tFACTORY ID '\n' methodlist  */
-#line 247 "engines/director/lingo/lingo-gr.y"
+#line 248 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
-#line 2572 "engines/director/lingo/lingo-gr.cpp"
+#line 2630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* method: tMETHOD ID idlist '\n' stmtlist  */
-#line 249 "engines/director/lingo/lingo-gr.y"
+#line 250 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2578 "engines/director/lingo/lingo-gr.cpp"
+#line 2636 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* methodlist: %empty  */
-#line 251 "engines/director/lingo/lingo-gr.y"
+#line 252 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 2584 "engines/director/lingo/lingo-gr.cpp"
+#line 2642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* nonemptymethodlist: methodlistline  */
-#line 255 "engines/director/lingo/lingo-gr.y"
+#line 256 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 2595 "engines/director/lingo/lingo-gr.cpp"
+#line 2653 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
-#line 261 "engines/director/lingo/lingo-gr.y"
+#line 262 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* methodlistline: '\n'  */
-#line 268 "engines/director/lingo/lingo-gr.y"
+#line 269 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 2611 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
-#line 274 "engines/director/lingo/lingo-gr.y"
+#line 275 "engines/director/lingo/lingo-gr.y"
                                                                {	// D3
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
 		delete (yyvsp[-2].s); }
-#line 2620 "engines/director/lingo/lingo-gr.cpp"
+#line 2678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* handler: tON ID idlist '\n' stmtlist  */
-#line 278 "engines/director/lingo/lingo-gr.y"
+#line 279 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* endargdef: ID  */
-#line 283 "engines/director/lingo/lingo-gr.y"
+#line 284 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2691 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* endargdef: endargdef ',' ID  */
-#line 284 "engines/director/lingo/lingo-gr.y"
+#line 285 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2697 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* CMDID: tABBREVIATED  */
-#line 292 "engines/director/lingo/lingo-gr.y"
+#line 293 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
-#line 2645 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* CMDID: tABBREV  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 294 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2709 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBR  */
-#line 294 "engines/director/lingo/lingo-gr.y"
+#line 295 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
-#line 2657 "engines/director/lingo/lingo-gr.cpp"
+#line 2715 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tAFTER  */
-#line 295 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2721 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tAND  */
-#line 296 "engines/director/lingo/lingo-gr.y"
+#line 297 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("and"); }
-#line 2669 "engines/director/lingo/lingo-gr.cpp"
+#line 2727 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tBEFORE  */
-#line 297 "engines/director/lingo/lingo-gr.y"
+#line 298 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
-#line 2675 "engines/director/lingo/lingo-gr.cpp"
+#line 2733 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tCAST  */
-#line 298 "engines/director/lingo/lingo-gr.y"
+#line 299 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2739 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCHAR  */
-#line 299 "engines/director/lingo/lingo-gr.y"
+#line 300 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCHARS  */
-#line 300 "engines/director/lingo/lingo-gr.y"
+#line 301 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+#line 2751 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCONTAINS  */
-#line 301 "engines/director/lingo/lingo-gr.y"
+#line 302 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("contains"); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2757 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tDATE  */
-#line 302 "engines/director/lingo/lingo-gr.y"
+#line 303 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2763 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDOWN  */
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 304 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
+#line 2769 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tFIELD  */
-#line 304 "engines/director/lingo/lingo-gr.y"
+#line 305 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2717 "engines/director/lingo/lingo-gr.cpp"
+#line 2775 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tFRAME  */
-#line 305 "engines/director/lingo/lingo-gr.y"
+#line 306 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
-#line 2723 "engines/director/lingo/lingo-gr.cpp"
+#line 2781 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tIN  */
-#line 306 "engines/director/lingo/lingo-gr.y"
+#line 307 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
-#line 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2787 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tINTERSECTS  */
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 308 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
-#line 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2793 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tINTO  */
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 309 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
-#line 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2799 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tITEM  */
-#line 309 "engines/director/lingo/lingo-gr.y"
+#line 310 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
-#line 2747 "engines/director/lingo/lingo-gr.cpp"
+#line 2805 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tITEMS  */
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2811 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tLAST  */
-#line 311 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
-#line 2759 "engines/director/lingo/lingo-gr.cpp"
+#line 2817 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tLINE  */
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
-#line 2765 "engines/director/lingo/lingo-gr.cpp"
+#line 2823 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tLINES  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
-#line 2771 "engines/director/lingo/lingo-gr.cpp"
+#line 2829 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLONG  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
-#line 2777 "engines/director/lingo/lingo-gr.cpp"
+#line 2835 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tMENU  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2841 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tMENUITEM  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2847 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tMENUITEMS  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2853 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMOD  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("mod"); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2859 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMOVIE  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2865 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tNEXT  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+#line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tNOT  */
-#line 321 "engines/director/lingo/lingo-gr.y"
+#line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("not"); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tNUMBER  */
-#line 322 "engines/director/lingo/lingo-gr.y"
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tOF  */
-#line 323 "engines/director/lingo/lingo-gr.y"
+#line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tOR  */
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("or"); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tPREVIOUS  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2901 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tREPEAT  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2907 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tSCRIPT  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tASSERTERROR  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2919 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tSHORT  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2925 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSOUND  */
-#line 330 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSPRITE  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSTARTS  */
-#line 332 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("starts"); }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 2943 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tTHE  */
-#line 333 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
-#line 2891 "engines/director/lingo/lingo-gr.cpp"
+#line 2949 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTIME  */
-#line 334 "engines/director/lingo/lingo-gr.y"
+#line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
-#line 2897 "engines/director/lingo/lingo-gr.cpp"
+#line 2955 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTO  */
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
-#line 2903 "engines/director/lingo/lingo-gr.cpp"
+#line 2961 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tWHILE  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 337 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
-#line 2909 "engines/director/lingo/lingo-gr.cpp"
+#line 2967 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tWINDOW  */
-#line 337 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2915 "engines/director/lingo/lingo-gr.cpp"
+#line 2973 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWITH  */
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
-#line 2921 "engines/director/lingo/lingo-gr.cpp"
+#line 2979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWITHIN  */
-#line 339 "engines/director/lingo/lingo-gr.y"
+#line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
-#line 2927 "engines/director/lingo/lingo-gr.cpp"
+#line 2985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWORD  */
-#line 340 "engines/director/lingo/lingo-gr.y"
+#line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
-#line 2933 "engines/director/lingo/lingo-gr.cpp"
+#line 2991 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWORDS  */
-#line 341 "engines/director/lingo/lingo-gr.y"
+#line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 2997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* ID: tELSE  */
-#line 345 "engines/director/lingo/lingo-gr.y"
+#line 346 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 3003 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* ID: tENDCLAUSE  */
-#line 346 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); }
-#line 2951 "engines/director/lingo/lingo-gr.cpp"
+#line 3009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tEXIT  */
-#line 347 "engines/director/lingo/lingo-gr.y"
+#line 348 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
-#line 2957 "engines/director/lingo/lingo-gr.cpp"
+#line 3015 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tFACTORY  */
-#line 348 "engines/director/lingo/lingo-gr.y"
+#line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
-#line 2963 "engines/director/lingo/lingo-gr.cpp"
+#line 3021 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tGLOBAL  */
-#line 349 "engines/director/lingo/lingo-gr.y"
+#line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
-#line 2969 "engines/director/lingo/lingo-gr.cpp"
+#line 3027 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tGO  */
-#line 350 "engines/director/lingo/lingo-gr.y"
+#line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 3033 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tIF  */
-#line 351 "engines/director/lingo/lingo-gr.y"
+#line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
-#line 2981 "engines/director/lingo/lingo-gr.cpp"
+#line 3039 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tINSTANCE  */
-#line 352 "engines/director/lingo/lingo-gr.y"
+#line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
-#line 2987 "engines/director/lingo/lingo-gr.cpp"
+#line 3045 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tMACRO  */
-#line 353 "engines/director/lingo/lingo-gr.y"
+#line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
-#line 2993 "engines/director/lingo/lingo-gr.cpp"
+#line 3051 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tMETHOD  */
-#line 354 "engines/director/lingo/lingo-gr.y"
+#line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
-#line 2999 "engines/director/lingo/lingo-gr.cpp"
+#line 3057 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tON  */
-#line 355 "engines/director/lingo/lingo-gr.y"
+#line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
-#line 3005 "engines/director/lingo/lingo-gr.cpp"
+#line 3063 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tOPEN  */
-#line 356 "engines/director/lingo/lingo-gr.y"
+#line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
-#line 3011 "engines/director/lingo/lingo-gr.cpp"
+#line 3069 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tPLAY  */
-#line 357 "engines/director/lingo/lingo-gr.y"
+#line 358 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
-#line 3017 "engines/director/lingo/lingo-gr.cpp"
+#line 3075 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tPROPERTY  */
-#line 358 "engines/director/lingo/lingo-gr.y"
+#line 359 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 3081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPUT  */
-#line 359 "engines/director/lingo/lingo-gr.y"
+#line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
-#line 3029 "engines/director/lingo/lingo-gr.cpp"
+#line 3087 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tSET  */
-#line 360 "engines/director/lingo/lingo-gr.y"
+#line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
-#line 3035 "engines/director/lingo/lingo-gr.cpp"
+#line 3093 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tTELL  */
-#line 361 "engines/director/lingo/lingo-gr.y"
+#line 362 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
-#line 3041 "engines/director/lingo/lingo-gr.cpp"
+#line 3099 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTHEN  */
-#line 362 "engines/director/lingo/lingo-gr.y"
+#line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
-#line 3047 "engines/director/lingo/lingo-gr.cpp"
+#line 3105 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tWHEN  */
-#line 363 "engines/director/lingo/lingo-gr.y"
+#line 364 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("when"); }
-#line 3053 "engines/director/lingo/lingo-gr.cpp"
+#line 3111 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
-#line 366 "engines/director/lingo/lingo-gr.y"
+#line 367 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
-#line 3059 "engines/director/lingo/lingo-gr.cpp"
+#line 3117 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: ID  */
-#line 371 "engines/director/lingo/lingo-gr.y"
+#line 372 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
 		(yyval.idlist) = list; }
-#line 3068 "engines/director/lingo/lingo-gr.cpp"
+#line 3126 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+#line 376 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* stmt: tENDIF '\n'  */
-#line 386 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* proc: CMDID cmdargs '\n'  */
-#line 402 "engines/director/lingo/lingo-gr.y"
+#line 403 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* proc: tPUT cmdargs '\n'  */
-#line 403 "engines/director/lingo/lingo-gr.y"
+#line 404 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* proc: tGO cmdargs '\n'  */
-#line 404 "engines/director/lingo/lingo-gr.y"
+#line 405 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3100 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* proc: tGO frameargs '\n'  */
-#line 405 "engines/director/lingo/lingo-gr.y"
+#line 406 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist)); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* proc: tPLAY cmdargs '\n'  */
-#line 406 "engines/director/lingo/lingo-gr.y"
+#line 407 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3112 "engines/director/lingo/lingo-gr.cpp"
+#line 3170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* proc: tPLAY frameargs '\n'  */
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 408 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist)); }
-#line 3118 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* proc: tOPEN cmdargs '\n'  */
-#line 408 "engines/director/lingo/lingo-gr.y"
+#line 409 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist)); }
-#line 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 3182 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* proc: tOPEN expr tWITH expr '\n'  */
-#line 409 "engines/director/lingo/lingo-gr.y"
+#line 410 "engines/director/lingo/lingo-gr.y"
                                                  {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.node) = new CmdNode(new Common::String("open"), args); }
-#line 3134 "engines/director/lingo/lingo-gr.cpp"
+#line 3192 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* proc: tNEXT tREPEAT '\n'  */
-#line 414 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
-#line 3140 "engines/director/lingo/lingo-gr.cpp"
+#line 3198 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* proc: tEXIT tREPEAT '\n'  */
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 416 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
-#line 3146 "engines/director/lingo/lingo-gr.cpp"
+#line 3204 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* proc: tEXIT '\n'  */
-#line 416 "engines/director/lingo/lingo-gr.y"
+#line 417 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
-#line 3152 "engines/director/lingo/lingo-gr.cpp"
+#line 3210 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* proc: tASSERTERROR stmtoneliner  */
-#line 417 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
-#line 3158 "engines/director/lingo/lingo-gr.cpp"
+#line 3216 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* cmdargs: %empty  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+#line 421 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
-#line 3166 "engines/director/lingo/lingo-gr.cpp"
+#line 3224 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* cmdargs: expr trailingcomma  */
-#line 423 "engines/director/lingo/lingo-gr.y"
+#line 424 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3176 "engines/director/lingo/lingo-gr.cpp"
+#line 3234 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* cmdargs: expr ',' nonemptyexprlist trailingcomma  */
-#line 428 "engines/director/lingo/lingo-gr.y"
+#line 429 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `cmd args, ...)
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3185 "engines/director/lingo/lingo-gr.cpp"
+#line 3243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* cmdargs: expr expr_nounarymath trailingcomma  */
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-2].node));
 		args->push_back((yyvsp[-1].node));
 		(yyval.nodelist) = args; }
-#line 3196 "engines/director/lingo/lingo-gr.cpp"
+#line 3254 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist trailingcomma  */
-#line 438 "engines/director/lingo/lingo-gr.y"
+#line 439 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-4].node));
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3206 "engines/director/lingo/lingo-gr.cpp"
+#line 3264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* cmdargs: '(' ')'  */
-#line 443 "engines/director/lingo/lingo-gr.y"
+#line 444 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
-#line 3214 "engines/director/lingo/lingo-gr.cpp"
+#line 3272 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* cmdargs: '(' expr ',' ')'  */
-#line 446 "engines/director/lingo/lingo-gr.y"
+#line 447 "engines/director/lingo/lingo-gr.y"
                            {
 		// This matches `cmd(args,)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-2].node));
 		(yyval.nodelist) = args; }
-#line 3224 "engines/director/lingo/lingo-gr.cpp"
+#line 3282 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130: /* cmdargs: '(' expr ',' nonemptyexprlist trailingcomma ')'  */
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `cmd(args, ...)`
 		(yyvsp[-2].nodelist)->insert_at(0, (yyvsp[-4].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3233 "engines/director/lingo/lingo-gr.cpp"
+#line 3291 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* frameargs: tFRAME expr  */
-#line 463 "engines/director/lingo/lingo-gr.y"
+#line 464 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3243 "engines/director/lingo/lingo-gr.cpp"
+#line 3301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* frameargs: tMOVIE expr  */
-#line 468 "engines/director/lingo/lingo-gr.y"
+#line 469 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new IntNode(1));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3254 "engines/director/lingo/lingo-gr.cpp"
+#line 3312 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 475 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-3].node)));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3265 "engines/director/lingo/lingo-gr.cpp"
+#line 3323 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* frameargs: expr tOF tMOVIE expr  */
-#line 480 "engines/director/lingo/lingo-gr.y"
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
 		args->push_back(new MovieNode((yyvsp[0].node)));
 		(yyval.nodelist) = args; }
-#line 3276 "engines/director/lingo/lingo-gr.cpp"
+#line 3334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
 		args->push_back(new FrameNode((yyvsp[-1].node)));
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3287 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 495 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3293 "engines/director/lingo/lingo-gr.cpp"
+#line 3351 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3299 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+#line 497 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3305 "engines/director/lingo/lingo-gr.cpp"
+#line 3363 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141: /* asgn: tSET varorthe to expr '\n'  */
-#line 497 "engines/director/lingo/lingo-gr.y"
+#line 498 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
-#line 3311 "engines/director/lingo/lingo-gr.cpp"
+#line 3369 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* definevars: tGLOBAL idlist '\n'  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
-#line 3317 "engines/director/lingo/lingo-gr.cpp"
+#line 3375 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* definevars: tPROPERTY idlist '\n'  */
-#line 503 "engines/director/lingo/lingo-gr.y"
+#line 504 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
-#line 3323 "engines/director/lingo/lingo-gr.cpp"
+#line 3381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* definevars: tINSTANCE idlist '\n'  */
-#line 504 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
-#line 3329 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147: /* ifstmt: tIF expr tTHEN stmt  */
-#line 507 "engines/director/lingo/lingo-gr.y"
+#line 508 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new IfStmtNode((yyvsp[-2].node), stmtlist); }
-#line 3338 "engines/director/lingo/lingo-gr.cpp"
+#line 3396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif endif  */
-#line 511 "engines/director/lingo/lingo-gr.y"
+#line 512 "engines/director/lingo/lingo-gr.y"
                                                       {
 		(yyval.node) = new IfStmtNode((yyvsp[-4].node), (yyvsp[-1].nodelist)); }
-#line 3345 "engines/director/lingo/lingo-gr.cpp"
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 515 "engines/director/lingo/lingo-gr.y"
+#line 516 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-4].node), stmtlist1, stmtlist2); }
-#line 3356 "engines/director/lingo/lingo-gr.cpp"
+#line 3414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif endif  */
-#line 521 "engines/director/lingo/lingo-gr.y"
+#line 522 "engines/director/lingo/lingo-gr.y"
                                                                                    {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-4].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-6].node), stmtlist1, (yyvsp[-1].nodelist)); }
-#line 3365 "engines/director/lingo/lingo-gr.cpp"
+#line 3423 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
-#line 525 "engines/director/lingo/lingo-gr.y"
+#line 526 "engines/director/lingo/lingo-gr.y"
                                                                              {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
 		(yyval.node) = new IfElseStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist), stmtlist2); }
-#line 3374 "engines/director/lingo/lingo-gr.cpp"
+#line 3432 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif endif  */
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 530 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), (yyvsp[-4].nodelist), (yyvsp[-1].nodelist)); }
-#line 3381 "engines/director/lingo/lingo-gr.cpp"
+#line 3439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153: /* endif: %empty  */
-#line 533 "engines/director/lingo/lingo-gr.y"
+#line 534 "engines/director/lingo/lingo-gr.y"
                         { warning("LingoCompiler::parse: no end if"); }
-#line 3387 "engines/director/lingo/lingo-gr.cpp"
+#line 3445 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 536 "engines/director/lingo/lingo-gr.y"
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3394 "engines/director/lingo/lingo-gr.cpp"
+#line 3452 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 538 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3401 "engines/director/lingo/lingo-gr.cpp"
+#line 3459 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 540 "engines/director/lingo/lingo-gr.y"
+#line 541 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3408 "engines/director/lingo/lingo-gr.cpp"
+#line 3466 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 542 "engines/director/lingo/lingo-gr.y"
+#line 543 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3415 "engines/director/lingo/lingo-gr.cpp"
+#line 3473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159: /* tell: tTELL expr tTO stmtoneliner  */
-#line 546 "engines/director/lingo/lingo-gr.y"
+#line 547 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
 		(yyval.node) = new TellNode((yyvsp[-2].node), stmtlist); }
-#line 3424 "engines/director/lingo/lingo-gr.cpp"
+#line 3482 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 550 "engines/director/lingo/lingo-gr.y"
+#line 551 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
-#line 3431 "engines/director/lingo/lingo-gr.cpp"
+#line 3489 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161: /* when: tWHEN ID tTHEN expr  */
-#line 554 "engines/director/lingo/lingo-gr.y"
+#line 555 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new WhenNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3437 "engines/director/lingo/lingo-gr.cpp"
+#line 3495 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162: /* stmtlist: %empty  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+#line 557 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
-#line 3443 "engines/director/lingo/lingo-gr.cpp"
+#line 3501 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164: /* nonemptystmtlist: stmtlistline  */
-#line 561 "engines/director/lingo/lingo-gr.y"
+#line 562 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3454 "engines/director/lingo/lingo-gr.cpp"
+#line 3512 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
-#line 567 "engines/director/lingo/lingo-gr.y"
+#line 568 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3464 "engines/director/lingo/lingo-gr.cpp"
+#line 3522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166: /* stmtlistline: '\n'  */
-#line 574 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
-#line 3470 "engines/director/lingo/lingo-gr.cpp"
+#line 3528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168: /* stmtlist_insideif: %empty  */
-#line 578 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.nodelist) = new NodeList; }
-#line 3476 "engines/director/lingo/lingo-gr.cpp"
+#line 3534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
-#line 583 "engines/director/lingo/lingo-gr.y"
+#line 584 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
 			list->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = list; }
-#line 3487 "engines/director/lingo/lingo-gr.cpp"
+#line 3545 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
-#line 589 "engines/director/lingo/lingo-gr.y"
+#line 590 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
 		}
 		(yyval.nodelist) = (yyvsp[-1].nodelist); }
-#line 3497 "engines/director/lingo/lingo-gr.cpp"
+#line 3555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172: /* stmtlistline_insideif: '\n'  */
-#line 596 "engines/director/lingo/lingo-gr.y"
+#line 597 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
-#line 3503 "engines/director/lingo/lingo-gr.cpp"
+#line 3561 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 174: /* simpleexpr_nounarymath: tINT  */
-#line 603 "engines/director/lingo/lingo-gr.y"
+#line 604 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
-#line 3509 "engines/director/lingo/lingo-gr.cpp"
+#line 3567 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 175: /* simpleexpr_nounarymath: tFLOAT  */
-#line 604 "engines/director/lingo/lingo-gr.y"
+#line 605 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
-#line 3515 "engines/director/lingo/lingo-gr.cpp"
+#line 3573 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 176: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
-#line 3521 "engines/director/lingo/lingo-gr.cpp"
+#line 3579 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 177: /* simpleexpr_nounarymath: tSTRING  */
-#line 606 "engines/director/lingo/lingo-gr.y"
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
-#line 3527 "engines/director/lingo/lingo-gr.cpp"
+#line 3585 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 178: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 607 "engines/director/lingo/lingo-gr.y"
+#line 608 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
-#line 3533 "engines/director/lingo/lingo-gr.cpp"
+#line 3591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 179: /* simpleexpr_nounarymath: ID '(' ')'  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new FuncNode((yyvsp[-2].s), new NodeList); }
-#line 3539 "engines/director/lingo/lingo-gr.cpp"
+#line 3597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 180: /* simpleexpr_nounarymath: ID '(' nonemptyexprlist trailingcomma ')'  */
-#line 609 "engines/director/lingo/lingo-gr.y"
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FuncNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
-#line 3545 "engines/director/lingo/lingo-gr.cpp"
+#line 3603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 181: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 610 "engines/director/lingo/lingo-gr.y"
+#line 611 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
-#line 3551 "engines/director/lingo/lingo-gr.cpp"
+#line 3609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 187: /* var: ID  */
-#line 618 "engines/director/lingo/lingo-gr.y"
+#line 619 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
-#line 3557 "engines/director/lingo/lingo-gr.cpp"
+#line 3615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 192: /* chunk: tFIELD refargs  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+#line 629 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.node) = new FuncNode(new Common::String("field"), (yyvsp[0].nodelist)); }
-#line 3563 "engines/director/lingo/lingo-gr.cpp"
+#line 3621 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 193: /* chunk: tCAST refargs  */
-#line 629 "engines/director/lingo/lingo-gr.y"
+#line 630 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("cast"), (yyvsp[0].nodelist)); }
-#line 3569 "engines/director/lingo/lingo-gr.cpp"
+#line 3627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 194: /* chunk: tCHAR expr tOF simpleexpr  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+#line 631 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3576 "engines/director/lingo/lingo-gr.cpp"
+#line 3634 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 195: /* chunk: tCHAR expr tTO expr tOF simpleexpr  */
-#line 632 "engines/director/lingo/lingo-gr.y"
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3583 "engines/director/lingo/lingo-gr.cpp"
+#line 3641 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 196: /* chunk: tWORD expr tOF simpleexpr  */
-#line 634 "engines/director/lingo/lingo-gr.y"
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3590 "engines/director/lingo/lingo-gr.cpp"
+#line 3648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 197: /* chunk: tWORD expr tTO expr tOF simpleexpr  */
-#line 636 "engines/director/lingo/lingo-gr.y"
+#line 637 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3597 "engines/director/lingo/lingo-gr.cpp"
+#line 3655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 198: /* chunk: tITEM expr tOF simpleexpr  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+#line 639 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3604 "engines/director/lingo/lingo-gr.cpp"
+#line 3662 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 199: /* chunk: tITEM expr tTO expr tOF simpleexpr  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3611 "engines/director/lingo/lingo-gr.cpp"
+#line 3669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 200: /* chunk: tLINE expr tOF simpleexpr  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
-#line 3618 "engines/director/lingo/lingo-gr.cpp"
+#line 3676 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 201: /* chunk: tLINE expr tTO expr tOF simpleexpr  */
-#line 644 "engines/director/lingo/lingo-gr.y"
+#line 645 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3625 "engines/director/lingo/lingo-gr.cpp"
+#line 3683 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 202: /* object: tSCRIPT refargs  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+#line 649 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.node) = new FuncNode(new Common::String("script"), (yyvsp[0].nodelist)); }
-#line 3631 "engines/director/lingo/lingo-gr.cpp"
+#line 3689 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 203: /* object: tWINDOW refargs  */
-#line 649 "engines/director/lingo/lingo-gr.y"
+#line 650 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("window"), (yyvsp[0].nodelist)); }
-#line 3637 "engines/director/lingo/lingo-gr.cpp"
+#line 3695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 204: /* refargs: simpleexpr  */
-#line 652 "engines/director/lingo/lingo-gr.y"
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `ref arg` and `ref(arg)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[0].node));
 		(yyval.nodelist) = args; }
-#line 3647 "engines/director/lingo/lingo-gr.cpp"
+#line 3705 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 205: /* refargs: '(' ')'  */
-#line 657 "engines/director/lingo/lingo-gr.y"
+#line 658 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `ref()`
 		(yyval.nodelist) = new NodeList; }
-#line 3655 "engines/director/lingo/lingo-gr.cpp"
+#line 3713 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 206: /* refargs: '(' expr ',' ')'  */
-#line 660 "engines/director/lingo/lingo-gr.y"
+#line 661 "engines/director/lingo/lingo-gr.y"
                            {
 		// This matches `ref(args,)`
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-2].node));
 		(yyval.nodelist) = args; }
-#line 3665 "engines/director/lingo/lingo-gr.cpp"
+#line 3723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 207: /* refargs: '(' expr ',' nonemptyexprlist trailingcomma ')'  */
-#line 665 "engines/director/lingo/lingo-gr.y"
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `ref(args, ...)`
 		(yyvsp[-2].nodelist)->insert_at(0, (yyvsp[-4].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3674 "engines/director/lingo/lingo-gr.cpp"
+#line 3732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 211: /* the: tTHE tLAST chunktype inof simpleexpr  */
-#line 674 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
-#line 3680 "engines/director/lingo/lingo-gr.cpp"
+  case 208: /* the: tTHE ID  */
+#line 672 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new TheNode((yyvsp[0].s)); }
+#line 3738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 214: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 679 "engines/director/lingo/lingo-gr.y"
-                                                                { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
-#line 3686 "engines/director/lingo/lingo-gr.cpp"
+  case 209: /* the: tTHE ID tOF theobj  */
+#line 673 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
+#line 3744 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 215: /* theobj: tSOUND simpleexpr  */
-#line 680 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new SoundNode((yyvsp[0].node)); }
-#line 3692 "engines/director/lingo/lingo-gr.cpp"
+  case 210: /* the: tTHE tNUMBER tOF theobj  */
+#line 674 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
+#line 3750 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 216: /* theobj: tSPRITE simpleexpr  */
-#line 681 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
-#line 3698 "engines/director/lingo/lingo-gr.cpp"
+  case 213: /* the: tTHE tLAST chunktype inof simpleexpr  */
+#line 677 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
+#line 3756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 217: /* menu: tMENU simpleexpr  */
-#line 684 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new MenuNode((yyvsp[0].node)); }
-#line 3704 "engines/director/lingo/lingo-gr.cpp"
+  case 216: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
+#line 682 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
+#line 3762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 218: /* writablethe: tTHE ID  */
-#line 686 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new TheNode((yyvsp[0].s)); }
-#line 3710 "engines/director/lingo/lingo-gr.cpp"
+  case 217: /* theobj: tSOUND simpleexpr  */
+#line 683 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new SoundNode((yyvsp[0].node)); }
+#line 3768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 219: /* writablethe: tTHE ID tOF theobj  */
-#line 687 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
-#line 3716 "engines/director/lingo/lingo-gr.cpp"
+  case 218: /* theobj: tSPRITE simpleexpr  */
+#line 684 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
+#line 3774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 220: /* writablethe: tTHE tNUMBER tOF theobj  */
-#line 688 "engines/director/lingo/lingo-gr.y"
-                                                        { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
-#line 3722 "engines/director/lingo/lingo-gr.cpp"
+  case 219: /* menu: tMENU simpleexpr  */
+#line 687 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new MenuNode((yyvsp[0].node)); }
+#line 3780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 221: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 691 "engines/director/lingo/lingo-gr.y"
+  case 220: /* thedatetime: tTHE tABBREVIATED tDATE  */
+#line 689 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3728 "engines/director/lingo/lingo-gr.cpp"
+#line 3786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 222: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 692 "engines/director/lingo/lingo-gr.y"
+  case 221: /* thedatetime: tTHE tABBREVIATED tTIME  */
+#line 690 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3734 "engines/director/lingo/lingo-gr.cpp"
+#line 3792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 223: /* thedatetime: tTHE tABBREV tDATE  */
-#line 693 "engines/director/lingo/lingo-gr.y"
+  case 222: /* thedatetime: tTHE tABBREV tDATE  */
+#line 691 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3740 "engines/director/lingo/lingo-gr.cpp"
+#line 3798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 224: /* thedatetime: tTHE tABBREV tTIME  */
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 223: /* thedatetime: tTHE tABBREV tTIME  */
+#line 692 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3746 "engines/director/lingo/lingo-gr.cpp"
+#line 3804 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 225: /* thedatetime: tTHE tABBR tDATE  */
-#line 695 "engines/director/lingo/lingo-gr.y"
+  case 224: /* thedatetime: tTHE tABBR tDATE  */
+#line 693 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
-#line 3752 "engines/director/lingo/lingo-gr.cpp"
+#line 3810 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 226: /* thedatetime: tTHE tABBR tTIME  */
-#line 696 "engines/director/lingo/lingo-gr.y"
+  case 225: /* thedatetime: tTHE tABBR tTIME  */
+#line 694 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
-#line 3758 "engines/director/lingo/lingo-gr.cpp"
+#line 3816 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 227: /* thedatetime: tTHE tLONG tDATE  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+  case 226: /* thedatetime: tTHE tLONG tDATE  */
+#line 695 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
-#line 3764 "engines/director/lingo/lingo-gr.cpp"
+#line 3822 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 228: /* thedatetime: tTHE tLONG tTIME  */
-#line 698 "engines/director/lingo/lingo-gr.y"
+  case 227: /* thedatetime: tTHE tLONG tTIME  */
+#line 696 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
-#line 3770 "engines/director/lingo/lingo-gr.cpp"
+#line 3828 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 229: /* thedatetime: tTHE tSHORT tDATE  */
-#line 699 "engines/director/lingo/lingo-gr.y"
+  case 228: /* thedatetime: tTHE tSHORT tDATE  */
+#line 697 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
-#line 3776 "engines/director/lingo/lingo-gr.cpp"
+#line 3834 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 230: /* thedatetime: tTHE tSHORT tTIME  */
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 229: /* thedatetime: tTHE tSHORT tTIME  */
+#line 698 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
-#line 3782 "engines/director/lingo/lingo-gr.cpp"
+#line 3840 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 231: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 704 "engines/director/lingo/lingo-gr.y"
+  case 230: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
-#line 3788 "engines/director/lingo/lingo-gr.cpp"
+#line 3846 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 232: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 231: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
+#line 703 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
-#line 3794 "engines/director/lingo/lingo-gr.cpp"
+#line 3852 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 233: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 706 "engines/director/lingo/lingo-gr.y"
+  case 232: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
+#line 704 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
-#line 3800 "engines/director/lingo/lingo-gr.cpp"
+#line 3858 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 234: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 707 "engines/director/lingo/lingo-gr.y"
+  case 233: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
+#line 705 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
-#line 3806 "engines/director/lingo/lingo-gr.cpp"
+#line 3864 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 235: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 708 "engines/director/lingo/lingo-gr.y"
+  case 234: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
-#line 3812 "engines/director/lingo/lingo-gr.cpp"
+#line 3870 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 236: /* chunktype: tCHAR  */
-#line 711 "engines/director/lingo/lingo-gr.y"
+  case 235: /* chunktype: tCHAR  */
+#line 709 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
-#line 3818 "engines/director/lingo/lingo-gr.cpp"
+#line 3876 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 237: /* chunktype: tWORD  */
-#line 712 "engines/director/lingo/lingo-gr.y"
+  case 236: /* chunktype: tWORD  */
+#line 710 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
-#line 3824 "engines/director/lingo/lingo-gr.cpp"
+#line 3882 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 238: /* chunktype: tITEM  */
-#line 713 "engines/director/lingo/lingo-gr.y"
+  case 237: /* chunktype: tITEM  */
+#line 711 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
-#line 3830 "engines/director/lingo/lingo-gr.cpp"
+#line 3888 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 239: /* chunktype: tLINE  */
-#line 714 "engines/director/lingo/lingo-gr.y"
+  case 238: /* chunktype: tLINE  */
+#line 712 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
-#line 3836 "engines/director/lingo/lingo-gr.cpp"
+#line 3894 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 241: /* writablethe: tTHE ID  */
+#line 717 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new TheNode((yyvsp[0].s)); }
+#line 3900 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 242: /* writablethe: tTHE ID tOF writabletheobj  */
+#line 718 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
+#line 3906 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 242: /* list: '[' exprlist ']'  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 244: /* writabletheobj: tMENU expr_noeq  */
+#line 722 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new MenuNode((yyvsp[0].node)); }
+#line 3912 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 245: /* writabletheobj: tMENUITEM expr_noeq tOF tMENU expr_noeq  */
+#line 723 "engines/director/lingo/lingo-gr.y"
+                                                                { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
+#line 3918 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 246: /* writabletheobj: tSOUND expr_noeq  */
+#line 724 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new SoundNode((yyvsp[0].node)); }
+#line 3924 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 247: /* writabletheobj: tSPRITE expr_noeq  */
+#line 725 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
+#line 3930 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 248: /* list: '[' exprlist ']'  */
+#line 728 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
-#line 3842 "engines/director/lingo/lingo-gr.cpp"
+#line 3936 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 243: /* list: '[' ':' ']'  */
-#line 720 "engines/director/lingo/lingo-gr.y"
+  case 249: /* list: '[' ':' ']'  */
+#line 729 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
-#line 3848 "engines/director/lingo/lingo-gr.cpp"
+#line 3942 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 244: /* list: '[' proplist ']'  */
-#line 721 "engines/director/lingo/lingo-gr.y"
+  case 250: /* list: '[' proplist ']'  */
+#line 730 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
-#line 3854 "engines/director/lingo/lingo-gr.cpp"
+#line 3948 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 245: /* proplist: proppair  */
-#line 724 "engines/director/lingo/lingo-gr.y"
+  case 251: /* proplist: proppair  */
+#line 733 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 3863 "engines/director/lingo/lingo-gr.cpp"
+#line 3957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 246: /* proplist: proplist ',' proppair  */
-#line 728 "engines/director/lingo/lingo-gr.y"
+  case 252: /* proplist: proplist ',' proppair  */
+#line 737 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 3871 "engines/director/lingo/lingo-gr.cpp"
+#line 3965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 247: /* proppair: tSYMBOL ':' expr  */
-#line 733 "engines/director/lingo/lingo-gr.y"
+  case 253: /* proppair: tSYMBOL ':' expr  */
+#line 742 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3877 "engines/director/lingo/lingo-gr.cpp"
+#line 3971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 248: /* proppair: ID ':' expr  */
-#line 734 "engines/director/lingo/lingo-gr.y"
+  case 254: /* proppair: ID ':' expr  */
+#line 743 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3883 "engines/director/lingo/lingo-gr.cpp"
+#line 3977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 249: /* proppair: tSTRING ':' expr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 255: /* proppair: tSTRING ':' expr  */
+#line 744 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 3889 "engines/director/lingo/lingo-gr.cpp"
+#line 3983 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 250: /* unarymath: '+' simpleexpr  */
-#line 738 "engines/director/lingo/lingo-gr.y"
+  case 256: /* unarymath: '+' simpleexpr  */
+#line 747 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 3895 "engines/director/lingo/lingo-gr.cpp"
+#line 3989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 251: /* unarymath: '-' simpleexpr  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+  case 257: /* unarymath: '-' simpleexpr  */
+#line 748 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 3901 "engines/director/lingo/lingo-gr.cpp"
+#line 3995 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 256: /* expr: expr '+' expr  */
-#line 749 "engines/director/lingo/lingo-gr.y"
+  case 262: /* expr: expr '+' expr  */
+#line 758 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3907 "engines/director/lingo/lingo-gr.cpp"
+#line 4001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 257: /* expr: expr '-' expr  */
-#line 750 "engines/director/lingo/lingo-gr.y"
+  case 263: /* expr: expr '-' expr  */
+#line 759 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3913 "engines/director/lingo/lingo-gr.cpp"
+#line 4007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* expr: expr '*' expr  */
-#line 751 "engines/director/lingo/lingo-gr.y"
+  case 264: /* expr: expr '*' expr  */
+#line 760 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3919 "engines/director/lingo/lingo-gr.cpp"
+#line 4013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 259: /* expr: expr '/' expr  */
-#line 752 "engines/director/lingo/lingo-gr.y"
+  case 265: /* expr: expr '/' expr  */
+#line 761 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3925 "engines/director/lingo/lingo-gr.cpp"
+#line 4019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 260: /* expr: expr tMOD expr  */
-#line 753 "engines/director/lingo/lingo-gr.y"
+  case 266: /* expr: expr tMOD expr  */
+#line 762 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3931 "engines/director/lingo/lingo-gr.cpp"
+#line 4025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 261: /* expr: expr '>' expr  */
-#line 754 "engines/director/lingo/lingo-gr.y"
+  case 267: /* expr: expr '>' expr  */
+#line 763 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3937 "engines/director/lingo/lingo-gr.cpp"
+#line 4031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 262: /* expr: expr '<' expr  */
-#line 755 "engines/director/lingo/lingo-gr.y"
+  case 268: /* expr: expr '<' expr  */
+#line 764 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3943 "engines/director/lingo/lingo-gr.cpp"
+#line 4037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 263: /* expr: expr tEQ expr  */
-#line 756 "engines/director/lingo/lingo-gr.y"
+  case 269: /* expr: expr tEQ expr  */
+#line 765 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3949 "engines/director/lingo/lingo-gr.cpp"
+#line 4043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 264: /* expr: expr tNEQ expr  */
-#line 757 "engines/director/lingo/lingo-gr.y"
+  case 270: /* expr: expr tNEQ expr  */
+#line 766 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3955 "engines/director/lingo/lingo-gr.cpp"
+#line 4049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 265: /* expr: expr tGE expr  */
-#line 758 "engines/director/lingo/lingo-gr.y"
+  case 271: /* expr: expr tGE expr  */
+#line 767 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3961 "engines/director/lingo/lingo-gr.cpp"
+#line 4055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 266: /* expr: expr tLE expr  */
-#line 759 "engines/director/lingo/lingo-gr.y"
+  case 272: /* expr: expr tLE expr  */
+#line 768 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3967 "engines/director/lingo/lingo-gr.cpp"
+#line 4061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 267: /* expr: expr tAND expr  */
-#line 760 "engines/director/lingo/lingo-gr.y"
+  case 273: /* expr: expr tAND expr  */
+#line 769 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3973 "engines/director/lingo/lingo-gr.cpp"
+#line 4067 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 268: /* expr: expr tOR expr  */
-#line 761 "engines/director/lingo/lingo-gr.y"
+  case 274: /* expr: expr tOR expr  */
+#line 770 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3979 "engines/director/lingo/lingo-gr.cpp"
+#line 4073 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 269: /* expr: expr '&' expr  */
-#line 762 "engines/director/lingo/lingo-gr.y"
+  case 275: /* expr: expr '&' expr  */
+#line 771 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3985 "engines/director/lingo/lingo-gr.cpp"
+#line 4079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 270: /* expr: expr tCONCAT expr  */
-#line 763 "engines/director/lingo/lingo-gr.y"
+  case 276: /* expr: expr tCONCAT expr  */
+#line 772 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3991 "engines/director/lingo/lingo-gr.cpp"
+#line 4085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 271: /* expr: expr tCONTAINS expr  */
-#line 764 "engines/director/lingo/lingo-gr.y"
+  case 277: /* expr: expr tCONTAINS expr  */
+#line 773 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 3997 "engines/director/lingo/lingo-gr.cpp"
+#line 4091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 272: /* expr: expr tSTARTS expr  */
-#line 765 "engines/director/lingo/lingo-gr.y"
+  case 278: /* expr: expr tSTARTS expr  */
+#line 774 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4003 "engines/director/lingo/lingo-gr.cpp"
+#line 4097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 275: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 774 "engines/director/lingo/lingo-gr.y"
+  case 281: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 783 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4009 "engines/director/lingo/lingo-gr.cpp"
+#line 4103 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 276: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 775 "engines/director/lingo/lingo-gr.y"
+  case 282: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 784 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4015 "engines/director/lingo/lingo-gr.cpp"
+#line 4109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 277: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 776 "engines/director/lingo/lingo-gr.y"
+  case 283: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 785 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4021 "engines/director/lingo/lingo-gr.cpp"
+#line 4115 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 278: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 777 "engines/director/lingo/lingo-gr.y"
+  case 284: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 786 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4027 "engines/director/lingo/lingo-gr.cpp"
+#line 4121 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 279: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 778 "engines/director/lingo/lingo-gr.y"
+  case 285: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 787 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4033 "engines/director/lingo/lingo-gr.cpp"
+#line 4127 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 280: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 779 "engines/director/lingo/lingo-gr.y"
+  case 286: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 788 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4039 "engines/director/lingo/lingo-gr.cpp"
+#line 4133 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 281: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 780 "engines/director/lingo/lingo-gr.y"
+  case 287: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 789 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4045 "engines/director/lingo/lingo-gr.cpp"
+#line 4139 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 282: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 781 "engines/director/lingo/lingo-gr.y"
+  case 288: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 790 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4051 "engines/director/lingo/lingo-gr.cpp"
+#line 4145 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 283: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 782 "engines/director/lingo/lingo-gr.y"
+  case 289: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 791 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4057 "engines/director/lingo/lingo-gr.cpp"
+#line 4151 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 284: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 783 "engines/director/lingo/lingo-gr.y"
+  case 290: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 792 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4063 "engines/director/lingo/lingo-gr.cpp"
+#line 4157 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 285: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 784 "engines/director/lingo/lingo-gr.y"
+  case 291: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 793 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4069 "engines/director/lingo/lingo-gr.cpp"
+#line 4163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 286: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 785 "engines/director/lingo/lingo-gr.y"
+  case 292: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 794 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4075 "engines/director/lingo/lingo-gr.cpp"
+#line 4169 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 287: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 786 "engines/director/lingo/lingo-gr.y"
+  case 293: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 795 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4081 "engines/director/lingo/lingo-gr.cpp"
+#line 4175 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 288: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 787 "engines/director/lingo/lingo-gr.y"
+  case 294: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 796 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4087 "engines/director/lingo/lingo-gr.cpp"
+#line 4181 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 289: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 788 "engines/director/lingo/lingo-gr.y"
+  case 295: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 797 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4093 "engines/director/lingo/lingo-gr.cpp"
+#line 4187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 290: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 789 "engines/director/lingo/lingo-gr.y"
+  case 296: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 798 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4099 "engines/director/lingo/lingo-gr.cpp"
+#line 4193 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 291: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 790 "engines/director/lingo/lingo-gr.y"
+  case 297: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 799 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4105 "engines/director/lingo/lingo-gr.cpp"
+#line 4199 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 292: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 793 "engines/director/lingo/lingo-gr.y"
+  case 300: /* expr_noeq: expr_noeq '+' expr_noeq  */
+#line 804 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4205 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 301: /* expr_noeq: expr_noeq '-' expr_noeq  */
+#line 805 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4211 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 302: /* expr_noeq: expr_noeq '*' expr_noeq  */
+#line 806 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4217 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 303: /* expr_noeq: expr_noeq '/' expr_noeq  */
+#line 807 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4223 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 304: /* expr_noeq: expr_noeq tMOD expr_noeq  */
+#line 808 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4229 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 305: /* expr_noeq: expr_noeq '>' expr_noeq  */
+#line 809 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4235 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 306: /* expr_noeq: expr_noeq '<' expr_noeq  */
+#line 810 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4241 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 307: /* expr_noeq: expr_noeq tNEQ expr_noeq  */
+#line 811 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4247 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 308: /* expr_noeq: expr_noeq tGE expr_noeq  */
+#line 812 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4253 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 309: /* expr_noeq: expr_noeq tLE expr_noeq  */
+#line 813 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4259 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 310: /* expr_noeq: expr_noeq tAND expr_noeq  */
+#line 814 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4265 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 311: /* expr_noeq: expr_noeq tOR expr_noeq  */
+#line 815 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4271 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 312: /* expr_noeq: expr_noeq '&' expr_noeq  */
+#line 816 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4277 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 313: /* expr_noeq: expr_noeq tCONCAT expr_noeq  */
+#line 817 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4283 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 314: /* expr_noeq: expr_noeq tCONTAINS expr_noeq  */
+#line 818 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4289 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 315: /* expr_noeq: expr_noeq tSTARTS expr_noeq  */
+#line 819 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
+#line 4295 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 316: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 822 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4111 "engines/director/lingo/lingo-gr.cpp"
+#line 4301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 293: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 794 "engines/director/lingo/lingo-gr.y"
+  case 317: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 823 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4117 "engines/director/lingo/lingo-gr.cpp"
+#line 4307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 294: /* exprlist: %empty  */
-#line 797 "engines/director/lingo/lingo-gr.y"
+  case 318: /* exprlist: %empty  */
+#line 826 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 4123 "engines/director/lingo/lingo-gr.cpp"
+#line 4313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 296: /* nonemptyexprlist: expr  */
-#line 801 "engines/director/lingo/lingo-gr.y"
+  case 320: /* nonemptyexprlist: expr  */
+#line 830 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 4132 "engines/director/lingo/lingo-gr.cpp"
+#line 4322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 297: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 805 "engines/director/lingo/lingo-gr.y"
+  case 321: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 834 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 4140 "engines/director/lingo/lingo-gr.cpp"
+#line 4330 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 4144 "engines/director/lingo/lingo-gr.cpp"
+#line 4334 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4339,7 +4529,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 810 "engines/director/lingo/lingo-gr.y"
+#line 839 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 457afca6ed..c1b86e8f9d 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -169,10 +169,11 @@ static void checkEnd(Common::String *token, Common::String *expect, bool require
 // EXPRESSION
 %type<node> simpleexpr_nounarymath simpleexpr
 %type<node> unarymath
-%type<node> expr expr_nounarymath sprite
+%type<node> expr expr_nounarymath expr_noeq sprite
 %type<node> var varorchunk varorthe
 %type<chunktype> chunktype
-%type<node> the writablethe theobj menu thedatetime thenumberof
+%type<node> the theobj menu thedatetime thenumberof
+%type<node> writablethe writabletheobj
 %type<node> list proppair
 %type<node> chunk object
 %type<nodelist> refargs proplist exprlist nonemptyexprlist
@@ -668,7 +669,9 @@ refargs: simpleexpr								{
 		$$ = $args; }
 	;
 
-the: writablethe
+the: tTHE ID							{ $$ = new TheNode($ID); }
+	| tTHE ID tOF theobj				{ $$ = new TheOfNode($ID, $theobj); }
+	| tTHE tNUMBER tOF theobj			{ $$ = new TheOfNode(new Common::String("number"), $theobj); }
 	| thedatetime
 	| thenumberof
 	| tTHE tLAST chunktype inof simpleexpr	{ $$ = new TheLastNode($chunktype, $simpleexpr); }
@@ -676,18 +679,13 @@ the: writablethe
 
 theobj: simpleexpr
 	| menu
-	| tMENUITEM simpleexpr[item] tOF tMENU simpleexpr[menu] { $$ = new MenuItemNode($item, $menu); }
+	| tMENUITEM simpleexpr[item] tOF tMENU simpleexpr[menu]	{ $$ = new MenuItemNode($item, $menu); }
 	| tSOUND simpleexpr[arg]			{ $$ = new SoundNode($arg); }
 	| tSPRITE simpleexpr[arg]			{ $$ = new SpriteNode($arg); }
 	;
 
 menu: tMENU	simpleexpr[arg]				{ $$ = new MenuNode($arg); } ;
 
-writablethe: tTHE ID					{ $$ = new TheNode($ID); }
-	| tTHE ID tOF theobj				{ $$ = new TheOfNode($ID, $theobj); }
-	| tTHE tNUMBER tOF theobj			{ $$ = new TheOfNode(new Common::String("number"), $theobj); }
-	;
-
 thedatetime: tTHE tABBREVIATED tDATE	{ $$ = new TheDateTimeNode(kTheAbbr, kTheDate); }
 	| tTHE tABBREVIATED tTIME			{ $$ = new TheDateTimeNode(kTheAbbr, kTheTime); }
 	| tTHE tABBREV tDATE				{ $$ = new TheDateTimeNode(kTheAbbr, kTheDate); }
@@ -716,6 +714,17 @@ chunktype: tCHAR				{ $$ = kChunkChar; }
 
 inof: tIN | tOF ;
 
+writablethe: tTHE ID					{ $$ = new TheNode($ID); }
+	| tTHE ID tOF writabletheobj		{ $$ = new TheOfNode($ID, $writabletheobj); }
+	;
+
+writabletheobj: simpleexpr
+	| tMENU	expr_noeq[arg]				{ $$ = new MenuNode($arg); } ;
+	| tMENUITEM expr_noeq[item] tOF tMENU expr_noeq[menu]	{ $$ = new MenuItemNode($item, $menu); }
+	| tSOUND expr_noeq[arg]				{ $$ = new SoundNode($arg); }
+	| tSPRITE expr_noeq[arg]			{ $$ = new SpriteNode($arg); }
+	;
+
 list: '[' exprlist ']'			{ $$ = new ListNode($exprlist); }
 	| '[' ':' ']'				{ $$ = new PropListNode(new NodeList); }
 	| '[' proplist ']'			{ $$ = new PropListNode($proplist); }
@@ -743,7 +752,7 @@ simpleexpr: simpleexpr_nounarymath
 	| unarymath
 	;
 
-// REMEMBER TO SYNC THIS WITH expr_nounarymath!
+// REMEMBER TO SYNC THIS WITH expr_nounarymath and expr_noeq!
 expr: simpleexpr
 	| sprite
 	| expr[a] '+' expr[b]		{ $$ = new BinaryOpNode(LC::c_add, $a, $b); }
@@ -790,6 +799,26 @@ expr_nounarymath: simpleexpr_nounarymath
 	| expr_nounarymath[a] tSTARTS expr[b]	{ $$ = new BinaryOpNode(LC::c_starts, $a, $b); }
 	;
 
+expr_noeq: simpleexpr
+	| sprite
+	| expr_noeq[a] '+' expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_add, $a, $b); }
+	| expr_noeq[a] '-' expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_sub, $a, $b); }
+	| expr_noeq[a] '*' expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_mul, $a, $b); }
+	| expr_noeq[a] '/' expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_div, $a, $b); }
+	| expr_noeq[a] tMOD expr_noeq[b]		{ $$ = new BinaryOpNode(LC::c_mod, $a, $b); }
+	| expr_noeq[a] '>' expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_gt, $a, $b); }
+	| expr_noeq[a] '<' expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_lt, $a, $b); }
+	| expr_noeq[a] tNEQ expr_noeq[b]		{ $$ = new BinaryOpNode(LC::c_neq, $a, $b); }
+	| expr_noeq[a] tGE expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_ge, $a, $b); }
+	| expr_noeq[a] tLE expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_le, $a, $b); }
+	| expr_noeq[a] tAND expr_noeq[b]		{ $$ = new BinaryOpNode(LC::c_and, $a, $b); }
+	| expr_noeq[a] tOR expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_or, $a, $b); }
+	| expr_noeq[a] '&' expr_noeq[b]			{ $$ = new BinaryOpNode(LC::c_ampersand, $a, $b); }
+	| expr_noeq[a] tCONCAT expr_noeq[b]		{ $$ = new BinaryOpNode(LC::c_concat, $a, $b); }
+	| expr_noeq[a] tCONTAINS expr_noeq[b]	{ $$ = new BinaryOpNode(LC::c_contains, $a, $b); }
+	| expr_noeq[a] tSTARTS expr_noeq[b]		{ $$ = new BinaryOpNode(LC::c_starts, $a, $b); }
+	;
+
 sprite: tSPRITE expr tINTERSECTS simpleexpr	{ $$ = new IntersectsNode($expr, $simpleexpr); }
 	| tSPRITE expr tWITHIN simpleexpr		{ $$ = new WithinNode($expr, $simpleexpr); }
 	;




More information about the Scummvm-git-logs mailing list