From c147a5c979c26f1b6ab8cdc2f5ced82a0fde11e1 Mon Sep 17 00:00:00 2001
From: djsrv <dservilla@gmail.com>
Date: Fri, 21 Aug 2020 21:35:53 -0400
Subject: [PATCH] DIRECTOR: LINGO: Implement chunk refs

---
 engines/director/lingo/lingo-code.cpp |  372 +++---
 engines/director/lingo/lingo-code.h   |    1 +
 engines/director/lingo/lingo-gr.cpp   | 1553 +++++++++++++------------
 engines/director/lingo/lingo-gr.h     |  153 +--
 engines/director/lingo/lingo-gr.y     |    2 +-
 engines/director/lingo/lingo.cpp      |   17 +-
 engines/director/lingo/lingo.h        |   12 +-
 engines/director/types.h              |    7 +
 8 files changed, 1058 insertions(+), 1059 deletions(-)

diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index f0916fe8823..02c1cef86b8 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -875,266 +875,226 @@ void LC::c_within() {
 	}
 }
 
+Datum LC::chunkRef(ChunkType type, int startChunk, int endChunk, const Datum &src) {
+	// A chunk expression is made up of 0 or more chunks within a source text.
+	// These chunks are called chars, words, items, or lines, but it's easier to think of them
+	// as a substring between 0 or more skip characters and a break character (or the end of the string).
+	// This function returns a reference to the source text, the start index of the first chunk,
+	// and the end index of the last chunk in the chunk expression.
+
+	if (startChunk < 1 || (0 > endChunk && endChunk < startChunk))
+		return src;
+
+	if (endChunk < 1)
+		endChunk = startChunk;
+
+	Common::String skipChars;
+	Common::String breakChars;
+
+	switch (type) {
+	case kChunkChar:
+		skipChars = "";
+		breakChars = "";
+		break;
+	case kChunkWord:
+		skipChars = "\t\n\r ";
+		breakChars = "\t\n\r ";
+		break;
+	case kChunkItem:
+		skipChars = "";
+		breakChars = Common::String::format("%c", g_lingo->_itemDelimiter);
+		break;
+	case kChunkLine:
+		skipChars = "";
+		breakChars = "\n\r";
+		break;
+	}
+
+	Common::String str = src.asString();
+	int idx = 0;
+	int chunkNum = 0;
+
+	int startIdx = -1;
+	int endIdx = -1;
+
+	while (true) {
+		// each iteration processes one chunk
+
+		// find the start of the chunk
+		while (idx < (int)str.size() && skipChars.contains(str[idx])) {
+			idx++;
+		}
+		chunkNum++;
+		if (chunkNum == startChunk) {
+			startIdx = idx; // found start of chunk expression
+		}
+
+		// find the end of the chunk
+		if (!breakChars.empty()) {
+			while (idx < (int)str.size() && !breakChars.contains(str[idx])) {
+				idx++;
+			}
+		} else if (idx < (int)str.size()) {
+			idx++;
+		}
+		if (chunkNum == endChunk || idx == (int)str.size()) {
+			endIdx = idx; // found end of chunk expression
+			break;
+		}
+
+		if (!breakChars.empty())
+			idx++; // skip break char
+	}
+
+	if (startIdx < 0)
+		startIdx = endIdx;
+
+	Datum res;
+	res.u.cref = new ChunkReference(src, startIdx, endIdx);
+	res.type = CHUNKREF;
+	return res;
+}
+
 void LC::c_of() {
 	// put char 5 of word 1 of line 2 into field "thing"
-	Datum target = g_lingo->pop();
-	Datum last_line = g_lingo->pop();
-	Datum first_line = g_lingo->pop();
-	Datum last_item = g_lingo->pop();
-	Datum first_item = g_lingo->pop();
-	Datum last_word = g_lingo->pop();
-	Datum first_word = g_lingo->pop();
-	Datum last_char = g_lingo->pop();
-	Datum first_char = g_lingo->pop();
+	Datum src = g_lingo->pop();
+	Datum lastLine = g_lingo->pop();
+	Datum firstLine = g_lingo->pop();
+	Datum lastItem = g_lingo->pop();
+	Datum firstItem = g_lingo->pop();
+	Datum lastWord = g_lingo->pop();
+	Datum firstWord = g_lingo->pop();
+	Datum lastChar = g_lingo->pop();
+	Datum firstChar = g_lingo->pop();
 
-	Common::String result = target.asString();
+	Datum res = src;
 
-	if (first_line.u.i > 0) {
-		Common::String newline("\r");
-		int first = first_line.u.i;
-		int last = first;
-		if (last_line.u.i > 0) {
-			if ((first_item.u.i > 0) || (first_word.u.i > 0) || (first_char.u.i > 0)) {
-				warning("LC::c_of(): last_line defined but unused");
-			} else if (last_line.u.i < first_line.u.i) {
-				warning("LC::c_of(): last_line before first_line, ignoring");
-			} else {
-				last = last_line.u.i;
-			}
-		}
-		uint32 pointer = 0;
-		int curLine = 0;
-		int firstIndex = -1;
-		int lastIndex = -1;
-		while (pointer < result.size()) {
-			curLine += 1;
-			if (curLine == first) {
-				firstIndex = pointer;
-			}
-			pointer = result.find(newline, pointer);
-			if (curLine == last) {
-				lastIndex = pointer;
-				break;
-			}
-		}
-		if (firstIndex < 0 || lastIndex < 0) {
-			warning("LC::c_of(): first_line or last_line out of range");
-			result = "";
-		} else {
-			result = result.substr(firstIndex, lastIndex);
-		}
-	}
+	if (firstChar.asInt() > 0)
+		res = LC::chunkRef(kChunkChar, firstChar.asInt(), lastChar.asInt(), src);
+	else if (firstWord.asInt() > 0)
+		res = LC::chunkRef(kChunkWord, firstWord.asInt(), lastWord.asInt(), src);
+	else if (firstItem.asInt() > 0)
+		res = LC::chunkRef(kChunkItem, firstItem.asInt(), lastItem.asInt(), src);
+	else if (lastLine.asInt() > 0)
+		res = LC::chunkRef(kChunkLine, firstLine.asInt(), lastLine.asInt(), src);
 
-	if (first_item.u.i > 0 || last_item.u.i > 0) {
-		warning("STUB: LC::c_of() item indexing");
-	}
-
-	if (first_word.u.i > 0) {
-		int first = first_word.u.i;
-		int last = first;
-		if (last_word.u.i > 0) {
-			if (first_char.u.i > 0) {
-				warning("LC::c_of(): last_word defined but unused");
-			} else if (last_word.u.i < first_word.u.i) {
-				warning("LC::c_of(): last_word before first_word, ignoring");
-			} else {
-				last = last_word.u.i;
-			}
-		}
-		uint32 pointer = 0;
-		int curWord = 0;
-		int firstIndex = -1;
-		int lastIndex = -1;
-		bool inWord = false;
-		while (pointer < result.size()) {
-			if ((result[pointer] == '\r') || (result[pointer] == '\t') ||
-				(result[pointer] == '\n') || (result[pointer] == ' ')) {
-				if (inWord) {
-					inWord = false;
-					if (last == curWord) {
-						break;
-					}
-				}
-			} else {
-				if (!inWord) {
-					inWord = true;
-					curWord += 1;
-					if (first == curWord) {
-						firstIndex = pointer;
-					}
-				}
-			}
-			pointer += 1;
-		}
-		lastIndex = pointer;
-		if (firstIndex < 0) {
-			warning("LC::c_of(): first_word out of range");
-			result = "";
-		} else {
-			result = result.substr(firstIndex, lastIndex - firstIndex);
-		}
-	}
-
-	if (first_char.u.i > 0) {
-		int first = first_char.u.i;
-		int last = first;
-		if (last_char.u.i > 0) {
-			if (last_char.u.i < first_char.u.i) {
-				warning("LC::c_of(): last_char before first_char, ignoring");
-			} else {
-				last = last_char.u.i;
-			}
-		}
-		result = result.substr(first - 1, last - first);
-	}
-
-	target = Datum(result);
-
-	g_lingo->push(target);
+	g_lingo->push(res);
 }
 
 void LC::c_charOf() {
-	Datum d2 = g_lingo->pop(); // string
-	Datum d1 = g_lingo->pop(); // index
+	Datum src = g_lingo->pop(false);
+	Datum index = g_lingo->pop();
 
-    if ((d1.type != INT && d1.type != FLOAT) || d2.type != STRING) {
-		warning("LC::c_charOf(): Called with wrong data types: %s and %s", d1.type2str(), d2.type2str());
+    if ((index.type != INT && index.type != FLOAT)
+			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+		g_lingo->lingoError("LC::c_charOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
 	}
 
-	Datum res;
-	int index = d1.asInt();
-	Common::String chunkExpr = *d2.u.s;
-
-	if (index < 1)
-		res = Datum(chunkExpr);
-	else if (uint(index) > chunkExpr.size())
-		res = Datum("");
-	else
-		res = Datum(Common::String(chunkExpr[index - 1]));
-	g_lingo->push(res);
+	g_lingo->push(LC::chunkRef(kChunkChar, index.asInt(), 0, src));
 }
 
 void LC::c_charToOf() {
-	Datum d3 = g_lingo->pop(); // string
-	Datum d2 = g_lingo->pop(); // indexFrom
-	Datum d1 = g_lingo->pop(); // indexTo
+	Datum src = g_lingo->pop(false);
+	Datum indexTo = g_lingo->pop();
+	Datum indexFrom = g_lingo->pop();
 
-	if ((d1.type != INT && d1.type != FLOAT) || (d2.type != INT && d2.type != FLOAT) || d3.type != STRING) {
-		warning("LC::c_charToOf(): Called with wrong data types: %s, %s and %s", d1.type2str(), d2.type2str(), d3.type2str());
+	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)) {
+		warning("LC::c_charToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
 	}
 
-	int indexFrom = d1.asInt();
-	int indexTo = d2.asInt();
-	Common::String chunkExpr = *d3.u.s;
-
-	Datum res;
-	// The if order is important. It mimicks the checks, i.e. bugs, of Director 4.
-	if (indexFrom < 1)
-		res = Datum(chunkExpr);
-	else if (indexTo < 1)
-		res = Datum(Common::String(chunkExpr[indexFrom - 1])); // treat as charOf
-	else if (indexFrom > indexTo)
-		res = Datum("");
-	else if (uint(indexFrom) > chunkExpr.size())
-		res = Datum("");
-	else
-		res = Datum(chunkExpr.substr(indexFrom - 1, indexTo - indexFrom + 1));
-	g_lingo->push(res);
+	g_lingo->push(LC::chunkRef(kChunkChar, indexFrom.asInt(), indexTo.asInt(), src));
 }
 
 void LC::c_itemOf() {
+	Datum src = g_lingo->pop(false);
+	Datum index = g_lingo->pop();
 
-	Datum d2 = g_lingo->pop(); // chunkExpression
-	Datum d1 = g_lingo->pop(); // index
-
-	char delimiter = g_lingo->_itemDelimiter;
-
-	if ((d1.type != INT && d1.type != FLOAT) ||  d2.type != STRING) {
-		warning("LC::c_itemOf(): Called with wrong data types: %s and %s", d1.type2str(), d2.type2str());
+	if ((index.type != INT && index.type != FLOAT)
+			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+		warning("LC::c_itemOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
 		g_lingo->push(Datum(""));
 		return;
 	}
 
-	int index = d1.asInt();
-
-	if (index < 1) {
-		// returns the input string
-		g_lingo->push(d2);
-		return;
-	}
-	Common::String chunkExpr = *d2.u.s;
-	uint startPos = 0;
-
-	while (index-- > 1) {
-		startPos = chunkExpr.find(delimiter, startPos);
-		if (startPos == Common::String::npos)
-			break;
-		startPos++;  // skipping comma
-	}
-
-	Datum res;
-	if (startPos == Common::String::npos) {
-		res = Datum("");
-	} else {
-		uint endPos = chunkExpr.find(delimiter, startPos);
-		if (endPos == Common::String::npos)
-			endPos = chunkExpr.size();
-		res = Datum(chunkExpr.substr(startPos, endPos - startPos));
-	}
-
-	g_lingo->push(res);
+	g_lingo->push(LC::chunkRef(kChunkItem, index.asInt(), 0, src));
 }
 
 void LC::c_itemToOf() {
-	Datum d3 = g_lingo->pop();
-	Datum d2 = g_lingo->pop();
-	Datum d1 = g_lingo->pop();
+	Datum src = g_lingo->pop(false);
+	Datum indexTo = g_lingo->pop();
+	Datum indexFrom = g_lingo->pop();
 
-	warning("STUB: LC::c_itemToOf(): %d %d %d", d1.u.i, d2.u.i, d3.u.i);
+	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)) {
+		warning("LC::c_itemToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
+		g_lingo->push(Datum(""));
+		return;
+	}
 
-	g_lingo->push(d1);
+	g_lingo->push(LC::chunkRef(kChunkItem, indexFrom.asInt(), indexTo.asInt(), src));
 }
 
 void LC::c_lineOf() {
-	Datum d2 = g_lingo->pop();
-	Datum d1 = g_lingo->pop();
+	Datum src = g_lingo->pop(false);
+	Datum index = g_lingo->pop();
 
-	warning("STUB: LC::c_lineOf(): %d %d", d1.u.i, d2.u.i);
+	if ((index.type != INT && index.type != FLOAT)
+			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+		warning("LC::c_lineOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
+		g_lingo->push(Datum(""));
+		return;
+	}
 
-	g_lingo->push(d1);
+	g_lingo->push(LC::chunkRef(kChunkLine, index.asInt(), 0, src));
 }
 
 void LC::c_lineToOf() {
-	Datum d3 = g_lingo->pop();
-	Datum d2 = g_lingo->pop();
-	Datum d1 = g_lingo->pop();
+	Datum src = g_lingo->pop(false);
+	Datum indexTo = g_lingo->pop();
+	Datum indexFrom = g_lingo->pop();
 
-	warning("STUB: LC::c_lineToOf(): %d %d %d", d1.u.i, d2.u.i, d3.u.i);
+	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)) {
+		warning("LC::c_lineToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
+		g_lingo->push(Datum(""));
+		return;
+	}
 
-	g_lingo->push(d1);
+	g_lingo->push(LC::chunkRef(kChunkLine, indexFrom.asInt(), indexTo.asInt(), src));
 }
 
 void LC::c_wordOf() {
-	Datum d2 = g_lingo->pop();
-	Datum d1 = g_lingo->pop();
+	Datum src = g_lingo->pop(false);
+	Datum index = g_lingo->pop();
 
-	warning("STUB: LC::c_wordOf(): %d %d", d1.u.i, d2.u.i);
+	if ((index.type != INT && index.type != FLOAT)
+			|| (src.type != STRING && src.type != VAR && src.type != FIELDREF && src.type != CHUNKREF && src.type != CASTREF)) {
+		warning("LC::c_wordOf(): Called with wrong data types: %s and %s", index.type2str(), src.type2str());
+		g_lingo->push(Datum(""));
+		return;
+	}
 
-	g_lingo->push(d1);
+	g_lingo->push(LC::chunkRef(kChunkWord, index.asInt(), 0, src));
 }
 
 void LC::c_wordToOf() {
-	Datum d3 = g_lingo->pop();
-	Datum d2 = g_lingo->pop();
-	Datum d1 = g_lingo->pop();
+	Datum src = g_lingo->pop(false);
+	Datum indexTo = g_lingo->pop();
+	Datum indexFrom = g_lingo->pop();
 
-	warning("STUB: LC::c_wordToOf(): %d %d %d", d1.u.i, d2.u.i, d3.u.i);
+	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)) {
+		warning("LC::c_wordToOf(): Called with wrong data types: %s, %s and %s", indexTo.type2str(), indexFrom.type2str(), src.type2str());
+		g_lingo->push(Datum(""));
+		return;
+	}
 
-	g_lingo->push(d1);
+	g_lingo->push(LC::chunkRef(kChunkWord, indexFrom.asInt(), indexTo.asInt(), src));
 }
 
 void LC::c_and() {
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 461ccc1a920..c07a9a75d42 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -56,6 +56,7 @@ void c_starts();
 
 void c_intersects();
 void c_within();
+Datum chunkRef(ChunkType type, int startChunk, int endChunk, const Datum &src);
 void c_of();
 void c_charOf();
 void c_charToOf();
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 643a7b5a44c..9ff550f1792 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -235,159 +235,160 @@ enum yysymbol_kind_t
   YYSYMBOL_PARRAY = 11,                    /* PARRAY  */
   YYSYMBOL_CASTREF = 12,                   /* CASTREF  */
   YYSYMBOL_FIELDREF = 13,                  /* FIELDREF  */
-  YYSYMBOL_INT = 14,                       /* INT  */
-  YYSYMBOL_ARGC = 15,                      /* ARGC  */
-  YYSYMBOL_ARGCNORET = 16,                 /* ARGCNORET  */
-  YYSYMBOL_THEENTITY = 17,                 /* THEENTITY  */
-  YYSYMBOL_THEENTITYWITHID = 18,           /* THEENTITYWITHID  */
-  YYSYMBOL_THEMENUITEMENTITY = 19,         /* THEMENUITEMENTITY  */
-  YYSYMBOL_THEMENUITEMSENTITY = 20,        /* THEMENUITEMSENTITY  */
-  YYSYMBOL_FLOAT = 21,                     /* FLOAT  */
-  YYSYMBOL_THEFUNC = 22,                   /* THEFUNC  */
-  YYSYMBOL_THEFUNCINOF = 23,               /* THEFUNCINOF  */
-  YYSYMBOL_VARID = 24,                     /* VARID  */
-  YYSYMBOL_STRING = 25,                    /* STRING  */
-  YYSYMBOL_SYMBOL = 26,                    /* SYMBOL  */
-  YYSYMBOL_ENDCLAUSE = 27,                 /* ENDCLAUSE  */
-  YYSYMBOL_tPLAYACCEL = 28,                /* tPLAYACCEL  */
-  YYSYMBOL_tMETHOD = 29,                   /* tMETHOD  */
-  YYSYMBOL_THEOBJECTPROP = 30,             /* THEOBJECTPROP  */
-  YYSYMBOL_tCAST = 31,                     /* tCAST  */
-  YYSYMBOL_tFIELD = 32,                    /* tFIELD  */
-  YYSYMBOL_tSCRIPT = 33,                   /* tSCRIPT  */
-  YYSYMBOL_tWINDOW = 34,                   /* tWINDOW  */
-  YYSYMBOL_tDOWN = 35,                     /* tDOWN  */
-  YYSYMBOL_tELSE = 36,                     /* tELSE  */
-  YYSYMBOL_tELSIF = 37,                    /* tELSIF  */
-  YYSYMBOL_tEXIT = 38,                     /* tEXIT  */
-  YYSYMBOL_tGLOBAL = 39,                   /* tGLOBAL  */
-  YYSYMBOL_tGO = 40,                       /* tGO  */
-  YYSYMBOL_tGOLOOP = 41,                   /* tGOLOOP  */
-  YYSYMBOL_tIF = 42,                       /* tIF  */
-  YYSYMBOL_tIN = 43,                       /* tIN  */
-  YYSYMBOL_tINTO = 44,                     /* tINTO  */
-  YYSYMBOL_tMACRO = 45,                    /* tMACRO  */
-  YYSYMBOL_tMOVIE = 46,                    /* tMOVIE  */
-  YYSYMBOL_tNEXT = 47,                     /* tNEXT  */
-  YYSYMBOL_tOF = 48,                       /* tOF  */
-  YYSYMBOL_tPREVIOUS = 49,                 /* tPREVIOUS  */
-  YYSYMBOL_tPUT = 50,                      /* tPUT  */
-  YYSYMBOL_tREPEAT = 51,                   /* tREPEAT  */
-  YYSYMBOL_tSET = 52,                      /* tSET  */
-  YYSYMBOL_tTHEN = 53,                     /* tTHEN  */
-  YYSYMBOL_tTO = 54,                       /* tTO  */
-  YYSYMBOL_tWHEN = 55,                     /* tWHEN  */
-  YYSYMBOL_tWITH = 56,                     /* tWITH  */
-  YYSYMBOL_tWHILE = 57,                    /* tWHILE  */
-  YYSYMBOL_tFACTORY = 58,                  /* tFACTORY  */
-  YYSYMBOL_tOPEN = 59,                     /* tOPEN  */
-  YYSYMBOL_tPLAY = 60,                     /* tPLAY  */
-  YYSYMBOL_tINSTANCE = 61,                 /* tINSTANCE  */
-  YYSYMBOL_tGE = 62,                       /* tGE  */
-  YYSYMBOL_tLE = 63,                       /* tLE  */
-  YYSYMBOL_tEQ = 64,                       /* tEQ  */
-  YYSYMBOL_tNEQ = 65,                      /* tNEQ  */
-  YYSYMBOL_tAND = 66,                      /* tAND  */
-  YYSYMBOL_tOR = 67,                       /* tOR  */
-  YYSYMBOL_tNOT = 68,                      /* tNOT  */
-  YYSYMBOL_tMOD = 69,                      /* tMOD  */
-  YYSYMBOL_tAFTER = 70,                    /* tAFTER  */
-  YYSYMBOL_tBEFORE = 71,                   /* tBEFORE  */
-  YYSYMBOL_tCONCAT = 72,                   /* tCONCAT  */
-  YYSYMBOL_tCONTAINS = 73,                 /* tCONTAINS  */
-  YYSYMBOL_tSTARTS = 74,                   /* tSTARTS  */
-  YYSYMBOL_tCHAR = 75,                     /* tCHAR  */
-  YYSYMBOL_tITEM = 76,                     /* tITEM  */
-  YYSYMBOL_tLINE = 77,                     /* tLINE  */
-  YYSYMBOL_tWORD = 78,                     /* tWORD  */
-  YYSYMBOL_tSPRITE = 79,                   /* tSPRITE  */
-  YYSYMBOL_tINTERSECTS = 80,               /* tINTERSECTS  */
-  YYSYMBOL_tWITHIN = 81,                   /* tWITHIN  */
-  YYSYMBOL_tTELL = 82,                     /* tTELL  */
-  YYSYMBOL_tPROPERTY = 83,                 /* tPROPERTY  */
-  YYSYMBOL_tON = 84,                       /* tON  */
-  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_program = 105,                  /* program  */
-  YYSYMBOL_programline = 106,              /* programline  */
-  YYSYMBOL_ID = 107,                       /* ID  */
-  YYSYMBOL_asgn = 108,                     /* asgn  */
-  YYSYMBOL_stmtoneliner = 109,             /* stmtoneliner  */
-  YYSYMBOL_stmt = 110,                     /* stmt  */
-  YYSYMBOL_111_1 = 111,                    /* $@1  */
-  YYSYMBOL_112_2 = 112,                    /* $@2  */
-  YYSYMBOL_113_3 = 113,                    /* $@3  */
-  YYSYMBOL_114_4 = 114,                    /* $@4  */
-  YYSYMBOL_115_5 = 115,                    /* $@5  */
-  YYSYMBOL_116_6 = 116,                    /* $@6  */
-  YYSYMBOL_117_7 = 117,                    /* $@7  */
-  YYSYMBOL_118_8 = 118,                    /* $@8  */
-  YYSYMBOL_119_9 = 119,                    /* $@9  */
-  YYSYMBOL_startrepeat = 120,              /* startrepeat  */
-  YYSYMBOL_tellstart = 121,                /* tellstart  */
-  YYSYMBOL_asserterrorstart = 122,         /* asserterrorstart  */
-  YYSYMBOL_ifstmt = 123,                   /* ifstmt  */
-  YYSYMBOL_elseifstmtlist = 124,           /* elseifstmtlist  */
-  YYSYMBOL_elseifstmt = 125,               /* elseifstmt  */
-  YYSYMBOL_jumpifz = 126,                  /* jumpifz  */
-  YYSYMBOL_jump = 127,                     /* jump  */
-  YYSYMBOL_varassign = 128,                /* varassign  */
-  YYSYMBOL_if = 129,                       /* if  */
-  YYSYMBOL_lbl = 130,                      /* lbl  */
-  YYSYMBOL_stmtlist = 131,                 /* stmtlist  */
-  YYSYMBOL_stmtlistline = 132,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 133,       /* simpleexprnoparens  */
-  YYSYMBOL_134_10 = 134,                   /* $@10  */
-  YYSYMBOL_simpleexpr = 135,               /* simpleexpr  */
-  YYSYMBOL_expr = 136,                     /* expr  */
-  YYSYMBOL_chunkexpr = 137,                /* chunkexpr  */
-  YYSYMBOL_reference = 138,                /* reference  */
-  YYSYMBOL_proc = 139,                     /* proc  */
-  YYSYMBOL_140_11 = 140,                   /* $@11  */
-  YYSYMBOL_141_12 = 141,                   /* $@12  */
-  YYSYMBOL_142_13 = 142,                   /* $@13  */
-  YYSYMBOL_143_14 = 143,                   /* $@14  */
-  YYSYMBOL_globallist = 144,               /* globallist  */
-  YYSYMBOL_propertylist = 145,             /* propertylist  */
-  YYSYMBOL_instancelist = 146,             /* instancelist  */
-  YYSYMBOL_gotofunc = 147,                 /* gotofunc  */
-  YYSYMBOL_gotomovie = 148,                /* gotomovie  */
-  YYSYMBOL_playfunc = 149,                 /* playfunc  */
-  YYSYMBOL_150_15 = 150,                   /* $@15  */
-  YYSYMBOL_defn = 151,                     /* defn  */
-  YYSYMBOL_152_16 = 152,                   /* $@16  */
-  YYSYMBOL_153_17 = 153,                   /* $@17  */
-  YYSYMBOL_on = 154,                       /* on  */
-  YYSYMBOL_155_18 = 155,                   /* $@18  */
-  YYSYMBOL_argname = 156,                  /* argname  */
-  YYSYMBOL_argdef = 157,                   /* argdef  */
-  YYSYMBOL_endargdef = 158,                /* endargdef  */
-  YYSYMBOL_argstore = 159,                 /* argstore  */
-  YYSYMBOL_arglist = 160,                  /* arglist  */
-  YYSYMBOL_nonemptyarglist = 161,          /* nonemptyarglist  */
-  YYSYMBOL_list = 162,                     /* list  */
-  YYSYMBOL_valuelist = 163,                /* valuelist  */
-  YYSYMBOL_linearlist = 164,               /* linearlist  */
-  YYSYMBOL_proplist = 165,                 /* proplist  */
-  YYSYMBOL_proppair = 166                  /* proppair  */
+  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  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -697,10 +698,10 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  102
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1980
+#define YYLAST   2006
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  104
+#define YYNTOKENS  105
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  63
 /* YYNRULES -- Number of rules.  */
@@ -709,7 +710,7 @@ union yyalloc
 #define YYNSTATES  394
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   343
+#define YYMAXUTOK   344
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -724,15 +725,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      97,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      98,     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,    96,    91,     2,
-      98,    99,    94,    92,   100,    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,    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,   101,     2,   102,     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,7 +758,7 @@ static const yytype_int8 yytranslate[] =
       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
+      85,    86,    87,    88,    89
 };
 
 #if YYDEBUG
@@ -802,15 +803,15 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   {
   "end of file", "error", "invalid token", "UNARY", "VOID", "VAR",
   "POINT", "RECT", "ARRAY", "OBJECT", "LEXERROR", "PARRAY", "CASTREF",
-  "FIELDREF", "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",
+  "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", "'<'", "'>'", "'&'", "'+'",
@@ -844,13 +845,13 @@ 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,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,    60,
-      62,    38,    43,    45,    42,    47,    37,    10,    40,    41,
-      44,    91,    93,    58
+     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
 };
 #endif
 
-#define YYPACT_NINF (-329)
+#define YYPACT_NINF (-359)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -864,46 +865,46 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     586,   -84,  -329,  -329,  -329,  -329,  -329,  -329,  -329,   -34,
-    -329,  1054,  -329,  -329,  -329,   -26,  1175,    21,   262,   156,
-     156,  1257,  1136,  -329,  1257,  -329,  -329,  -329,     5,  -329,
-    1284,  -329,  -329,  -329,  -329,  1257,  -329,  -329,  -329,  -329,
-    -329,  -329,  1257,  -329,  -329,   156,  -329,  -329,  1257,  -329,
-     -17,  1257,  -329,  -329,  -329,  1366,  1366,  1366,  1366,  1257,
-    -329,    -3,  -329,  1257,  1257,  1257,  1257,  1257,  1257,  1257,
-    1257,  1257,  1015,   -65,  -329,  -329,  1357,  -329,  -329,  -329,
-    -329,   156,  -329,   156,   508,   156,  -329,   -38,  1257,  1257,
-     -32,     7,    -7,  -329,  1714,  1357,  -329,   156,  1658,   156,
-     156,   406,  -329,   586,  1257,  1761,  -329,  1885,   156,  -329,
-     156,   -30,  -329,  -329,  1257,  -329,  -329,  -329,  -329,  -329,
-    1885,  1257,  -329,  1406,  1440,  1474,  1508,  1851,  -329,  -329,
-    1813,   -37,   -28,  -329,   -74,  1885,   -29,    -8,    -2,  -329,
-    1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,
-    1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,  -329,  -329,
-    1257,   160,   160,   160,   -20,  1257,  1257,  1257,  1700,    63,
-    1257,  1257,  1257,  1257,  1257,  1257,  -329,    12,  -329,  -329,
-    -329,    14,  -329,  -329,  -329,  -329,   -12,  1748,    25,  1257,
-      73,  -329,    32,    37,    39,   156,  -329,  1885,  1257,  1257,
-    1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,  -329,  1257,
-    1257,  1257,  -329,  1257,    97,    -4,    43,   -57,   -57,   -57,
-     -57,   268,   268,  -329,   -41,   -57,   -57,   -57,   -57,   -41,
-     -55,   -55,  -329,  -329,   156,    94,  -329,  -329,  -329,  -329,
-    -329,  -329,  1257,  1257,  1885,  1885,  1885,  1257,  1257,   156,
-    1885,  1885,  1885,  1885,  1885,  1885,   156,   406,   816,   156,
-    -329,  -329,  -329,  -329,   754,   156,  -329,  -329,  -329,  -329,
-    1542,  -329,  1576,  -329,  1610,  -329,  1644,  -329,  -329,  1885,
-    1885,  1885,  1885,   -37,   -28,    41,  -329,  -329,  -329,  -329,
-      48,  1257,  1885,   134,  -329,  1885,    79,  1257,  -329,  -329,
-    -329,  -329,    49,  -329,  1257,  -329,  -329,   648,   701,  1257,
-    1257,  1257,  1257,  1257,  -329,  1885,  -329,  -329,  -329,   877,
-      20,  -329,    62,   479,  1800,    51,  -329,   125,  -329,  -329,
-    -329,  -329,  -329,    54,   701,  -329,  -329,  -329,  -329,  1257,
-    1257,  -329,  -329,  1257,  -329,    53,   156,  -329,  -329,  -329,
-     101,   121,    74,  1885,  1885,  -329,   938,  1257,  -329,    82,
-    -329,    59,  -329,  1257,   114,  -329,  -329,  1885,  -329,   156,
-    -329,  1885,  1257,    90,   129,  -329,   877,  -329,  1885,  -329,
-     754,    92,  -329,  -329,  -329,  -329,   877,  -329,  -329,   116,
-     877,  -329,   118,  -329
+     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
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -956,13 +957,13 @@ static const yytype_uint8 yydefact[] =
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -329,  -329,   102,     0,  -329,  -100,     6,  -329,  -329,  -329,
-    -329,  -329,  -329,  -329,  -329,  -329,  -320,    29,  -329,  -329,
-    -329,  -329,  -242,  -328,  -108,  -329,   -39,  -243,  -329,     2,
-    -329,   -21,   250,   -44,  -329,  -329,  -329,  -329,  -329,  -329,
-      16,   -47,   -43,  -329,   -13,  -329,  -329,  -329,  -329,  -329,
-    -329,  -329,  -329,  -107,  -329,  -259,   -35,  -302,  -329,  -329,
-    -329,  -329,     1
+    -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
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
@@ -982,28 +983,28 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      30,   184,   294,   194,   110,   102,    33,   109,   308,    96,
-     352,   333,   147,    41,   147,   148,   166,    44,    91,    92,
-      93,   305,   170,   242,   140,    82,   167,   113,   147,   211,
-     115,   114,   171,   140,   153,   154,   155,   156,   157,   156,
-     157,   355,   122,   121,   243,   111,   174,   165,   128,   129,
-     376,   154,   155,   156,   157,   334,   388,   116,   117,   118,
-     119,   172,   386,   158,   327,   328,   209,   390,   169,   188,
-     195,   173,   134,   212,   339,   210,   338,    85,    86,   -24,
-     342,   159,   176,   160,   340,   164,   140,   260,   261,   356,
-     357,   348,   213,   196,   140,   287,   288,   177,   214,   181,
-     183,    30,   103,    30,   186,   216,   -24,   362,   191,    33,
-     191,   249,   256,   366,   259,   -24,   -24,   237,   239,   241,
-     234,     2,   283,   284,   262,   374,   264,   290,     5,     6,
-       7,     8,   265,   381,   266,   382,   267,   384,   291,   235,
-     215,   387,   289,   389,   211,   314,   323,   392,   147,   341,
-     344,   148,   346,   347,   263,   363,   364,   299,   306,   369,
-     365,   236,   238,   240,   -24,   -24,   -24,   368,   372,   -38,
-     153,   154,   155,   156,   157,   379,   -24,   269,   385,   271,
-       2,   273,   380,   275,     2,   277,   278,     5,     6,     7,
-       8,    55,    56,     7,     8,   111,   141,   142,   143,   144,
+      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,   286,     0,     0,     0,     0,
+     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,
@@ -1029,8 +1030,8 @@ static const yytype_int16 yytable[] =
        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,     0,   -67,
-       1,     0,     0,     0,     0,     0,     0,     0,     0,    25,
+       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,
@@ -1040,421 +1041,425 @@ static const yytype_int16 yytable[] =
        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,     0,    -4,     1,     0,   353,
+     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,   -67,     1,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     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,     2,     0,    27,   -67,     3,     0,     0,     5,
-       6,     7,     8,    -4,     0,     0,     9,    10,    11,    12,
-      13,     0,     0,     0,     0,    15,     0,     0,    16,    17,
-      18,   -67,     1,    19,     0,     0,     0,    21,    22,    23,
+      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,     2,     0,     0,     0,     3,
-      24,    25,     5,     6,     7,     8,    27,     0,     0,     9,
-      10,    11,    12,    13,     0,   -67,     0,     0,    15,     0,
-       0,    16,    17,    18,     0,     1,    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,     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,     1,     0,     0,
+       0,     0,     0,    21,    22,    23,     0,     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,    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,     0,     0,     0,     0,    24,    25,
-       0,     2,     0,   -67,    27,     3,     0,     0,     5,     6,
-       7,     8,     0,   -67,     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,    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,     0,     0,     0,     0,     0,     0,     0,    24,
-      25,     0,     2,   -67,     0,    27,     3,     0,     0,     5,
-       6,     7,     8,     0,   -67,     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,    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,     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,
+       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,   200,     0,
-       0,     0,     0,     0,   201,   151,   152,   153,   154,   155,
+     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,   202,     0,     0,     0,     0,     0,   203,   151,
+       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,   204,     0,     0,     0,
-       0,     0,   205,   151,   152,   153,   154,   155,   156,   157,
+       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,
-     309,     0,     0,     0,     0,     0,     0,   151,   152,   153,
+     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,   310,     0,     0,     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,   311,     0,
+     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,     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,
+     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,
-     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,
+     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,   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
+     151,   152,   153,   154,   155,   156,   157
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   101,   244,   110,    43,     0,     0,    42,   267,    22,
-     338,   313,    69,    97,    69,    72,    54,    51,    18,    19,
-      20,   264,    54,    43,    98,    51,    64,    48,    69,   103,
-      51,    48,    64,    98,    91,    92,    93,    94,    95,    94,
-      95,   343,    63,    46,    64,    45,    53,    86,    69,    70,
-     370,    92,    93,    94,    95,   314,   384,    55,    56,    57,
-      58,    54,   382,    76,   307,   308,   103,   387,    89,   104,
-     100,    64,    72,   102,    54,   103,   319,    56,    57,     0,
-     323,    81,    95,    83,    64,    85,    98,    99,   100,    36,
-      37,   334,   100,   114,    98,    99,   100,    97,   100,    99,
-     100,   101,    97,   103,   104,   140,    27,   349,   108,   103,
-     110,    48,   100,   356,   100,    36,    37,   161,   162,   163,
-     159,    24,    25,    26,    99,   367,    53,   234,    31,    32,
-      33,    34,   100,   376,    97,   377,    97,   380,    44,   160,
-     140,   383,    99,   386,   103,    97,    97,   390,    69,    87,
-      99,    72,    27,    99,   189,    54,    35,   257,   265,   100,
-      86,   161,   162,   163,    85,    86,    87,    85,    54,    35,
-      91,    92,    93,    94,    95,    85,    97,   198,    86,   200,
-      24,   202,    53,   204,    24,   206,   207,    31,    32,    33,
-      34,    31,    32,    33,    34,   195,    62,    63,    64,    65,
-      66,    67,    86,    69,    86,   103,    72,    73,    74,   180,
-     318,   195,   259,   256,   214,   214,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,   234,    75,    76,    77,    78,    -1,
+       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,    17,
-      18,    19,    -1,    -1,    -1,    35,    24,    -1,   309,   310,
-     311,   312,    30,    31,    32,    33,    34,    -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,
-      62,    63,    64,    65,   334,    -1,    -1,    69,    88,    -1,
-      72,    73,    74,    -1,    -1,    -1,   346,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,    -1,   356,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,   369,
+      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,
-      24,    -1,    -1,    -1,    28,    -1,    -1,    31,    32,    33,
-      34,    -1,    -1,    -1,    38,    39,    40,    41,    -1,   199,
-      -1,   201,    -1,   203,    -1,   205,    50,    -1,    52,   209,
-     210,   211,    -1,   213,    -1,    59,    60,    61,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
-       1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
+      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,    24,    -1,    -1,    27,    28,    -1,    -1,
-      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
-      41,    42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,
-      51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,
-      61,   291,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    44,    -1,   304,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    83,   313,    85,    86,    87,    88,    -1,    -1,
-      62,    63,    64,    65,    66,    67,    97,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    -1,     0,     1,    -1,   339,
-     340,    -1,    -1,   343,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,   357,    -1,    -1,
-      24,    -1,    -1,   363,    28,    29,    -1,    31,    32,    33,
-      34,    -1,   372,    -1,    38,    39,    40,    41,    42,    -1,
-      -1,    45,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
-      -1,    55,    -1,    -1,    58,    59,    60,    61,     0,     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,    -1,    -1,    -1,    82,    83,
-      84,    -1,    24,    -1,    88,    27,    28,    -1,    -1,    31,
-      32,    33,    34,    97,    -1,    -1,    38,    39,    40,    41,
-      42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,
-      52,     0,     1,    55,    -1,    -1,    -1,    59,    60,    61,
+      -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,    24,    -1,    -1,    -1,    28,
-      82,    83,    31,    32,    33,    34,    88,    -1,    -1,    38,
-      39,    40,    41,    42,    -1,    97,    -1,    -1,    47,    -1,
-      -1,    50,    51,    52,    -1,     1,    55,    -1,    -1,    -1,
-      59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    -1,
-      -1,    -1,    28,    82,    83,    31,    32,    33,    34,    88,
-      36,    37,    38,    39,    40,    41,    42,    -1,    97,    -1,
-      -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,    55,
-      -1,    -1,    -1,    59,    60,    61,    -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,    82,    83,    -1,    85,
-      24,    -1,    88,    -1,    28,    -1,    -1,    31,    32,    33,
-      34,    97,    -1,    -1,    38,    39,    40,    41,    42,    -1,
-      -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
-      -1,    55,    -1,    -1,    -1,    59,    60,    61,     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,    -1,    -1,    -1,    -1,    82,    83,
-      -1,    24,    -1,    87,    88,    28,    -1,    -1,    31,    32,
-      33,    34,    -1,    97,    -1,    38,    39,    40,    41,    42,
-      -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,
-      -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      83,    -1,    24,    86,    -1,    88,    28,    -1,    -1,    31,
-      32,    33,    34,    -1,    97,    -1,    38,    39,    40,    41,
-      42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,
-      52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,
+      -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,
       -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,
-      82,    83,    -1,    85,    -1,    -1,    88,    -1,    -1,    14,
-      -1,    -1,    17,    18,    -1,    97,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    14,    -1,
-      -1,    17,    18,    -1,    -1,    21,    22,    23,    24,    25,
-      26,    -1,    -1,    68,    30,    31,    32,    33,    34,    -1,
-      75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    -1,    98,    -1,    -1,   101,    -1,   103,    -1,
-      -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
-      76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,
-      14,    -1,    98,    17,    18,   101,    -1,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    -1,    48,    -1,    -1,    -1,    -1,    14,
-      -1,    -1,    17,    18,    -1,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    68,    30,    31,    32,    33,    34,
-      -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,
-      -1,    -1,    -1,    -1,    98,    -1,    -1,   101,    -1,    -1,
-      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    14,    -1,    98,    17,    18,   101,    -1,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    14,    -1,
-      -1,    17,    18,    -1,    -1,    21,    22,    23,    24,    25,
-      26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
-      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
-      93,    -1,    68,    -1,    -1,    98,    -1,    -1,   101,    75,
-      76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,
-      14,    -1,    98,    17,    18,   101,    -1,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
-      34,    -1,    -1,    46,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
-      73,    74,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,
-      -1,    75,    76,    77,    78,    79,    89,    90,    91,    92,
-      93,    94,    95,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,   101,    62,    63,
-      64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    54,    89,    90,    91,    92,    93,
-      94,    95,    62,    63,    64,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    89,
-      90,    91,    92,    93,    94,    95,    62,    63,    64,    65,
-      66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,    54,    89,    90,    91,    92,    93,    94,    95,
-      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      48,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    62,    63,    64,    65,    66,    67,
-      -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    91,    92,    93,    94,    95,    62,    63,
-      64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    95,    62,    63,    64,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    62,    63,    64,    65,
-      66,    67,    54,    69,    -1,    -1,    72,    73,    74,    -1,
-      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    89,    90,    91,    92,    93,    94,    95,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    54,    97,    -1,    -1,    -1,    -1,
-      -1,    -1,    62,    63,    64,    65,    66,    67,    -1,    69,
-      56,    -1,    72,    73,    74,    -1,    62,    63,    64,    65,
-      66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
-      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    62,    63,    64,    65,    66,    67,    -1,
-      69,    -1,    -1,    72,    73,    74,    -1,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    99,   100,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
-      -1,   100,    62,    63,    64,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    62,    63,    64,    65,    66,
-      67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,    89,
-      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
-     100,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    -1,    99,    62,    63,    64,    65,    66,    67,    -1,
-      69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
-      -1,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    62,    63,    64,
-      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
-      95
+      90,    91,    92,    93,    94,    95,    96
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     1,    24,    28,    29,    31,    32,    33,    34,    38,
-      39,    40,    41,    42,    45,    47,    50,    51,    52,    55,
-      58,    59,    60,    61,    82,    83,    84,    88,   105,   106,
-     107,   108,   109,   110,   123,   129,   139,   147,   149,   151,
-     154,    97,   150,   153,    51,   140,    14,    17,    18,    21,
-      22,    23,    25,    26,    30,    31,    32,    33,    34,    46,
-      47,    48,    49,    68,    75,    76,    77,    78,    79,    92,
-      93,    98,   101,   107,   133,   135,   136,   137,   138,   148,
-     162,   152,    51,    20,   136,    56,    57,    17,    18,    19,
-      30,   107,   107,   107,   136,   136,   148,   142,   136,   141,
-     155,   122,     0,    97,    98,   136,   160,   136,   130,   160,
-     130,   107,   144,   135,    48,   135,   133,   133,   133,   133,
-     136,    46,   135,   136,   136,   136,   136,   136,   135,   135,
-     136,    25,    26,   103,   107,   136,   163,   164,   165,   166,
-      98,    62,    63,    64,    65,    66,    67,    69,    72,    73,
-      74,    89,    90,    91,    92,    93,    94,    95,   148,   107,
-     107,    44,    70,    71,   107,   130,    54,    64,   136,   135,
-      54,    64,    54,    64,    53,    56,   148,   107,   146,    54,
-      97,   107,   145,   107,   109,   106,   107,   136,   160,   100,
-     126,   107,   156,   157,   157,   100,   135,   136,    48,    54,
-      48,    54,    48,    54,    48,    54,    80,    81,    99,   103,
-     103,   103,   102,   100,   100,   107,   160,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   130,   135,   107,   137,   107,   137,
-     107,   137,    43,    64,   136,   136,   136,    54,    64,    48,
-     136,   136,   136,   136,   136,   136,   100,   121,   121,   100,
-      99,   100,    99,   160,    53,   100,    97,    97,   144,   135,
-     136,   135,   136,   135,   136,   135,   136,   135,   135,   136,
-     136,   136,   136,    25,    26,   107,   166,    99,   100,    99,
-     157,    44,   136,   136,   126,   136,   136,   107,   146,   109,
-     110,   131,   132,   145,   143,   131,   157,   159,   159,    48,
-      48,    48,    48,   134,    97,   136,   117,   111,   114,   120,
-     135,   130,   130,    97,   136,   161,   127,   131,   131,   135,
-     135,   135,   135,   161,   159,   130,   128,   128,   131,    54,
-      64,    87,   131,   100,    99,   124,    27,    99,   131,   118,
-     112,   115,   127,   136,   136,   161,    36,    37,   125,   130,
-     107,   158,   126,    54,    35,    86,   131,   136,    85,   100,
-     119,   136,    54,   130,   126,   107,   120,   113,   136,    85,
-      53,   131,   126,   116,   131,    86,   120,   126,   127,   131,
-     120,    86,   131,    86
+       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
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   104,   105,   105,   106,   106,   106,   107,   107,   107,
-     107,   107,   108,   108,   108,   108,   108,   108,   108,   108,
-     108,   108,   108,   108,   108,   108,   108,   108,   108,   109,
-     109,   110,   110,   110,   111,   112,   113,   110,   114,   115,
-     116,   110,   117,   118,   119,   110,   110,   110,   110,   110,
-     110,   110,   120,   121,   122,   123,   123,   124,   124,   125,
-     126,   127,   128,   129,   130,   131,   131,   132,   132,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   134,   133,   133,   133,
-     135,   135,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+       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,   139,   139,   139,   139,   139,   140,   139,
-     141,   139,   142,   139,   139,   139,   139,   143,   139,   139,
-     139,   144,   144,   144,   145,   145,   145,   146,   146,   146,
-     147,   147,   147,   147,   147,   147,   148,   148,   149,   149,
-     149,   150,   149,   152,   151,   151,   153,   151,   151,   151,
-     155,   154,   156,   157,   157,   157,   158,   158,   158,   159,
-     160,   160,   160,   161,   161,   161,   162,   163,   163,   163,
-     163,   164,   164,   165,   165,   166,   166,   166
+     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
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1753,61 +1758,61 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_THEFUNC: /* THEFUNC  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1757 "engines/director/lingo/lingo-gr.cpp"
+#line 1762 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_THEFUNCINOF: /* THEFUNCINOF  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1763 "engines/director/lingo/lingo-gr.cpp"
+#line 1768 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_VARID: /* VARID  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1769 "engines/director/lingo/lingo-gr.cpp"
+#line 1774 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_STRING: /* STRING  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1775 "engines/director/lingo/lingo-gr.cpp"
+#line 1780 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_SYMBOL: /* SYMBOL  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1781 "engines/director/lingo/lingo-gr.cpp"
+#line 1786 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ENDCLAUSE: /* ENDCLAUSE  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1787 "engines/director/lingo/lingo-gr.cpp"
+#line 1792 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1793 "engines/director/lingo/lingo-gr.cpp"
+#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 1799 "engines/director/lingo/lingo-gr.cpp"
+#line 1804 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1805 "engines/director/lingo/lingo-gr.cpp"
+#line 1810 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_on: /* on  */
 #line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1811 "engines/director/lingo/lingo-gr.cpp"
+#line 1816 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2075,25 +2080,25 @@ yyreduce:
   case 8: /* ID: tCAST  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2079 "engines/director/lingo/lingo-gr.cpp"
+#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 2085 "engines/director/lingo/lingo-gr.cpp"
+#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 2091 "engines/director/lingo/lingo-gr.cpp"
+#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 2097 "engines/director/lingo/lingo-gr.cpp"
+#line 2102 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* asgn: tPUT expr tINTO ID  */
@@ -2105,7 +2110,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2109 "engines/director/lingo/lingo-gr.cpp"
+#line 2114 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* asgn: tPUT expr tINTO chunkexpr  */
@@ -2113,7 +2118,7 @@ yyreduce:
                                         {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2117 "engines/director/lingo/lingo-gr.cpp"
+#line 2122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14: /* asgn: tPUT THEMENUITEMSENTITY ID simpleexpr tINTO expr  */
@@ -2129,7 +2134,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2133 "engines/director/lingo/lingo-gr.cpp"
+#line 2138 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* asgn: tPUT expr tAFTER ID  */
@@ -2141,7 +2146,7 @@ yyreduce:
 		g_lingo->code1(LC::c_putafter);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2145 "engines/director/lingo/lingo-gr.cpp"
+#line 2150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* asgn: tPUT expr tAFTER chunkexpr  */
@@ -2149,7 +2154,7 @@ yyreduce:
                                         {
 		g_lingo->code1(LC::c_putafter);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2153 "engines/director/lingo/lingo-gr.cpp"
+#line 2158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* asgn: tPUT expr tBEFORE ID  */
@@ -2161,7 +2166,7 @@ yyreduce:
 		g_lingo->code1(LC::c_putbefore);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2165 "engines/director/lingo/lingo-gr.cpp"
+#line 2170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18: /* asgn: tPUT expr tBEFORE chunkexpr  */
@@ -2169,7 +2174,7 @@ yyreduce:
                                         {
 		g_lingo->code1(LC::c_putbefore);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2173 "engines/director/lingo/lingo-gr.cpp"
+#line 2178 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* asgn: tSET ID tEQ expr  */
@@ -2181,7 +2186,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2185 "engines/director/lingo/lingo-gr.cpp"
+#line 2190 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* asgn: tSET THEENTITY tEQ expr  */
@@ -2193,7 +2198,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2197 "engines/director/lingo/lingo-gr.cpp"
+#line 2202 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 21: /* asgn: tSET ID tTO expr  */
@@ -2205,7 +2210,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2209 "engines/director/lingo/lingo-gr.cpp"
+#line 2214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* asgn: tSET THEENTITY tTO expr  */
@@ -2217,7 +2222,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2221 "engines/director/lingo/lingo-gr.cpp"
+#line 2226 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* asgn: tSET THEENTITYWITHID expr tTO expr  */
@@ -2228,7 +2233,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2232 "engines/director/lingo/lingo-gr.cpp"
+#line 2237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 24: /* asgn: tSET THEENTITYWITHID expr tEQ expr  */
@@ -2239,7 +2244,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2243 "engines/director/lingo/lingo-gr.cpp"
+#line 2248 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* asgn: tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tTO expr  */
@@ -2255,7 +2260,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2259 "engines/director/lingo/lingo-gr.cpp"
+#line 2264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* asgn: tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tEQ expr  */
@@ -2271,7 +2276,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2275 "engines/director/lingo/lingo-gr.cpp"
+#line 2280 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* asgn: tSET THEOBJECTPROP tTO expr  */
@@ -2283,7 +2288,7 @@ yyreduce:
 		delete (yyvsp[-2].objectprop).obj;
 		delete (yyvsp[-2].objectprop).prop;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2287 "engines/director/lingo/lingo-gr.cpp"
+#line 2292 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* asgn: tSET THEOBJECTPROP tEQ expr  */
@@ -2295,7 +2300,7 @@ yyreduce:
 		delete (yyvsp[-2].objectprop).obj;
 		delete (yyvsp[-2].objectprop).prop;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2299 "engines/director/lingo/lingo-gr.cpp"
+#line 2304 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* stmt: tREPEAT tWHILE lbl expr jumpifz startrepeat stmtlist jump tENDREPEAT  */
@@ -2307,7 +2312,7 @@ yyreduce:
 		(*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 2311 "engines/director/lingo/lingo-gr.cpp"
+#line 2316 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* $@1: %empty  */
@@ -2315,20 +2320,20 @@ yyreduce:
                                 { g_lingo->code1(LC::c_varpush);
 				  g_lingo->codeString((yyvsp[-2].s)->c_str());
 				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2319 "engines/director/lingo/lingo-gr.cpp"
+#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 2326 "engines/director/lingo/lingo-gr.cpp"
+#line 2331 "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 2332 "engines/director/lingo/lingo-gr.cpp"
+#line 2337 "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  */
@@ -2353,7 +2358,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
 		endRepeat(pos + 1, nextPos); }
-#line 2357 "engines/director/lingo/lingo-gr.cpp"
+#line 2362 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* $@4: %empty  */
@@ -2361,20 +2366,20 @@ yyreduce:
                                 { g_lingo->code1(LC::c_varpush);
 				  g_lingo->codeString((yyvsp[-2].s)->c_str());
 				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2365 "engines/director/lingo/lingo-gr.cpp"
+#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 2372 "engines/director/lingo/lingo-gr.cpp"
+#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 2378 "engines/director/lingo/lingo-gr.cpp"
+#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  */
@@ -2399,7 +2404,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
 		endRepeat(pos + 1, nextPos); }
-#line 2403 "engines/director/lingo/lingo-gr.cpp"
+#line 2408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* $@7: %empty  */
@@ -2410,7 +2415,7 @@ yyreduce:
 				  g_lingo->codeFunc(&count, 1);
 				  g_lingo->code1(LC::c_intpush);	// start counter
 				  g_lingo->codeInt(1); }
-#line 2414 "engines/director/lingo/lingo-gr.cpp"
+#line 2419 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* $@8: %empty  */
@@ -2420,7 +2425,7 @@ yyreduce:
 				  g_lingo->code1(LC::c_stackpeek);	// get array size
 				  g_lingo->codeInt(2);
 				  g_lingo->code1(LC::c_le); }
-#line 2424 "engines/director/lingo/lingo-gr.cpp"
+#line 2429 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* $@9: %empty  */
@@ -2435,7 +2440,7 @@ yyreduce:
 				  g_lingo->codeString((yyvsp[-6].s)->c_str());
 				  mVar((yyvsp[-6].s), globalCheck());
 				  g_lingo->code1(LC::c_assign); }
-#line 2439 "engines/director/lingo/lingo-gr.cpp"
+#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  */
@@ -2459,7 +2464,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[jump + 1] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
 		endRepeat(end2, nextPos); }
-#line 2463 "engines/director/lingo/lingo-gr.cpp"
+#line 2468 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* stmt: tNEXT tREPEAT  */
@@ -2472,7 +2477,7 @@ yyreduce:
 		} else {
 			warning("# LINGO: next repeat not inside repeat block");
 		} }
-#line 2476 "engines/director/lingo/lingo-gr.cpp"
+#line 2481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* stmt: tWHEN ID tTHEN expr  */
@@ -2480,49 +2485,49 @@ yyreduce:
                                 {
 		g_lingo->code1(LC::c_whencode);
 		g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2484 "engines/director/lingo/lingo-gr.cpp"
+#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 2490 "engines/director/lingo/lingo-gr.cpp"
+#line 2495 "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 2496 "engines/director/lingo/lingo-gr.cpp"
+#line 2501 "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 2502 "engines/director/lingo/lingo-gr.cpp"
+#line 2507 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* stmt: error '\n'  */
 #line 516 "engines/director/lingo/lingo-gr.y"
                                         { yyerrok; }
-#line 2508 "engines/director/lingo/lingo-gr.cpp"
+#line 2513 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* startrepeat: %empty  */
 #line 518 "engines/director/lingo/lingo-gr.y"
                                 { startRepeat(); }
-#line 2514 "engines/director/lingo/lingo-gr.cpp"
+#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 2520 "engines/director/lingo/lingo-gr.cpp"
+#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 2526 "engines/director/lingo/lingo-gr.cpp"
+#line 2531 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist lbl tENDIF  */
@@ -2534,7 +2539,7 @@ yyreduce:
 		(*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 2538 "engines/director/lingo/lingo-gr.cpp"
+#line 2543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist tELSE stmtlist lbl tENDIF  */
@@ -2546,7 +2551,7 @@ yyreduce:
 		(*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 2550 "engines/director/lingo/lingo-gr.cpp"
+#line 2555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* elseifstmt: tELSIF expr jumpifz tTHEN stmtlist jump  */
@@ -2556,7 +2561,7 @@ yyreduce:
 		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 2560 "engines/director/lingo/lingo-gr.cpp"
+#line 2565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* jumpifz: %empty  */
@@ -2564,7 +2569,7 @@ yyreduce:
                                 {
 		g_lingo->code2(LC::c_jumpifz, 0);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2568 "engines/director/lingo/lingo-gr.cpp"
+#line 2573 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* jump: %empty  */
@@ -2572,7 +2577,7 @@ yyreduce:
                                 {
 		g_lingo->code2(LC::c_jump, 0);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2576 "engines/director/lingo/lingo-gr.cpp"
+#line 2581 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* varassign: %empty  */
@@ -2580,20 +2585,20 @@ yyreduce:
                                         {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2584 "engines/director/lingo/lingo-gr.cpp"
+#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 2591 "engines/director/lingo/lingo-gr.cpp"
+#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 2597 "engines/director/lingo/lingo-gr.cpp"
+#line 2602 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* simpleexprnoparens: INT  */
@@ -2601,7 +2606,7 @@ yyreduce:
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* simpleexprnoparens: FLOAT  */
@@ -2609,7 +2614,7 @@ yyreduce:
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2613 "engines/director/lingo/lingo-gr.cpp"
+#line 2618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* simpleexprnoparens: SYMBOL  */
@@ -2618,7 +2623,7 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* simpleexprnoparens: STRING  */
@@ -2627,25 +2632,25 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#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 2637 "engines/director/lingo/lingo-gr.cpp"
+#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 2643 "engines/director/lingo/lingo-gr.cpp"
+#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 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* simpleexprnoparens: THEENTITY  */
@@ -2658,7 +2663,7 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2662 "engines/director/lingo/lingo-gr.cpp"
+#line 2667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* simpleexprnoparens: THEENTITYWITHID simpleexpr  */
@@ -2669,7 +2674,7 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2673 "engines/director/lingo/lingo-gr.cpp"
+#line 2678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* simpleexprnoparens: THEFUNCINOF simpleexpr  */
@@ -2677,7 +2682,7 @@ yyreduce:
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2686 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* simpleexprnoparens: THEFUNC tOF simpleexpr  */
@@ -2685,7 +2690,7 @@ yyreduce:
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2689 "engines/director/lingo/lingo-gr.cpp"
+#line 2694 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* simpleexprnoparens: THEOBJECTPROP  */
@@ -2696,19 +2701,19 @@ yyreduce:
 		g_lingo->codeString((yyvsp[0].objectprop).prop->c_str());
 		delete (yyvsp[0].objectprop).obj;
 		delete (yyvsp[0].objectprop).prop; }
-#line 2700 "engines/director/lingo/lingo-gr.cpp"
+#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 2706 "engines/director/lingo/lingo-gr.cpp"
+#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 2712 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* simpleexprnoparens: ID '(' ID ')'  */
@@ -2719,13 +2724,13 @@ yyreduce:
 			g_lingo->codeFunc((yyvsp[-3].s), 1);
 			delete (yyvsp[-3].s);
 			delete (yyvsp[-1].s); }
-#line 2723 "engines/director/lingo/lingo-gr.cpp"
+#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 2729 "engines/director/lingo/lingo-gr.cpp"
+#line 2734 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* simpleexprnoparens: ID '(' ID ',' $@10 nonemptyarglist ')'  */
@@ -2734,7 +2739,7 @@ yyreduce:
 			g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
 			delete (yyvsp[-6].s);
 			delete (yyvsp[-4].s); }
-#line 2738 "engines/director/lingo/lingo-gr.cpp"
+#line 2743 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* simpleexprnoparens: ID '(' arglist ')'  */
@@ -2742,7 +2747,7 @@ yyreduce:
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2746 "engines/director/lingo/lingo-gr.cpp"
+#line 2751 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* simpleexprnoparens: ID  */
@@ -2755,121 +2760,121 @@ yyreduce:
 		}
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2759 "engines/director/lingo/lingo-gr.cpp"
+#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 2765 "engines/director/lingo/lingo-gr.cpp"
+#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 2771 "engines/director/lingo/lingo-gr.cpp"
+#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 2777 "engines/director/lingo/lingo-gr.cpp"
+#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 2783 "engines/director/lingo/lingo-gr.cpp"
+#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 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2794 "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 2795 "engines/director/lingo/lingo-gr.cpp"
+#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 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2806 "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 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2812 "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 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2818 "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 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2824 "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 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2830 "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 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2836 "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 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2842 "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 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2848 "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 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2854 "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 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2860 "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 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2866 "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 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2872 "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 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2878 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* chunkexpr: tFIELD simpleexprnoparens  */
@@ -2877,7 +2882,7 @@ yyreduce:
                                         {
 		Common::String field("field");
 		g_lingo->codeFunc(&field, 1); }
-#line 2881 "engines/director/lingo/lingo-gr.cpp"
+#line 2886 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* chunkexpr: tCAST simpleexprnoparens  */
@@ -2885,55 +2890,55 @@ yyreduce:
                                                 {
 		Common::String cast("cast");
 		g_lingo->codeFunc(&cast, 1); }
-#line 2889 "engines/director/lingo/lingo-gr.cpp"
+#line 2894 "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 2895 "engines/director/lingo/lingo-gr.cpp"
+#line 2900 "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 2901 "engines/director/lingo/lingo-gr.cpp"
+#line 2906 "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 2907 "engines/director/lingo/lingo-gr.cpp"
+#line 2912 "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 2913 "engines/director/lingo/lingo-gr.cpp"
+#line 2918 "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 2919 "engines/director/lingo/lingo-gr.cpp"
+#line 2924 "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 2925 "engines/director/lingo/lingo-gr.cpp"
+#line 2930 "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 2931 "engines/director/lingo/lingo-gr.cpp"
+#line 2936 "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 2937 "engines/director/lingo/lingo-gr.cpp"
+#line 2942 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* reference: tSCRIPT simpleexprnoparens  */
@@ -2941,7 +2946,7 @@ yyreduce:
                                         {
 		Common::String script("script");
 		g_lingo->codeFunc(&script, 1); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 2950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* reference: tWINDOW simpleexprnoparens  */
@@ -2949,7 +2954,7 @@ yyreduce:
                                         {
 		Common::String window("window");
 		g_lingo->codeFunc(&window, 1); }
-#line 2953 "engines/director/lingo/lingo-gr.cpp"
+#line 2958 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* proc: tPUT expr  */
@@ -2957,7 +2962,7 @@ yyreduce:
                                                 {
 		Common::String put("put");
 		g_lingo->codeCmd(&put, 1); }
-#line 2961 "engines/director/lingo/lingo-gr.cpp"
+#line 2966 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* proc: tEXIT tREPEAT  */
@@ -2970,49 +2975,49 @@ yyreduce:
 		} else {
 			warning("# LINGO: exit repeat not inside repeat block");
 		} }
-#line 2974 "engines/director/lingo/lingo-gr.cpp"
+#line 2979 "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 2980 "engines/director/lingo/lingo-gr.cpp"
+#line 2985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* $@11: %empty  */
 #line 700 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2986 "engines/director/lingo/lingo-gr.cpp"
+#line 2991 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* proc: tGLOBAL $@11 globallist  */
 #line 700 "engines/director/lingo/lingo-gr.y"
                                                                                  { inLast(); }
-#line 2992 "engines/director/lingo/lingo-gr.cpp"
+#line 2997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130: /* $@12: %empty  */
 #line 701 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2998 "engines/director/lingo/lingo-gr.cpp"
+#line 3003 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131: /* proc: tPROPERTY $@12 propertylist  */
 #line 701 "engines/director/lingo/lingo-gr.y"
                                                                                    { inLast(); }
-#line 3004 "engines/director/lingo/lingo-gr.cpp"
+#line 3009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* $@13: %empty  */
 #line 702 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 3010 "engines/director/lingo/lingo-gr.cpp"
+#line 3015 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* proc: tINSTANCE $@13 instancelist  */
 #line 702 "engines/director/lingo/lingo-gr.y"
                                                                                    { inLast(); }
-#line 3016 "engines/director/lingo/lingo-gr.cpp"
+#line 3021 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* proc: tOPEN expr tWITH expr  */
@@ -3020,7 +3025,7 @@ yyreduce:
                                         {
 		Common::String open("open");
 		g_lingo->codeCmd(&open, 2); }
-#line 3024 "engines/director/lingo/lingo-gr.cpp"
+#line 3029 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* proc: tOPEN expr  */
@@ -3028,7 +3033,7 @@ yyreduce:
                                                 {
 		Common::String open("open");
 		g_lingo->codeCmd(&open, 1); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* proc: ID '(' ID ')'  */
@@ -3039,13 +3044,13 @@ yyreduce:
 			g_lingo->codeCmd((yyvsp[-3].s), 1);
 			delete (yyvsp[-3].s);
 			delete (yyvsp[-1].s); }
-#line 3043 "engines/director/lingo/lingo-gr.cpp"
+#line 3048 "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 3049 "engines/director/lingo/lingo-gr.cpp"
+#line 3054 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* proc: ID '(' ID ',' $@14 nonemptyarglist ')'  */
@@ -3054,7 +3059,7 @@ yyreduce:
 			g_lingo->codeCmd((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
 			delete (yyvsp[-6].s);
 			delete (yyvsp[-4].s); }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+#line 3063 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139: /* proc: ID '(' arglist ')'  */
@@ -3062,7 +3067,7 @@ yyreduce:
                                         {
 		g_lingo->codeCmd((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 3066 "engines/director/lingo/lingo-gr.cpp"
+#line 3071 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* proc: ID arglist  */
@@ -3070,7 +3075,7 @@ yyreduce:
                                                 {
 		g_lingo->codeCmd((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 3074 "engines/director/lingo/lingo-gr.cpp"
+#line 3079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142: /* globallist: ID  */
@@ -3078,7 +3083,7 @@ yyreduce:
                                                         {
 		mVar((yyvsp[0].s), kVarGlobal);
 		delete (yyvsp[0].s); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3087 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* globallist: ID ',' globallist  */
@@ -3086,7 +3091,7 @@ yyreduce:
                                                 {
 		mVar((yyvsp[-2].s), kVarGlobal);
 		delete (yyvsp[-2].s); }
-#line 3090 "engines/director/lingo/lingo-gr.cpp"
+#line 3095 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* propertylist: ID  */
@@ -3094,7 +3099,7 @@ yyreduce:
                                                         {
 		mVar((yyvsp[0].s), kVarProperty);
 		delete (yyvsp[0].s); }
-#line 3098 "engines/director/lingo/lingo-gr.cpp"
+#line 3103 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* propertylist: ID ',' propertylist  */
@@ -3102,7 +3107,7 @@ yyreduce:
                                         {
 		mVar((yyvsp[-2].s), kVarProperty);
 		delete (yyvsp[-2].s); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3111 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* instancelist: ID  */
@@ -3110,7 +3115,7 @@ yyreduce:
                                                         {
 		mVar((yyvsp[0].s), kVarInstance);
 		delete (yyvsp[0].s); }
-#line 3114 "engines/director/lingo/lingo-gr.cpp"
+#line 3119 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149: /* instancelist: ID ',' instancelist  */
@@ -3118,25 +3123,25 @@ yyreduce:
                                         {
 		mVar((yyvsp[-2].s), kVarInstance);
 		delete (yyvsp[-2].s); }
-#line 3122 "engines/director/lingo/lingo-gr.cpp"
+#line 3127 "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 3128 "engines/director/lingo/lingo-gr.cpp"
+#line 3133 "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 3134 "engines/director/lingo/lingo-gr.cpp"
+#line 3139 "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 3140 "engines/director/lingo/lingo-gr.cpp"
+#line 3145 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153: /* gotofunc: tGO expr  */
@@ -3145,7 +3150,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3149 "engines/director/lingo/lingo-gr.cpp"
+#line 3154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154: /* gotofunc: tGO expr gotomovie  */
@@ -3154,7 +3159,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3158 "engines/director/lingo/lingo-gr.cpp"
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155: /* gotofunc: tGO gotomovie  */
@@ -3163,7 +3168,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3167 "engines/director/lingo/lingo-gr.cpp"
+#line 3172 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158: /* playfunc: tPLAY expr  */
@@ -3172,7 +3177,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
-#line 3176 "engines/director/lingo/lingo-gr.cpp"
+#line 3181 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159: /* playfunc: tPLAY expr gotomovie  */
@@ -3181,7 +3186,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3185 "engines/director/lingo/lingo-gr.cpp"
+#line 3190 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160: /* playfunc: tPLAY gotomovie  */
@@ -3190,13 +3195,13 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3194 "engines/director/lingo/lingo-gr.cpp"
+#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 3200 "engines/director/lingo/lingo-gr.cpp"
+#line 3205 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162: /* playfunc: tPLAYACCEL $@15 arglist  */
@@ -3205,13 +3210,13 @@ yyreduce:
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeCmd((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3209 "engines/director/lingo/lingo-gr.cpp"
+#line 3214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163: /* $@16: %empty  */
 #line 819 "engines/director/lingo/lingo-gr.y"
              { startDef(); }
-#line 3215 "engines/director/lingo/lingo-gr.cpp"
+#line 3220 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164: /* defn: tMACRO $@16 ID lbl argdef '\n' argstore stmtlist  */
@@ -3221,13 +3226,13 @@ yyreduce:
 		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-5].s); }
-#line 3225 "engines/director/lingo/lingo-gr.cpp"
+#line 3230 "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 3231 "engines/director/lingo/lingo-gr.cpp"
+#line 3236 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166: /* $@17: %empty  */
@@ -3238,7 +3243,7 @@ yyreduce:
 			g_lingo->codeArg(&me);
 			mVar(&me, kVarArgument);
 		}
-#line 3242 "engines/director/lingo/lingo-gr.cpp"
+#line 3247 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167: /* defn: tMETHOD $@17 lbl argdef '\n' argstore stmtlist  */
@@ -3248,7 +3253,7 @@ yyreduce:
 			g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1);
 			endDef();
 			delete (yyvsp[-6].s); }
-#line 3252 "engines/director/lingo/lingo-gr.cpp"
+#line 3257 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168: /* defn: on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef  */
@@ -3261,7 +3266,7 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3265 "engines/director/lingo/lingo-gr.cpp"
+#line 3270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169: /* defn: on lbl argdef '\n' argstore stmtlist  */
@@ -3271,151 +3276,151 @@ yyreduce:
 		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-5].s); }
-#line 3275 "engines/director/lingo/lingo-gr.cpp"
+#line 3280 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170: /* $@18: %empty  */
 #line 850 "engines/director/lingo/lingo-gr.y"
          { startDef(); }
-#line 3281 "engines/director/lingo/lingo-gr.cpp"
+#line 3286 "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 3287 "engines/director/lingo/lingo-gr.cpp"
+#line 3292 "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 3293 "engines/director/lingo/lingo-gr.cpp"
+#line 3298 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173: /* argdef: %empty  */
 #line 854 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3299 "engines/director/lingo/lingo-gr.cpp"
+#line 3304 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 174: /* argdef: argname  */
 #line 855 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3305 "engines/director/lingo/lingo-gr.cpp"
+#line 3310 "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 3311 "engines/director/lingo/lingo-gr.cpp"
+#line 3316 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 177: /* endargdef: ID  */
 #line 859 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 3317 "engines/director/lingo/lingo-gr.cpp"
+#line 3322 "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 3323 "engines/director/lingo/lingo-gr.cpp"
+#line 3328 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 179: /* argstore: %empty  */
 #line 862 "engines/director/lingo/lingo-gr.y"
                                         { inDef(); }
-#line 3329 "engines/director/lingo/lingo-gr.cpp"
+#line 3334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 180: /* arglist: %empty  */
 #line 864 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3335 "engines/director/lingo/lingo-gr.cpp"
+#line 3340 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 181: /* arglist: expr  */
 #line 865 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3341 "engines/director/lingo/lingo-gr.cpp"
+#line 3346 "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 3347 "engines/director/lingo/lingo-gr.cpp"
+#line 3352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 183: /* nonemptyarglist: expr  */
 #line 868 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3353 "engines/director/lingo/lingo-gr.cpp"
+#line 3358 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 184: /* nonemptyarglist: expr ','  */
 #line 869 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3359 "engines/director/lingo/lingo-gr.cpp"
+#line 3364 "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 3365 "engines/director/lingo/lingo-gr.cpp"
+#line 3370 "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 3371 "engines/director/lingo/lingo-gr.cpp"
+#line 3376 "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 3377 "engines/director/lingo/lingo-gr.cpp"
+#line 3382 "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 3383 "engines/director/lingo/lingo-gr.cpp"
+#line 3388 "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 3389 "engines/director/lingo/lingo-gr.cpp"
+#line 3394 "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 3395 "engines/director/lingo/lingo-gr.cpp"
+#line 3400 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 191: /* linearlist: expr  */
 #line 879 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3401 "engines/director/lingo/lingo-gr.cpp"
+#line 3406 "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 3407 "engines/director/lingo/lingo-gr.cpp"
+#line 3412 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 193: /* proplist: proppair  */
 #line 882 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3413 "engines/director/lingo/lingo-gr.cpp"
+#line 3418 "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 3419 "engines/director/lingo/lingo-gr.cpp"
+#line 3424 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 195: /* proppair: SYMBOL ':' expr  */
@@ -3424,7 +3429,7 @@ yyreduce:
 		g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3428 "engines/director/lingo/lingo-gr.cpp"
+#line 3433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 196: /* proppair: STRING ':' expr  */
@@ -3433,7 +3438,7 @@ yyreduce:
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3437 "engines/director/lingo/lingo-gr.cpp"
+#line 3442 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 197: /* proppair: ID ':' expr  */
@@ -3442,11 +3447,11 @@ yyreduce:
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3446 "engines/director/lingo/lingo-gr.cpp"
+#line 3451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3450 "engines/director/lingo/lingo-gr.cpp"
+#line 3455 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index b5d69d4d898..73b6a236b5b 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -65,81 +65,82 @@ extern int yydebug;
     PARRAY = 266,                  /* PARRAY  */
     CASTREF = 267,                 /* CASTREF  */
     FIELDREF = 268,                /* FIELDREF  */
-    INT = 269,                     /* INT  */
-    ARGC = 270,                    /* ARGC  */
-    ARGCNORET = 271,               /* ARGCNORET  */
-    THEENTITY = 272,               /* THEENTITY  */
-    THEENTITYWITHID = 273,         /* THEENTITYWITHID  */
-    THEMENUITEMENTITY = 274,       /* THEMENUITEMENTITY  */
-    THEMENUITEMSENTITY = 275,      /* THEMENUITEMSENTITY  */
-    FLOAT = 276,                   /* FLOAT  */
-    THEFUNC = 277,                 /* THEFUNC  */
-    THEFUNCINOF = 278,             /* THEFUNCINOF  */
-    VARID = 279,                   /* VARID  */
-    STRING = 280,                  /* STRING  */
-    SYMBOL = 281,                  /* SYMBOL  */
-    ENDCLAUSE = 282,               /* ENDCLAUSE  */
-    tPLAYACCEL = 283,              /* tPLAYACCEL  */
-    tMETHOD = 284,                 /* tMETHOD  */
-    THEOBJECTPROP = 285,           /* THEOBJECTPROP  */
-    tCAST = 286,                   /* tCAST  */
-    tFIELD = 287,                  /* tFIELD  */
-    tSCRIPT = 288,                 /* tSCRIPT  */
-    tWINDOW = 289,                 /* tWINDOW  */
-    tDOWN = 290,                   /* tDOWN  */
-    tELSE = 291,                   /* tELSE  */
-    tELSIF = 292,                  /* tELSIF  */
-    tEXIT = 293,                   /* tEXIT  */
-    tGLOBAL = 294,                 /* tGLOBAL  */
-    tGO = 295,                     /* tGO  */
-    tGOLOOP = 296,                 /* tGOLOOP  */
-    tIF = 297,                     /* tIF  */
-    tIN = 298,                     /* tIN  */
-    tINTO = 299,                   /* tINTO  */
-    tMACRO = 300,                  /* tMACRO  */
-    tMOVIE = 301,                  /* tMOVIE  */
-    tNEXT = 302,                   /* tNEXT  */
-    tOF = 303,                     /* tOF  */
-    tPREVIOUS = 304,               /* tPREVIOUS  */
-    tPUT = 305,                    /* tPUT  */
-    tREPEAT = 306,                 /* tREPEAT  */
-    tSET = 307,                    /* tSET  */
-    tTHEN = 308,                   /* tTHEN  */
-    tTO = 309,                     /* tTO  */
-    tWHEN = 310,                   /* tWHEN  */
-    tWITH = 311,                   /* tWITH  */
-    tWHILE = 312,                  /* tWHILE  */
-    tFACTORY = 313,                /* tFACTORY  */
-    tOPEN = 314,                   /* tOPEN  */
-    tPLAY = 315,                   /* tPLAY  */
-    tINSTANCE = 316,               /* tINSTANCE  */
-    tGE = 317,                     /* tGE  */
-    tLE = 318,                     /* tLE  */
-    tEQ = 319,                     /* tEQ  */
-    tNEQ = 320,                    /* tNEQ  */
-    tAND = 321,                    /* tAND  */
-    tOR = 322,                     /* tOR  */
-    tNOT = 323,                    /* tNOT  */
-    tMOD = 324,                    /* tMOD  */
-    tAFTER = 325,                  /* tAFTER  */
-    tBEFORE = 326,                 /* tBEFORE  */
-    tCONCAT = 327,                 /* tCONCAT  */
-    tCONTAINS = 328,               /* tCONTAINS  */
-    tSTARTS = 329,                 /* tSTARTS  */
-    tCHAR = 330,                   /* tCHAR  */
-    tITEM = 331,                   /* tITEM  */
-    tLINE = 332,                   /* tLINE  */
-    tWORD = 333,                   /* tWORD  */
-    tSPRITE = 334,                 /* tSPRITE  */
-    tINTERSECTS = 335,             /* tINTERSECTS  */
-    tWITHIN = 336,                 /* tWITHIN  */
-    tTELL = 337,                   /* tTELL  */
-    tPROPERTY = 338,               /* tPROPERTY  */
-    tON = 339,                     /* tON  */
-    tENDIF = 340,                  /* tENDIF  */
-    tENDREPEAT = 341,              /* tENDREPEAT  */
-    tENDTELL = 342,                /* tENDTELL  */
-    tASSERTERROR = 343             /* tASSERTERROR  */
+    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  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -163,7 +164,7 @@ union YYSTYPE
 		Common::String *prop;
 	} objectprop;
 
-#line 167 "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 c85ab28623b..c7cc35725a7 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -196,7 +196,7 @@ static void mVar(Common::String *s, VarType type) {
 
 // Datum types
 %token VOID VAR POINT RECT ARRAY OBJECT LEXERROR PARRAY
-%token CASTREF FIELDREF
+%token CASTREF FIELDREF CHUNKREF
 %token<i> INT ARGC ARGCNORET
 
 %token<e> THEENTITY THEENTITYWITHID THEMENUITEMENTITY THEMENUITEMSENTITY
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 28ff1ef2f41..10b39a66013 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -838,6 +838,9 @@ void Datum::reset() {
 				delete u.obj;
 			}
 			break;
+		case CHUNKREF:
+			delete u.cref;
+			break;
 		default:
 			break;
 		}
@@ -848,7 +851,7 @@ void Datum::reset() {
 }
 
 Datum Datum::eval() {
-	if (type == VAR || type == FIELDREF) {
+	if (type == VAR || type == FIELDREF || type == CHUNKREF) {
 		return g_lingo->varFetch(*this);
 	}
 
@@ -982,6 +985,12 @@ Common::String Datum::asString(bool printonly) const {
 			s = Common::String::format("field: \"%s\"", ((TextCastMember *)member)->getText().c_str());
 		}
 		break;
+	case CHUNKREF:
+		{
+			Common::String src = u.cref->source.asString(true);
+			s = Common::String::format("chunk: char %d to %d of %s", u.cref->start, u.cref->end, src.c_str());
+		}
+		break;
 	case POINT:
 		s = "point:";
 		// fallthrough
@@ -1076,6 +1085,8 @@ const char *Datum::type2str(bool isk) const {
 		return isk ? "#object" : "OBJECT";
 	case FIELDREF:
 		return "FIELDREF";
+	case CHUNKREF:
+		return "CHUNKREF";
 	case VAR:
 		return isk ? "#var" : "VAR";
 	default:
@@ -1360,6 +1371,10 @@ Datum Lingo::varFetch(Datum &var, bool global, DatumHash *localvars, bool silent
 			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;
+		result.u.s = new Common::String(src.substr(var.u.cref->start, var.u.cref->end - var.u.cref->start));
 	} else {
 		warning("varFetch: fetch from non-variable");
 	}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 1b6f2894786..a0de86fe83a 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -37,6 +37,7 @@ class SeekableReadStreamEndian;
 
 namespace Director {
 
+struct ChunkReference;
 struct TheEntity;
 struct TheEntityField;
 struct LingoArchive;
@@ -116,7 +117,8 @@ struct Datum {	/* interpreter stack type */
 		Common::String *s;	/* STRING, VAR, OBJECT */
 		DatumArray *farr;	/* ARRAY, POINT, RECT */
 		PropertyArray *parr; /* PARRAY */
-		AbstractObject *obj;
+		AbstractObject *obj; /* OBJECT */
+		ChunkReference *cref; /* CHUNKREF */
 	} u;
 
 	int *refCount;
@@ -146,6 +148,14 @@ struct Datum {	/* interpreter stack type */
 	int compareTo(Datum &d, bool ignoreCase = false) const;
 };
 
+struct ChunkReference {
+	Datum source;
+	int start;
+	int end;
+
+	ChunkReference(const Datum &src, uint s, uint e) : source(src), start(s), end(e) {}
+};
+
 struct PCell {
 	Datum p;
 	Datum v;
diff --git a/engines/director/types.h b/engines/director/types.h
index fcdcbd598ad..6114b3e8b4e 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -307,6 +307,13 @@ enum SymbolType {
 	HANDLER	// user-defined handler
 };
 
+enum ChunkType {
+	kChunkChar,
+	kChunkWord,
+	kChunkItem,
+	kChunkLine
+};
+
 struct Datum;
 struct PCell;
 typedef Common::Array<Datum> DatumArray;