diff --git a/src/Libraries/NRefactory/Project/Src/Ast/Enums.cs b/src/Libraries/NRefactory/Project/Src/Ast/Enums.cs
index 7e19ab436f..34019f51f3 100644
--- a/src/Libraries/NRefactory/Project/Src/Ast/Enums.cs
+++ b/src/Libraries/NRefactory/Project/Src/Ast/Enums.cs
@@ -200,6 +200,9 @@ namespace ICSharpCode.NRefactory.Ast
 		Like,
 		/// <summary>C#: ??</summary>
 		NullCoalescing,
+		
+		/// <summary>VB-only: !</summary>
+		DictionaryAccess
 	}
 	
 	public enum CastType
diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt
index 88acc122c6..129e5df0d0 100644
--- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt
+++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt
@@ -34,6 +34,8 @@ ConcatString = "&"
 Power = "^"
 # Question mark is not needed by VB8, but we use it inside the IDE
 QuestionMark = "?"
+# Exclamation mark = Dictionary access operator (not always a token, sometimes it's a type character)
+ExclamationMark = "!"
 
 OpenCurlyBrace = "{"
 CloseCurlyBrace = "}"
diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs
index e3f27d8d6c..76733a1b72 100644
--- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs
+++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs
@@ -48,8 +48,14 @@ namespace ICSharpCode.NRefactory.Parser.VB
 			return curToken;
 		}
 		
+		bool misreadExclamationMarkAsTypeCharacter;
+		
 		protected override Token Next()
 		{
+			if (misreadExclamationMarkAsTypeCharacter) {
+				misreadExclamationMarkAsTypeCharacter = false;
+				return new Token(Tokens.ExclamationMark, Col - 1, Line);
+			}
 			unchecked {
 				int nextChar;
 				while ((nextChar = ReaderRead()) != -1) {
@@ -149,21 +155,24 @@ namespace ICSharpCode.NRefactory.Parser.VB
 					if (Char.IsLetter(ch)) {
 						int x = Col - 1;
 						int y = Line;
-						string s = ReadIdent(ch);
-						int keyWordToken = Keywords.GetToken(s);
-						if (keyWordToken >= 0) {
-							lineEnd = false;
-							return new Token(keyWordToken, x, y, s);
-						}
-						
-						// handle 'REM' comments
-						if (s.Equals("REM", StringComparison.InvariantCultureIgnoreCase)) {
-							ReadComment();
-							if (!lineEnd) {
-								lineEnd = true;
-								return new Token(Tokens.EOL, Col, Line, "\n");
+						char typeCharacter;
+						string s = ReadIdent(ch, out typeCharacter);
+						if (typeCharacter == '\0') {
+							int keyWordToken = Keywords.GetToken(s);
+							if (keyWordToken >= 0) {
+								// handle 'REM' comments
+								if (keyWordToken == Tokens.Rem) {
+									ReadComment();
+									if (!lineEnd) {
+										lineEnd = true;
+										return new Token(Tokens.EOL, Col, Line, "\n");
+									}
+									continue;
+								}
+								
+								lineEnd = false;
+								return new Token(keyWordToken, x, y, s);
 							}
-							continue;
 						}
 						
 						lineEnd = false;
@@ -226,6 +235,14 @@ namespace ICSharpCode.NRefactory.Parser.VB
 		
 		string ReadIdent(char ch)
 		{
+			char typeCharacter;
+			return ReadIdent(ch, out typeCharacter);
+		}
+		
+		string ReadIdent(char ch, out char typeCharacter)
+		{
+			typeCharacter = '\0';
+			
 			sb.Length = 0;
 			sb.Append(ch);
 			int peek;
@@ -238,7 +255,14 @@ namespace ICSharpCode.NRefactory.Parser.VB
 			}
 			
 			if ("%&@!#$".IndexOf((char)peek) != -1) {
+				typeCharacter = (char)peek;
 				ReaderRead();
+				if (typeCharacter == '!') {
+					peek = ReaderPeek();
+					if (peek != -1 && (peek == '_' || peek == '[' || char.IsLetter((char)peek))) {
+						misreadExclamationMarkAsTypeCharacter = true;
+					}
+				}
 			}
 			return sb.ToString();
 		}
@@ -711,6 +735,8 @@ namespace ICSharpCode.NRefactory.Parser.VB
 					return new Token(Tokens.CloseCurlyBrace, x, y);
 				case '?':
 					return new Token(Tokens.QuestionMark, x, y);
+				case '!':
+					return new Token(Tokens.ExclamationMark, x, y);
 			}
 			return null;
 		}
diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs
index 51e1847bd3..39a1289f7d 100644
--- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs
+++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs
@@ -31,194 +31,195 @@ namespace ICSharpCode.NRefactory.Parser.VB
 		public const int ConcatString         = 19;
 		public const int Power                = 20;
 		public const int QuestionMark         = 21;
-		public const int OpenCurlyBrace       = 22;
-		public const int CloseCurlyBrace      = 23;
-		public const int OpenParenthesis      = 24;
-		public const int CloseParenthesis     = 25;
-		public const int GreaterThan          = 26;
-		public const int LessThan             = 27;
-		public const int NotEqual             = 28;
-		public const int GreaterEqual         = 29;
-		public const int LessEqual            = 30;
-		public const int ShiftLeft            = 31;
-		public const int ShiftRight           = 32;
-		public const int PlusAssign           = 33;
-		public const int PowerAssign          = 34;
-		public const int MinusAssign          = 35;
-		public const int TimesAssign          = 36;
-		public const int DivAssign            = 37;
-		public const int DivIntegerAssign     = 38;
-		public const int ShiftLeftAssign      = 39;
-		public const int ShiftRightAssign     = 40;
-		public const int ConcatStringAssign   = 41;
+		public const int ExclamationMark      = 22;
+		public const int OpenCurlyBrace       = 23;
+		public const int CloseCurlyBrace      = 24;
+		public const int OpenParenthesis      = 25;
+		public const int CloseParenthesis     = 26;
+		public const int GreaterThan          = 27;
+		public const int LessThan             = 28;
+		public const int NotEqual             = 29;
+		public const int GreaterEqual         = 30;
+		public const int LessEqual            = 31;
+		public const int ShiftLeft            = 32;
+		public const int ShiftRight           = 33;
+		public const int PlusAssign           = 34;
+		public const int PowerAssign          = 35;
+		public const int MinusAssign          = 36;
+		public const int TimesAssign          = 37;
+		public const int DivAssign            = 38;
+		public const int DivIntegerAssign     = 39;
+		public const int ShiftLeftAssign      = 40;
+		public const int ShiftRightAssign     = 41;
+		public const int ConcatStringAssign   = 42;
 
 		// ----- keywords -----
-		public const int AddHandler           = 42;
-		public const int AddressOf            = 43;
-		public const int Alias                = 44;
-		public const int And                  = 45;
-		public const int AndAlso              = 46;
-		public const int Ansi                 = 47;
-		public const int As                   = 48;
-		public const int Assembly             = 49;
-		public const int Auto                 = 50;
-		public const int Binary               = 51;
-		public const int Boolean              = 52;
-		public const int ByRef                = 53;
-		public const int Byte                 = 54;
-		public const int ByVal                = 55;
-		public const int Call                 = 56;
-		public const int Case                 = 57;
-		public const int Catch                = 58;
-		public const int CBool                = 59;
-		public const int CByte                = 60;
-		public const int CChar                = 61;
-		public const int CDate                = 62;
-		public const int CDbl                 = 63;
-		public const int CDec                 = 64;
-		public const int Char                 = 65;
-		public const int CInt                 = 66;
-		public const int Class                = 67;
-		public const int CLng                 = 68;
-		public const int CObj                 = 69;
-		public const int Compare              = 70;
-		public const int Const                = 71;
-		public const int CShort               = 72;
-		public const int CSng                 = 73;
-		public const int CStr                 = 74;
-		public const int CType                = 75;
-		public const int Date                 = 76;
-		public const int Decimal              = 77;
-		public const int Declare              = 78;
-		public const int Default              = 79;
-		public const int Delegate             = 80;
-		public const int Dim                  = 81;
-		public const int DirectCast           = 82;
-		public const int Do                   = 83;
-		public const int Double               = 84;
-		public const int Each                 = 85;
-		public const int Else                 = 86;
-		public const int ElseIf               = 87;
-		public const int End                  = 88;
-		public const int EndIf                = 89;
-		public const int Enum                 = 90;
-		public const int Erase                = 91;
-		public const int Error                = 92;
-		public const int Event                = 93;
-		public const int Exit                 = 94;
-		public const int Explicit             = 95;
-		public const int False                = 96;
-		public const int Finally              = 97;
-		public const int For                  = 98;
-		public const int Friend               = 99;
-		public const int Function             = 100;
-		public const int Get                  = 101;
-		new public const int GetType              = 102;
-		public const int GoSub                = 103;
-		public const int GoTo                 = 104;
-		public const int Handles              = 105;
-		public const int If                   = 106;
-		public const int Implements           = 107;
-		public const int Imports              = 108;
-		public const int In                   = 109;
-		public const int Inherits             = 110;
-		public const int Integer              = 111;
-		public const int Interface            = 112;
-		public const int Is                   = 113;
-		public const int Let                  = 114;
-		public const int Lib                  = 115;
-		public const int Like                 = 116;
-		public const int Long                 = 117;
-		public const int Loop                 = 118;
-		public const int Me                   = 119;
-		public const int Mod                  = 120;
-		public const int Module               = 121;
-		public const int MustInherit          = 122;
-		public const int MustOverride         = 123;
-		public const int MyBase               = 124;
-		public const int MyClass              = 125;
-		public const int Namespace            = 126;
-		public const int New                  = 127;
-		public const int Next                 = 128;
-		public const int Not                  = 129;
-		public const int Nothing              = 130;
-		public const int NotInheritable       = 131;
-		public const int NotOverridable       = 132;
-		public const int Object               = 133;
-		public const int Off                  = 134;
-		public const int On                   = 135;
-		public const int Option               = 136;
-		public const int Optional             = 137;
-		public const int Or                   = 138;
-		public const int OrElse               = 139;
-		public const int Overloads            = 140;
-		public const int Overridable          = 141;
-		public const int Overrides            = 142;
-		public const int ParamArray           = 143;
-		public const int Preserve             = 144;
-		public const int Private              = 145;
-		public const int Property             = 146;
-		public const int Protected            = 147;
-		public const int Public               = 148;
-		public const int RaiseEvent           = 149;
-		public const int ReadOnly             = 150;
-		public const int ReDim                = 151;
-		public const int RemoveHandler        = 152;
-		public const int Resume               = 153;
-		public const int Return               = 154;
-		public const int Select               = 155;
-		public const int Set                  = 156;
-		public const int Shadows              = 157;
-		public const int Shared               = 158;
-		public const int Short                = 159;
-		public const int Single               = 160;
-		public const int Static               = 161;
-		public const int Step                 = 162;
-		public const int Stop                 = 163;
-		public const int Strict               = 164;
-		public const int String               = 165;
-		public const int Structure            = 166;
-		public const int Sub                  = 167;
-		public const int SyncLock             = 168;
-		public const int Text                 = 169;
-		public const int Then                 = 170;
-		public const int Throw                = 171;
-		public const int To                   = 172;
-		public const int True                 = 173;
-		public const int Try                  = 174;
-		public const int TypeOf               = 175;
-		public const int Unicode              = 176;
-		public const int Until                = 177;
-		public const int Variant              = 178;
-		public const int Wend                 = 179;
-		public const int When                 = 180;
-		public const int While                = 181;
-		public const int With                 = 182;
-		public const int WithEvents           = 183;
-		public const int WriteOnly            = 184;
-		public const int Xor                  = 185;
-		public const int Rem                  = 186;
-		public const int Continue             = 187;
-		public const int Operator             = 188;
-		public const int Using                = 189;
-		public const int IsNot                = 190;
-		public const int SByte                = 191;
-		public const int UInteger             = 192;
-		public const int ULong                = 193;
-		public const int UShort               = 194;
-		public const int CSByte               = 195;
-		public const int CUShort              = 196;
-		public const int CUInt                = 197;
-		public const int CULng                = 198;
-		public const int Global               = 199;
-		public const int TryCast              = 200;
-		public const int Of                   = 201;
-		public const int Narrowing            = 202;
-		public const int Widening             = 203;
-		public const int Partial              = 204;
-		public const int Custom               = 205;
+		public const int AddHandler           = 43;
+		public const int AddressOf            = 44;
+		public const int Alias                = 45;
+		public const int And                  = 46;
+		public const int AndAlso              = 47;
+		public const int Ansi                 = 48;
+		public const int As                   = 49;
+		public const int Assembly             = 50;
+		public const int Auto                 = 51;
+		public const int Binary               = 52;
+		public const int Boolean              = 53;
+		public const int ByRef                = 54;
+		public const int Byte                 = 55;
+		public const int ByVal                = 56;
+		public const int Call                 = 57;
+		public const int Case                 = 58;
+		public const int Catch                = 59;
+		public const int CBool                = 60;
+		public const int CByte                = 61;
+		public const int CChar                = 62;
+		public const int CDate                = 63;
+		public const int CDbl                 = 64;
+		public const int CDec                 = 65;
+		public const int Char                 = 66;
+		public const int CInt                 = 67;
+		public const int Class                = 68;
+		public const int CLng                 = 69;
+		public const int CObj                 = 70;
+		public const int Compare              = 71;
+		public const int Const                = 72;
+		public const int CShort               = 73;
+		public const int CSng                 = 74;
+		public const int CStr                 = 75;
+		public const int CType                = 76;
+		public const int Date                 = 77;
+		public const int Decimal              = 78;
+		public const int Declare              = 79;
+		public const int Default              = 80;
+		public const int Delegate             = 81;
+		public const int Dim                  = 82;
+		public const int DirectCast           = 83;
+		public const int Do                   = 84;
+		public const int Double               = 85;
+		public const int Each                 = 86;
+		public const int Else                 = 87;
+		public const int ElseIf               = 88;
+		public const int End                  = 89;
+		public const int EndIf                = 90;
+		public const int Enum                 = 91;
+		public const int Erase                = 92;
+		public const int Error                = 93;
+		public const int Event                = 94;
+		public const int Exit                 = 95;
+		public const int Explicit             = 96;
+		public const int False                = 97;
+		public const int Finally              = 98;
+		public const int For                  = 99;
+		public const int Friend               = 100;
+		public const int Function             = 101;
+		public const int Get                  = 102;
+		new public const int GetType              = 103;
+		public const int GoSub                = 104;
+		public const int GoTo                 = 105;
+		public const int Handles              = 106;
+		public const int If                   = 107;
+		public const int Implements           = 108;
+		public const int Imports              = 109;
+		public const int In                   = 110;
+		public const int Inherits             = 111;
+		public const int Integer              = 112;
+		public const int Interface            = 113;
+		public const int Is                   = 114;
+		public const int Let                  = 115;
+		public const int Lib                  = 116;
+		public const int Like                 = 117;
+		public const int Long                 = 118;
+		public const int Loop                 = 119;
+		public const int Me                   = 120;
+		public const int Mod                  = 121;
+		public const int Module               = 122;
+		public const int MustInherit          = 123;
+		public const int MustOverride         = 124;
+		public const int MyBase               = 125;
+		public const int MyClass              = 126;
+		public const int Namespace            = 127;
+		public const int New                  = 128;
+		public const int Next                 = 129;
+		public const int Not                  = 130;
+		public const int Nothing              = 131;
+		public const int NotInheritable       = 132;
+		public const int NotOverridable       = 133;
+		public const int Object               = 134;
+		public const int Off                  = 135;
+		public const int On                   = 136;
+		public const int Option               = 137;
+		public const int Optional             = 138;
+		public const int Or                   = 139;
+		public const int OrElse               = 140;
+		public const int Overloads            = 141;
+		public const int Overridable          = 142;
+		public const int Overrides            = 143;
+		public const int ParamArray           = 144;
+		public const int Preserve             = 145;
+		public const int Private              = 146;
+		public const int Property             = 147;
+		public const int Protected            = 148;
+		public const int Public               = 149;
+		public const int RaiseEvent           = 150;
+		public const int ReadOnly             = 151;
+		public const int ReDim                = 152;
+		public const int RemoveHandler        = 153;
+		public const int Resume               = 154;
+		public const int Return               = 155;
+		public const int Select               = 156;
+		public const int Set                  = 157;
+		public const int Shadows              = 158;
+		public const int Shared               = 159;
+		public const int Short                = 160;
+		public const int Single               = 161;
+		public const int Static               = 162;
+		public const int Step                 = 163;
+		public const int Stop                 = 164;
+		public const int Strict               = 165;
+		public const int String               = 166;
+		public const int Structure            = 167;
+		public const int Sub                  = 168;
+		public const int SyncLock             = 169;
+		public const int Text                 = 170;
+		public const int Then                 = 171;
+		public const int Throw                = 172;
+		public const int To                   = 173;
+		public const int True                 = 174;
+		public const int Try                  = 175;
+		public const int TypeOf               = 176;
+		public const int Unicode              = 177;
+		public const int Until                = 178;
+		public const int Variant              = 179;
+		public const int Wend                 = 180;
+		public const int When                 = 181;
+		public const int While                = 182;
+		public const int With                 = 183;
+		public const int WithEvents           = 184;
+		public const int WriteOnly            = 185;
+		public const int Xor                  = 186;
+		public const int Rem                  = 187;
+		public const int Continue             = 188;
+		public const int Operator             = 189;
+		public const int Using                = 190;
+		public const int IsNot                = 191;
+		public const int SByte                = 192;
+		public const int UInteger             = 193;
+		public const int ULong                = 194;
+		public const int UShort               = 195;
+		public const int CSByte               = 196;
+		public const int CUShort              = 197;
+		public const int CUInt                = 198;
+		public const int CULng                = 199;
+		public const int Global               = 200;
+		public const int TryCast              = 201;
+		public const int Of                   = 202;
+		public const int Narrowing            = 203;
+		public const int Widening             = 204;
+		public const int Partial              = 205;
+		public const int Custom               = 206;
 
-		public const int MaxToken = 206;
+		public const int MaxToken = 207;
 		static BitArray NewSet(params int[] values)
 		{
 			BitArray bitArray = new BitArray(MaxToken);
@@ -256,6 +257,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
 			"&",
 			"^",
 			"?",
+			"!",
 			"{",
 			"}",
 			"(",
diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
index dfef88bfe0..d3e860d498 100644
--- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
+++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
@@ -19,7 +19,7 @@ namespace ICSharpCode.NRefactory.Parser.VB {
 
 partial class Parser : AbstractParser
 {
-	const int maxT = 206;
+	const int maxT = 207;
 
 	const  bool   T            = true;
 	const  bool   x            = false;
@@ -34,21 +34,21 @@ partial class Parser : AbstractParser
 
 	void VBNET() {
 
-#line  231 "VBNET.ATG" 
+#line  232 "VBNET.ATG" 
 		lexer.NextToken(); // get the first token
 		compilationUnit = new CompilationUnit();
 		
 		while (la.kind == 1) {
 			lexer.NextToken();
 		}
-		while (la.kind == 136) {
+		while (la.kind == 137) {
 			OptionStmt();
 		}
-		while (la.kind == 108) {
+		while (la.kind == 109) {
 			ImportsStmt();
 		}
 		while (
-#line  237 "VBNET.ATG" 
+#line  238 "VBNET.ATG" 
 IsGlobalAttrTarget()) {
 			GlobalAttributeSection();
 		}
@@ -60,49 +60,49 @@ IsGlobalAttrTarget()) {
 
 	void OptionStmt() {
 
-#line  242 "VBNET.ATG" 
+#line  243 "VBNET.ATG" 
 		INode node = null; bool val = true; 
-		Expect(136);
+		Expect(137);
 
-#line  243 "VBNET.ATG" 
+#line  244 "VBNET.ATG" 
 		Location startPos = t.Location; 
-		if (la.kind == 95) {
+		if (la.kind == 96) {
 			lexer.NextToken();
-			if (la.kind == 134 || la.kind == 135) {
+			if (la.kind == 135 || la.kind == 136) {
 				OptionValue(
-#line  245 "VBNET.ATG" 
+#line  246 "VBNET.ATG" 
 ref val);
 			}
 
-#line  246 "VBNET.ATG" 
+#line  247 "VBNET.ATG" 
 			node = new OptionDeclaration(OptionType.Explicit, val); 
-		} else if (la.kind == 164) {
+		} else if (la.kind == 165) {
 			lexer.NextToken();
-			if (la.kind == 134 || la.kind == 135) {
+			if (la.kind == 135 || la.kind == 136) {
 				OptionValue(
-#line  248 "VBNET.ATG" 
+#line  249 "VBNET.ATG" 
 ref val);
 			}
 
-#line  249 "VBNET.ATG" 
+#line  250 "VBNET.ATG" 
 			node = new OptionDeclaration(OptionType.Strict, val); 
-		} else if (la.kind == 70) {
+		} else if (la.kind == 71) {
 			lexer.NextToken();
-			if (la.kind == 51) {
+			if (la.kind == 52) {
 				lexer.NextToken();
 
-#line  251 "VBNET.ATG" 
+#line  252 "VBNET.ATG" 
 				node = new OptionDeclaration(OptionType.CompareBinary, val); 
-			} else if (la.kind == 169) {
+			} else if (la.kind == 170) {
 				lexer.NextToken();
 
-#line  252 "VBNET.ATG" 
+#line  253 "VBNET.ATG" 
 				node = new OptionDeclaration(OptionType.CompareText, val); 
-			} else SynErr(207);
-		} else SynErr(208);
+			} else SynErr(208);
+		} else SynErr(209);
 		EndOfStmt();
 
-#line  257 "VBNET.ATG" 
+#line  258 "VBNET.ATG" 
 		if (node != null) {
 		node.StartLocation = startPos;
 		node.EndLocation   = t.Location;
@@ -113,33 +113,33 @@ ref val);
 
 	void ImportsStmt() {
 
-#line  280 "VBNET.ATG" 
+#line  281 "VBNET.ATG" 
 		List<Using> usings = new List<Using>();
 		
-		Expect(108);
+		Expect(109);
 
-#line  284 "VBNET.ATG" 
+#line  285 "VBNET.ATG" 
 		Location startPos = t.Location;
 		Using u;
 		
 		ImportClause(
-#line  287 "VBNET.ATG" 
+#line  288 "VBNET.ATG" 
 out u);
 
-#line  287 "VBNET.ATG" 
+#line  288 "VBNET.ATG" 
 		if (u != null) { usings.Add(u); } 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			ImportClause(
-#line  289 "VBNET.ATG" 
+#line  290 "VBNET.ATG" 
 out u);
 
-#line  289 "VBNET.ATG" 
+#line  290 "VBNET.ATG" 
 			if (u != null) { usings.Add(u); } 
 		}
 		EndOfStmt();
 
-#line  293 "VBNET.ATG" 
+#line  294 "VBNET.ATG" 
 		UsingDeclaration usingDeclaration = new UsingDeclaration(usings);
 		usingDeclaration.StartLocation = startPos;
 		usingDeclaration.EndLocation   = t.Location;
@@ -148,54 +148,54 @@ out u);
 	}
 
 	void GlobalAttributeSection() {
-		Expect(27);
+		Expect(28);
 
-#line  2055 "VBNET.ATG" 
+#line  2058 "VBNET.ATG" 
 		Location startPos = t.Location; 
-		if (la.kind == 49) {
+		if (la.kind == 50) {
 			lexer.NextToken();
-		} else if (la.kind == 121) {
+		} else if (la.kind == 122) {
 			lexer.NextToken();
-		} else SynErr(209);
+		} else SynErr(210);
 
-#line  2057 "VBNET.ATG" 
+#line  2060 "VBNET.ATG" 
 		string attributeTarget = t.val != null ? t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture) : null;
 		List<ASTAttribute> attributes = new List<ASTAttribute>();
 		ASTAttribute attribute;
 		
 		Expect(13);
 		Attribute(
-#line  2061 "VBNET.ATG" 
+#line  2064 "VBNET.ATG" 
 out attribute);
 
-#line  2061 "VBNET.ATG" 
+#line  2064 "VBNET.ATG" 
 		attributes.Add(attribute); 
 		while (
-#line  2062 "VBNET.ATG" 
+#line  2065 "VBNET.ATG" 
 NotFinalComma()) {
 			if (la.kind == 12) {
 				lexer.NextToken();
-				if (la.kind == 49) {
+				if (la.kind == 50) {
 					lexer.NextToken();
-				} else if (la.kind == 121) {
+				} else if (la.kind == 122) {
 					lexer.NextToken();
-				} else SynErr(210);
+				} else SynErr(211);
 				Expect(13);
 			}
 			Attribute(
-#line  2062 "VBNET.ATG" 
+#line  2065 "VBNET.ATG" 
 out attribute);
 
-#line  2062 "VBNET.ATG" 
+#line  2065 "VBNET.ATG" 
 			attributes.Add(attribute); 
 		}
 		if (la.kind == 12) {
 			lexer.NextToken();
 		}
-		Expect(26);
+		Expect(27);
 		EndOfStmt();
 
-#line  2067 "VBNET.ATG" 
+#line  2070 "VBNET.ATG" 
 		AttributeSection section = new AttributeSection {
 		AttributeTarget = attributeTarget,
 		Attributes = attributes,
@@ -208,23 +208,23 @@ out attribute);
 
 	void NamespaceMemberDecl() {
 
-#line  322 "VBNET.ATG" 
+#line  323 "VBNET.ATG" 
 		ModifierList m = new ModifierList();
 		AttributeSection section;
 		List<AttributeSection> attributes = new List<AttributeSection>();
 		string qualident;
 		
-		if (la.kind == 126) {
+		if (la.kind == 127) {
 			lexer.NextToken();
 
-#line  329 "VBNET.ATG" 
+#line  330 "VBNET.ATG" 
 			Location startPos = t.Location;
 			
 			Qualident(
-#line  331 "VBNET.ATG" 
+#line  332 "VBNET.ATG" 
 out qualident);
 
-#line  333 "VBNET.ATG" 
+#line  334 "VBNET.ATG" 
 			INode node =  new NamespaceDeclaration(qualident);
 			node.StartLocation = startPos;
 			compilationUnit.AddChild(node);
@@ -233,44 +233,44 @@ out qualident);
 			Expect(1);
 			NamespaceBody();
 
-#line  341 "VBNET.ATG" 
+#line  342 "VBNET.ATG" 
 			node.EndLocation = t.Location;
 			compilationUnit.BlockEnd();
 			
 		} else if (StartOf(2)) {
-			while (la.kind == 27) {
+			while (la.kind == 28) {
 				AttributeSection(
-#line  345 "VBNET.ATG" 
+#line  346 "VBNET.ATG" 
 out section);
 
-#line  345 "VBNET.ATG" 
+#line  346 "VBNET.ATG" 
 				attributes.Add(section); 
 			}
 			while (StartOf(3)) {
 				TypeModifier(
-#line  346 "VBNET.ATG" 
+#line  347 "VBNET.ATG" 
 m);
 			}
 			NonModuleDeclaration(
-#line  346 "VBNET.ATG" 
+#line  347 "VBNET.ATG" 
 m, attributes);
-		} else SynErr(211);
+		} else SynErr(212);
 	}
 
 	void OptionValue(
-#line  265 "VBNET.ATG" 
+#line  266 "VBNET.ATG" 
 ref bool val) {
-		if (la.kind == 135) {
+		if (la.kind == 136) {
 			lexer.NextToken();
 
-#line  267 "VBNET.ATG" 
+#line  268 "VBNET.ATG" 
 			val = true; 
-		} else if (la.kind == 134) {
+		} else if (la.kind == 135) {
 			lexer.NextToken();
 
-#line  269 "VBNET.ATG" 
+#line  270 "VBNET.ATG" 
 			val = false; 
-		} else SynErr(212);
+		} else SynErr(213);
 	}
 
 	void EndOfStmt() {
@@ -281,29 +281,29 @@ ref bool val) {
 			if (la.kind == 1) {
 				lexer.NextToken();
 			}
-		} else SynErr(213);
+		} else SynErr(214);
 	}
 
 	void ImportClause(
-#line  300 "VBNET.ATG" 
+#line  301 "VBNET.ATG" 
 out Using u) {
 
-#line  302 "VBNET.ATG" 
+#line  303 "VBNET.ATG" 
 		string qualident  = null;
 		TypeReference aliasedType = null;
 		u = null;
 		
 		Qualident(
-#line  306 "VBNET.ATG" 
+#line  307 "VBNET.ATG" 
 out qualident);
 		if (la.kind == 11) {
 			lexer.NextToken();
 			TypeName(
-#line  307 "VBNET.ATG" 
+#line  308 "VBNET.ATG" 
 out aliasedType);
 		}
 
-#line  309 "VBNET.ATG" 
+#line  310 "VBNET.ATG" 
 		if (qualident != null && qualident.Length > 0) {
 		if (aliasedType != null) {
 			u = new Using(qualident, aliasedType);
@@ -315,47 +315,47 @@ out aliasedType);
 	}
 
 	void Qualident(
-#line  2785 "VBNET.ATG" 
+#line  2788 "VBNET.ATG" 
 out string qualident) {
 
-#line  2787 "VBNET.ATG" 
+#line  2790 "VBNET.ATG" 
 		string name;
 		qualidentBuilder.Length = 0; 
 		
 		Identifier();
 
-#line  2791 "VBNET.ATG" 
+#line  2794 "VBNET.ATG" 
 		qualidentBuilder.Append(t.val); 
 		while (
-#line  2792 "VBNET.ATG" 
+#line  2795 "VBNET.ATG" 
 DotAndIdentOrKw()) {
 			Expect(10);
 			IdentifierOrKeyword(
-#line  2792 "VBNET.ATG" 
+#line  2795 "VBNET.ATG" 
 out name);
 
-#line  2792 "VBNET.ATG" 
+#line  2795 "VBNET.ATG" 
 			qualidentBuilder.Append('.'); qualidentBuilder.Append(name); 
 		}
 
-#line  2794 "VBNET.ATG" 
+#line  2797 "VBNET.ATG" 
 		qualident = qualidentBuilder.ToString(); 
 	}
 
 	void TypeName(
-#line  1948 "VBNET.ATG" 
+#line  1951 "VBNET.ATG" 
 out TypeReference typeref) {
 
-#line  1949 "VBNET.ATG" 
+#line  1952 "VBNET.ATG" 
 		ArrayList rank = null; 
 		NonArrayTypeName(
-#line  1951 "VBNET.ATG" 
+#line  1954 "VBNET.ATG" 
 out typeref, false);
 		ArrayTypeModifiers(
-#line  1952 "VBNET.ATG" 
+#line  1955 "VBNET.ATG" 
 out rank);
 
-#line  1953 "VBNET.ATG" 
+#line  1956 "VBNET.ATG" 
 		if (rank != null && typeref != null) {
 		typeref.RankSpecifier = (int[])rank.ToArray(typeof(int));
 		}
@@ -366,41 +366,41 @@ out rank);
 		while (StartOf(1)) {
 			NamespaceMemberDecl();
 		}
-		Expect(88);
-		Expect(126);
+		Expect(89);
+		Expect(127);
 		Expect(1);
 	}
 
 	void AttributeSection(
-#line  2128 "VBNET.ATG" 
+#line  2131 "VBNET.ATG" 
 out AttributeSection section) {
 
-#line  2130 "VBNET.ATG" 
+#line  2133 "VBNET.ATG" 
 		string attributeTarget = "";List<ASTAttribute> attributes = new List<ASTAttribute>();
 		ASTAttribute attribute;
 		
 		
-		Expect(27);
+		Expect(28);
 
-#line  2134 "VBNET.ATG" 
+#line  2137 "VBNET.ATG" 
 		Location startPos = t.Location; 
 		if (
-#line  2135 "VBNET.ATG" 
+#line  2138 "VBNET.ATG" 
 IsLocalAttrTarget()) {
-			if (la.kind == 93) {
+			if (la.kind == 94) {
 				lexer.NextToken();
 
-#line  2136 "VBNET.ATG" 
+#line  2139 "VBNET.ATG" 
 				attributeTarget = "event";
-			} else if (la.kind == 154) {
+			} else if (la.kind == 155) {
 				lexer.NextToken();
 
-#line  2137 "VBNET.ATG" 
+#line  2140 "VBNET.ATG" 
 				attributeTarget = "return";
 			} else {
 				Identifier();
 
-#line  2140 "VBNET.ATG" 
+#line  2143 "VBNET.ATG" 
 				string val = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture);
 				if (val != "field"	|| val != "method" ||
 					val != "module" || val != "param"  ||
@@ -413,28 +413,28 @@ IsLocalAttrTarget()) {
 			Expect(13);
 		}
 		Attribute(
-#line  2150 "VBNET.ATG" 
+#line  2153 "VBNET.ATG" 
 out attribute);
 
-#line  2150 "VBNET.ATG" 
+#line  2153 "VBNET.ATG" 
 		attributes.Add(attribute); 
 		while (
-#line  2151 "VBNET.ATG" 
+#line  2154 "VBNET.ATG" 
 NotFinalComma()) {
 			Expect(12);
 			Attribute(
-#line  2151 "VBNET.ATG" 
+#line  2154 "VBNET.ATG" 
 out attribute);
 
-#line  2151 "VBNET.ATG" 
+#line  2154 "VBNET.ATG" 
 			attributes.Add(attribute); 
 		}
 		if (la.kind == 12) {
 			lexer.NextToken();
 		}
-		Expect(26);
+		Expect(27);
 
-#line  2155 "VBNET.ATG" 
+#line  2158 "VBNET.ATG" 
 		section = new AttributeSection {
 		AttributeTarget = attributeTarget,
 		Attributes = attributes,
@@ -445,92 +445,92 @@ out attribute);
 	}
 
 	void TypeModifier(
-#line  2865 "VBNET.ATG" 
+#line  2868 "VBNET.ATG" 
 ModifierList m) {
 		switch (la.kind) {
-		case 148: {
+		case 149: {
 			lexer.NextToken();
 
-#line  2866 "VBNET.ATG" 
+#line  2869 "VBNET.ATG" 
 			m.Add(Modifiers.Public, t.Location); 
 			break;
 		}
-		case 147: {
+		case 148: {
 			lexer.NextToken();
 
-#line  2867 "VBNET.ATG" 
+#line  2870 "VBNET.ATG" 
 			m.Add(Modifiers.Protected, t.Location); 
 			break;
 		}
-		case 99: {
+		case 100: {
 			lexer.NextToken();
 
-#line  2868 "VBNET.ATG" 
+#line  2871 "VBNET.ATG" 
 			m.Add(Modifiers.Internal, t.Location); 
 			break;
 		}
-		case 145: {
+		case 146: {
 			lexer.NextToken();
 
-#line  2869 "VBNET.ATG" 
+#line  2872 "VBNET.ATG" 
 			m.Add(Modifiers.Private, t.Location); 
 			break;
 		}
-		case 158: {
+		case 159: {
 			lexer.NextToken();
 
-#line  2870 "VBNET.ATG" 
+#line  2873 "VBNET.ATG" 
 			m.Add(Modifiers.Static, t.Location); 
 			break;
 		}
-		case 157: {
+		case 158: {
 			lexer.NextToken();
 
-#line  2871 "VBNET.ATG" 
+#line  2874 "VBNET.ATG" 
 			m.Add(Modifiers.New, t.Location); 
 			break;
 		}
-		case 122: {
+		case 123: {
 			lexer.NextToken();
 
-#line  2872 "VBNET.ATG" 
+#line  2875 "VBNET.ATG" 
 			m.Add(Modifiers.Abstract, t.Location); 
 			break;
 		}
-		case 131: {
+		case 132: {
 			lexer.NextToken();
 
-#line  2873 "VBNET.ATG" 
+#line  2876 "VBNET.ATG" 
 			m.Add(Modifiers.Sealed, t.Location); 
 			break;
 		}
-		case 204: {
+		case 205: {
 			lexer.NextToken();
 
-#line  2874 "VBNET.ATG" 
+#line  2877 "VBNET.ATG" 
 			m.Add(Modifiers.Partial, t.Location); 
 			break;
 		}
-		default: SynErr(214); break;
+		default: SynErr(215); break;
 		}
 	}
 
 	void NonModuleDeclaration(
-#line  405 "VBNET.ATG" 
+#line  406 "VBNET.ATG" 
 ModifierList m, List<AttributeSection> attributes) {
 
-#line  407 "VBNET.ATG" 
+#line  408 "VBNET.ATG" 
 		TypeReference typeRef = null;
 		List<TypeReference> baseInterfaces = null;
 		
 		switch (la.kind) {
-		case 67: {
+		case 68: {
 
-#line  410 "VBNET.ATG" 
+#line  411 "VBNET.ATG" 
 			m.Check(Modifiers.Classes); 
 			lexer.NextToken();
 
-#line  413 "VBNET.ATG" 
+#line  414 "VBNET.ATG" 
 			TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
 			newType.StartLocation = t.Location;
 			compilationUnit.AddChild(newType);
@@ -540,50 +540,50 @@ ModifierList m, List<AttributeSection> attributes) {
 			
 			Identifier();
 
-#line  420 "VBNET.ATG" 
+#line  421 "VBNET.ATG" 
 			newType.Name = t.val; 
 			TypeParameterList(
-#line  421 "VBNET.ATG" 
+#line  422 "VBNET.ATG" 
 newType.Templates);
 			EndOfStmt();
 
-#line  423 "VBNET.ATG" 
+#line  424 "VBNET.ATG" 
 			newType.BodyStartLocation = t.Location; 
-			if (la.kind == 110) {
+			if (la.kind == 111) {
 				ClassBaseType(
-#line  424 "VBNET.ATG" 
+#line  425 "VBNET.ATG" 
 out typeRef);
 
-#line  424 "VBNET.ATG" 
+#line  425 "VBNET.ATG" 
 				newType.BaseTypes.Add(typeRef); 
 			}
-			while (la.kind == 107) {
+			while (la.kind == 108) {
 				TypeImplementsClause(
-#line  425 "VBNET.ATG" 
+#line  426 "VBNET.ATG" 
 out baseInterfaces);
 
-#line  425 "VBNET.ATG" 
+#line  426 "VBNET.ATG" 
 				newType.BaseTypes.AddRange(baseInterfaces); 
 			}
 			ClassBody(
-#line  426 "VBNET.ATG" 
+#line  427 "VBNET.ATG" 
 newType);
-			Expect(88);
-			Expect(67);
+			Expect(89);
+			Expect(68);
 
-#line  427 "VBNET.ATG" 
+#line  428 "VBNET.ATG" 
 			newType.EndLocation = t.EndLocation; 
 			Expect(1);
 
-#line  430 "VBNET.ATG" 
+#line  431 "VBNET.ATG" 
 			compilationUnit.BlockEnd();
 			
 			break;
 		}
-		case 121: {
+		case 122: {
 			lexer.NextToken();
 
-#line  434 "VBNET.ATG" 
+#line  435 "VBNET.ATG" 
 			m.Check(Modifiers.VBModules);
 			TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
 			compilationUnit.AddChild(newType);
@@ -593,25 +593,25 @@ newType);
 			
 			Identifier();
 
-#line  441 "VBNET.ATG" 
+#line  442 "VBNET.ATG" 
 			newType.Name = t.val; 
 			Expect(1);
 
-#line  443 "VBNET.ATG" 
+#line  444 "VBNET.ATG" 
 			newType.BodyStartLocation = t.Location; 
 			ModuleBody(
-#line  444 "VBNET.ATG" 
+#line  445 "VBNET.ATG" 
 newType);
 
-#line  446 "VBNET.ATG" 
+#line  447 "VBNET.ATG" 
 			compilationUnit.BlockEnd();
 			
 			break;
 		}
-		case 166: {
+		case 167: {
 			lexer.NextToken();
 
-#line  450 "VBNET.ATG" 
+#line  451 "VBNET.ATG" 
 			m.Check(Modifiers.VBStructures);
 			TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
 			compilationUnit.AddChild(newType);
@@ -621,36 +621,36 @@ newType);
 			
 			Identifier();
 
-#line  457 "VBNET.ATG" 
+#line  458 "VBNET.ATG" 
 			newType.Name = t.val; 
 			TypeParameterList(
-#line  458 "VBNET.ATG" 
+#line  459 "VBNET.ATG" 
 newType.Templates);
 			Expect(1);
 
-#line  460 "VBNET.ATG" 
+#line  461 "VBNET.ATG" 
 			newType.BodyStartLocation = t.Location; 
-			while (la.kind == 107) {
+			while (la.kind == 108) {
 				TypeImplementsClause(
-#line  461 "VBNET.ATG" 
+#line  462 "VBNET.ATG" 
 out baseInterfaces);
 
-#line  461 "VBNET.ATG" 
+#line  462 "VBNET.ATG" 
 				newType.BaseTypes.AddRange(baseInterfaces);
 			}
 			StructureBody(
-#line  462 "VBNET.ATG" 
+#line  463 "VBNET.ATG" 
 newType);
 
-#line  464 "VBNET.ATG" 
+#line  465 "VBNET.ATG" 
 			compilationUnit.BlockEnd();
 			
 			break;
 		}
-		case 90: {
+		case 91: {
 			lexer.NextToken();
 
-#line  469 "VBNET.ATG" 
+#line  470 "VBNET.ATG" 
 			m.Check(Modifiers.VBEnums);
 			TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
 			newType.StartLocation = m.GetDeclarationLocation(t.Location);
@@ -661,34 +661,34 @@ newType);
 			
 			Identifier();
 
-#line  477 "VBNET.ATG" 
+#line  478 "VBNET.ATG" 
 			newType.Name = t.val; 
-			if (la.kind == 48) {
+			if (la.kind == 49) {
 				lexer.NextToken();
 				NonArrayTypeName(
-#line  478 "VBNET.ATG" 
+#line  479 "VBNET.ATG" 
 out typeRef, false);
 
-#line  478 "VBNET.ATG" 
+#line  479 "VBNET.ATG" 
 				newType.BaseTypes.Add(typeRef); 
 			}
 			Expect(1);
 
-#line  480 "VBNET.ATG" 
+#line  481 "VBNET.ATG" 
 			newType.BodyStartLocation = t.Location; 
 			EnumBody(
-#line  481 "VBNET.ATG" 
+#line  482 "VBNET.ATG" 
 newType);
 
-#line  483 "VBNET.ATG" 
+#line  484 "VBNET.ATG" 
 			compilationUnit.BlockEnd();
 			
 			break;
 		}
-		case 112: {
+		case 113: {
 			lexer.NextToken();
 
-#line  488 "VBNET.ATG" 
+#line  489 "VBNET.ATG" 
 			m.Check(Modifiers.VBInterfacs);
 			TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
 			newType.StartLocation = m.GetDeclarationLocation(t.Location);
@@ -698,154 +698,154 @@ newType);
 			
 			Identifier();
 
-#line  495 "VBNET.ATG" 
+#line  496 "VBNET.ATG" 
 			newType.Name = t.val; 
 			TypeParameterList(
-#line  496 "VBNET.ATG" 
+#line  497 "VBNET.ATG" 
 newType.Templates);
 			EndOfStmt();
 
-#line  498 "VBNET.ATG" 
+#line  499 "VBNET.ATG" 
 			newType.BodyStartLocation = t.Location; 
-			while (la.kind == 110) {
+			while (la.kind == 111) {
 				InterfaceBase(
-#line  499 "VBNET.ATG" 
+#line  500 "VBNET.ATG" 
 out baseInterfaces);
 
-#line  499 "VBNET.ATG" 
+#line  500 "VBNET.ATG" 
 				newType.BaseTypes.AddRange(baseInterfaces); 
 			}
 			InterfaceBody(
-#line  500 "VBNET.ATG" 
+#line  501 "VBNET.ATG" 
 newType);
 
-#line  502 "VBNET.ATG" 
+#line  503 "VBNET.ATG" 
 			compilationUnit.BlockEnd();
 			
 			break;
 		}
-		case 80: {
+		case 81: {
 			lexer.NextToken();
 
-#line  507 "VBNET.ATG" 
+#line  508 "VBNET.ATG" 
 			m.Check(Modifiers.VBDelegates);
 			DelegateDeclaration delegateDeclr = new DelegateDeclaration(m.Modifier, attributes);
 			delegateDeclr.ReturnType = new TypeReference("", "System.Void");
 			delegateDeclr.StartLocation = m.GetDeclarationLocation(t.Location);
 			List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
 			
-			if (la.kind == 167) {
+			if (la.kind == 168) {
 				lexer.NextToken();
 				Identifier();
 
-#line  514 "VBNET.ATG" 
+#line  515 "VBNET.ATG" 
 				delegateDeclr.Name = t.val; 
 				TypeParameterList(
-#line  515 "VBNET.ATG" 
+#line  516 "VBNET.ATG" 
 delegateDeclr.Templates);
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  516 "VBNET.ATG" 
+#line  517 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 
-#line  516 "VBNET.ATG" 
+#line  517 "VBNET.ATG" 
 					delegateDeclr.Parameters = p; 
 				}
-			} else if (la.kind == 100) {
+			} else if (la.kind == 101) {
 				lexer.NextToken();
 				Identifier();
 
-#line  518 "VBNET.ATG" 
+#line  519 "VBNET.ATG" 
 				delegateDeclr.Name = t.val; 
 				TypeParameterList(
-#line  519 "VBNET.ATG" 
+#line  520 "VBNET.ATG" 
 delegateDeclr.Templates);
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  520 "VBNET.ATG" 
+#line  521 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 
-#line  520 "VBNET.ATG" 
+#line  521 "VBNET.ATG" 
 					delegateDeclr.Parameters = p; 
 				}
-				if (la.kind == 48) {
+				if (la.kind == 49) {
 					lexer.NextToken();
 
-#line  521 "VBNET.ATG" 
+#line  522 "VBNET.ATG" 
 					TypeReference type; 
 					TypeName(
-#line  521 "VBNET.ATG" 
+#line  522 "VBNET.ATG" 
 out type);
 
-#line  521 "VBNET.ATG" 
+#line  522 "VBNET.ATG" 
 					delegateDeclr.ReturnType = type; 
 				}
-			} else SynErr(215);
+			} else SynErr(216);
 
-#line  523 "VBNET.ATG" 
+#line  524 "VBNET.ATG" 
 			delegateDeclr.EndLocation = t.EndLocation; 
 			Expect(1);
 
-#line  526 "VBNET.ATG" 
+#line  527 "VBNET.ATG" 
 			compilationUnit.AddChild(delegateDeclr);
 			
 			break;
 		}
-		default: SynErr(216); break;
+		default: SynErr(217); break;
 		}
 	}
 
 	void TypeParameterList(
-#line  350 "VBNET.ATG" 
+#line  351 "VBNET.ATG" 
 List<TemplateDefinition> templates) {
 
-#line  352 "VBNET.ATG" 
+#line  353 "VBNET.ATG" 
 		TemplateDefinition template;
 		
 		if (
-#line  355 "VBNET.ATG" 
+#line  356 "VBNET.ATG" 
 la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) {
 			lexer.NextToken();
-			Expect(201);
+			Expect(202);
 			TypeParameter(
-#line  356 "VBNET.ATG" 
+#line  357 "VBNET.ATG" 
 out template);
 
-#line  358 "VBNET.ATG" 
+#line  359 "VBNET.ATG" 
 			if (template != null) templates.Add(template);
 			
 			while (la.kind == 12) {
 				lexer.NextToken();
 				TypeParameter(
-#line  361 "VBNET.ATG" 
+#line  362 "VBNET.ATG" 
 out template);
 
-#line  363 "VBNET.ATG" 
+#line  364 "VBNET.ATG" 
 				if (template != null) templates.Add(template);
 				
 			}
-			Expect(25);
+			Expect(26);
 		}
 	}
 
 	void TypeParameter(
-#line  371 "VBNET.ATG" 
+#line  372 "VBNET.ATG" 
 out TemplateDefinition template) {
 		Identifier();
 
-#line  373 "VBNET.ATG" 
+#line  374 "VBNET.ATG" 
 		template = new TemplateDefinition(t.val, null); 
-		if (la.kind == 48) {
+		if (la.kind == 49) {
 			TypeParameterConstraints(
-#line  374 "VBNET.ATG" 
+#line  375 "VBNET.ATG" 
 template);
 		}
 	}
@@ -856,552 +856,552 @@ template);
 			lexer.NextToken();
 			break;
 		}
-		case 169: {
+		case 170: {
 			lexer.NextToken();
 			break;
 		}
-		case 51: {
+		case 52: {
 			lexer.NextToken();
 			break;
 		}
-		case 70: {
+		case 71: {
 			lexer.NextToken();
 			break;
 		}
-		case 205: {
+		case 206: {
 			lexer.NextToken();
 			break;
 		}
-		case 49: {
+		case 50: {
 			lexer.NextToken();
 			break;
 		}
-		case 47: {
+		case 48: {
 			lexer.NextToken();
 			break;
 		}
-		case 50: {
+		case 51: {
 			lexer.NextToken();
 			break;
 		}
-		case 144: {
+		case 145: {
 			lexer.NextToken();
 			break;
 		}
-		case 176: {
+		case 177: {
 			lexer.NextToken();
 			break;
 		}
-		case 177: {
+		case 178: {
 			lexer.NextToken();
 			break;
 		}
-		case 134: {
+		case 135: {
 			lexer.NextToken();
 			break;
 		}
-		case 95: {
+		case 96: {
 			lexer.NextToken();
 			break;
 		}
-		default: SynErr(217); break;
+		default: SynErr(218); break;
 		}
 	}
 
 	void TypeParameterConstraints(
-#line  378 "VBNET.ATG" 
+#line  379 "VBNET.ATG" 
 TemplateDefinition template) {
 
-#line  380 "VBNET.ATG" 
+#line  381 "VBNET.ATG" 
 		TypeReference constraint;
 		
-		Expect(48);
-		if (la.kind == 22) {
+		Expect(49);
+		if (la.kind == 23) {
 			lexer.NextToken();
 			TypeParameterConstraint(
-#line  386 "VBNET.ATG" 
+#line  387 "VBNET.ATG" 
 out constraint);
 
-#line  386 "VBNET.ATG" 
+#line  387 "VBNET.ATG" 
 			if (constraint != null) { template.Bases.Add(constraint); } 
 			while (la.kind == 12) {
 				lexer.NextToken();
 				TypeParameterConstraint(
-#line  389 "VBNET.ATG" 
+#line  390 "VBNET.ATG" 
 out constraint);
 
-#line  389 "VBNET.ATG" 
+#line  390 "VBNET.ATG" 
 				if (constraint != null) { template.Bases.Add(constraint); } 
 			}
-			Expect(23);
+			Expect(24);
 		} else if (StartOf(5)) {
 			TypeParameterConstraint(
-#line  392 "VBNET.ATG" 
+#line  393 "VBNET.ATG" 
 out constraint);
 
-#line  392 "VBNET.ATG" 
+#line  393 "VBNET.ATG" 
 			if (constraint != null) { template.Bases.Add(constraint); } 
-		} else SynErr(218);
+		} else SynErr(219);
 	}
 
 	void TypeParameterConstraint(
-#line  396 "VBNET.ATG" 
+#line  397 "VBNET.ATG" 
 out TypeReference constraint) {
 
-#line  397 "VBNET.ATG" 
+#line  398 "VBNET.ATG" 
 		constraint = null; 
-		if (la.kind == 67) {
+		if (la.kind == 68) {
 			lexer.NextToken();
 
-#line  398 "VBNET.ATG" 
+#line  399 "VBNET.ATG" 
 			constraint = TypeReference.ClassConstraint; 
-		} else if (la.kind == 166) {
+		} else if (la.kind == 167) {
 			lexer.NextToken();
 
-#line  399 "VBNET.ATG" 
+#line  400 "VBNET.ATG" 
 			constraint = TypeReference.StructConstraint; 
-		} else if (la.kind == 127) {
+		} else if (la.kind == 128) {
 			lexer.NextToken();
 
-#line  400 "VBNET.ATG" 
+#line  401 "VBNET.ATG" 
 			constraint = TypeReference.NewConstraint; 
 		} else if (StartOf(6)) {
 			TypeName(
-#line  401 "VBNET.ATG" 
+#line  402 "VBNET.ATG" 
 out constraint);
-		} else SynErr(219);
+		} else SynErr(220);
 	}
 
 	void ClassBaseType(
-#line  727 "VBNET.ATG" 
+#line  728 "VBNET.ATG" 
 out TypeReference typeRef) {
 
-#line  729 "VBNET.ATG" 
+#line  730 "VBNET.ATG" 
 		typeRef = null;
 		
-		Expect(110);
+		Expect(111);
 		TypeName(
-#line  732 "VBNET.ATG" 
+#line  733 "VBNET.ATG" 
 out typeRef);
 		EndOfStmt();
 	}
 
 	void TypeImplementsClause(
-#line  1520 "VBNET.ATG" 
+#line  1521 "VBNET.ATG" 
 out List<TypeReference> baseInterfaces) {
 
-#line  1522 "VBNET.ATG" 
+#line  1523 "VBNET.ATG" 
 		baseInterfaces = new List<TypeReference>();
 		TypeReference type = null;
 		
-		Expect(107);
+		Expect(108);
 		TypeName(
-#line  1525 "VBNET.ATG" 
+#line  1526 "VBNET.ATG" 
 out type);
 
-#line  1527 "VBNET.ATG" 
+#line  1528 "VBNET.ATG" 
 		baseInterfaces.Add(type);
 		
 		while (la.kind == 12) {
 			lexer.NextToken();
 			TypeName(
-#line  1530 "VBNET.ATG" 
+#line  1531 "VBNET.ATG" 
 out type);
 
-#line  1531 "VBNET.ATG" 
+#line  1532 "VBNET.ATG" 
 			baseInterfaces.Add(type); 
 		}
 		EndOfStmt();
 	}
 
 	void ClassBody(
-#line  536 "VBNET.ATG" 
+#line  537 "VBNET.ATG" 
 TypeDeclaration newType) {
 
-#line  537 "VBNET.ATG" 
+#line  538 "VBNET.ATG" 
 		AttributeSection section; 
 		while (StartOf(7)) {
 
-#line  539 "VBNET.ATG" 
+#line  540 "VBNET.ATG" 
 			List<AttributeSection> attributes = new List<AttributeSection>();
 			ModifierList m = new ModifierList();
 			
-			while (la.kind == 27) {
+			while (la.kind == 28) {
 				AttributeSection(
-#line  542 "VBNET.ATG" 
+#line  543 "VBNET.ATG" 
 out section);
 
-#line  542 "VBNET.ATG" 
+#line  543 "VBNET.ATG" 
 				attributes.Add(section); 
 			}
 			while (StartOf(8)) {
 				MemberModifier(
-#line  543 "VBNET.ATG" 
+#line  544 "VBNET.ATG" 
 m);
 			}
 			ClassMemberDecl(
-#line  544 "VBNET.ATG" 
+#line  545 "VBNET.ATG" 
 m, attributes);
 		}
 	}
 
 	void ModuleBody(
-#line  563 "VBNET.ATG" 
+#line  564 "VBNET.ATG" 
 TypeDeclaration newType) {
 
-#line  564 "VBNET.ATG" 
+#line  565 "VBNET.ATG" 
 		AttributeSection section; 
 		while (StartOf(7)) {
 
-#line  566 "VBNET.ATG" 
+#line  567 "VBNET.ATG" 
 			List<AttributeSection> attributes = new List<AttributeSection>();
 			ModifierList m = new ModifierList();
 			
-			while (la.kind == 27) {
+			while (la.kind == 28) {
 				AttributeSection(
-#line  569 "VBNET.ATG" 
+#line  570 "VBNET.ATG" 
 out section);
 
-#line  569 "VBNET.ATG" 
+#line  570 "VBNET.ATG" 
 				attributes.Add(section); 
 			}
 			while (StartOf(8)) {
 				MemberModifier(
-#line  570 "VBNET.ATG" 
+#line  571 "VBNET.ATG" 
 m);
 			}
 			ClassMemberDecl(
-#line  571 "VBNET.ATG" 
+#line  572 "VBNET.ATG" 
 m, attributes);
 		}
-		Expect(88);
-		Expect(121);
+		Expect(89);
+		Expect(122);
 
-#line  573 "VBNET.ATG" 
+#line  574 "VBNET.ATG" 
 		newType.EndLocation = t.EndLocation; 
 		Expect(1);
 	}
 
 	void StructureBody(
-#line  548 "VBNET.ATG" 
+#line  549 "VBNET.ATG" 
 TypeDeclaration newType) {
 
-#line  549 "VBNET.ATG" 
+#line  550 "VBNET.ATG" 
 		AttributeSection section; 
 		while (StartOf(7)) {
 
-#line  551 "VBNET.ATG" 
+#line  552 "VBNET.ATG" 
 			List<AttributeSection> attributes = new List<AttributeSection>();
 			ModifierList m = new ModifierList();
 			
-			while (la.kind == 27) {
+			while (la.kind == 28) {
 				AttributeSection(
-#line  554 "VBNET.ATG" 
+#line  555 "VBNET.ATG" 
 out section);
 
-#line  554 "VBNET.ATG" 
+#line  555 "VBNET.ATG" 
 				attributes.Add(section); 
 			}
 			while (StartOf(8)) {
 				MemberModifier(
-#line  555 "VBNET.ATG" 
+#line  556 "VBNET.ATG" 
 m);
 			}
 			StructureMemberDecl(
-#line  556 "VBNET.ATG" 
+#line  557 "VBNET.ATG" 
 m, attributes);
 		}
-		Expect(88);
-		Expect(166);
+		Expect(89);
+		Expect(167);
 
-#line  558 "VBNET.ATG" 
+#line  559 "VBNET.ATG" 
 		newType.EndLocation = t.EndLocation; 
 		Expect(1);
 	}
 
 	void NonArrayTypeName(
-#line  1971 "VBNET.ATG" 
+#line  1974 "VBNET.ATG" 
 out TypeReference typeref, bool canBeUnbound) {
 
-#line  1973 "VBNET.ATG" 
+#line  1976 "VBNET.ATG" 
 		string name;
 		typeref = null;
 		bool isGlobal = false;
 		
 		if (StartOf(9)) {
-			if (la.kind == 199) {
+			if (la.kind == 200) {
 				lexer.NextToken();
 				Expect(10);
 
-#line  1978 "VBNET.ATG" 
+#line  1981 "VBNET.ATG" 
 				isGlobal = true; 
 			}
 			QualIdentAndTypeArguments(
-#line  1979 "VBNET.ATG" 
+#line  1982 "VBNET.ATG" 
 out typeref, canBeUnbound);
 
-#line  1980 "VBNET.ATG" 
+#line  1983 "VBNET.ATG" 
 			typeref.IsGlobal = isGlobal; 
 			while (la.kind == 10) {
 				lexer.NextToken();
 
-#line  1981 "VBNET.ATG" 
+#line  1984 "VBNET.ATG" 
 				TypeReference nestedTypeRef; 
 				QualIdentAndTypeArguments(
-#line  1982 "VBNET.ATG" 
+#line  1985 "VBNET.ATG" 
 out nestedTypeRef, canBeUnbound);
 
-#line  1983 "VBNET.ATG" 
+#line  1986 "VBNET.ATG" 
 				typeref = new InnerClassTypeReference(typeref, nestedTypeRef.Type, nestedTypeRef.GenericTypes); 
 			}
-		} else if (la.kind == 133) {
+		} else if (la.kind == 134) {
 			lexer.NextToken();
 
-#line  1986 "VBNET.ATG" 
+#line  1989 "VBNET.ATG" 
 			typeref = new TypeReference("System.Object"); 
 		} else if (StartOf(10)) {
 			PrimitiveTypeName(
-#line  1987 "VBNET.ATG" 
+#line  1990 "VBNET.ATG" 
 out name);
 
-#line  1987 "VBNET.ATG" 
+#line  1990 "VBNET.ATG" 
 			typeref = new TypeReference(name); 
-		} else SynErr(220);
+		} else SynErr(221);
 	}
 
 	void EnumBody(
-#line  577 "VBNET.ATG" 
+#line  578 "VBNET.ATG" 
 TypeDeclaration newType) {
 
-#line  578 "VBNET.ATG" 
+#line  579 "VBNET.ATG" 
 		FieldDeclaration f; 
 		while (StartOf(11)) {
 			EnumMemberDecl(
-#line  580 "VBNET.ATG" 
+#line  581 "VBNET.ATG" 
 out f);
 
-#line  580 "VBNET.ATG" 
+#line  581 "VBNET.ATG" 
 			compilationUnit.AddChild(f); 
 		}
-		Expect(88);
-		Expect(90);
+		Expect(89);
+		Expect(91);
 
-#line  582 "VBNET.ATG" 
+#line  583 "VBNET.ATG" 
 		newType.EndLocation = t.EndLocation; 
 		Expect(1);
 	}
 
 	void InterfaceBase(
-#line  1505 "VBNET.ATG" 
+#line  1506 "VBNET.ATG" 
 out List<TypeReference> bases) {
 
-#line  1507 "VBNET.ATG" 
+#line  1508 "VBNET.ATG" 
 		TypeReference type;
 		bases = new List<TypeReference>();
 		
-		Expect(110);
+		Expect(111);
 		TypeName(
-#line  1511 "VBNET.ATG" 
+#line  1512 "VBNET.ATG" 
 out type);
 
-#line  1511 "VBNET.ATG" 
+#line  1512 "VBNET.ATG" 
 		bases.Add(type); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			TypeName(
-#line  1514 "VBNET.ATG" 
+#line  1515 "VBNET.ATG" 
 out type);
 
-#line  1514 "VBNET.ATG" 
+#line  1515 "VBNET.ATG" 
 			bases.Add(type); 
 		}
 		Expect(1);
 	}
 
 	void InterfaceBody(
-#line  586 "VBNET.ATG" 
+#line  587 "VBNET.ATG" 
 TypeDeclaration newType) {
 		while (StartOf(12)) {
 			InterfaceMemberDecl();
 		}
-		Expect(88);
-		Expect(112);
+		Expect(89);
+		Expect(113);
 
-#line  588 "VBNET.ATG" 
+#line  589 "VBNET.ATG" 
 		newType.EndLocation = t.EndLocation; 
 		Expect(1);
 	}
 
 	void FormalParameterList(
-#line  2165 "VBNET.ATG" 
+#line  2168 "VBNET.ATG" 
 List<ParameterDeclarationExpression> parameter) {
 
-#line  2166 "VBNET.ATG" 
+#line  2169 "VBNET.ATG" 
 		ParameterDeclarationExpression p; 
 		FormalParameter(
-#line  2168 "VBNET.ATG" 
+#line  2171 "VBNET.ATG" 
 out p);
 
-#line  2168 "VBNET.ATG" 
+#line  2171 "VBNET.ATG" 
 		if (p != null) parameter.Add(p); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			FormalParameter(
-#line  2170 "VBNET.ATG" 
+#line  2173 "VBNET.ATG" 
 out p);
 
-#line  2170 "VBNET.ATG" 
+#line  2173 "VBNET.ATG" 
 			if (p != null) parameter.Add(p); 
 		}
 	}
 
 	void MemberModifier(
-#line  2877 "VBNET.ATG" 
+#line  2880 "VBNET.ATG" 
 ModifierList m) {
 		switch (la.kind) {
-		case 122: {
+		case 123: {
 			lexer.NextToken();
 
-#line  2878 "VBNET.ATG" 
+#line  2881 "VBNET.ATG" 
 			m.Add(Modifiers.Abstract, t.Location);
 			break;
 		}
-		case 79: {
+		case 80: {
 			lexer.NextToken();
 
-#line  2879 "VBNET.ATG" 
+#line  2882 "VBNET.ATG" 
 			m.Add(Modifiers.Default, t.Location);
 			break;
 		}
-		case 99: {
+		case 100: {
 			lexer.NextToken();
 
-#line  2880 "VBNET.ATG" 
+#line  2883 "VBNET.ATG" 
 			m.Add(Modifiers.Internal, t.Location);
 			break;
 		}
-		case 157: {
+		case 158: {
 			lexer.NextToken();
 
-#line  2881 "VBNET.ATG" 
+#line  2884 "VBNET.ATG" 
 			m.Add(Modifiers.New, t.Location);
 			break;
 		}
-		case 142: {
+		case 143: {
 			lexer.NextToken();
 
-#line  2882 "VBNET.ATG" 
+#line  2885 "VBNET.ATG" 
 			m.Add(Modifiers.Override, t.Location);
 			break;
 		}
-		case 123: {
+		case 124: {
 			lexer.NextToken();
 
-#line  2883 "VBNET.ATG" 
+#line  2886 "VBNET.ATG" 
 			m.Add(Modifiers.Abstract, t.Location);
 			break;
 		}
-		case 145: {
+		case 146: {
 			lexer.NextToken();
 
-#line  2884 "VBNET.ATG" 
+#line  2887 "VBNET.ATG" 
 			m.Add(Modifiers.Private, t.Location);
 			break;
 		}
-		case 147: {
+		case 148: {
 			lexer.NextToken();
 
-#line  2885 "VBNET.ATG" 
+#line  2888 "VBNET.ATG" 
 			m.Add(Modifiers.Protected, t.Location);
 			break;
 		}
-		case 148: {
+		case 149: {
 			lexer.NextToken();
 
-#line  2886 "VBNET.ATG" 
+#line  2889 "VBNET.ATG" 
 			m.Add(Modifiers.Public, t.Location);
 			break;
 		}
-		case 131: {
+		case 132: {
 			lexer.NextToken();
 
-#line  2887 "VBNET.ATG" 
+#line  2890 "VBNET.ATG" 
 			m.Add(Modifiers.Sealed, t.Location);
 			break;
 		}
-		case 132: {
+		case 133: {
 			lexer.NextToken();
 
-#line  2888 "VBNET.ATG" 
+#line  2891 "VBNET.ATG" 
 			m.Add(Modifiers.Sealed, t.Location);
 			break;
 		}
-		case 158: {
+		case 159: {
 			lexer.NextToken();
 
-#line  2889 "VBNET.ATG" 
+#line  2892 "VBNET.ATG" 
 			m.Add(Modifiers.Static, t.Location);
 			break;
 		}
-		case 141: {
+		case 142: {
 			lexer.NextToken();
 
-#line  2890 "VBNET.ATG" 
+#line  2893 "VBNET.ATG" 
 			m.Add(Modifiers.Virtual, t.Location);
 			break;
 		}
-		case 140: {
+		case 141: {
 			lexer.NextToken();
 
-#line  2891 "VBNET.ATG" 
+#line  2894 "VBNET.ATG" 
 			m.Add(Modifiers.Overloads, t.Location);
 			break;
 		}
-		case 150: {
+		case 151: {
 			lexer.NextToken();
 
-#line  2892 "VBNET.ATG" 
+#line  2895 "VBNET.ATG" 
 			m.Add(Modifiers.ReadOnly, t.Location);
 			break;
 		}
-		case 184: {
+		case 185: {
 			lexer.NextToken();
 
-#line  2893 "VBNET.ATG" 
+#line  2896 "VBNET.ATG" 
 			m.Add(Modifiers.WriteOnly, t.Location);
 			break;
 		}
-		case 183: {
+		case 184: {
 			lexer.NextToken();
 
-#line  2894 "VBNET.ATG" 
+#line  2897 "VBNET.ATG" 
 			m.Add(Modifiers.WithEvents, t.Location);
 			break;
 		}
-		case 81: {
+		case 82: {
 			lexer.NextToken();
 
-#line  2895 "VBNET.ATG" 
+#line  2898 "VBNET.ATG" 
 			m.Add(Modifiers.Dim, t.Location);
 			break;
 		}
-		default: SynErr(221); break;
+		default: SynErr(222); break;
 		}
 	}
 
 	void ClassMemberDecl(
-#line  723 "VBNET.ATG" 
+#line  724 "VBNET.ATG" 
 ModifierList m, List<AttributeSection> attributes) {
 		StructureMemberDecl(
-#line  724 "VBNET.ATG" 
+#line  725 "VBNET.ATG" 
 m, attributes);
 	}
 
 	void StructureMemberDecl(
-#line  737 "VBNET.ATG" 
+#line  738 "VBNET.ATG" 
 ModifierList m, List<AttributeSection> attributes) {
 
-#line  739 "VBNET.ATG" 
+#line  740 "VBNET.ATG" 
 		TypeReference type = null;
 		List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
 		Statement stmt = null;
@@ -1409,63 +1409,63 @@ ModifierList m, List<AttributeSection> attributes) {
 		List<TemplateDefinition> templates = new List<TemplateDefinition>();
 		
 		switch (la.kind) {
-		case 67: case 80: case 90: case 112: case 121: case 166: {
+		case 68: case 81: case 91: case 113: case 122: case 167: {
 			NonModuleDeclaration(
-#line  746 "VBNET.ATG" 
+#line  747 "VBNET.ATG" 
 m, attributes);
 			break;
 		}
-		case 167: {
+		case 168: {
 			lexer.NextToken();
 
-#line  750 "VBNET.ATG" 
+#line  751 "VBNET.ATG" 
 			Location startPos = t.Location;
 			
 			if (StartOf(13)) {
 
-#line  754 "VBNET.ATG" 
+#line  755 "VBNET.ATG" 
 				string name = String.Empty;
 				MethodDeclaration methodDeclaration; List<string> handlesClause = null;
 				List<InterfaceImplementation> implementsClause = null;
 				
 				Identifier();
 
-#line  760 "VBNET.ATG" 
+#line  761 "VBNET.ATG" 
 				name = t.val;
 				m.Check(Modifiers.VBMethods);
 				
 				TypeParameterList(
-#line  763 "VBNET.ATG" 
+#line  764 "VBNET.ATG" 
 templates);
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  764 "VBNET.ATG" 
+#line  765 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
-				if (la.kind == 105 || la.kind == 107) {
-					if (la.kind == 107) {
+				if (la.kind == 106 || la.kind == 108) {
+					if (la.kind == 108) {
 						ImplementsClause(
-#line  767 "VBNET.ATG" 
+#line  768 "VBNET.ATG" 
 out implementsClause);
 					} else {
 						HandlesClause(
-#line  769 "VBNET.ATG" 
+#line  770 "VBNET.ATG" 
 out handlesClause);
 					}
 				}
 
-#line  772 "VBNET.ATG" 
+#line  773 "VBNET.ATG" 
 				Location endLocation = t.EndLocation; 
 				Expect(1);
 				if (
-#line  776 "VBNET.ATG" 
+#line  777 "VBNET.ATG" 
 IsMustOverride(m)) {
 
-#line  778 "VBNET.ATG" 
+#line  779 "VBNET.ATG" 
 					methodDeclaration = new MethodDeclaration {
 					Name = name, Modifier = m.Modifier, Parameters = p, Attributes = attributes,
 					StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endLocation,
@@ -1478,7 +1478,7 @@ IsMustOverride(m)) {
 					
 				} else if (StartOf(14)) {
 
-#line  790 "VBNET.ATG" 
+#line  791 "VBNET.ATG" 
 					methodDeclaration = new MethodDeclaration {
 					Name = name, Modifier = m.Modifier, Parameters = p, Attributes = attributes,
 					StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endLocation,
@@ -1490,67 +1490,67 @@ IsMustOverride(m)) {
 					compilationUnit.AddChild(methodDeclaration);
 					
 
-#line  801 "VBNET.ATG" 
+#line  802 "VBNET.ATG" 
 					if (ParseMethodBodies) { 
 					Block(
-#line  802 "VBNET.ATG" 
+#line  803 "VBNET.ATG" 
 out stmt);
-					Expect(88);
-					Expect(167);
+					Expect(89);
+					Expect(168);
 
-#line  804 "VBNET.ATG" 
+#line  805 "VBNET.ATG" 
 					} else {
 					// don't parse method body
 					lexer.SkipCurrentBlock(Tokens.Sub); stmt = new BlockStatement();
 					  }
 					
 
-#line  810 "VBNET.ATG" 
+#line  811 "VBNET.ATG" 
 					methodDeclaration.Body  = (BlockStatement)stmt; 
 
-#line  811 "VBNET.ATG" 
+#line  812 "VBNET.ATG" 
 					methodDeclaration.Body.EndLocation = t.EndLocation; 
 					Expect(1);
-				} else SynErr(222);
-			} else if (la.kind == 127) {
+				} else SynErr(223);
+			} else if (la.kind == 128) {
 				lexer.NextToken();
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  814 "VBNET.ATG" 
+#line  815 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
 
-#line  815 "VBNET.ATG" 
+#line  816 "VBNET.ATG" 
 				m.Check(Modifiers.Constructors); 
 
-#line  816 "VBNET.ATG" 
+#line  817 "VBNET.ATG" 
 				Location constructorEndLocation = t.EndLocation; 
 				Expect(1);
 
-#line  819 "VBNET.ATG" 
+#line  820 "VBNET.ATG" 
 				if (ParseMethodBodies) { 
 				Block(
-#line  820 "VBNET.ATG" 
+#line  821 "VBNET.ATG" 
 out stmt);
-				Expect(88);
-				Expect(167);
+				Expect(89);
+				Expect(168);
 
-#line  822 "VBNET.ATG" 
+#line  823 "VBNET.ATG" 
 				} else {
 				// don't parse method body
 				lexer.SkipCurrentBlock(Tokens.Sub); stmt = new BlockStatement();
 				  }
 				
 
-#line  828 "VBNET.ATG" 
+#line  829 "VBNET.ATG" 
 				Location endLocation = t.EndLocation; 
 				Expect(1);
 
-#line  830 "VBNET.ATG" 
+#line  831 "VBNET.ATG" 
 				ConstructorDeclaration cd = new ConstructorDeclaration("New", m.Modifier, p, attributes); 
 				cd.StartLocation = m.GetDeclarationLocation(startPos);
 				cd.EndLocation   = constructorEndLocation;
@@ -1558,13 +1558,13 @@ out stmt);
 				cd.Body.EndLocation   = endLocation;
 				compilationUnit.AddChild(cd);
 				
-			} else SynErr(223);
+			} else SynErr(224);
 			break;
 		}
-		case 100: {
+		case 101: {
 			lexer.NextToken();
 
-#line  842 "VBNET.ATG" 
+#line  843 "VBNET.ATG" 
 			m.Check(Modifiers.VBMethods);
 			string name = String.Empty;
 			Location startPos = t.Location;
@@ -1574,54 +1574,54 @@ out stmt);
 			
 			Identifier();
 
-#line  849 "VBNET.ATG" 
+#line  850 "VBNET.ATG" 
 			name = t.val; 
 			TypeParameterList(
-#line  850 "VBNET.ATG" 
+#line  851 "VBNET.ATG" 
 templates);
-			if (la.kind == 24) {
+			if (la.kind == 25) {
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  851 "VBNET.ATG" 
+#line  852 "VBNET.ATG" 
 p);
 				}
-				Expect(25);
+				Expect(26);
 			}
-			if (la.kind == 48) {
+			if (la.kind == 49) {
 				lexer.NextToken();
-				while (la.kind == 27) {
+				while (la.kind == 28) {
 					AttributeSection(
-#line  852 "VBNET.ATG" 
+#line  853 "VBNET.ATG" 
 out returnTypeAttributeSection);
 				}
 				TypeName(
-#line  852 "VBNET.ATG" 
+#line  853 "VBNET.ATG" 
 out type);
 			}
 
-#line  854 "VBNET.ATG" 
+#line  855 "VBNET.ATG" 
 			if(type == null) {
 			type = new TypeReference("System.Object");
 			}
 			
-			if (la.kind == 105 || la.kind == 107) {
-				if (la.kind == 107) {
+			if (la.kind == 106 || la.kind == 108) {
+				if (la.kind == 108) {
 					ImplementsClause(
-#line  860 "VBNET.ATG" 
+#line  861 "VBNET.ATG" 
 out implementsClause);
 				} else {
 					HandlesClause(
-#line  862 "VBNET.ATG" 
+#line  863 "VBNET.ATG" 
 out handlesClause);
 				}
 			}
 			Expect(1);
 			if (
-#line  868 "VBNET.ATG" 
+#line  869 "VBNET.ATG" 
 IsMustOverride(m)) {
 
-#line  870 "VBNET.ATG" 
+#line  871 "VBNET.ATG" 
 				methodDeclaration = new MethodDeclaration {
 				Name = name, Modifier = m.Modifier, TypeReference = type,
 				Parameters = p, Attributes = attributes,
@@ -1639,7 +1639,7 @@ IsMustOverride(m)) {
 				
 			} else if (StartOf(14)) {
 
-#line  887 "VBNET.ATG" 
+#line  888 "VBNET.ATG" 
 				methodDeclaration = new MethodDeclaration {
 				Name = name, Modifier = m.Modifier, TypeReference = type,
 				Parameters = p, Attributes = attributes,
@@ -1658,12 +1658,12 @@ IsMustOverride(m)) {
 				
 				if (ParseMethodBodies) { 
 				Block(
-#line  904 "VBNET.ATG" 
+#line  905 "VBNET.ATG" 
 out stmt);
-				Expect(88);
-				Expect(100);
+				Expect(89);
+				Expect(101);
 
-#line  906 "VBNET.ATG" 
+#line  907 "VBNET.ATG" 
 				} else {
 				// don't parse method body
 				lexer.SkipCurrentBlock(Tokens.Function); stmt = new BlockStatement();
@@ -1673,13 +1673,13 @@ out stmt);
 				methodDeclaration.Body.EndLocation   = t.EndLocation;
 				
 				Expect(1);
-			} else SynErr(224);
+			} else SynErr(225);
 			break;
 		}
-		case 78: {
+		case 79: {
 			lexer.NextToken();
 
-#line  920 "VBNET.ATG" 
+#line  921 "VBNET.ATG" 
 			m.Check(Modifiers.VBExternalMethods);
 			Location startPos = t.Location;
 			CharsetModifier charsetModifer = CharsetModifier.None;
@@ -1689,92 +1689,92 @@ out stmt);
 			
 			if (StartOf(15)) {
 				Charset(
-#line  927 "VBNET.ATG" 
+#line  928 "VBNET.ATG" 
 out charsetModifer);
 			}
-			if (la.kind == 167) {
+			if (la.kind == 168) {
 				lexer.NextToken();
 				Identifier();
 
-#line  930 "VBNET.ATG" 
+#line  931 "VBNET.ATG" 
 				name = t.val; 
-				Expect(115);
+				Expect(116);
 				Expect(3);
 
-#line  931 "VBNET.ATG" 
+#line  932 "VBNET.ATG" 
 				library = t.literalValue as string; 
-				if (la.kind == 44) {
+				if (la.kind == 45) {
 					lexer.NextToken();
 					Expect(3);
 
-#line  932 "VBNET.ATG" 
+#line  933 "VBNET.ATG" 
 					alias = t.literalValue as string; 
 				}
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  933 "VBNET.ATG" 
+#line  934 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
 				Expect(1);
 
-#line  936 "VBNET.ATG" 
+#line  937 "VBNET.ATG" 
 				DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, null, p, attributes, library, alias, charsetModifer);
 				declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 				declareDeclaration.EndLocation   = t.EndLocation;
 				compilationUnit.AddChild(declareDeclaration);
 				
-			} else if (la.kind == 100) {
+			} else if (la.kind == 101) {
 				lexer.NextToken();
 				Identifier();
 
-#line  943 "VBNET.ATG" 
+#line  944 "VBNET.ATG" 
 				name = t.val; 
-				Expect(115);
+				Expect(116);
 				Expect(3);
 
-#line  944 "VBNET.ATG" 
+#line  945 "VBNET.ATG" 
 				library = t.literalValue as string; 
-				if (la.kind == 44) {
+				if (la.kind == 45) {
 					lexer.NextToken();
 					Expect(3);
 
-#line  945 "VBNET.ATG" 
+#line  946 "VBNET.ATG" 
 					alias = t.literalValue as string; 
 				}
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  946 "VBNET.ATG" 
+#line  947 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
-				if (la.kind == 48) {
+				if (la.kind == 49) {
 					lexer.NextToken();
 					TypeName(
-#line  947 "VBNET.ATG" 
+#line  948 "VBNET.ATG" 
 out type);
 				}
 				Expect(1);
 
-#line  950 "VBNET.ATG" 
+#line  951 "VBNET.ATG" 
 				DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, type, p, attributes, library, alias, charsetModifer);
 				declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 				declareDeclaration.EndLocation   = t.EndLocation;
 				compilationUnit.AddChild(declareDeclaration);
 				
-			} else SynErr(225);
+			} else SynErr(226);
 			break;
 		}
-		case 93: {
+		case 94: {
 			lexer.NextToken();
 
-#line  960 "VBNET.ATG" 
+#line  961 "VBNET.ATG" 
 			m.Check(Modifiers.VBEvents);
 			Location startPos = t.Location;
 			EventDeclaration eventDeclaration;
@@ -1783,31 +1783,31 @@ out type);
 			
 			Identifier();
 
-#line  966 "VBNET.ATG" 
+#line  967 "VBNET.ATG" 
 			name= t.val; 
-			if (la.kind == 48) {
+			if (la.kind == 49) {
 				lexer.NextToken();
 				TypeName(
-#line  968 "VBNET.ATG" 
+#line  969 "VBNET.ATG" 
 out type);
-			} else if (la.kind == 1 || la.kind == 24 || la.kind == 107) {
-				if (la.kind == 24) {
+			} else if (la.kind == 1 || la.kind == 25 || la.kind == 108) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  970 "VBNET.ATG" 
+#line  971 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
-			} else SynErr(226);
-			if (la.kind == 107) {
+			} else SynErr(227);
+			if (la.kind == 108) {
 				ImplementsClause(
-#line  972 "VBNET.ATG" 
+#line  973 "VBNET.ATG" 
 out implementsClause);
 			}
 
-#line  974 "VBNET.ATG" 
+#line  975 "VBNET.ATG" 
 			eventDeclaration = new EventDeclaration {
 			Name = name, TypeReference = type, Modifier = m.Modifier, 
 			Parameters = p, Attributes = attributes, InterfaceImplementations = implementsClause,
@@ -1819,118 +1819,118 @@ out implementsClause);
 			Expect(1);
 			break;
 		}
-		case 2: case 47: case 49: case 50: case 51: case 70: case 95: case 134: case 144: case 169: case 176: case 177: {
+		case 2: case 48: case 50: case 51: case 52: case 71: case 96: case 135: case 145: case 170: case 177: case 178: {
 
-#line  984 "VBNET.ATG" 
+#line  985 "VBNET.ATG" 
 			Location startPos = t.Location; 
 
-#line  986 "VBNET.ATG" 
+#line  987 "VBNET.ATG" 
 			m.Check(Modifiers.Fields);
 			FieldDeclaration fd = new FieldDeclaration(attributes, null, m.Modifier);
 			fd.StartLocation = m.GetDeclarationLocation(startPos); 
 			
 			IdentifierForFieldDeclaration();
 
-#line  990 "VBNET.ATG" 
+#line  991 "VBNET.ATG" 
 			string name = t.val; 
 			VariableDeclaratorPartAfterIdentifier(
-#line  991 "VBNET.ATG" 
+#line  992 "VBNET.ATG" 
 variableDeclarators, name);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				VariableDeclarator(
-#line  992 "VBNET.ATG" 
+#line  993 "VBNET.ATG" 
 variableDeclarators);
 			}
 			Expect(1);
 
-#line  995 "VBNET.ATG" 
+#line  996 "VBNET.ATG" 
 			fd.EndLocation = t.EndLocation;
 			fd.Fields = variableDeclarators;
 			compilationUnit.AddChild(fd);
 			
 			break;
 		}
-		case 71: {
+		case 72: {
 
-#line  1000 "VBNET.ATG" 
+#line  1001 "VBNET.ATG" 
 			m.Check(Modifiers.Fields); 
 			lexer.NextToken();
 
-#line  1001 "VBNET.ATG" 
+#line  1002 "VBNET.ATG" 
 			m.Add(Modifiers.Const, t.Location);  
 
-#line  1003 "VBNET.ATG" 
+#line  1004 "VBNET.ATG" 
 			FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
 			fd.StartLocation = m.GetDeclarationLocation(t.Location);
 			List<VariableDeclaration> constantDeclarators = new List<VariableDeclaration>();
 			
 			ConstantDeclarator(
-#line  1007 "VBNET.ATG" 
+#line  1008 "VBNET.ATG" 
 constantDeclarators);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				ConstantDeclarator(
-#line  1008 "VBNET.ATG" 
+#line  1009 "VBNET.ATG" 
 constantDeclarators);
 			}
 
-#line  1010 "VBNET.ATG" 
+#line  1011 "VBNET.ATG" 
 			fd.Fields = constantDeclarators;
 			fd.EndLocation = t.Location;
 			
 			Expect(1);
 
-#line  1015 "VBNET.ATG" 
+#line  1016 "VBNET.ATG" 
 			fd.EndLocation = t.EndLocation;
 			compilationUnit.AddChild(fd);
 			
 			break;
 		}
-		case 146: {
+		case 147: {
 			lexer.NextToken();
 
-#line  1021 "VBNET.ATG" 
+#line  1022 "VBNET.ATG" 
 			m.Check(Modifiers.VBProperties);
 			Location startPos = t.Location;
 			List<InterfaceImplementation> implementsClause = null;
 			
 			Identifier();
 
-#line  1025 "VBNET.ATG" 
+#line  1026 "VBNET.ATG" 
 			string propertyName = t.val; 
-			if (la.kind == 24) {
+			if (la.kind == 25) {
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1026 "VBNET.ATG" 
+#line  1027 "VBNET.ATG" 
 p);
 				}
-				Expect(25);
+				Expect(26);
 			}
-			if (la.kind == 48) {
+			if (la.kind == 49) {
 				lexer.NextToken();
 				TypeName(
-#line  1027 "VBNET.ATG" 
+#line  1028 "VBNET.ATG" 
 out type);
 			}
 
-#line  1029 "VBNET.ATG" 
+#line  1030 "VBNET.ATG" 
 			if(type == null) {
 			type = new TypeReference("System.Object");
 			}
 			
-			if (la.kind == 107) {
+			if (la.kind == 108) {
 				ImplementsClause(
-#line  1033 "VBNET.ATG" 
+#line  1034 "VBNET.ATG" 
 out implementsClause);
 			}
 			Expect(1);
 			if (
-#line  1037 "VBNET.ATG" 
+#line  1038 "VBNET.ATG" 
 IsMustOverride(m)) {
 
-#line  1039 "VBNET.ATG" 
+#line  1040 "VBNET.ATG" 
 				PropertyDeclaration pDecl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes);
 				pDecl.StartLocation = m.GetDeclarationLocation(startPos);
 				pDecl.EndLocation   = t.Location;
@@ -1941,7 +1941,7 @@ IsMustOverride(m)) {
 				
 			} else if (StartOf(16)) {
 
-#line  1049 "VBNET.ATG" 
+#line  1050 "VBNET.ATG" 
 				PropertyDeclaration pDecl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes);
 				pDecl.StartLocation = m.GetDeclarationLocation(startPos);
 				pDecl.EndLocation   = t.Location;
@@ -1953,29 +1953,29 @@ IsMustOverride(m)) {
 				PropertySetRegion setRegion;
 				
 				AccessorDecls(
-#line  1059 "VBNET.ATG" 
+#line  1060 "VBNET.ATG" 
 out getRegion, out setRegion);
-				Expect(88);
-				Expect(146);
+				Expect(89);
+				Expect(147);
 				Expect(1);
 
-#line  1063 "VBNET.ATG" 
+#line  1064 "VBNET.ATG" 
 				pDecl.GetRegion = getRegion;
 				pDecl.SetRegion = setRegion;
 				pDecl.BodyEnd = t.EndLocation;
 				compilationUnit.AddChild(pDecl);
 				
-			} else SynErr(227);
+			} else SynErr(228);
 			break;
 		}
-		case 205: {
+		case 206: {
 			lexer.NextToken();
 
-#line  1070 "VBNET.ATG" 
+#line  1071 "VBNET.ATG" 
 			Location startPos = t.Location; 
-			Expect(93);
+			Expect(94);
 
-#line  1072 "VBNET.ATG" 
+#line  1073 "VBNET.ATG" 
 			m.Check(Modifiers.VBCustomEvents);
 			EventAddRemoveRegion eventAccessorDeclaration;
 			EventAddRegion addHandlerAccessorDeclaration = null;
@@ -1985,24 +1985,24 @@ out getRegion, out setRegion);
 			
 			Identifier();
 
-#line  1079 "VBNET.ATG" 
+#line  1080 "VBNET.ATG" 
 			string customEventName = t.val; 
-			Expect(48);
+			Expect(49);
 			TypeName(
-#line  1080 "VBNET.ATG" 
+#line  1081 "VBNET.ATG" 
 out type);
-			if (la.kind == 107) {
+			if (la.kind == 108) {
 				ImplementsClause(
-#line  1081 "VBNET.ATG" 
+#line  1082 "VBNET.ATG" 
 out implementsClause);
 			}
 			Expect(1);
 			while (StartOf(17)) {
 				EventAccessorDeclaration(
-#line  1084 "VBNET.ATG" 
+#line  1085 "VBNET.ATG" 
 out eventAccessorDeclaration);
 
-#line  1086 "VBNET.ATG" 
+#line  1087 "VBNET.ATG" 
 				if(eventAccessorDeclaration is EventAddRegion)
 				{
 					addHandlerAccessorDeclaration = (EventAddRegion)eventAccessorDeclaration;
@@ -2017,11 +2017,11 @@ out eventAccessorDeclaration);
 				}
 				
 			}
-			Expect(88);
-			Expect(93);
+			Expect(89);
+			Expect(94);
 			Expect(1);
 
-#line  1102 "VBNET.ATG" 
+#line  1103 "VBNET.ATG" 
 			if(addHandlerAccessorDeclaration == null)
 			{
 				Error("Need to provide AddHandler accessor.");
@@ -2050,26 +2050,26 @@ out eventAccessorDeclaration);
 			
 			break;
 		}
-		case 188: case 202: case 203: {
+		case 189: case 203: case 204: {
 
-#line  1128 "VBNET.ATG" 
+#line  1129 "VBNET.ATG" 
 			ConversionType opConversionType = ConversionType.None; 
-			if (la.kind == 202 || la.kind == 203) {
-				if (la.kind == 203) {
+			if (la.kind == 203 || la.kind == 204) {
+				if (la.kind == 204) {
 					lexer.NextToken();
 
-#line  1129 "VBNET.ATG" 
+#line  1130 "VBNET.ATG" 
 					opConversionType = ConversionType.Implicit; 
 				} else {
 					lexer.NextToken();
 
-#line  1130 "VBNET.ATG" 
+#line  1131 "VBNET.ATG" 
 					opConversionType = ConversionType.Explicit;
 				}
 			}
-			Expect(188);
+			Expect(189);
 
-#line  1133 "VBNET.ATG" 
+#line  1134 "VBNET.ATG" 
 			m.Check(Modifiers.VBOperators);
 			Location startPos = t.Location;
 			TypeReference returnType = NullTypeReference.Instance;
@@ -2081,74 +2081,74 @@ out eventAccessorDeclaration);
 			List<AttributeSection> returnTypeAttributes = new List<AttributeSection>();
 			
 			OverloadableOperator(
-#line  1143 "VBNET.ATG" 
+#line  1144 "VBNET.ATG" 
 out operatorType);
-			Expect(24);
-			if (la.kind == 55) {
+			Expect(25);
+			if (la.kind == 56) {
 				lexer.NextToken();
 			}
 			Identifier();
 
-#line  1144 "VBNET.ATG" 
+#line  1145 "VBNET.ATG" 
 			operandName = t.val; 
-			if (la.kind == 48) {
+			if (la.kind == 49) {
 				lexer.NextToken();
 				TypeName(
-#line  1145 "VBNET.ATG" 
+#line  1146 "VBNET.ATG" 
 out operandType);
 			}
 
-#line  1146 "VBNET.ATG" 
+#line  1147 "VBNET.ATG" 
 			parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParameterModifiers.In)); 
 			while (la.kind == 12) {
 				lexer.NextToken();
-				if (la.kind == 55) {
+				if (la.kind == 56) {
 					lexer.NextToken();
 				}
 				Identifier();
 
-#line  1150 "VBNET.ATG" 
+#line  1151 "VBNET.ATG" 
 				operandName = t.val; 
-				if (la.kind == 48) {
+				if (la.kind == 49) {
 					lexer.NextToken();
 					TypeName(
-#line  1151 "VBNET.ATG" 
+#line  1152 "VBNET.ATG" 
 out operandType);
 				}
 
-#line  1152 "VBNET.ATG" 
+#line  1153 "VBNET.ATG" 
 				parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParameterModifiers.In)); 
 			}
-			Expect(25);
+			Expect(26);
 
-#line  1155 "VBNET.ATG" 
+#line  1156 "VBNET.ATG" 
 			Location endPos = t.EndLocation; 
-			if (la.kind == 48) {
+			if (la.kind == 49) {
 				lexer.NextToken();
-				while (la.kind == 27) {
+				while (la.kind == 28) {
 					AttributeSection(
-#line  1156 "VBNET.ATG" 
+#line  1157 "VBNET.ATG" 
 out section);
 
-#line  1156 "VBNET.ATG" 
+#line  1157 "VBNET.ATG" 
 					returnTypeAttributes.Add(section); 
 				}
 				TypeName(
-#line  1156 "VBNET.ATG" 
+#line  1157 "VBNET.ATG" 
 out returnType);
 
-#line  1156 "VBNET.ATG" 
+#line  1157 "VBNET.ATG" 
 				endPos = t.EndLocation; 
 				Expect(1);
 			}
 			Block(
-#line  1157 "VBNET.ATG" 
+#line  1158 "VBNET.ATG" 
 out stmt);
-			Expect(88);
-			Expect(188);
+			Expect(89);
+			Expect(189);
 			Expect(1);
 
-#line  1159 "VBNET.ATG" 
+#line  1160 "VBNET.ATG" 
 			OperatorDeclaration operatorDeclaration = new OperatorDeclaration {
 			Modifier = m.Modifier,
 			Attributes = attributes,
@@ -2167,30 +2167,30 @@ out stmt);
 			
 			break;
 		}
-		default: SynErr(228); break;
+		default: SynErr(229); break;
 		}
 	}
 
 	void EnumMemberDecl(
-#line  705 "VBNET.ATG" 
+#line  706 "VBNET.ATG" 
 out FieldDeclaration f) {
 
-#line  707 "VBNET.ATG" 
+#line  708 "VBNET.ATG" 
 		Expression expr = null;List<AttributeSection> attributes = new List<AttributeSection>();
 		AttributeSection section = null;
 		VariableDeclaration varDecl = null;
 		
-		while (la.kind == 27) {
+		while (la.kind == 28) {
 			AttributeSection(
-#line  711 "VBNET.ATG" 
+#line  712 "VBNET.ATG" 
 out section);
 
-#line  711 "VBNET.ATG" 
+#line  712 "VBNET.ATG" 
 			attributes.Add(section); 
 		}
 		Identifier();
 
-#line  714 "VBNET.ATG" 
+#line  715 "VBNET.ATG" 
 		f = new FieldDeclaration(attributes);
 		varDecl = new VariableDeclaration(t.val);
 		f.Fields.Add(varDecl);
@@ -2199,10 +2199,10 @@ out section);
 		if (la.kind == 11) {
 			lexer.NextToken();
 			Expr(
-#line  719 "VBNET.ATG" 
+#line  720 "VBNET.ATG" 
 out expr);
 
-#line  719 "VBNET.ATG" 
+#line  720 "VBNET.ATG" 
 			varDecl.Initializer = expr; 
 		}
 		Expect(1);
@@ -2210,7 +2210,7 @@ out expr);
 
 	void InterfaceMemberDecl() {
 
-#line  596 "VBNET.ATG" 
+#line  597 "VBNET.ATG" 
 		TypeReference type =null;
 		List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
 		List<TemplateDefinition> templates = new List<TemplateDefinition>();
@@ -2220,48 +2220,48 @@ out expr);
 		string name;
 		
 		if (StartOf(18)) {
-			while (la.kind == 27) {
+			while (la.kind == 28) {
 				AttributeSection(
-#line  604 "VBNET.ATG" 
+#line  605 "VBNET.ATG" 
 out section);
 
-#line  604 "VBNET.ATG" 
+#line  605 "VBNET.ATG" 
 				attributes.Add(section); 
 			}
 			while (StartOf(8)) {
 				MemberModifier(
-#line  607 "VBNET.ATG" 
+#line  608 "VBNET.ATG" 
 mod);
 			}
-			if (la.kind == 93) {
+			if (la.kind == 94) {
 				lexer.NextToken();
 
-#line  611 "VBNET.ATG" 
+#line  612 "VBNET.ATG" 
 				mod.Check(Modifiers.VBInterfaceEvents);
 				Location startLocation = t.Location;
 				
 				Identifier();
 
-#line  614 "VBNET.ATG" 
+#line  615 "VBNET.ATG" 
 				name = t.val; 
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  615 "VBNET.ATG" 
+#line  616 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
-				if (la.kind == 48) {
+				if (la.kind == 49) {
 					lexer.NextToken();
 					TypeName(
-#line  616 "VBNET.ATG" 
+#line  617 "VBNET.ATG" 
 out type);
 				}
 				Expect(1);
 
-#line  619 "VBNET.ATG" 
+#line  620 "VBNET.ATG" 
 				EventDeclaration ed = new EventDeclaration {
 				Name = name, TypeReference = type, Modifier = mod.Modifier,
 				Parameters = p, Attributes = attributes,
@@ -2269,32 +2269,32 @@ out type);
 				};
 				compilationUnit.AddChild(ed);
 				
-			} else if (la.kind == 167) {
+			} else if (la.kind == 168) {
 				lexer.NextToken();
 
-#line  629 "VBNET.ATG" 
+#line  630 "VBNET.ATG" 
 				Location startLocation =  t.Location;
 				mod.Check(Modifiers.VBInterfaceMethods);
 				
 				Identifier();
 
-#line  632 "VBNET.ATG" 
+#line  633 "VBNET.ATG" 
 				name = t.val; 
 				TypeParameterList(
-#line  633 "VBNET.ATG" 
+#line  634 "VBNET.ATG" 
 templates);
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  634 "VBNET.ATG" 
+#line  635 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
 				Expect(1);
 
-#line  637 "VBNET.ATG" 
+#line  638 "VBNET.ATG" 
 				MethodDeclaration md = new MethodDeclaration {
 				Name = name, 
 				Modifier = mod.Modifier, 
@@ -2307,42 +2307,42 @@ p);
 				};
 				compilationUnit.AddChild(md);
 				
-			} else if (la.kind == 100) {
+			} else if (la.kind == 101) {
 				lexer.NextToken();
 
-#line  652 "VBNET.ATG" 
+#line  653 "VBNET.ATG" 
 				mod.Check(Modifiers.VBInterfaceMethods);
 				Location startLocation = t.Location;
 				
 				Identifier();
 
-#line  655 "VBNET.ATG" 
+#line  656 "VBNET.ATG" 
 				name = t.val; 
 				TypeParameterList(
-#line  656 "VBNET.ATG" 
+#line  657 "VBNET.ATG" 
 templates);
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  657 "VBNET.ATG" 
+#line  658 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
-				if (la.kind == 48) {
+				if (la.kind == 49) {
 					lexer.NextToken();
-					while (la.kind == 27) {
+					while (la.kind == 28) {
 						AttributeSection(
-#line  658 "VBNET.ATG" 
+#line  659 "VBNET.ATG" 
 out returnTypeAttributeSection);
 					}
 					TypeName(
-#line  658 "VBNET.ATG" 
+#line  659 "VBNET.ATG" 
 out type);
 				}
 
-#line  660 "VBNET.ATG" 
+#line  661 "VBNET.ATG" 
 				if(type == null) {
 				type = new TypeReference("System.Object");
 				}
@@ -2360,142 +2360,142 @@ out type);
 				compilationUnit.AddChild(md);
 				
 				Expect(1);
-			} else if (la.kind == 146) {
+			} else if (la.kind == 147) {
 				lexer.NextToken();
 
-#line  680 "VBNET.ATG" 
+#line  681 "VBNET.ATG" 
 				Location startLocation = t.Location;
 				mod.Check(Modifiers.VBInterfaceProperties);
 				
 				Identifier();
 
-#line  683 "VBNET.ATG" 
+#line  684 "VBNET.ATG" 
 				name = t.val;  
-				if (la.kind == 24) {
+				if (la.kind == 25) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  684 "VBNET.ATG" 
+#line  685 "VBNET.ATG" 
 p);
 					}
-					Expect(25);
+					Expect(26);
 				}
-				if (la.kind == 48) {
+				if (la.kind == 49) {
 					lexer.NextToken();
 					TypeName(
-#line  685 "VBNET.ATG" 
+#line  686 "VBNET.ATG" 
 out type);
 				}
 
-#line  687 "VBNET.ATG" 
+#line  688 "VBNET.ATG" 
 				if(type == null) {
 				type = new TypeReference("System.Object");
 				}
 				
 				Expect(1);
 
-#line  693 "VBNET.ATG" 
+#line  694 "VBNET.ATG" 
 				PropertyDeclaration pd = new PropertyDeclaration(name, type, mod.Modifier, attributes);
 				pd.Parameters = p;
 				pd.EndLocation = t.EndLocation;
 				pd.StartLocation = startLocation;
 				compilationUnit.AddChild(pd);
 				
-			} else SynErr(229);
+			} else SynErr(230);
 		} else if (StartOf(19)) {
 			NonModuleDeclaration(
-#line  701 "VBNET.ATG" 
+#line  702 "VBNET.ATG" 
 mod, attributes);
-		} else SynErr(230);
+		} else SynErr(231);
 	}
 
 	void Expr(
-#line  1564 "VBNET.ATG" 
+#line  1565 "VBNET.ATG" 
 out Expression expr) {
 		DisjunctionExpr(
-#line  1566 "VBNET.ATG" 
+#line  1567 "VBNET.ATG" 
 out expr);
 	}
 
 	void ImplementsClause(
-#line  1537 "VBNET.ATG" 
+#line  1538 "VBNET.ATG" 
 out List<InterfaceImplementation> baseInterfaces) {
 
-#line  1539 "VBNET.ATG" 
+#line  1540 "VBNET.ATG" 
 		baseInterfaces = new List<InterfaceImplementation>();
 		TypeReference type = null;
 		string memberName = null;
 		
-		Expect(107);
+		Expect(108);
 		NonArrayTypeName(
-#line  1544 "VBNET.ATG" 
+#line  1545 "VBNET.ATG" 
 out type, false);
 
-#line  1545 "VBNET.ATG" 
+#line  1546 "VBNET.ATG" 
 		if (type != null) memberName = TypeReference.StripLastIdentifierFromType(ref type); 
 
-#line  1546 "VBNET.ATG" 
+#line  1547 "VBNET.ATG" 
 		baseInterfaces.Add(new InterfaceImplementation(type, memberName)); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			NonArrayTypeName(
-#line  1548 "VBNET.ATG" 
+#line  1549 "VBNET.ATG" 
 out type, false);
 
-#line  1549 "VBNET.ATG" 
+#line  1550 "VBNET.ATG" 
 			if (type != null) memberName = TypeReference.StripLastIdentifierFromType(ref type); 
 
-#line  1550 "VBNET.ATG" 
+#line  1551 "VBNET.ATG" 
 			baseInterfaces.Add(new InterfaceImplementation(type, memberName)); 
 		}
 	}
 
 	void HandlesClause(
-#line  1495 "VBNET.ATG" 
+#line  1496 "VBNET.ATG" 
 out List<string> handlesClause) {
 
-#line  1497 "VBNET.ATG" 
+#line  1498 "VBNET.ATG" 
 		handlesClause = new List<string>();
 		string name;
 		
-		Expect(105);
+		Expect(106);
 		EventMemberSpecifier(
-#line  1500 "VBNET.ATG" 
+#line  1501 "VBNET.ATG" 
 out name);
 
-#line  1500 "VBNET.ATG" 
+#line  1501 "VBNET.ATG" 
 		handlesClause.Add(name); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			EventMemberSpecifier(
-#line  1501 "VBNET.ATG" 
+#line  1502 "VBNET.ATG" 
 out name);
 
-#line  1501 "VBNET.ATG" 
+#line  1502 "VBNET.ATG" 
 			handlesClause.Add(name); 
 		}
 	}
 
 	void Block(
-#line  2212 "VBNET.ATG" 
+#line  2215 "VBNET.ATG" 
 out Statement stmt) {
 
-#line  2215 "VBNET.ATG" 
+#line  2218 "VBNET.ATG" 
 		BlockStatement blockStmt = new BlockStatement();
 		/* in snippet parsing mode, t might be null */
 		if (t != null) blockStmt.StartLocation = t.Location;
 		compilationUnit.BlockStart(blockStmt);
 		
 		while (StartOf(20) || 
-#line  2221 "VBNET.ATG" 
+#line  2224 "VBNET.ATG" 
 IsEndStmtAhead()) {
 			if (
-#line  2221 "VBNET.ATG" 
+#line  2224 "VBNET.ATG" 
 IsEndStmtAhead()) {
-				Expect(88);
+				Expect(89);
 				EndOfStmt();
 
-#line  2221 "VBNET.ATG" 
+#line  2224 "VBNET.ATG" 
 				compilationUnit.AddChild(new EndStatement()); 
 			} else {
 				Statement();
@@ -2503,7 +2503,7 @@ IsEndStmtAhead()) {
 			}
 		}
 
-#line  2226 "VBNET.ATG" 
+#line  2229 "VBNET.ATG" 
 		stmt = blockStmt;
 		if (t != null) blockStmt.EndLocation = t.EndLocation;
 		compilationUnit.BlockEnd();
@@ -2511,28 +2511,28 @@ IsEndStmtAhead()) {
 	}
 
 	void Charset(
-#line  1487 "VBNET.ATG" 
+#line  1488 "VBNET.ATG" 
 out CharsetModifier charsetModifier) {
 
-#line  1488 "VBNET.ATG" 
+#line  1489 "VBNET.ATG" 
 		charsetModifier = CharsetModifier.None; 
-		if (la.kind == 100 || la.kind == 167) {
-		} else if (la.kind == 47) {
+		if (la.kind == 101 || la.kind == 168) {
+		} else if (la.kind == 48) {
 			lexer.NextToken();
 
-#line  1489 "VBNET.ATG" 
+#line  1490 "VBNET.ATG" 
 			charsetModifier = CharsetModifier.Ansi; 
-		} else if (la.kind == 50) {
+		} else if (la.kind == 51) {
 			lexer.NextToken();
 
-#line  1490 "VBNET.ATG" 
+#line  1491 "VBNET.ATG" 
 			charsetModifier = CharsetModifier.Auto; 
-		} else if (la.kind == 176) {
+		} else if (la.kind == 177) {
 			lexer.NextToken();
 
-#line  1491 "VBNET.ATG" 
+#line  1492 "VBNET.ATG" 
 			charsetModifier = CharsetModifier.Unicode; 
-		} else SynErr(231);
+		} else SynErr(232);
 	}
 
 	void IdentifierForFieldDeclaration() {
@@ -2541,59 +2541,59 @@ out CharsetModifier charsetModifier) {
 			lexer.NextToken();
 			break;
 		}
-		case 169: {
+		case 170: {
 			lexer.NextToken();
 			break;
 		}
-		case 51: {
+		case 52: {
 			lexer.NextToken();
 			break;
 		}
-		case 70: {
+		case 71: {
 			lexer.NextToken();
 			break;
 		}
-		case 49: {
+		case 50: {
 			lexer.NextToken();
 			break;
 		}
-		case 47: {
+		case 48: {
 			lexer.NextToken();
 			break;
 		}
-		case 50: {
+		case 51: {
 			lexer.NextToken();
 			break;
 		}
-		case 144: {
+		case 145: {
 			lexer.NextToken();
 			break;
 		}
-		case 176: {
+		case 177: {
 			lexer.NextToken();
 			break;
 		}
-		case 177: {
+		case 178: {
 			lexer.NextToken();
 			break;
 		}
-		case 134: {
+		case 135: {
 			lexer.NextToken();
 			break;
 		}
-		case 95: {
+		case 96: {
 			lexer.NextToken();
 			break;
 		}
-		default: SynErr(232); break;
+		default: SynErr(233); break;
 		}
 	}
 
 	void VariableDeclaratorPartAfterIdentifier(
-#line  1363 "VBNET.ATG" 
+#line  1364 "VBNET.ATG" 
 List<VariableDeclaration> fieldDeclaration, string name) {
 
-#line  1365 "VBNET.ATG" 
+#line  1366 "VBNET.ATG" 
 		Expression expr = null;
 		TypeReference type = null;
 		ArrayList rank = null;
@@ -2601,28 +2601,28 @@ List<VariableDeclaration> fieldDeclaration, string name) {
 		Location startLocation = t.Location;
 		
 		if (
-#line  1371 "VBNET.ATG" 
+#line  1372 "VBNET.ATG" 
 IsSize() && !IsDims()) {
 			ArrayInitializationModifier(
-#line  1371 "VBNET.ATG" 
+#line  1372 "VBNET.ATG" 
 out dimension);
 		}
 		if (
-#line  1372 "VBNET.ATG" 
+#line  1373 "VBNET.ATG" 
 IsDims()) {
 			ArrayNameModifier(
-#line  1372 "VBNET.ATG" 
+#line  1373 "VBNET.ATG" 
 out rank);
 		}
 		if (
-#line  1374 "VBNET.ATG" 
+#line  1375 "VBNET.ATG" 
 IsObjectCreation()) {
-			Expect(48);
+			Expect(49);
 			ObjectCreateExpression(
-#line  1374 "VBNET.ATG" 
+#line  1375 "VBNET.ATG" 
 out expr);
 
-#line  1376 "VBNET.ATG" 
+#line  1377 "VBNET.ATG" 
 			if (expr is ObjectCreateExpression) {
 			type = ((ObjectCreateExpression)expr).CreateType;
 			} else {
@@ -2630,13 +2630,13 @@ out expr);
 			}
 			
 		} else if (StartOf(21)) {
-			if (la.kind == 48) {
+			if (la.kind == 49) {
 				lexer.NextToken();
 				TypeName(
-#line  1383 "VBNET.ATG" 
+#line  1384 "VBNET.ATG" 
 out type);
 
-#line  1385 "VBNET.ATG" 
+#line  1386 "VBNET.ATG" 
 				if (type != null) {
 				for (int i = fieldDeclaration.Count - 1; i >= 0; i--) {
 					VariableDeclaration vd = fieldDeclaration[i];
@@ -2649,7 +2649,7 @@ out type);
 				 
 			}
 
-#line  1397 "VBNET.ATG" 
+#line  1398 "VBNET.ATG" 
 			if (type == null && (dimension != null || rank != null)) {
 			type = new TypeReference("");
 			}
@@ -2676,12 +2676,12 @@ out type);
 			if (la.kind == 11) {
 				lexer.NextToken();
 				VariableInitializer(
-#line  1420 "VBNET.ATG" 
+#line  1421 "VBNET.ATG" 
 out expr);
 			}
-		} else SynErr(233);
+		} else SynErr(234);
 
-#line  1423 "VBNET.ATG" 
+#line  1424 "VBNET.ATG" 
 		VariableDeclaration varDecl = new VariableDeclaration(name, expr, type);
 		varDecl.StartLocation = startLocation;
 		varDecl.EndLocation = t.Location;
@@ -2690,22 +2690,22 @@ out expr);
 	}
 
 	void VariableDeclarator(
-#line  1357 "VBNET.ATG" 
+#line  1358 "VBNET.ATG" 
 List<VariableDeclaration> fieldDeclaration) {
 		Identifier();
 
-#line  1359 "VBNET.ATG" 
+#line  1360 "VBNET.ATG" 
 		string name = t.val; 
 		VariableDeclaratorPartAfterIdentifier(
-#line  1360 "VBNET.ATG" 
+#line  1361 "VBNET.ATG" 
 fieldDeclaration, name);
 	}
 
 	void ConstantDeclarator(
-#line  1338 "VBNET.ATG" 
+#line  1339 "VBNET.ATG" 
 List<VariableDeclaration> constantDeclaration) {
 
-#line  1340 "VBNET.ATG" 
+#line  1341 "VBNET.ATG" 
 		Expression expr = null;
 		TypeReference type = null;
 		string name = String.Empty;
@@ -2713,20 +2713,20 @@ List<VariableDeclaration> constantDeclaration) {
 		
 		Identifier();
 
-#line  1345 "VBNET.ATG" 
+#line  1346 "VBNET.ATG" 
 		name = t.val; location = t.Location; 
-		if (la.kind == 48) {
+		if (la.kind == 49) {
 			lexer.NextToken();
 			TypeName(
-#line  1346 "VBNET.ATG" 
+#line  1347 "VBNET.ATG" 
 out type);
 		}
 		Expect(11);
 		Expr(
-#line  1347 "VBNET.ATG" 
+#line  1348 "VBNET.ATG" 
 out expr);
 
-#line  1349 "VBNET.ATG" 
+#line  1350 "VBNET.ATG" 
 		VariableDeclaration f = new VariableDeclaration(name, expr);
 		f.TypeReference = type;
 		f.StartLocation = location;
@@ -2735,318 +2735,318 @@ out expr);
 	}
 
 	void AccessorDecls(
-#line  1272 "VBNET.ATG" 
+#line  1273 "VBNET.ATG" 
 out PropertyGetRegion getBlock, out PropertySetRegion setBlock) {
 
-#line  1274 "VBNET.ATG" 
+#line  1275 "VBNET.ATG" 
 		List<AttributeSection> attributes = new List<AttributeSection>();
 		AttributeSection section;
 		getBlock = null;
 		setBlock = null; 
 		
-		while (la.kind == 27) {
+		while (la.kind == 28) {
 			AttributeSection(
-#line  1279 "VBNET.ATG" 
+#line  1280 "VBNET.ATG" 
 out section);
 
-#line  1279 "VBNET.ATG" 
+#line  1280 "VBNET.ATG" 
 			attributes.Add(section); 
 		}
 		if (StartOf(22)) {
 			GetAccessorDecl(
-#line  1281 "VBNET.ATG" 
+#line  1282 "VBNET.ATG" 
 out getBlock, attributes);
 			if (StartOf(23)) {
 
-#line  1283 "VBNET.ATG" 
+#line  1284 "VBNET.ATG" 
 				attributes = new List<AttributeSection>(); 
-				while (la.kind == 27) {
+				while (la.kind == 28) {
 					AttributeSection(
-#line  1284 "VBNET.ATG" 
+#line  1285 "VBNET.ATG" 
 out section);
 
-#line  1284 "VBNET.ATG" 
+#line  1285 "VBNET.ATG" 
 					attributes.Add(section); 
 				}
 				SetAccessorDecl(
-#line  1285 "VBNET.ATG" 
+#line  1286 "VBNET.ATG" 
 out setBlock, attributes);
 			}
 		} else if (StartOf(24)) {
 			SetAccessorDecl(
-#line  1288 "VBNET.ATG" 
+#line  1289 "VBNET.ATG" 
 out setBlock, attributes);
 			if (StartOf(25)) {
 
-#line  1290 "VBNET.ATG" 
+#line  1291 "VBNET.ATG" 
 				attributes = new List<AttributeSection>(); 
-				while (la.kind == 27) {
+				while (la.kind == 28) {
 					AttributeSection(
-#line  1291 "VBNET.ATG" 
+#line  1292 "VBNET.ATG" 
 out section);
 
-#line  1291 "VBNET.ATG" 
+#line  1292 "VBNET.ATG" 
 					attributes.Add(section); 
 				}
 				GetAccessorDecl(
-#line  1292 "VBNET.ATG" 
+#line  1293 "VBNET.ATG" 
 out getBlock, attributes);
 			}
-		} else SynErr(234);
+		} else SynErr(235);
 	}
 
 	void EventAccessorDeclaration(
-#line  1235 "VBNET.ATG" 
+#line  1236 "VBNET.ATG" 
 out EventAddRemoveRegion eventAccessorDeclaration) {
 
-#line  1237 "VBNET.ATG" 
+#line  1238 "VBNET.ATG" 
 		Statement stmt = null;
 		List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
 		AttributeSection section;
 		List<AttributeSection> attributes = new List<AttributeSection>();
 		eventAccessorDeclaration = null;
 		
-		while (la.kind == 27) {
+		while (la.kind == 28) {
 			AttributeSection(
-#line  1243 "VBNET.ATG" 
+#line  1244 "VBNET.ATG" 
 out section);
 
-#line  1243 "VBNET.ATG" 
+#line  1244 "VBNET.ATG" 
 			attributes.Add(section); 
 		}
-		if (la.kind == 42) {
+		if (la.kind == 43) {
 			lexer.NextToken();
-			if (la.kind == 24) {
+			if (la.kind == 25) {
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1245 "VBNET.ATG" 
+#line  1246 "VBNET.ATG" 
 p);
 				}
-				Expect(25);
+				Expect(26);
 			}
 			Expect(1);
 			Block(
-#line  1246 "VBNET.ATG" 
+#line  1247 "VBNET.ATG" 
 out stmt);
-			Expect(88);
-			Expect(42);
+			Expect(89);
+			Expect(43);
 			Expect(1);
 
-#line  1248 "VBNET.ATG" 
+#line  1249 "VBNET.ATG" 
 			eventAccessorDeclaration = new EventAddRegion(attributes);
 			eventAccessorDeclaration.Block = (BlockStatement)stmt;
 			eventAccessorDeclaration.Parameters = p;
 			
-		} else if (la.kind == 152) {
+		} else if (la.kind == 153) {
 			lexer.NextToken();
-			if (la.kind == 24) {
+			if (la.kind == 25) {
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1253 "VBNET.ATG" 
+#line  1254 "VBNET.ATG" 
 p);
 				}
-				Expect(25);
+				Expect(26);
 			}
 			Expect(1);
 			Block(
-#line  1254 "VBNET.ATG" 
+#line  1255 "VBNET.ATG" 
 out stmt);
-			Expect(88);
-			Expect(152);
+			Expect(89);
+			Expect(153);
 			Expect(1);
 
-#line  1256 "VBNET.ATG" 
+#line  1257 "VBNET.ATG" 
 			eventAccessorDeclaration = new EventRemoveRegion(attributes);
 			eventAccessorDeclaration.Block = (BlockStatement)stmt;
 			eventAccessorDeclaration.Parameters = p;
 			
-		} else if (la.kind == 149) {
+		} else if (la.kind == 150) {
 			lexer.NextToken();
-			if (la.kind == 24) {
+			if (la.kind == 25) {
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1261 "VBNET.ATG" 
+#line  1262 "VBNET.ATG" 
 p);
 				}
-				Expect(25);
+				Expect(26);
 			}
 			Expect(1);
 			Block(
-#line  1262 "VBNET.ATG" 
+#line  1263 "VBNET.ATG" 
 out stmt);
-			Expect(88);
-			Expect(149);
+			Expect(89);
+			Expect(150);
 			Expect(1);
 
-#line  1264 "VBNET.ATG" 
+#line  1265 "VBNET.ATG" 
 			eventAccessorDeclaration = new EventRaiseRegion(attributes);
 			eventAccessorDeclaration.Block = (BlockStatement)stmt;
 			eventAccessorDeclaration.Parameters = p;
 			
-		} else SynErr(235);
+		} else SynErr(236);
 	}
 
 	void OverloadableOperator(
-#line  1177 "VBNET.ATG" 
+#line  1178 "VBNET.ATG" 
 out OverloadableOperatorType operatorType) {
 
-#line  1178 "VBNET.ATG" 
+#line  1179 "VBNET.ATG" 
 		operatorType = OverloadableOperatorType.None; 
 		switch (la.kind) {
 		case 14: {
 			lexer.NextToken();
 
-#line  1180 "VBNET.ATG" 
+#line  1181 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Add; 
 			break;
 		}
 		case 15: {
 			lexer.NextToken();
 
-#line  1182 "VBNET.ATG" 
+#line  1183 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Subtract; 
 			break;
 		}
 		case 16: {
 			lexer.NextToken();
 
-#line  1184 "VBNET.ATG" 
+#line  1185 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Multiply; 
 			break;
 		}
 		case 17: {
 			lexer.NextToken();
 
-#line  1186 "VBNET.ATG" 
+#line  1187 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Divide; 
 			break;
 		}
 		case 18: {
 			lexer.NextToken();
 
-#line  1188 "VBNET.ATG" 
+#line  1189 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.DivideInteger; 
 			break;
 		}
 		case 19: {
 			lexer.NextToken();
 
-#line  1190 "VBNET.ATG" 
+#line  1191 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Concat; 
 			break;
 		}
-		case 116: {
+		case 117: {
 			lexer.NextToken();
 
-#line  1192 "VBNET.ATG" 
+#line  1193 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Like; 
 			break;
 		}
-		case 120: {
+		case 121: {
 			lexer.NextToken();
 
-#line  1194 "VBNET.ATG" 
+#line  1195 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Modulus; 
 			break;
 		}
-		case 45: {
+		case 46: {
 			lexer.NextToken();
 
-#line  1196 "VBNET.ATG" 
+#line  1197 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.BitwiseAnd; 
 			break;
 		}
-		case 138: {
+		case 139: {
 			lexer.NextToken();
 
-#line  1198 "VBNET.ATG" 
+#line  1199 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.BitwiseOr; 
 			break;
 		}
-		case 185: {
+		case 186: {
 			lexer.NextToken();
 
-#line  1200 "VBNET.ATG" 
+#line  1201 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.ExclusiveOr; 
 			break;
 		}
 		case 20: {
 			lexer.NextToken();
 
-#line  1202 "VBNET.ATG" 
+#line  1203 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Power; 
 			break;
 		}
-		case 31: {
+		case 32: {
 			lexer.NextToken();
 
-#line  1204 "VBNET.ATG" 
+#line  1205 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.ShiftLeft; 
 			break;
 		}
-		case 32: {
+		case 33: {
 			lexer.NextToken();
 
-#line  1206 "VBNET.ATG" 
+#line  1207 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.ShiftRight; 
 			break;
 		}
 		case 11: {
 			lexer.NextToken();
 
-#line  1208 "VBNET.ATG" 
+#line  1209 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Equality; 
 			break;
 		}
-		case 28: {
+		case 29: {
 			lexer.NextToken();
 
-#line  1210 "VBNET.ATG" 
+#line  1211 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.InEquality; 
 			break;
 		}
-		case 27: {
+		case 28: {
 			lexer.NextToken();
 
-#line  1212 "VBNET.ATG" 
+#line  1213 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.LessThan; 
 			break;
 		}
-		case 30: {
+		case 31: {
 			lexer.NextToken();
 
-#line  1214 "VBNET.ATG" 
+#line  1215 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.LessThanOrEqual; 
 			break;
 		}
-		case 26: {
+		case 27: {
 			lexer.NextToken();
 
-#line  1216 "VBNET.ATG" 
+#line  1217 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.GreaterThan; 
 			break;
 		}
-		case 29: {
+		case 30: {
 			lexer.NextToken();
 
-#line  1218 "VBNET.ATG" 
+#line  1219 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.GreaterThanOrEqual; 
 			break;
 		}
-		case 75: {
+		case 76: {
 			lexer.NextToken();
 
-#line  1220 "VBNET.ATG" 
+#line  1221 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.CType; 
 			break;
 		}
-		case 2: case 47: case 49: case 50: case 51: case 70: case 95: case 134: case 144: case 169: case 176: case 177: case 205: {
+		case 2: case 48: case 50: case 51: case 52: case 71: case 96: case 135: case 145: case 170: case 177: case 178: case 206: {
 			Identifier();
 
-#line  1224 "VBNET.ATG" 
+#line  1225 "VBNET.ATG" 
 			string opName = t.val; 
 			if (string.Equals(opName, "istrue", StringComparison.InvariantCultureIgnoreCase)) {
 				operatorType = OverloadableOperatorType.IsTrue;
@@ -3058,146 +3058,146 @@ out OverloadableOperatorType operatorType) {
 			
 			break;
 		}
-		default: SynErr(236); break;
+		default: SynErr(237); break;
 		}
 	}
 
 	void GetAccessorDecl(
-#line  1298 "VBNET.ATG" 
+#line  1299 "VBNET.ATG" 
 out PropertyGetRegion getBlock, List<AttributeSection> attributes) {
 
-#line  1299 "VBNET.ATG" 
+#line  1300 "VBNET.ATG" 
 		Statement stmt = null; Modifiers m; 
 		PropertyAccessorAccessModifier(
-#line  1301 "VBNET.ATG" 
+#line  1302 "VBNET.ATG" 
 out m);
-		Expect(101);
+		Expect(102);
 
-#line  1303 "VBNET.ATG" 
+#line  1304 "VBNET.ATG" 
 		Location startLocation = t.Location; 
 		Expect(1);
 		Block(
-#line  1305 "VBNET.ATG" 
+#line  1306 "VBNET.ATG" 
 out stmt);
 
-#line  1306 "VBNET.ATG" 
+#line  1307 "VBNET.ATG" 
 		getBlock = new PropertyGetRegion((BlockStatement)stmt, attributes); 
-		Expect(88);
-		Expect(101);
+		Expect(89);
+		Expect(102);
 
-#line  1308 "VBNET.ATG" 
+#line  1309 "VBNET.ATG" 
 		getBlock.Modifier = m; 
 
-#line  1309 "VBNET.ATG" 
+#line  1310 "VBNET.ATG" 
 		getBlock.StartLocation = startLocation; getBlock.EndLocation = t.EndLocation; 
 		Expect(1);
 	}
 
 	void SetAccessorDecl(
-#line  1314 "VBNET.ATG" 
+#line  1315 "VBNET.ATG" 
 out PropertySetRegion setBlock, List<AttributeSection> attributes) {
 
-#line  1316 "VBNET.ATG" 
+#line  1317 "VBNET.ATG" 
 		Statement stmt = null;
 		List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
 		Modifiers m;
 		
 		PropertyAccessorAccessModifier(
-#line  1321 "VBNET.ATG" 
+#line  1322 "VBNET.ATG" 
 out m);
-		Expect(156);
+		Expect(157);
 
-#line  1323 "VBNET.ATG" 
+#line  1324 "VBNET.ATG" 
 		Location startLocation = t.Location; 
-		if (la.kind == 24) {
+		if (la.kind == 25) {
 			lexer.NextToken();
 			if (StartOf(4)) {
 				FormalParameterList(
-#line  1324 "VBNET.ATG" 
+#line  1325 "VBNET.ATG" 
 p);
 			}
-			Expect(25);
+			Expect(26);
 		}
 		Expect(1);
 		Block(
-#line  1326 "VBNET.ATG" 
+#line  1327 "VBNET.ATG" 
 out stmt);
 
-#line  1328 "VBNET.ATG" 
+#line  1329 "VBNET.ATG" 
 		setBlock = new PropertySetRegion((BlockStatement)stmt, attributes);
 		setBlock.Modifier = m;
 		setBlock.Parameters = p;
 		
-		Expect(88);
-		Expect(156);
+		Expect(89);
+		Expect(157);
 
-#line  1333 "VBNET.ATG" 
+#line  1334 "VBNET.ATG" 
 		setBlock.StartLocation = startLocation; setBlock.EndLocation = t.EndLocation; 
 		Expect(1);
 	}
 
 	void PropertyAccessorAccessModifier(
-#line  2898 "VBNET.ATG" 
+#line  2901 "VBNET.ATG" 
 out Modifiers m) {
 
-#line  2899 "VBNET.ATG" 
+#line  2902 "VBNET.ATG" 
 		m = Modifiers.None; 
 		while (StartOf(26)) {
-			if (la.kind == 148) {
+			if (la.kind == 149) {
 				lexer.NextToken();
 
-#line  2901 "VBNET.ATG" 
+#line  2904 "VBNET.ATG" 
 				m |= Modifiers.Public; 
-			} else if (la.kind == 147) {
+			} else if (la.kind == 148) {
 				lexer.NextToken();
 
-#line  2902 "VBNET.ATG" 
+#line  2905 "VBNET.ATG" 
 				m |= Modifiers.Protected; 
-			} else if (la.kind == 99) {
+			} else if (la.kind == 100) {
 				lexer.NextToken();
 
-#line  2903 "VBNET.ATG" 
+#line  2906 "VBNET.ATG" 
 				m |= Modifiers.Internal; 
 			} else {
 				lexer.NextToken();
 
-#line  2904 "VBNET.ATG" 
+#line  2907 "VBNET.ATG" 
 				m |= Modifiers.Private; 
 			}
 		}
 	}
 
 	void ArrayInitializationModifier(
-#line  1431 "VBNET.ATG" 
+#line  1432 "VBNET.ATG" 
 out List<Expression> arrayModifiers) {
 
-#line  1433 "VBNET.ATG" 
+#line  1434 "VBNET.ATG" 
 		arrayModifiers = null;
 		
-		Expect(24);
+		Expect(25);
 		InitializationRankList(
-#line  1435 "VBNET.ATG" 
+#line  1436 "VBNET.ATG" 
 out arrayModifiers);
-		Expect(25);
+		Expect(26);
 	}
 
 	void ArrayNameModifier(
-#line  2007 "VBNET.ATG" 
+#line  2010 "VBNET.ATG" 
 out ArrayList arrayModifiers) {
 
-#line  2009 "VBNET.ATG" 
+#line  2012 "VBNET.ATG" 
 		arrayModifiers = null;
 		
 		ArrayTypeModifiers(
-#line  2011 "VBNET.ATG" 
+#line  2014 "VBNET.ATG" 
 out arrayModifiers);
 	}
 
 	void ObjectCreateExpression(
-#line  1860 "VBNET.ATG" 
+#line  1863 "VBNET.ATG" 
 out Expression oce) {
 
-#line  1862 "VBNET.ATG" 
+#line  1865 "VBNET.ATG" 
 		TypeReference type = null;
 		Expression initializer = null;
 		List<Expression> arguments = null;
@@ -3205,40 +3205,40 @@ out Expression oce) {
 		oce = null;
 		bool canBeNormal; bool canBeReDim;
 		
-		Expect(127);
+		Expect(128);
 		NonArrayTypeName(
-#line  1869 "VBNET.ATG" 
+#line  1872 "VBNET.ATG" 
 out type, false);
-		if (la.kind == 24) {
+		if (la.kind == 25) {
 			lexer.NextToken();
 			NormalOrReDimArgumentList(
-#line  1870 "VBNET.ATG" 
+#line  1873 "VBNET.ATG" 
 out arguments, out canBeNormal, out canBeReDim);
-			Expect(25);
-			if (la.kind == 22 || 
-#line  1871 "VBNET.ATG" 
+			Expect(26);
+			if (la.kind == 23 || 
+#line  1874 "VBNET.ATG" 
 la.kind == Tokens.OpenParenthesis) {
 				if (
-#line  1871 "VBNET.ATG" 
+#line  1874 "VBNET.ATG" 
 la.kind == Tokens.OpenParenthesis) {
 					ArrayTypeModifiers(
-#line  1872 "VBNET.ATG" 
+#line  1875 "VBNET.ATG" 
 out dimensions);
 					CollectionInitializer(
-#line  1873 "VBNET.ATG" 
+#line  1876 "VBNET.ATG" 
 out initializer);
 				} else {
 					CollectionInitializer(
-#line  1874 "VBNET.ATG" 
+#line  1877 "VBNET.ATG" 
 out initializer);
 				}
 			}
 
-#line  1876 "VBNET.ATG" 
+#line  1879 "VBNET.ATG" 
 			if (canBeReDim && !canBeNormal && initializer == null) initializer = new CollectionInitializerExpression(); 
 		}
 
-#line  1879 "VBNET.ATG" 
+#line  1882 "VBNET.ATG" 
 		if (type == null) type = new TypeReference("Object"); // fallback type on parser errors
 		if (initializer == null) {
 			oce = new ObjectCreateExpression(type, arguments);
@@ -3254,283 +3254,291 @@ out initializer);
 	}
 
 	void VariableInitializer(
-#line  1459 "VBNET.ATG" 
+#line  1460 "VBNET.ATG" 
 out Expression initializerExpression) {
 
-#line  1461 "VBNET.ATG" 
+#line  1462 "VBNET.ATG" 
 		initializerExpression = null;
 		
 		if (StartOf(27)) {
 			Expr(
-#line  1463 "VBNET.ATG" 
+#line  1464 "VBNET.ATG" 
 out initializerExpression);
-		} else if (la.kind == 22) {
+		} else if (la.kind == 23) {
 			CollectionInitializer(
-#line  1464 "VBNET.ATG" 
+#line  1465 "VBNET.ATG" 
 out initializerExpression);
-		} else SynErr(237);
+		} else SynErr(238);
 	}
 
 	void InitializationRankList(
-#line  1439 "VBNET.ATG" 
+#line  1440 "VBNET.ATG" 
 out List<Expression> rank) {
 
-#line  1441 "VBNET.ATG" 
+#line  1442 "VBNET.ATG" 
 		rank = new List<Expression>();
 		Expression expr = null;
 		
 		Expr(
-#line  1444 "VBNET.ATG" 
+#line  1445 "VBNET.ATG" 
 out expr);
-		if (la.kind == 172) {
+		if (la.kind == 173) {
 			lexer.NextToken();
 
-#line  1445 "VBNET.ATG" 
+#line  1446 "VBNET.ATG" 
 			EnsureIsZero(expr); 
 			Expr(
-#line  1446 "VBNET.ATG" 
+#line  1447 "VBNET.ATG" 
 out expr);
 		}
 
-#line  1448 "VBNET.ATG" 
+#line  1449 "VBNET.ATG" 
 		if (expr != null) { rank.Add(expr); } 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			Expr(
-#line  1450 "VBNET.ATG" 
+#line  1451 "VBNET.ATG" 
 out expr);
-			if (la.kind == 172) {
+			if (la.kind == 173) {
 				lexer.NextToken();
 
-#line  1451 "VBNET.ATG" 
+#line  1452 "VBNET.ATG" 
 				EnsureIsZero(expr); 
 				Expr(
-#line  1452 "VBNET.ATG" 
+#line  1453 "VBNET.ATG" 
 out expr);
 			}
 
-#line  1454 "VBNET.ATG" 
+#line  1455 "VBNET.ATG" 
 			if (expr != null) { rank.Add(expr); } 
 		}
 	}
 
 	void CollectionInitializer(
-#line  1468 "VBNET.ATG" 
+#line  1469 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1470 "VBNET.ATG" 
+#line  1471 "VBNET.ATG" 
 		Expression expr = null;
 		CollectionInitializerExpression initializer = new CollectionInitializerExpression();
 		
-		Expect(22);
+		Expect(23);
 		if (StartOf(28)) {
 			VariableInitializer(
-#line  1475 "VBNET.ATG" 
+#line  1476 "VBNET.ATG" 
 out expr);
 
-#line  1477 "VBNET.ATG" 
+#line  1478 "VBNET.ATG" 
 			if (expr != null) { initializer.CreateExpressions.Add(expr); }
 			
 			while (
-#line  1480 "VBNET.ATG" 
+#line  1481 "VBNET.ATG" 
 NotFinalComma()) {
 				Expect(12);
 				VariableInitializer(
-#line  1480 "VBNET.ATG" 
+#line  1481 "VBNET.ATG" 
 out expr);
 
-#line  1481 "VBNET.ATG" 
+#line  1482 "VBNET.ATG" 
 				if (expr != null) { initializer.CreateExpressions.Add(expr); } 
 			}
 		}
-		Expect(23);
+		Expect(24);
 
-#line  1484 "VBNET.ATG" 
+#line  1485 "VBNET.ATG" 
 		outExpr = initializer; 
 	}
 
 	void EventMemberSpecifier(
-#line  1554 "VBNET.ATG" 
+#line  1555 "VBNET.ATG" 
 out string name) {
 
-#line  1555 "VBNET.ATG" 
+#line  1556 "VBNET.ATG" 
 		string eventName; 
 		if (StartOf(13)) {
 			Identifier();
-		} else if (la.kind == 124) {
+		} else if (la.kind == 125) {
 			lexer.NextToken();
-		} else if (la.kind == 119) {
+		} else if (la.kind == 120) {
 			lexer.NextToken();
-		} else SynErr(238);
+		} else SynErr(239);
 
-#line  1558 "VBNET.ATG" 
+#line  1559 "VBNET.ATG" 
 		name = t.val; 
 		Expect(10);
 		IdentifierOrKeyword(
-#line  1560 "VBNET.ATG" 
+#line  1561 "VBNET.ATG" 
 out eventName);
 
-#line  1561 "VBNET.ATG" 
+#line  1562 "VBNET.ATG" 
 		name = name + "." + eventName; 
 	}
 
 	void IdentifierOrKeyword(
-#line  2832 "VBNET.ATG" 
+#line  2835 "VBNET.ATG" 
 out string name) {
 
-#line  2834 "VBNET.ATG" 
+#line  2837 "VBNET.ATG" 
 		lexer.NextToken(); name = t.val;  
 	}
 
 	void DisjunctionExpr(
-#line  1704 "VBNET.ATG" 
+#line  1707 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1706 "VBNET.ATG" 
+#line  1709 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		ConjunctionExpr(
-#line  1709 "VBNET.ATG" 
+#line  1712 "VBNET.ATG" 
 out outExpr);
-		while (la.kind == 138 || la.kind == 139 || la.kind == 185) {
-			if (la.kind == 138) {
+		while (la.kind == 139 || la.kind == 140 || la.kind == 186) {
+			if (la.kind == 139) {
 				lexer.NextToken();
 
-#line  1712 "VBNET.ATG" 
+#line  1715 "VBNET.ATG" 
 				op = BinaryOperatorType.BitwiseOr; 
-			} else if (la.kind == 139) {
+			} else if (la.kind == 140) {
 				lexer.NextToken();
 
-#line  1713 "VBNET.ATG" 
+#line  1716 "VBNET.ATG" 
 				op = BinaryOperatorType.LogicalOr; 
 			} else {
 				lexer.NextToken();
 
-#line  1714 "VBNET.ATG" 
+#line  1717 "VBNET.ATG" 
 				op = BinaryOperatorType.ExclusiveOr; 
 			}
 			ConjunctionExpr(
-#line  1716 "VBNET.ATG" 
+#line  1719 "VBNET.ATG" 
 out expr);
 
-#line  1716 "VBNET.ATG" 
+#line  1719 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void AssignmentOperator(
-#line  1569 "VBNET.ATG" 
+#line  1570 "VBNET.ATG" 
 out AssignmentOperatorType op) {
 
-#line  1570 "VBNET.ATG" 
+#line  1571 "VBNET.ATG" 
 		op = AssignmentOperatorType.None; 
 		switch (la.kind) {
 		case 11: {
 			lexer.NextToken();
 
-#line  1571 "VBNET.ATG" 
-			op = AssignmentOperatorType.Assign; 
-			break;
-		}
-		case 41: {
-			lexer.NextToken();
-
 #line  1572 "VBNET.ATG" 
-			op = AssignmentOperatorType.ConcatString; 
+			op = AssignmentOperatorType.Assign; 
 			break;
 		}
-		case 33: {
+		case 42: {
 			lexer.NextToken();
 
 #line  1573 "VBNET.ATG" 
-			op = AssignmentOperatorType.Add; 
+			op = AssignmentOperatorType.ConcatString; 
 			break;
 		}
-		case 35: {
+		case 34: {
 			lexer.NextToken();
 
 #line  1574 "VBNET.ATG" 
-			op = AssignmentOperatorType.Subtract; 
+			op = AssignmentOperatorType.Add; 
 			break;
 		}
 		case 36: {
 			lexer.NextToken();
 
 #line  1575 "VBNET.ATG" 
-			op = AssignmentOperatorType.Multiply; 
+			op = AssignmentOperatorType.Subtract; 
 			break;
 		}
 		case 37: {
 			lexer.NextToken();
 
 #line  1576 "VBNET.ATG" 
-			op = AssignmentOperatorType.Divide; 
+			op = AssignmentOperatorType.Multiply; 
 			break;
 		}
 		case 38: {
 			lexer.NextToken();
 
 #line  1577 "VBNET.ATG" 
-			op = AssignmentOperatorType.DivideInteger; 
+			op = AssignmentOperatorType.Divide; 
 			break;
 		}
-		case 34: {
+		case 39: {
 			lexer.NextToken();
 
 #line  1578 "VBNET.ATG" 
-			op = AssignmentOperatorType.Power; 
+			op = AssignmentOperatorType.DivideInteger; 
 			break;
 		}
-		case 39: {
+		case 35: {
 			lexer.NextToken();
 
 #line  1579 "VBNET.ATG" 
-			op = AssignmentOperatorType.ShiftLeft; 
+			op = AssignmentOperatorType.Power; 
 			break;
 		}
 		case 40: {
 			lexer.NextToken();
 
 #line  1580 "VBNET.ATG" 
+			op = AssignmentOperatorType.ShiftLeft; 
+			break;
+		}
+		case 41: {
+			lexer.NextToken();
+
+#line  1581 "VBNET.ATG" 
 			op = AssignmentOperatorType.ShiftRight; 
 			break;
 		}
-		default: SynErr(239); break;
+		default: SynErr(240); break;
 		}
 	}
 
 	void SimpleExpr(
-#line  1584 "VBNET.ATG" 
+#line  1585 "VBNET.ATG" 
 out Expression pexpr) {
-		SimpleNonInvocationExpression(
+
 #line  1586 "VBNET.ATG" 
+		string name; 
+		SimpleNonInvocationExpression(
+#line  1588 "VBNET.ATG" 
 out pexpr);
-		while (la.kind == 10 || la.kind == 24) {
+		while (la.kind == 10 || la.kind == 22 || la.kind == 25) {
 			if (la.kind == 10) {
-
-#line  1587 "VBNET.ATG" 
-				string name; 
 				lexer.NextToken();
 				IdentifierOrKeyword(
-#line  1588 "VBNET.ATG" 
+#line  1590 "VBNET.ATG" 
 out name);
 
-#line  1588 "VBNET.ATG" 
+#line  1590 "VBNET.ATG" 
 				pexpr = new MemberReferenceExpression(pexpr, name); 
+			} else if (la.kind == 22) {
+				lexer.NextToken();
+				IdentifierOrKeyword(
+#line  1591 "VBNET.ATG" 
+out name);
+
+#line  1591 "VBNET.ATG" 
+				pexpr = new BinaryOperatorExpression(pexpr, BinaryOperatorType.DictionaryAccess, new PrimitiveExpression(name, name)); 
 			} else {
 				InvocationExpression(
-#line  1589 "VBNET.ATG" 
+#line  1592 "VBNET.ATG" 
 ref pexpr);
 			}
 		}
 	}
 
 	void SimpleNonInvocationExpression(
-#line  1593 "VBNET.ATG" 
+#line  1596 "VBNET.ATG" 
 out Expression pexpr) {
 
-#line  1595 "VBNET.ATG" 
+#line  1598 "VBNET.ATG" 
 		Expression expr;
 		TypeReference type = null;
 		string name = String.Empty;
@@ -3541,251 +3549,251 @@ out Expression pexpr) {
 			case 3: {
 				lexer.NextToken();
 
-#line  1603 "VBNET.ATG" 
+#line  1606 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 4: {
 				lexer.NextToken();
 
-#line  1604 "VBNET.ATG" 
+#line  1607 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 7: {
 				lexer.NextToken();
 
-#line  1605 "VBNET.ATG" 
+#line  1608 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 6: {
 				lexer.NextToken();
 
-#line  1606 "VBNET.ATG" 
+#line  1609 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 5: {
 				lexer.NextToken();
 
-#line  1607 "VBNET.ATG" 
+#line  1610 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 9: {
 				lexer.NextToken();
 
-#line  1608 "VBNET.ATG" 
+#line  1611 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 8: {
 				lexer.NextToken();
 
-#line  1609 "VBNET.ATG" 
+#line  1612 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
-			case 173: {
+			case 174: {
 				lexer.NextToken();
 
-#line  1611 "VBNET.ATG" 
+#line  1614 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(true, "true");  
 				break;
 			}
-			case 96: {
+			case 97: {
 				lexer.NextToken();
 
-#line  1612 "VBNET.ATG" 
+#line  1615 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(false, "false"); 
 				break;
 			}
-			case 130: {
+			case 131: {
 				lexer.NextToken();
 
-#line  1613 "VBNET.ATG" 
+#line  1616 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(null, "null");  
 				break;
 			}
-			case 24: {
+			case 25: {
 				lexer.NextToken();
 				Expr(
-#line  1614 "VBNET.ATG" 
+#line  1617 "VBNET.ATG" 
 out expr);
-				Expect(25);
+				Expect(26);
 
-#line  1614 "VBNET.ATG" 
+#line  1617 "VBNET.ATG" 
 				pexpr = new ParenthesizedExpression(expr); 
 				break;
 			}
-			case 2: case 47: case 49: case 50: case 51: case 70: case 95: case 134: case 144: case 169: case 176: case 177: case 205: {
+			case 2: case 48: case 50: case 51: case 52: case 71: case 96: case 135: case 145: case 170: case 177: case 178: case 206: {
 				Identifier();
 
-#line  1616 "VBNET.ATG" 
+#line  1619 "VBNET.ATG" 
 				pexpr = new IdentifierExpression(t.val); 
 
-#line  1617 "VBNET.ATG" 
+#line  1620 "VBNET.ATG" 
 				pexpr.StartLocation = t.Location; pexpr.EndLocation = t.EndLocation; 
 				break;
 			}
-			case 52: case 54: case 65: case 76: case 77: case 84: case 111: case 117: case 133: case 159: case 160: case 165: case 191: case 192: case 193: case 194: {
+			case 53: case 55: case 66: case 77: case 78: case 85: case 112: case 118: case 134: case 160: case 161: case 166: case 192: case 193: case 194: case 195: {
 
-#line  1618 "VBNET.ATG" 
+#line  1621 "VBNET.ATG" 
 				string val = String.Empty; 
 				if (StartOf(10)) {
 					PrimitiveTypeName(
-#line  1619 "VBNET.ATG" 
+#line  1622 "VBNET.ATG" 
 out val);
-				} else if (la.kind == 133) {
+				} else if (la.kind == 134) {
 					lexer.NextToken();
 
-#line  1619 "VBNET.ATG" 
+#line  1622 "VBNET.ATG" 
 					val = "Object"; 
-				} else SynErr(240);
+				} else SynErr(241);
 				Expect(10);
 
-#line  1620 "VBNET.ATG" 
+#line  1623 "VBNET.ATG" 
 				t.val = ""; 
 				Identifier();
 
-#line  1620 "VBNET.ATG" 
+#line  1623 "VBNET.ATG" 
 				pexpr = new MemberReferenceExpression(new TypeReferenceExpression(val), t.val); 
 				break;
 			}
-			case 119: {
+			case 120: {
 				lexer.NextToken();
 
-#line  1621 "VBNET.ATG" 
+#line  1624 "VBNET.ATG" 
 				pexpr = new ThisReferenceExpression(); 
 				break;
 			}
-			case 124: case 125: {
+			case 125: case 126: {
 
-#line  1622 "VBNET.ATG" 
+#line  1625 "VBNET.ATG" 
 				Expression retExpr = null; 
-				if (la.kind == 124) {
+				if (la.kind == 125) {
 					lexer.NextToken();
 
-#line  1623 "VBNET.ATG" 
+#line  1626 "VBNET.ATG" 
 					retExpr = new BaseReferenceExpression(); 
-				} else if (la.kind == 125) {
+				} else if (la.kind == 126) {
 					lexer.NextToken();
 
-#line  1624 "VBNET.ATG" 
+#line  1627 "VBNET.ATG" 
 					retExpr = new ClassReferenceExpression(); 
-				} else SynErr(241);
+				} else SynErr(242);
 				Expect(10);
 				IdentifierOrKeyword(
-#line  1626 "VBNET.ATG" 
+#line  1629 "VBNET.ATG" 
 out name);
 
-#line  1626 "VBNET.ATG" 
+#line  1629 "VBNET.ATG" 
 				pexpr = new MemberReferenceExpression(retExpr, name); 
 				break;
 			}
-			case 199: {
+			case 200: {
 				lexer.NextToken();
 				Expect(10);
 				Identifier();
 
-#line  1628 "VBNET.ATG" 
+#line  1631 "VBNET.ATG" 
 				type = new TypeReference(t.val ?? ""); 
 
-#line  1630 "VBNET.ATG" 
+#line  1633 "VBNET.ATG" 
 				type.IsGlobal = true; 
 
-#line  1631 "VBNET.ATG" 
+#line  1634 "VBNET.ATG" 
 				pexpr = new TypeReferenceExpression(type); 
 				break;
 			}
-			case 127: {
+			case 128: {
 				ObjectCreateExpression(
-#line  1632 "VBNET.ATG" 
+#line  1635 "VBNET.ATG" 
 out expr);
 
-#line  1632 "VBNET.ATG" 
+#line  1635 "VBNET.ATG" 
 				pexpr = expr; 
 				break;
 			}
-			case 75: case 82: case 200: {
+			case 76: case 83: case 201: {
 
-#line  1634 "VBNET.ATG" 
+#line  1637 "VBNET.ATG" 
 				CastType castType = CastType.Cast; 
-				if (la.kind == 82) {
+				if (la.kind == 83) {
 					lexer.NextToken();
-				} else if (la.kind == 75) {
+				} else if (la.kind == 76) {
 					lexer.NextToken();
 
-#line  1636 "VBNET.ATG" 
+#line  1639 "VBNET.ATG" 
 					castType = CastType.Conversion; 
-				} else if (la.kind == 200) {
+				} else if (la.kind == 201) {
 					lexer.NextToken();
 
-#line  1637 "VBNET.ATG" 
+#line  1640 "VBNET.ATG" 
 					castType = CastType.TryCast; 
-				} else SynErr(242);
-				Expect(24);
+				} else SynErr(243);
+				Expect(25);
 				Expr(
-#line  1639 "VBNET.ATG" 
+#line  1642 "VBNET.ATG" 
 out expr);
 				Expect(12);
 				TypeName(
-#line  1639 "VBNET.ATG" 
+#line  1642 "VBNET.ATG" 
 out type);
-				Expect(25);
+				Expect(26);
 
-#line  1640 "VBNET.ATG" 
+#line  1643 "VBNET.ATG" 
 				pexpr = new CastExpression(type, expr, castType); 
 				break;
 			}
-			case 59: case 60: case 61: case 62: case 63: case 64: case 66: case 68: case 69: case 72: case 73: case 74: case 195: case 196: case 197: case 198: {
+			case 60: case 61: case 62: case 63: case 64: case 65: case 67: case 69: case 70: case 73: case 74: case 75: case 196: case 197: case 198: case 199: {
 				CastTarget(
-#line  1641 "VBNET.ATG" 
+#line  1644 "VBNET.ATG" 
 out type);
-				Expect(24);
+				Expect(25);
 				Expr(
-#line  1641 "VBNET.ATG" 
+#line  1644 "VBNET.ATG" 
 out expr);
-				Expect(25);
+				Expect(26);
 
-#line  1641 "VBNET.ATG" 
+#line  1644 "VBNET.ATG" 
 				pexpr = new CastExpression(type, expr, CastType.PrimitiveConversion); 
 				break;
 			}
-			case 43: {
+			case 44: {
 				lexer.NextToken();
 				Expr(
-#line  1642 "VBNET.ATG" 
+#line  1645 "VBNET.ATG" 
 out expr);
 
-#line  1642 "VBNET.ATG" 
+#line  1645 "VBNET.ATG" 
 				pexpr = new AddressOfExpression(expr); 
 				break;
 			}
-			case 102: {
+			case 103: {
 				lexer.NextToken();
-				Expect(24);
+				Expect(25);
 				GetTypeTypeName(
-#line  1643 "VBNET.ATG" 
+#line  1646 "VBNET.ATG" 
 out type);
-				Expect(25);
+				Expect(26);
 
-#line  1643 "VBNET.ATG" 
+#line  1646 "VBNET.ATG" 
 				pexpr = new TypeOfExpression(type); 
 				break;
 			}
-			case 175: {
+			case 176: {
 				lexer.NextToken();
 				SimpleExpr(
-#line  1644 "VBNET.ATG" 
+#line  1647 "VBNET.ATG" 
 out expr);
-				Expect(113);
+				Expect(114);
 				TypeName(
-#line  1644 "VBNET.ATG" 
+#line  1647 "VBNET.ATG" 
 out type);
 
-#line  1644 "VBNET.ATG" 
+#line  1647 "VBNET.ATG" 
 				pexpr = new TypeOfIsExpression(expr, type); 
 				break;
 			}
@@ -3793,328 +3801,328 @@ out type);
 		} else if (la.kind == 10) {
 			lexer.NextToken();
 			IdentifierOrKeyword(
-#line  1648 "VBNET.ATG" 
+#line  1651 "VBNET.ATG" 
 out name);
 
-#line  1648 "VBNET.ATG" 
+#line  1651 "VBNET.ATG" 
 			pexpr = new MemberReferenceExpression(null, name);
-		} else SynErr(243);
+		} else SynErr(244);
 	}
 
 	void InvocationExpression(
-#line  1652 "VBNET.ATG" 
+#line  1655 "VBNET.ATG" 
 ref Expression pexpr) {
 
-#line  1653 "VBNET.ATG" 
+#line  1656 "VBNET.ATG" 
 		List<TypeReference> typeParameters = new List<TypeReference>();
 		List<Expression> parameters = null;
 		TypeReference type; 
-		Expect(24);
+		Expect(25);
 
-#line  1657 "VBNET.ATG" 
+#line  1660 "VBNET.ATG" 
 		Location start = t.Location; 
-		if (la.kind == 201) {
+		if (la.kind == 202) {
 			lexer.NextToken();
 			TypeName(
-#line  1659 "VBNET.ATG" 
+#line  1662 "VBNET.ATG" 
 out type);
 
-#line  1659 "VBNET.ATG" 
+#line  1662 "VBNET.ATG" 
 			if (type != null) typeParameters.Add(type); 
 			while (la.kind == 12) {
 				lexer.NextToken();
 				TypeName(
-#line  1662 "VBNET.ATG" 
+#line  1665 "VBNET.ATG" 
 out type);
 
-#line  1662 "VBNET.ATG" 
+#line  1665 "VBNET.ATG" 
 				if (type != null) typeParameters.Add(type); 
 			}
-			Expect(25);
+			Expect(26);
 			if (la.kind == 10) {
 				lexer.NextToken();
 				Identifier();
 
-#line  1667 "VBNET.ATG" 
+#line  1670 "VBNET.ATG" 
 				pexpr = new MemberReferenceExpression(GetTypeReferenceExpression(pexpr, typeParameters), t.val); 
-			} else if (la.kind == 24) {
+			} else if (la.kind == 25) {
 				lexer.NextToken();
 				ArgumentList(
-#line  1669 "VBNET.ATG" 
+#line  1672 "VBNET.ATG" 
 out parameters);
-				Expect(25);
+				Expect(26);
 
-#line  1671 "VBNET.ATG" 
+#line  1674 "VBNET.ATG" 
 				pexpr = CreateInvocationExpression(pexpr, parameters, typeParameters); 
-			} else SynErr(244);
+			} else SynErr(245);
 		} else if (StartOf(30)) {
 			ArgumentList(
-#line  1673 "VBNET.ATG" 
+#line  1676 "VBNET.ATG" 
 out parameters);
-			Expect(25);
+			Expect(26);
 
-#line  1675 "VBNET.ATG" 
+#line  1678 "VBNET.ATG" 
 			pexpr = CreateInvocationExpression(pexpr, parameters, typeParameters); 
-		} else SynErr(245);
+		} else SynErr(246);
 
-#line  1677 "VBNET.ATG" 
+#line  1680 "VBNET.ATG" 
 		pexpr.StartLocation = start; pexpr.EndLocation = t.Location; 
 	}
 
 	void PrimitiveTypeName(
-#line  2839 "VBNET.ATG" 
+#line  2842 "VBNET.ATG" 
 out string type) {
 
-#line  2840 "VBNET.ATG" 
+#line  2843 "VBNET.ATG" 
 		type = String.Empty; 
 		switch (la.kind) {
-		case 52: {
+		case 53: {
 			lexer.NextToken();
 
-#line  2841 "VBNET.ATG" 
+#line  2844 "VBNET.ATG" 
 			type = "Boolean"; 
 			break;
 		}
-		case 76: {
+		case 77: {
 			lexer.NextToken();
 
-#line  2842 "VBNET.ATG" 
+#line  2845 "VBNET.ATG" 
 			type = "Date"; 
 			break;
 		}
-		case 65: {
+		case 66: {
 			lexer.NextToken();
 
-#line  2843 "VBNET.ATG" 
+#line  2846 "VBNET.ATG" 
 			type = "Char"; 
 			break;
 		}
-		case 165: {
+		case 166: {
 			lexer.NextToken();
 
-#line  2844 "VBNET.ATG" 
+#line  2847 "VBNET.ATG" 
 			type = "String"; 
 			break;
 		}
-		case 77: {
+		case 78: {
 			lexer.NextToken();
 
-#line  2845 "VBNET.ATG" 
+#line  2848 "VBNET.ATG" 
 			type = "Decimal"; 
 			break;
 		}
-		case 54: {
+		case 55: {
 			lexer.NextToken();
 
-#line  2846 "VBNET.ATG" 
+#line  2849 "VBNET.ATG" 
 			type = "Byte"; 
 			break;
 		}
-		case 159: {
+		case 160: {
 			lexer.NextToken();
 
-#line  2847 "VBNET.ATG" 
+#line  2850 "VBNET.ATG" 
 			type = "Short"; 
 			break;
 		}
-		case 111: {
+		case 112: {
 			lexer.NextToken();
 
-#line  2848 "VBNET.ATG" 
+#line  2851 "VBNET.ATG" 
 			type = "Integer"; 
 			break;
 		}
-		case 117: {
+		case 118: {
 			lexer.NextToken();
 
-#line  2849 "VBNET.ATG" 
+#line  2852 "VBNET.ATG" 
 			type = "Long"; 
 			break;
 		}
-		case 160: {
+		case 161: {
 			lexer.NextToken();
 
-#line  2850 "VBNET.ATG" 
+#line  2853 "VBNET.ATG" 
 			type = "Single"; 
 			break;
 		}
-		case 84: {
+		case 85: {
 			lexer.NextToken();
 
-#line  2851 "VBNET.ATG" 
+#line  2854 "VBNET.ATG" 
 			type = "Double"; 
 			break;
 		}
-		case 192: {
+		case 193: {
 			lexer.NextToken();
 
-#line  2852 "VBNET.ATG" 
+#line  2855 "VBNET.ATG" 
 			type = "UInteger"; 
 			break;
 		}
-		case 193: {
+		case 194: {
 			lexer.NextToken();
 
-#line  2853 "VBNET.ATG" 
+#line  2856 "VBNET.ATG" 
 			type = "ULong"; 
 			break;
 		}
-		case 194: {
+		case 195: {
 			lexer.NextToken();
 
-#line  2854 "VBNET.ATG" 
+#line  2857 "VBNET.ATG" 
 			type = "UShort"; 
 			break;
 		}
-		case 191: {
+		case 192: {
 			lexer.NextToken();
 
-#line  2855 "VBNET.ATG" 
+#line  2858 "VBNET.ATG" 
 			type = "SByte"; 
 			break;
 		}
-		default: SynErr(246); break;
+		default: SynErr(247); break;
 		}
 	}
 
 	void CastTarget(
-#line  1682 "VBNET.ATG" 
+#line  1685 "VBNET.ATG" 
 out TypeReference type) {
 
-#line  1684 "VBNET.ATG" 
+#line  1687 "VBNET.ATG" 
 		type = null;
 		
 		switch (la.kind) {
-		case 59: {
+		case 60: {
 			lexer.NextToken();
 
-#line  1686 "VBNET.ATG" 
+#line  1689 "VBNET.ATG" 
 			type = new TypeReference("System.Boolean"); 
 			break;
 		}
-		case 60: {
+		case 61: {
 			lexer.NextToken();
 
-#line  1687 "VBNET.ATG" 
+#line  1690 "VBNET.ATG" 
 			type = new TypeReference("System.Byte"); 
 			break;
 		}
-		case 195: {
+		case 196: {
 			lexer.NextToken();
 
-#line  1688 "VBNET.ATG" 
+#line  1691 "VBNET.ATG" 
 			type = new TypeReference("System.SByte"); 
 			break;
 		}
-		case 61: {
+		case 62: {
 			lexer.NextToken();
 
-#line  1689 "VBNET.ATG" 
+#line  1692 "VBNET.ATG" 
 			type = new TypeReference("System.Char"); 
 			break;
 		}
-		case 62: {
+		case 63: {
 			lexer.NextToken();
 
-#line  1690 "VBNET.ATG" 
+#line  1693 "VBNET.ATG" 
 			type = new TypeReference("System.DateTime"); 
 			break;
 		}
-		case 64: {
+		case 65: {
 			lexer.NextToken();
 
-#line  1691 "VBNET.ATG" 
+#line  1694 "VBNET.ATG" 
 			type = new TypeReference("System.Decimal"); 
 			break;
 		}
-		case 63: {
+		case 64: {
 			lexer.NextToken();
 
-#line  1692 "VBNET.ATG" 
+#line  1695 "VBNET.ATG" 
 			type = new TypeReference("System.Double"); 
 			break;
 		}
-		case 72: {
+		case 73: {
 			lexer.NextToken();
 
-#line  1693 "VBNET.ATG" 
+#line  1696 "VBNET.ATG" 
 			type = new TypeReference("System.Int16"); 
 			break;
 		}
-		case 66: {
+		case 67: {
 			lexer.NextToken();
 
-#line  1694 "VBNET.ATG" 
+#line  1697 "VBNET.ATG" 
 			type = new TypeReference("System.Int32"); 
 			break;
 		}
-		case 68: {
+		case 69: {
 			lexer.NextToken();
 
-#line  1695 "VBNET.ATG" 
+#line  1698 "VBNET.ATG" 
 			type = new TypeReference("System.Int64"); 
 			break;
 		}
-		case 196: {
+		case 197: {
 			lexer.NextToken();
 
-#line  1696 "VBNET.ATG" 
+#line  1699 "VBNET.ATG" 
 			type = new TypeReference("System.UInt16"); 
 			break;
 		}
-		case 197: {
+		case 198: {
 			lexer.NextToken();
 
-#line  1697 "VBNET.ATG" 
+#line  1700 "VBNET.ATG" 
 			type = new TypeReference("System.UInt32"); 
 			break;
 		}
-		case 198: {
+		case 199: {
 			lexer.NextToken();
 
-#line  1698 "VBNET.ATG" 
+#line  1701 "VBNET.ATG" 
 			type = new TypeReference("System.UInt64"); 
 			break;
 		}
-		case 69: {
+		case 70: {
 			lexer.NextToken();
 
-#line  1699 "VBNET.ATG" 
+#line  1702 "VBNET.ATG" 
 			type = new TypeReference("System.Object"); 
 			break;
 		}
-		case 73: {
+		case 74: {
 			lexer.NextToken();
 
-#line  1700 "VBNET.ATG" 
+#line  1703 "VBNET.ATG" 
 			type = new TypeReference("System.Single"); 
 			break;
 		}
-		case 74: {
+		case 75: {
 			lexer.NextToken();
 
-#line  1701 "VBNET.ATG" 
+#line  1704 "VBNET.ATG" 
 			type = new TypeReference("System.String"); 
 			break;
 		}
-		default: SynErr(247); break;
+		default: SynErr(248); break;
 		}
 	}
 
 	void GetTypeTypeName(
-#line  1959 "VBNET.ATG" 
+#line  1962 "VBNET.ATG" 
 out TypeReference typeref) {
 
-#line  1960 "VBNET.ATG" 
+#line  1963 "VBNET.ATG" 
 		ArrayList rank = null; 
 		NonArrayTypeName(
-#line  1962 "VBNET.ATG" 
+#line  1965 "VBNET.ATG" 
 out typeref, true);
 		ArrayTypeModifiers(
-#line  1963 "VBNET.ATG" 
+#line  1966 "VBNET.ATG" 
 out rank);
 
-#line  1964 "VBNET.ATG" 
+#line  1967 "VBNET.ATG" 
 		if (rank != null && typeref != null) {
 		typeref.RankSpecifier = (int[])rank.ToArray(typeof(int));
 		}
@@ -4122,348 +4130,348 @@ out rank);
 	}
 
 	void ArgumentList(
-#line  1894 "VBNET.ATG" 
+#line  1897 "VBNET.ATG" 
 out List<Expression> arguments) {
 
-#line  1896 "VBNET.ATG" 
+#line  1899 "VBNET.ATG" 
 		arguments = new List<Expression>();
 		Expression expr = null;
 		
 		if (StartOf(27)) {
 			Argument(
-#line  1899 "VBNET.ATG" 
+#line  1902 "VBNET.ATG" 
 out expr);
 		}
 		while (la.kind == 12) {
 			lexer.NextToken();
 
-#line  1900 "VBNET.ATG" 
+#line  1903 "VBNET.ATG" 
 			arguments.Add(expr ?? Expression.Null); expr = null; 
 			if (StartOf(27)) {
 				Argument(
-#line  1901 "VBNET.ATG" 
+#line  1904 "VBNET.ATG" 
 out expr);
 			}
 
-#line  1902 "VBNET.ATG" 
+#line  1905 "VBNET.ATG" 
 			if (expr == null) expr = Expression.Null; 
 		}
 
-#line  1904 "VBNET.ATG" 
+#line  1907 "VBNET.ATG" 
 		if (expr != null) arguments.Add(expr); 
 	}
 
 	void ConjunctionExpr(
-#line  1720 "VBNET.ATG" 
+#line  1723 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1722 "VBNET.ATG" 
+#line  1725 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		NotExpr(
-#line  1725 "VBNET.ATG" 
+#line  1728 "VBNET.ATG" 
 out outExpr);
-		while (la.kind == 45 || la.kind == 46) {
-			if (la.kind == 45) {
+		while (la.kind == 46 || la.kind == 47) {
+			if (la.kind == 46) {
 				lexer.NextToken();
 
-#line  1728 "VBNET.ATG" 
+#line  1731 "VBNET.ATG" 
 				op = BinaryOperatorType.BitwiseAnd; 
 			} else {
 				lexer.NextToken();
 
-#line  1729 "VBNET.ATG" 
+#line  1732 "VBNET.ATG" 
 				op = BinaryOperatorType.LogicalAnd; 
 			}
 			NotExpr(
-#line  1731 "VBNET.ATG" 
+#line  1734 "VBNET.ATG" 
 out expr);
 
-#line  1731 "VBNET.ATG" 
+#line  1734 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void NotExpr(
-#line  1735 "VBNET.ATG" 
+#line  1738 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1736 "VBNET.ATG" 
+#line  1739 "VBNET.ATG" 
 		UnaryOperatorType uop = UnaryOperatorType.None; 
-		while (la.kind == 129) {
+		while (la.kind == 130) {
 			lexer.NextToken();
 
-#line  1737 "VBNET.ATG" 
+#line  1740 "VBNET.ATG" 
 			uop = UnaryOperatorType.Not; 
 		}
 		ComparisonExpr(
-#line  1738 "VBNET.ATG" 
+#line  1741 "VBNET.ATG" 
 out outExpr);
 
-#line  1739 "VBNET.ATG" 
+#line  1742 "VBNET.ATG" 
 		if (uop != UnaryOperatorType.None)
 		outExpr = new UnaryOperatorExpression(outExpr, uop);
 		
 	}
 
 	void ComparisonExpr(
-#line  1744 "VBNET.ATG" 
+#line  1747 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1746 "VBNET.ATG" 
+#line  1749 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		ShiftExpr(
-#line  1749 "VBNET.ATG" 
+#line  1752 "VBNET.ATG" 
 out outExpr);
 		while (StartOf(31)) {
 			switch (la.kind) {
-			case 27: {
+			case 28: {
 				lexer.NextToken();
 
-#line  1752 "VBNET.ATG" 
+#line  1755 "VBNET.ATG" 
 				op = BinaryOperatorType.LessThan; 
 				break;
 			}
-			case 26: {
+			case 27: {
 				lexer.NextToken();
 
-#line  1753 "VBNET.ATG" 
+#line  1756 "VBNET.ATG" 
 				op = BinaryOperatorType.GreaterThan; 
 				break;
 			}
-			case 30: {
+			case 31: {
 				lexer.NextToken();
 
-#line  1754 "VBNET.ATG" 
+#line  1757 "VBNET.ATG" 
 				op = BinaryOperatorType.LessThanOrEqual; 
 				break;
 			}
-			case 29: {
+			case 30: {
 				lexer.NextToken();
 
-#line  1755 "VBNET.ATG" 
+#line  1758 "VBNET.ATG" 
 				op = BinaryOperatorType.GreaterThanOrEqual; 
 				break;
 			}
-			case 28: {
+			case 29: {
 				lexer.NextToken();
 
-#line  1756 "VBNET.ATG" 
+#line  1759 "VBNET.ATG" 
 				op = BinaryOperatorType.InEquality; 
 				break;
 			}
 			case 11: {
 				lexer.NextToken();
 
-#line  1757 "VBNET.ATG" 
+#line  1760 "VBNET.ATG" 
 				op = BinaryOperatorType.Equality; 
 				break;
 			}
-			case 116: {
+			case 117: {
 				lexer.NextToken();
 
-#line  1758 "VBNET.ATG" 
+#line  1761 "VBNET.ATG" 
 				op = BinaryOperatorType.Like; 
 				break;
 			}
-			case 113: {
+			case 114: {
 				lexer.NextToken();
 
-#line  1759 "VBNET.ATG" 
+#line  1762 "VBNET.ATG" 
 				op = BinaryOperatorType.ReferenceEquality; 
 				break;
 			}
-			case 190: {
+			case 191: {
 				lexer.NextToken();
 
-#line  1760 "VBNET.ATG" 
+#line  1763 "VBNET.ATG" 
 				op = BinaryOperatorType.ReferenceInequality; 
 				break;
 			}
 			}
 			if (StartOf(32)) {
 				ShiftExpr(
-#line  1763 "VBNET.ATG" 
+#line  1766 "VBNET.ATG" 
 out expr);
 
-#line  1763 "VBNET.ATG" 
+#line  1766 "VBNET.ATG" 
 				outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
-			} else if (la.kind == 129) {
+			} else if (la.kind == 130) {
 				lexer.NextToken();
 				ShiftExpr(
-#line  1766 "VBNET.ATG" 
+#line  1769 "VBNET.ATG" 
 out expr);
 
-#line  1766 "VBNET.ATG" 
+#line  1769 "VBNET.ATG" 
 				outExpr = new BinaryOperatorExpression(outExpr, op, new UnaryOperatorExpression(expr, UnaryOperatorType.Not));  
-			} else SynErr(248);
+			} else SynErr(249);
 		}
 	}
 
 	void ShiftExpr(
-#line  1771 "VBNET.ATG" 
+#line  1774 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1773 "VBNET.ATG" 
+#line  1776 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		ConcatenationExpr(
-#line  1776 "VBNET.ATG" 
+#line  1779 "VBNET.ATG" 
 out outExpr);
-		while (la.kind == 31 || la.kind == 32) {
-			if (la.kind == 31) {
+		while (la.kind == 32 || la.kind == 33) {
+			if (la.kind == 32) {
 				lexer.NextToken();
 
-#line  1779 "VBNET.ATG" 
+#line  1782 "VBNET.ATG" 
 				op = BinaryOperatorType.ShiftLeft; 
 			} else {
 				lexer.NextToken();
 
-#line  1780 "VBNET.ATG" 
+#line  1783 "VBNET.ATG" 
 				op = BinaryOperatorType.ShiftRight; 
 			}
 			ConcatenationExpr(
-#line  1782 "VBNET.ATG" 
+#line  1785 "VBNET.ATG" 
 out expr);
 
-#line  1782 "VBNET.ATG" 
+#line  1785 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void ConcatenationExpr(
-#line  1786 "VBNET.ATG" 
+#line  1789 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1787 "VBNET.ATG" 
+#line  1790 "VBNET.ATG" 
 		Expression expr; 
 		AdditiveExpr(
-#line  1789 "VBNET.ATG" 
+#line  1792 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 19) {
 			lexer.NextToken();
 			AdditiveExpr(
-#line  1789 "VBNET.ATG" 
+#line  1792 "VBNET.ATG" 
 out expr);
 
-#line  1789 "VBNET.ATG" 
+#line  1792 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Concat, expr);  
 		}
 	}
 
 	void AdditiveExpr(
-#line  1792 "VBNET.ATG" 
+#line  1795 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1794 "VBNET.ATG" 
+#line  1797 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		ModuloExpr(
-#line  1797 "VBNET.ATG" 
+#line  1800 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 14 || la.kind == 15) {
 			if (la.kind == 14) {
 				lexer.NextToken();
 
-#line  1800 "VBNET.ATG" 
+#line  1803 "VBNET.ATG" 
 				op = BinaryOperatorType.Add; 
 			} else {
 				lexer.NextToken();
 
-#line  1801 "VBNET.ATG" 
+#line  1804 "VBNET.ATG" 
 				op = BinaryOperatorType.Subtract; 
 			}
 			ModuloExpr(
-#line  1803 "VBNET.ATG" 
+#line  1806 "VBNET.ATG" 
 out expr);
 
-#line  1803 "VBNET.ATG" 
+#line  1806 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void ModuloExpr(
-#line  1807 "VBNET.ATG" 
+#line  1810 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1808 "VBNET.ATG" 
+#line  1811 "VBNET.ATG" 
 		Expression expr; 
 		IntegerDivisionExpr(
-#line  1810 "VBNET.ATG" 
+#line  1813 "VBNET.ATG" 
 out outExpr);
-		while (la.kind == 120) {
+		while (la.kind == 121) {
 			lexer.NextToken();
 			IntegerDivisionExpr(
-#line  1810 "VBNET.ATG" 
+#line  1813 "VBNET.ATG" 
 out expr);
 
-#line  1810 "VBNET.ATG" 
+#line  1813 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Modulus, expr);  
 		}
 	}
 
 	void IntegerDivisionExpr(
-#line  1813 "VBNET.ATG" 
+#line  1816 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1814 "VBNET.ATG" 
+#line  1817 "VBNET.ATG" 
 		Expression expr; 
 		MultiplicativeExpr(
-#line  1816 "VBNET.ATG" 
+#line  1819 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 18) {
 			lexer.NextToken();
 			MultiplicativeExpr(
-#line  1816 "VBNET.ATG" 
+#line  1819 "VBNET.ATG" 
 out expr);
 
-#line  1816 "VBNET.ATG" 
+#line  1819 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.DivideInteger, expr);  
 		}
 	}
 
 	void MultiplicativeExpr(
-#line  1819 "VBNET.ATG" 
+#line  1822 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1821 "VBNET.ATG" 
+#line  1824 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		UnaryExpr(
-#line  1824 "VBNET.ATG" 
+#line  1827 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 16 || la.kind == 17) {
 			if (la.kind == 16) {
 				lexer.NextToken();
 
-#line  1827 "VBNET.ATG" 
+#line  1830 "VBNET.ATG" 
 				op = BinaryOperatorType.Multiply; 
 			} else {
 				lexer.NextToken();
 
-#line  1828 "VBNET.ATG" 
+#line  1831 "VBNET.ATG" 
 				op = BinaryOperatorType.Divide; 
 			}
 			UnaryExpr(
-#line  1830 "VBNET.ATG" 
+#line  1833 "VBNET.ATG" 
 out expr);
 
-#line  1830 "VBNET.ATG" 
+#line  1833 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr); 
 		}
 	}
 
 	void UnaryExpr(
-#line  1834 "VBNET.ATG" 
+#line  1837 "VBNET.ATG" 
 out Expression uExpr) {
 
-#line  1836 "VBNET.ATG" 
+#line  1839 "VBNET.ATG" 
 		Expression expr;
 		UnaryOperatorType uop = UnaryOperatorType.None;
 		bool isUOp = false;
@@ -4472,25 +4480,25 @@ out Expression uExpr) {
 			if (la.kind == 14) {
 				lexer.NextToken();
 
-#line  1840 "VBNET.ATG" 
+#line  1843 "VBNET.ATG" 
 				uop = UnaryOperatorType.Plus; isUOp = true; 
 			} else if (la.kind == 15) {
 				lexer.NextToken();
 
-#line  1841 "VBNET.ATG" 
+#line  1844 "VBNET.ATG" 
 				uop = UnaryOperatorType.Minus; isUOp = true; 
 			} else {
 				lexer.NextToken();
 
-#line  1842 "VBNET.ATG" 
+#line  1845 "VBNET.ATG" 
 				uop = UnaryOperatorType.Dereference;  isUOp = true;
 			}
 		}
 		ExponentiationExpr(
-#line  1844 "VBNET.ATG" 
+#line  1847 "VBNET.ATG" 
 out expr);
 
-#line  1846 "VBNET.ATG" 
+#line  1849 "VBNET.ATG" 
 		if (isUOp) {
 		uExpr = new UnaryOperatorExpression(expr, uop);
 		} else {
@@ -4500,107 +4508,107 @@ out expr);
 	}
 
 	void ExponentiationExpr(
-#line  1854 "VBNET.ATG" 
+#line  1857 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1855 "VBNET.ATG" 
+#line  1858 "VBNET.ATG" 
 		Expression expr; 
 		SimpleExpr(
-#line  1857 "VBNET.ATG" 
+#line  1860 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 20) {
 			lexer.NextToken();
 			SimpleExpr(
-#line  1857 "VBNET.ATG" 
+#line  1860 "VBNET.ATG" 
 out expr);
 
-#line  1857 "VBNET.ATG" 
+#line  1860 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Power, expr);  
 		}
 	}
 
 	void NormalOrReDimArgumentList(
-#line  1908 "VBNET.ATG" 
+#line  1911 "VBNET.ATG" 
 out List<Expression> arguments, out bool canBeNormal, out bool canBeRedim) {
 
-#line  1910 "VBNET.ATG" 
+#line  1913 "VBNET.ATG" 
 		arguments = new List<Expression>();
 		canBeNormal = true; canBeRedim = !IsNamedAssign();
 		Expression expr = null;
 		
 		if (StartOf(27)) {
 			Argument(
-#line  1915 "VBNET.ATG" 
+#line  1918 "VBNET.ATG" 
 out expr);
-			if (la.kind == 172) {
+			if (la.kind == 173) {
 				lexer.NextToken();
 
-#line  1916 "VBNET.ATG" 
+#line  1919 "VBNET.ATG" 
 				EnsureIsZero(expr); canBeNormal = false; 
 				Expr(
-#line  1917 "VBNET.ATG" 
+#line  1920 "VBNET.ATG" 
 out expr);
 			}
 		}
 		while (la.kind == 12) {
 			lexer.NextToken();
 
-#line  1920 "VBNET.ATG" 
+#line  1923 "VBNET.ATG" 
 			if (expr == null) canBeRedim = false; 
 
-#line  1921 "VBNET.ATG" 
+#line  1924 "VBNET.ATG" 
 			arguments.Add(expr ?? Expression.Null); expr = null; 
 
-#line  1922 "VBNET.ATG" 
+#line  1925 "VBNET.ATG" 
 			canBeRedim &= !IsNamedAssign(); 
 			if (StartOf(27)) {
 				Argument(
-#line  1923 "VBNET.ATG" 
+#line  1926 "VBNET.ATG" 
 out expr);
-				if (la.kind == 172) {
+				if (la.kind == 173) {
 					lexer.NextToken();
 
-#line  1924 "VBNET.ATG" 
+#line  1927 "VBNET.ATG" 
 					EnsureIsZero(expr); canBeNormal = false; 
 					Expr(
-#line  1925 "VBNET.ATG" 
+#line  1928 "VBNET.ATG" 
 out expr);
 				}
 			}
 
-#line  1927 "VBNET.ATG" 
+#line  1930 "VBNET.ATG" 
 			if (expr == null) { canBeRedim = false; expr = Expression.Null; } 
 		}
 
-#line  1929 "VBNET.ATG" 
+#line  1932 "VBNET.ATG" 
 		if (expr != null) arguments.Add(expr); else canBeRedim = false; 
 	}
 
 	void ArrayTypeModifiers(
-#line  2016 "VBNET.ATG" 
+#line  2019 "VBNET.ATG" 
 out ArrayList arrayModifiers) {
 
-#line  2018 "VBNET.ATG" 
+#line  2021 "VBNET.ATG" 
 		arrayModifiers = new ArrayList();
 		int i = 0;
 		
 		while (
-#line  2021 "VBNET.ATG" 
+#line  2024 "VBNET.ATG" 
 IsDims()) {
-			Expect(24);
-			if (la.kind == 12 || la.kind == 25) {
+			Expect(25);
+			if (la.kind == 12 || la.kind == 26) {
 				RankList(
-#line  2023 "VBNET.ATG" 
+#line  2026 "VBNET.ATG" 
 out i);
 			}
 
-#line  2025 "VBNET.ATG" 
+#line  2028 "VBNET.ATG" 
 			arrayModifiers.Add(i);
 			
-			Expect(25);
+			Expect(26);
 		}
 
-#line  2030 "VBNET.ATG" 
+#line  2033 "VBNET.ATG" 
 		if(arrayModifiers.Count == 0) {
 		 arrayModifiers = null;
 		}
@@ -4608,160 +4616,160 @@ out i);
 	}
 
 	void Argument(
-#line  1933 "VBNET.ATG" 
+#line  1936 "VBNET.ATG" 
 out Expression argumentexpr) {
 
-#line  1935 "VBNET.ATG" 
+#line  1938 "VBNET.ATG" 
 		Expression expr;
 		argumentexpr = null;
 		string name;
 		
 		if (
-#line  1939 "VBNET.ATG" 
+#line  1942 "VBNET.ATG" 
 IsNamedAssign()) {
 			Identifier();
 
-#line  1939 "VBNET.ATG" 
+#line  1942 "VBNET.ATG" 
 			name = t.val;  
 			Expect(13);
 			Expect(11);
 			Expr(
-#line  1939 "VBNET.ATG" 
+#line  1942 "VBNET.ATG" 
 out expr);
 
-#line  1941 "VBNET.ATG" 
+#line  1944 "VBNET.ATG" 
 			argumentexpr = new NamedArgumentExpression(name, expr);
 			
 		} else if (StartOf(27)) {
 			Expr(
-#line  1944 "VBNET.ATG" 
+#line  1947 "VBNET.ATG" 
 out argumentexpr);
-		} else SynErr(249);
+		} else SynErr(250);
 	}
 
 	void QualIdentAndTypeArguments(
-#line  1990 "VBNET.ATG" 
+#line  1993 "VBNET.ATG" 
 out TypeReference typeref, bool canBeUnbound) {
 
-#line  1991 "VBNET.ATG" 
+#line  1994 "VBNET.ATG" 
 		string name; typeref = null; 
 		Qualident(
-#line  1993 "VBNET.ATG" 
+#line  1996 "VBNET.ATG" 
 out name);
 
-#line  1994 "VBNET.ATG" 
+#line  1997 "VBNET.ATG" 
 		typeref = new TypeReference(name); 
 		if (
-#line  1995 "VBNET.ATG" 
+#line  1998 "VBNET.ATG" 
 la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) {
 			lexer.NextToken();
-			Expect(201);
+			Expect(202);
 			if (
-#line  1997 "VBNET.ATG" 
+#line  2000 "VBNET.ATG" 
 canBeUnbound && (la.kind == Tokens.CloseParenthesis || la.kind == Tokens.Comma)) {
 
-#line  1998 "VBNET.ATG" 
+#line  2001 "VBNET.ATG" 
 				typeref.GenericTypes.Add(NullTypeReference.Instance); 
 				while (la.kind == 12) {
 					lexer.NextToken();
 
-#line  1999 "VBNET.ATG" 
+#line  2002 "VBNET.ATG" 
 					typeref.GenericTypes.Add(NullTypeReference.Instance); 
 				}
 			} else if (StartOf(6)) {
 				TypeArgumentList(
-#line  2000 "VBNET.ATG" 
+#line  2003 "VBNET.ATG" 
 typeref.GenericTypes);
-			} else SynErr(250);
-			Expect(25);
+			} else SynErr(251);
+			Expect(26);
 		}
 	}
 
 	void TypeArgumentList(
-#line  2043 "VBNET.ATG" 
+#line  2046 "VBNET.ATG" 
 List<TypeReference> typeArguments) {
 
-#line  2045 "VBNET.ATG" 
+#line  2048 "VBNET.ATG" 
 		TypeReference typeref;
 		
 		TypeName(
-#line  2047 "VBNET.ATG" 
+#line  2050 "VBNET.ATG" 
 out typeref);
 
-#line  2047 "VBNET.ATG" 
+#line  2050 "VBNET.ATG" 
 		if (typeref != null) typeArguments.Add(typeref); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			TypeName(
-#line  2050 "VBNET.ATG" 
+#line  2053 "VBNET.ATG" 
 out typeref);
 
-#line  2050 "VBNET.ATG" 
+#line  2053 "VBNET.ATG" 
 			if (typeref != null) typeArguments.Add(typeref); 
 		}
 	}
 
 	void RankList(
-#line  2037 "VBNET.ATG" 
+#line  2040 "VBNET.ATG" 
 out int i) {
 
-#line  2038 "VBNET.ATG" 
+#line  2041 "VBNET.ATG" 
 		i = 0; 
 		while (la.kind == 12) {
 			lexer.NextToken();
 
-#line  2039 "VBNET.ATG" 
+#line  2042 "VBNET.ATG" 
 			++i; 
 		}
 	}
 
 	void Attribute(
-#line  2078 "VBNET.ATG" 
+#line  2081 "VBNET.ATG" 
 out ASTAttribute attribute) {
 
-#line  2079 "VBNET.ATG" 
+#line  2082 "VBNET.ATG" 
 		string name;
 		List<Expression> positional = new List<Expression>();
 		List<NamedArgumentExpression> named = new List<NamedArgumentExpression>();
 		
-		if (la.kind == 199) {
+		if (la.kind == 200) {
 			lexer.NextToken();
 			Expect(10);
 		}
 		Qualident(
-#line  2084 "VBNET.ATG" 
+#line  2087 "VBNET.ATG" 
 out name);
-		if (la.kind == 24) {
+		if (la.kind == 25) {
 			AttributeArguments(
-#line  2085 "VBNET.ATG" 
+#line  2088 "VBNET.ATG" 
 positional, named);
 		}
 
-#line  2086 "VBNET.ATG" 
+#line  2089 "VBNET.ATG" 
 		attribute  = new ASTAttribute(name, positional, named); 
 	}
 
 	void AttributeArguments(
-#line  2090 "VBNET.ATG" 
+#line  2093 "VBNET.ATG" 
 List<Expression> positional, List<NamedArgumentExpression> named) {
 
-#line  2092 "VBNET.ATG" 
+#line  2095 "VBNET.ATG" 
 		bool nameFound = false;
 		string name = "";
 		Expression expr;
 		
-		Expect(24);
+		Expect(25);
 		if (
-#line  2098 "VBNET.ATG" 
+#line  2101 "VBNET.ATG" 
 IsNotClosingParenthesis()) {
 			if (
-#line  2100 "VBNET.ATG" 
+#line  2103 "VBNET.ATG" 
 IsNamedAssign()) {
 
-#line  2100 "VBNET.ATG" 
+#line  2103 "VBNET.ATG" 
 				nameFound = true; 
 				IdentifierOrKeyword(
-#line  2101 "VBNET.ATG" 
+#line  2104 "VBNET.ATG" 
 out name);
 				if (la.kind == 13) {
 					lexer.NextToken();
@@ -4769,10 +4777,10 @@ out name);
 				Expect(11);
 			}
 			Expr(
-#line  2103 "VBNET.ATG" 
+#line  2106 "VBNET.ATG" 
 out expr);
 
-#line  2105 "VBNET.ATG" 
+#line  2108 "VBNET.ATG" 
 			if (expr != null) {
 			if (string.IsNullOrEmpty(name)) { positional.Add(expr); }
 			else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; }
@@ -4781,13 +4789,13 @@ out expr);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				if (
-#line  2113 "VBNET.ATG" 
+#line  2116 "VBNET.ATG" 
 IsNamedAssign()) {
 
-#line  2113 "VBNET.ATG" 
+#line  2116 "VBNET.ATG" 
 					nameFound = true; 
 					IdentifierOrKeyword(
-#line  2114 "VBNET.ATG" 
+#line  2117 "VBNET.ATG" 
 out name);
 					if (la.kind == 13) {
 						lexer.NextToken();
@@ -4795,28 +4803,28 @@ out name);
 					Expect(11);
 				} else if (StartOf(27)) {
 
-#line  2116 "VBNET.ATG" 
+#line  2119 "VBNET.ATG" 
 					if (nameFound) Error("no positional argument after named argument"); 
-				} else SynErr(251);
+				} else SynErr(252);
 				Expr(
-#line  2117 "VBNET.ATG" 
+#line  2120 "VBNET.ATG" 
 out expr);
 
-#line  2117 "VBNET.ATG" 
+#line  2120 "VBNET.ATG" 
 				if (expr != null) { if(name == "") positional.Add(expr);
 				else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; }
 				}
 				
 			}
 		}
-		Expect(25);
+		Expect(26);
 	}
 
 	void FormalParameter(
-#line  2174 "VBNET.ATG" 
+#line  2177 "VBNET.ATG" 
 out ParameterDeclarationExpression p) {
 
-#line  2176 "VBNET.ATG" 
+#line  2179 "VBNET.ATG" 
 		AttributeSection section;
 		List<AttributeSection> attributes = new List<AttributeSection>();
 		TypeReference type = null;
@@ -4825,38 +4833,38 @@ out ParameterDeclarationExpression p) {
 		p = null;
 		ArrayList arrayModifiers = null;
 		
-		while (la.kind == 27) {
+		while (la.kind == 28) {
 			AttributeSection(
-#line  2185 "VBNET.ATG" 
+#line  2188 "VBNET.ATG" 
 out section);
 
-#line  2185 "VBNET.ATG" 
+#line  2188 "VBNET.ATG" 
 			attributes.Add(section); 
 		}
 		while (StartOf(33)) {
 			ParameterModifier(
-#line  2186 "VBNET.ATG" 
+#line  2189 "VBNET.ATG" 
 mod);
 		}
 		Identifier();
 
-#line  2187 "VBNET.ATG" 
+#line  2190 "VBNET.ATG" 
 		string parameterName = t.val; 
 		if (
-#line  2188 "VBNET.ATG" 
+#line  2191 "VBNET.ATG" 
 IsDims()) {
 			ArrayTypeModifiers(
-#line  2188 "VBNET.ATG" 
+#line  2191 "VBNET.ATG" 
 out arrayModifiers);
 		}
-		if (la.kind == 48) {
+		if (la.kind == 49) {
 			lexer.NextToken();
 			TypeName(
-#line  2189 "VBNET.ATG" 
+#line  2192 "VBNET.ATG" 
 out type);
 		}
 
-#line  2191 "VBNET.ATG" 
+#line  2194 "VBNET.ATG" 
 		if(type != null) {
 		if (arrayModifiers != null) {
 			if (type.RankSpecifier != null) {
@@ -4872,11 +4880,11 @@ out type);
 		if (la.kind == 11) {
 			lexer.NextToken();
 			Expr(
-#line  2203 "VBNET.ATG" 
+#line  2206 "VBNET.ATG" 
 out expr);
 		}
 
-#line  2205 "VBNET.ATG" 
+#line  2208 "VBNET.ATG" 
 		mod.Check();
 		p = new ParameterDeclarationExpression(type, parameterName, mod.Modifier, expr);
 		p.Attributes = attributes;
@@ -4884,34 +4892,34 @@ out expr);
 	}
 
 	void ParameterModifier(
-#line  2858 "VBNET.ATG" 
+#line  2861 "VBNET.ATG" 
 ParamModifierList m) {
-		if (la.kind == 55) {
+		if (la.kind == 56) {
 			lexer.NextToken();
 
-#line  2859 "VBNET.ATG" 
+#line  2862 "VBNET.ATG" 
 			m.Add(ParameterModifiers.In); 
-		} else if (la.kind == 53) {
+		} else if (la.kind == 54) {
 			lexer.NextToken();
 
-#line  2860 "VBNET.ATG" 
+#line  2863 "VBNET.ATG" 
 			m.Add(ParameterModifiers.Ref); 
-		} else if (la.kind == 137) {
+		} else if (la.kind == 138) {
 			lexer.NextToken();
 
-#line  2861 "VBNET.ATG" 
+#line  2864 "VBNET.ATG" 
 			m.Add(ParameterModifiers.Optional); 
-		} else if (la.kind == 143) {
+		} else if (la.kind == 144) {
 			lexer.NextToken();
 
-#line  2862 "VBNET.ATG" 
+#line  2865 "VBNET.ATG" 
 			m.Add(ParameterModifiers.Params); 
-		} else SynErr(252);
+		} else SynErr(253);
 	}
 
 	void Statement() {
 
-#line  2234 "VBNET.ATG" 
+#line  2237 "VBNET.ATG" 
 		Statement stmt = null;
 		Location startPos = la.Location;
 		string label = String.Empty;
@@ -4919,34 +4927,34 @@ ParamModifierList m) {
 		
 		if (la.kind == 1 || la.kind == 13) {
 		} else if (
-#line  2240 "VBNET.ATG" 
+#line  2243 "VBNET.ATG" 
 IsLabel()) {
 			LabelName(
-#line  2240 "VBNET.ATG" 
+#line  2243 "VBNET.ATG" 
 out label);
 
-#line  2242 "VBNET.ATG" 
+#line  2245 "VBNET.ATG" 
 			compilationUnit.AddChild(new LabelStatement(t.val));
 			
 			Expect(13);
 			Statement();
 		} else if (StartOf(34)) {
 			EmbeddedStatement(
-#line  2245 "VBNET.ATG" 
+#line  2248 "VBNET.ATG" 
 out stmt);
 
-#line  2245 "VBNET.ATG" 
+#line  2248 "VBNET.ATG" 
 			compilationUnit.AddChild(stmt); 
 		} else if (StartOf(35)) {
 			LocalDeclarationStatement(
-#line  2246 "VBNET.ATG" 
+#line  2249 "VBNET.ATG" 
 out stmt);
 
-#line  2246 "VBNET.ATG" 
+#line  2249 "VBNET.ATG" 
 			compilationUnit.AddChild(stmt); 
-		} else SynErr(253);
+		} else SynErr(254);
 
-#line  2249 "VBNET.ATG" 
+#line  2252 "VBNET.ATG" 
 		if (stmt != null) {
 		stmt.StartLocation = startPos;
 		stmt.EndLocation = t.Location;
@@ -4955,30 +4963,30 @@ out stmt);
 	}
 
 	void LabelName(
-#line  2637 "VBNET.ATG" 
+#line  2640 "VBNET.ATG" 
 out string name) {
 
-#line  2639 "VBNET.ATG" 
+#line  2642 "VBNET.ATG" 
 		name = String.Empty;
 		
 		if (StartOf(13)) {
 			Identifier();
 
-#line  2641 "VBNET.ATG" 
+#line  2644 "VBNET.ATG" 
 			name = t.val; 
 		} else if (la.kind == 5) {
 			lexer.NextToken();
 
-#line  2642 "VBNET.ATG" 
+#line  2645 "VBNET.ATG" 
 			name = t.val; 
-		} else SynErr(254);
+		} else SynErr(255);
 	}
 
 	void EmbeddedStatement(
-#line  2288 "VBNET.ATG" 
+#line  2291 "VBNET.ATG" 
 out Statement statement) {
 
-#line  2290 "VBNET.ATG" 
+#line  2293 "VBNET.ATG" 
 		Statement embeddedStatement = null;
 		statement = null;
 		Expression expr = null;
@@ -4986,248 +4994,248 @@ out Statement statement) {
 		List<Expression> p = null;
 		
 		switch (la.kind) {
-		case 94: {
+		case 95: {
 			lexer.NextToken();
 
-#line  2296 "VBNET.ATG" 
+#line  2299 "VBNET.ATG" 
 			ExitType exitType = ExitType.None; 
 			switch (la.kind) {
-			case 167: {
+			case 168: {
 				lexer.NextToken();
 
-#line  2298 "VBNET.ATG" 
+#line  2301 "VBNET.ATG" 
 				exitType = ExitType.Sub; 
 				break;
 			}
-			case 100: {
+			case 101: {
 				lexer.NextToken();
 
-#line  2300 "VBNET.ATG" 
+#line  2303 "VBNET.ATG" 
 				exitType = ExitType.Function; 
 				break;
 			}
-			case 146: {
+			case 147: {
 				lexer.NextToken();
 
-#line  2302 "VBNET.ATG" 
+#line  2305 "VBNET.ATG" 
 				exitType = ExitType.Property; 
 				break;
 			}
-			case 83: {
+			case 84: {
 				lexer.NextToken();
 
-#line  2304 "VBNET.ATG" 
+#line  2307 "VBNET.ATG" 
 				exitType = ExitType.Do; 
 				break;
 			}
-			case 98: {
+			case 99: {
 				lexer.NextToken();
 
-#line  2306 "VBNET.ATG" 
+#line  2309 "VBNET.ATG" 
 				exitType = ExitType.For; 
 				break;
 			}
-			case 174: {
+			case 175: {
 				lexer.NextToken();
 
-#line  2308 "VBNET.ATG" 
+#line  2311 "VBNET.ATG" 
 				exitType = ExitType.Try; 
 				break;
 			}
-			case 181: {
+			case 182: {
 				lexer.NextToken();
 
-#line  2310 "VBNET.ATG" 
+#line  2313 "VBNET.ATG" 
 				exitType = ExitType.While; 
 				break;
 			}
-			case 155: {
+			case 156: {
 				lexer.NextToken();
 
-#line  2312 "VBNET.ATG" 
+#line  2315 "VBNET.ATG" 
 				exitType = ExitType.Select; 
 				break;
 			}
-			default: SynErr(255); break;
+			default: SynErr(256); break;
 			}
 
-#line  2314 "VBNET.ATG" 
+#line  2317 "VBNET.ATG" 
 			statement = new ExitStatement(exitType); 
 			break;
 		}
-		case 174: {
+		case 175: {
 			TryStatement(
-#line  2315 "VBNET.ATG" 
+#line  2318 "VBNET.ATG" 
 out statement);
 			break;
 		}
-		case 187: {
+		case 188: {
 			lexer.NextToken();
 
-#line  2316 "VBNET.ATG" 
+#line  2319 "VBNET.ATG" 
 			ContinueType continueType = ContinueType.None; 
-			if (la.kind == 83 || la.kind == 98 || la.kind == 181) {
-				if (la.kind == 83) {
+			if (la.kind == 84 || la.kind == 99 || la.kind == 182) {
+				if (la.kind == 84) {
 					lexer.NextToken();
 
-#line  2316 "VBNET.ATG" 
+#line  2319 "VBNET.ATG" 
 					continueType = ContinueType.Do; 
-				} else if (la.kind == 98) {
+				} else if (la.kind == 99) {
 					lexer.NextToken();
 
-#line  2316 "VBNET.ATG" 
+#line  2319 "VBNET.ATG" 
 					continueType = ContinueType.For; 
 				} else {
 					lexer.NextToken();
 
-#line  2316 "VBNET.ATG" 
+#line  2319 "VBNET.ATG" 
 					continueType = ContinueType.While; 
 				}
 			}
 
-#line  2316 "VBNET.ATG" 
+#line  2319 "VBNET.ATG" 
 			statement = new ContinueStatement(continueType); 
 			break;
 		}
-		case 171: {
+		case 172: {
 			lexer.NextToken();
 			if (StartOf(27)) {
 				Expr(
-#line  2318 "VBNET.ATG" 
+#line  2321 "VBNET.ATG" 
 out expr);
 			}
 
-#line  2318 "VBNET.ATG" 
+#line  2321 "VBNET.ATG" 
 			statement = new ThrowStatement(expr); 
 			break;
 		}
-		case 154: {
+		case 155: {
 			lexer.NextToken();
 			if (StartOf(27)) {
 				Expr(
-#line  2320 "VBNET.ATG" 
+#line  2323 "VBNET.ATG" 
 out expr);
 			}
 
-#line  2320 "VBNET.ATG" 
+#line  2323 "VBNET.ATG" 
 			statement = new ReturnStatement(expr); 
 			break;
 		}
-		case 168: {
+		case 169: {
 			lexer.NextToken();
 			Expr(
-#line  2322 "VBNET.ATG" 
+#line  2325 "VBNET.ATG" 
 out expr);
 			EndOfStmt();
 			Block(
-#line  2322 "VBNET.ATG" 
+#line  2325 "VBNET.ATG" 
 out embeddedStatement);
-			Expect(88);
-			Expect(168);
+			Expect(89);
+			Expect(169);
 
-#line  2323 "VBNET.ATG" 
+#line  2326 "VBNET.ATG" 
 			statement = new LockStatement(expr, embeddedStatement); 
 			break;
 		}
-		case 149: {
+		case 150: {
 			lexer.NextToken();
 			Identifier();
 
-#line  2325 "VBNET.ATG" 
+#line  2328 "VBNET.ATG" 
 			name = t.val; 
-			if (la.kind == 24) {
+			if (la.kind == 25) {
 				lexer.NextToken();
 				if (StartOf(30)) {
 					ArgumentList(
-#line  2326 "VBNET.ATG" 
+#line  2329 "VBNET.ATG" 
 out p);
 				}
-				Expect(25);
+				Expect(26);
 			}
 
-#line  2327 "VBNET.ATG" 
+#line  2330 "VBNET.ATG" 
 			statement = new RaiseEventStatement(name, p); 
 			break;
 		}
-		case 182: {
+		case 183: {
 			WithStatement(
-#line  2329 "VBNET.ATG" 
+#line  2332 "VBNET.ATG" 
 out statement);
 			break;
 		}
-		case 42: {
+		case 43: {
 			lexer.NextToken();
 
-#line  2331 "VBNET.ATG" 
+#line  2334 "VBNET.ATG" 
 			Expression handlerExpr = null; 
 			Expr(
-#line  2332 "VBNET.ATG" 
+#line  2335 "VBNET.ATG" 
 out expr);
 			Expect(12);
 			Expr(
-#line  2332 "VBNET.ATG" 
+#line  2335 "VBNET.ATG" 
 out handlerExpr);
 
-#line  2334 "VBNET.ATG" 
+#line  2337 "VBNET.ATG" 
 			statement = new AddHandlerStatement(expr, handlerExpr);
 			
 			break;
 		}
-		case 152: {
+		case 153: {
 			lexer.NextToken();
 
-#line  2337 "VBNET.ATG" 
+#line  2340 "VBNET.ATG" 
 			Expression handlerExpr = null; 
 			Expr(
-#line  2338 "VBNET.ATG" 
+#line  2341 "VBNET.ATG" 
 out expr);
 			Expect(12);
 			Expr(
-#line  2338 "VBNET.ATG" 
+#line  2341 "VBNET.ATG" 
 out handlerExpr);
 
-#line  2340 "VBNET.ATG" 
+#line  2343 "VBNET.ATG" 
 			statement = new RemoveHandlerStatement(expr, handlerExpr);
 			
 			break;
 		}
-		case 181: {
+		case 182: {
 			lexer.NextToken();
 			Expr(
-#line  2343 "VBNET.ATG" 
+#line  2346 "VBNET.ATG" 
 out expr);
 			EndOfStmt();
 			Block(
-#line  2344 "VBNET.ATG" 
+#line  2347 "VBNET.ATG" 
 out embeddedStatement);
-			Expect(88);
-			Expect(181);
+			Expect(89);
+			Expect(182);
 
-#line  2346 "VBNET.ATG" 
+#line  2349 "VBNET.ATG" 
 			statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start);
 			
 			break;
 		}
-		case 83: {
+		case 84: {
 			lexer.NextToken();
 
-#line  2351 "VBNET.ATG" 
+#line  2354 "VBNET.ATG" 
 			ConditionType conditionType = ConditionType.None;
 			
-			if (la.kind == 177 || la.kind == 181) {
+			if (la.kind == 178 || la.kind == 182) {
 				WhileOrUntil(
-#line  2354 "VBNET.ATG" 
+#line  2357 "VBNET.ATG" 
 out conditionType);
 				Expr(
-#line  2354 "VBNET.ATG" 
+#line  2357 "VBNET.ATG" 
 out expr);
 				EndOfStmt();
 				Block(
-#line  2355 "VBNET.ATG" 
+#line  2358 "VBNET.ATG" 
 out embeddedStatement);
-				Expect(118);
+				Expect(119);
 
-#line  2358 "VBNET.ATG" 
+#line  2361 "VBNET.ATG" 
 				statement = new DoLoopStatement(expr, 
 				                               embeddedStatement, 
 				                               conditionType == ConditionType.While ? ConditionType.DoWhile : conditionType, 
@@ -5236,54 +5244,54 @@ out embeddedStatement);
 			} else if (la.kind == 1 || la.kind == 13) {
 				EndOfStmt();
 				Block(
-#line  2365 "VBNET.ATG" 
+#line  2368 "VBNET.ATG" 
 out embeddedStatement);
-				Expect(118);
-				if (la.kind == 177 || la.kind == 181) {
+				Expect(119);
+				if (la.kind == 178 || la.kind == 182) {
 					WhileOrUntil(
-#line  2366 "VBNET.ATG" 
+#line  2369 "VBNET.ATG" 
 out conditionType);
 					Expr(
-#line  2366 "VBNET.ATG" 
+#line  2369 "VBNET.ATG" 
 out expr);
 				}
 
-#line  2368 "VBNET.ATG" 
+#line  2371 "VBNET.ATG" 
 				statement = new DoLoopStatement(expr, embeddedStatement, conditionType, ConditionPosition.End);
 				
-			} else SynErr(256);
+			} else SynErr(257);
 			break;
 		}
-		case 98: {
+		case 99: {
 			lexer.NextToken();
 
-#line  2373 "VBNET.ATG" 
+#line  2376 "VBNET.ATG" 
 			Expression group = null;
 			TypeReference typeReference;
 			string        typeName;
 			Location startLocation = t.Location;
 			
-			if (la.kind == 85) {
+			if (la.kind == 86) {
 				lexer.NextToken();
 				LoopControlVariable(
-#line  2380 "VBNET.ATG" 
+#line  2383 "VBNET.ATG" 
 out typeReference, out typeName);
-				Expect(109);
+				Expect(110);
 				Expr(
-#line  2381 "VBNET.ATG" 
+#line  2384 "VBNET.ATG" 
 out group);
 				EndOfStmt();
 				Block(
-#line  2382 "VBNET.ATG" 
+#line  2385 "VBNET.ATG" 
 out embeddedStatement);
-				Expect(128);
+				Expect(129);
 				if (StartOf(27)) {
 					Expr(
-#line  2383 "VBNET.ATG" 
+#line  2386 "VBNET.ATG" 
 out expr);
 				}
 
-#line  2385 "VBNET.ATG" 
+#line  2388 "VBNET.ATG" 
 				statement = new ForeachStatement(typeReference, 
 				                                typeName,
 				                                group, 
@@ -5295,84 +5303,84 @@ out expr);
 				
 			} else if (StartOf(13)) {
 
-#line  2396 "VBNET.ATG" 
+#line  2399 "VBNET.ATG" 
 				Expression start = null;
 				Expression end = null;
 				Expression step = null;
 				Expression nextExpr = null;List<Expression> nextExpressions = null;
 				
 				LoopControlVariable(
-#line  2401 "VBNET.ATG" 
+#line  2404 "VBNET.ATG" 
 out typeReference, out typeName);
 				Expect(11);
 				Expr(
-#line  2402 "VBNET.ATG" 
+#line  2405 "VBNET.ATG" 
 out start);
-				Expect(172);
+				Expect(173);
 				Expr(
-#line  2402 "VBNET.ATG" 
+#line  2405 "VBNET.ATG" 
 out end);
-				if (la.kind == 162) {
+				if (la.kind == 163) {
 					lexer.NextToken();
 					Expr(
-#line  2402 "VBNET.ATG" 
+#line  2405 "VBNET.ATG" 
 out step);
 				}
 				EndOfStmt();
 				Block(
-#line  2403 "VBNET.ATG" 
+#line  2406 "VBNET.ATG" 
 out embeddedStatement);
-				Expect(128);
+				Expect(129);
 				if (StartOf(27)) {
 					Expr(
-#line  2406 "VBNET.ATG" 
+#line  2409 "VBNET.ATG" 
 out nextExpr);
 
-#line  2406 "VBNET.ATG" 
+#line  2409 "VBNET.ATG" 
 					nextExpressions = new List<Expression>(); nextExpressions.Add(nextExpr); 
 					while (la.kind == 12) {
 						lexer.NextToken();
 						Expr(
-#line  2407 "VBNET.ATG" 
+#line  2410 "VBNET.ATG" 
 out nextExpr);
 
-#line  2407 "VBNET.ATG" 
+#line  2410 "VBNET.ATG" 
 						nextExpressions.Add(nextExpr); 
 					}
 				}
 
-#line  2410 "VBNET.ATG" 
+#line  2413 "VBNET.ATG" 
 				statement = new ForNextStatement(typeReference, typeName, start, end, step, embeddedStatement, nextExpressions);
 				
-			} else SynErr(257);
+			} else SynErr(258);
 			break;
 		}
-		case 92: {
+		case 93: {
 			lexer.NextToken();
 			Expr(
-#line  2414 "VBNET.ATG" 
+#line  2417 "VBNET.ATG" 
 out expr);
 
-#line  2414 "VBNET.ATG" 
+#line  2417 "VBNET.ATG" 
 			statement = new ErrorStatement(expr); 
 			break;
 		}
-		case 151: {
+		case 152: {
 			lexer.NextToken();
 
-#line  2416 "VBNET.ATG" 
+#line  2419 "VBNET.ATG" 
 			bool isPreserve = false; 
-			if (la.kind == 144) {
+			if (la.kind == 145) {
 				lexer.NextToken();
 
-#line  2416 "VBNET.ATG" 
+#line  2419 "VBNET.ATG" 
 				isPreserve = true; 
 			}
 			ReDimClause(
-#line  2417 "VBNET.ATG" 
+#line  2420 "VBNET.ATG" 
 out expr);
 
-#line  2419 "VBNET.ATG" 
+#line  2422 "VBNET.ATG" 
 			ReDimStatement reDimStatement = new ReDimStatement(isPreserve);
 			statement = reDimStatement;
 			SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression);
@@ -5380,21 +5388,21 @@ out expr);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				ReDimClause(
-#line  2423 "VBNET.ATG" 
+#line  2426 "VBNET.ATG" 
 out expr);
 
-#line  2424 "VBNET.ATG" 
+#line  2427 "VBNET.ATG" 
 				SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); 
 			}
 			break;
 		}
-		case 91: {
+		case 92: {
 			lexer.NextToken();
 			Expr(
-#line  2428 "VBNET.ATG" 
+#line  2431 "VBNET.ATG" 
 out expr);
 
-#line  2429 "VBNET.ATG" 
+#line  2432 "VBNET.ATG" 
 			List<Expression> arrays = new List<Expression>();
 			if (expr != null) { arrays.Add(expr);}
 			EraseStatement eraseStatement = new EraseStatement(arrays);
@@ -5403,78 +5411,78 @@ out expr);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				Expr(
-#line  2434 "VBNET.ATG" 
+#line  2437 "VBNET.ATG" 
 out expr);
 
-#line  2434 "VBNET.ATG" 
+#line  2437 "VBNET.ATG" 
 				if (expr != null) { arrays.Add(expr); }
 			}
 
-#line  2435 "VBNET.ATG" 
+#line  2438 "VBNET.ATG" 
 			statement = eraseStatement; 
 			break;
 		}
-		case 163: {
+		case 164: {
 			lexer.NextToken();
 
-#line  2437 "VBNET.ATG" 
+#line  2440 "VBNET.ATG" 
 			statement = new StopStatement(); 
 			break;
 		}
-		case 106: {
+		case 107: {
 			lexer.NextToken();
 
-#line  2439 "VBNET.ATG" 
+#line  2442 "VBNET.ATG" 
 			Location ifStartLocation = t.Location; 
 			Expr(
-#line  2439 "VBNET.ATG" 
+#line  2442 "VBNET.ATG" 
 out expr);
-			if (la.kind == 170) {
+			if (la.kind == 171) {
 				lexer.NextToken();
 			}
 			if (la.kind == 1 || la.kind == 13) {
 				EndOfStmt();
 				Block(
-#line  2442 "VBNET.ATG" 
+#line  2445 "VBNET.ATG" 
 out embeddedStatement);
 
-#line  2444 "VBNET.ATG" 
+#line  2447 "VBNET.ATG" 
 				IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement);
 				ifStatement.StartLocation = ifStartLocation;
 				Location elseIfStart;
 				
-				while (la.kind == 87 || 
-#line  2450 "VBNET.ATG" 
+				while (la.kind == 88 || 
+#line  2453 "VBNET.ATG" 
 IsElseIf()) {
 					if (
-#line  2450 "VBNET.ATG" 
+#line  2453 "VBNET.ATG" 
 IsElseIf()) {
-						Expect(86);
+						Expect(87);
 
-#line  2450 "VBNET.ATG" 
+#line  2453 "VBNET.ATG" 
 						elseIfStart = t.Location; 
-						Expect(106);
+						Expect(107);
 					} else {
 						lexer.NextToken();
 
-#line  2451 "VBNET.ATG" 
+#line  2454 "VBNET.ATG" 
 						elseIfStart = t.Location; 
 					}
 
-#line  2453 "VBNET.ATG" 
+#line  2456 "VBNET.ATG" 
 					Expression condition = null; Statement block = null; 
 					Expr(
-#line  2454 "VBNET.ATG" 
+#line  2457 "VBNET.ATG" 
 out condition);
-					if (la.kind == 170) {
+					if (la.kind == 171) {
 						lexer.NextToken();
 					}
 					EndOfStmt();
 					Block(
-#line  2455 "VBNET.ATG" 
+#line  2458 "VBNET.ATG" 
 out block);
 
-#line  2457 "VBNET.ATG" 
+#line  2460 "VBNET.ATG" 
 					ElseIfSection elseIfSection = new ElseIfSection(condition, block);
 					elseIfSection.StartLocation = elseIfStart;
 					elseIfSection.EndLocation = t.Location;
@@ -5482,136 +5490,136 @@ out block);
 					ifStatement.ElseIfSections.Add(elseIfSection);
 					
 				}
-				if (la.kind == 86) {
+				if (la.kind == 87) {
 					lexer.NextToken();
 					EndOfStmt();
 					Block(
-#line  2466 "VBNET.ATG" 
+#line  2469 "VBNET.ATG" 
 out embeddedStatement);
 
-#line  2468 "VBNET.ATG" 
+#line  2471 "VBNET.ATG" 
 					ifStatement.FalseStatement.Add(embeddedStatement);
 					
 				}
-				Expect(88);
-				Expect(106);
+				Expect(89);
+				Expect(107);
 
-#line  2472 "VBNET.ATG" 
+#line  2475 "VBNET.ATG" 
 				ifStatement.EndLocation = t.Location;
 				statement = ifStatement;
 				
 			} else if (StartOf(36)) {
 
-#line  2477 "VBNET.ATG" 
+#line  2480 "VBNET.ATG" 
 				IfElseStatement ifStatement = new IfElseStatement(expr);
 				ifStatement.StartLocation = ifStartLocation;
 				
 				SingleLineStatementList(
-#line  2480 "VBNET.ATG" 
+#line  2483 "VBNET.ATG" 
 ifStatement.TrueStatement);
-				if (la.kind == 86) {
+				if (la.kind == 87) {
 					lexer.NextToken();
 					if (StartOf(36)) {
 						SingleLineStatementList(
-#line  2483 "VBNET.ATG" 
+#line  2486 "VBNET.ATG" 
 ifStatement.FalseStatement);
 					}
 				}
 
-#line  2485 "VBNET.ATG" 
+#line  2488 "VBNET.ATG" 
 				ifStatement.EndLocation = t.Location; statement = ifStatement; 
-			} else SynErr(258);
+			} else SynErr(259);
 			break;
 		}
-		case 155: {
+		case 156: {
 			lexer.NextToken();
-			if (la.kind == 57) {
+			if (la.kind == 58) {
 				lexer.NextToken();
 			}
 			Expr(
-#line  2488 "VBNET.ATG" 
+#line  2491 "VBNET.ATG" 
 out expr);
 			EndOfStmt();
 
-#line  2489 "VBNET.ATG" 
+#line  2492 "VBNET.ATG" 
 			List<SwitchSection> selectSections = new List<SwitchSection>();
 			Statement block = null;
 			
-			while (la.kind == 57) {
+			while (la.kind == 58) {
 
-#line  2493 "VBNET.ATG" 
+#line  2496 "VBNET.ATG" 
 				List<CaseLabel> caseClauses = null; Location caseLocation = la.Location; 
 				lexer.NextToken();
 				CaseClauses(
-#line  2494 "VBNET.ATG" 
+#line  2497 "VBNET.ATG" 
 out caseClauses);
 				if (
-#line  2494 "VBNET.ATG" 
+#line  2497 "VBNET.ATG" 
 IsNotStatementSeparator()) {
 					lexer.NextToken();
 				}
 				EndOfStmt();
 
-#line  2496 "VBNET.ATG" 
+#line  2499 "VBNET.ATG" 
 				SwitchSection selectSection = new SwitchSection(caseClauses);
 				selectSection.StartLocation = caseLocation;
 				
 				Block(
-#line  2499 "VBNET.ATG" 
+#line  2502 "VBNET.ATG" 
 out block);
 
-#line  2501 "VBNET.ATG" 
+#line  2504 "VBNET.ATG" 
 				selectSection.Children = block.Children;
 				selectSection.EndLocation = t.EndLocation;
 				selectSections.Add(selectSection);
 				
 			}
 
-#line  2506 "VBNET.ATG" 
+#line  2509 "VBNET.ATG" 
 			statement = new SwitchStatement(expr, selectSections); 
-			Expect(88);
-			Expect(155);
+			Expect(89);
+			Expect(156);
 			break;
 		}
-		case 135: {
+		case 136: {
 
-#line  2508 "VBNET.ATG" 
+#line  2511 "VBNET.ATG" 
 			OnErrorStatement onErrorStatement = null; 
 			OnErrorStatement(
-#line  2509 "VBNET.ATG" 
+#line  2512 "VBNET.ATG" 
 out onErrorStatement);
 
-#line  2509 "VBNET.ATG" 
+#line  2512 "VBNET.ATG" 
 			statement = onErrorStatement; 
 			break;
 		}
-		case 104: {
+		case 105: {
 
-#line  2510 "VBNET.ATG" 
+#line  2513 "VBNET.ATG" 
 			GotoStatement goToStatement = null; 
 			GotoStatement(
-#line  2511 "VBNET.ATG" 
+#line  2514 "VBNET.ATG" 
 out goToStatement);
 
-#line  2511 "VBNET.ATG" 
+#line  2514 "VBNET.ATG" 
 			statement = goToStatement; 
 			break;
 		}
-		case 153: {
+		case 154: {
 
-#line  2512 "VBNET.ATG" 
+#line  2515 "VBNET.ATG" 
 			ResumeStatement resumeStatement = null; 
 			ResumeStatement(
-#line  2513 "VBNET.ATG" 
+#line  2516 "VBNET.ATG" 
 out resumeStatement);
 
-#line  2513 "VBNET.ATG" 
+#line  2516 "VBNET.ATG" 
 			statement = resumeStatement; 
 			break;
 		}
-		case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 24: case 43: case 47: case 49: case 50: case 51: case 52: case 54: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 68: case 69: case 70: case 72: case 73: case 74: case 75: case 76: case 77: case 82: case 84: case 95: case 96: case 102: case 111: case 117: case 119: case 124: case 125: case 127: case 130: case 133: case 134: case 144: case 159: case 160: case 165: case 169: case 173: case 175: case 176: case 177: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 200: case 205: {
+		case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 25: case 44: case 48: case 50: case 51: case 52: case 53: case 55: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 69: case 70: case 71: case 73: case 74: case 75: case 76: case 77: case 78: case 83: case 85: case 96: case 97: case 103: case 112: case 118: case 120: case 125: case 126: case 128: case 131: case 134: case 135: case 145: case 160: case 161: case 166: case 170: case 174: case 176: case 177: case 178: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 200: case 201: case 206: {
 
-#line  2516 "VBNET.ATG" 
+#line  2519 "VBNET.ATG" 
 			Expression val = null;
 			AssignmentOperatorType op;
 			
@@ -5619,25 +5627,25 @@ out resumeStatement);
 			                        la.kind == Tokens.Not   || la.kind == Tokens.Times;
 			
 			SimpleExpr(
-#line  2522 "VBNET.ATG" 
+#line  2525 "VBNET.ATG" 
 out expr);
 			if (StartOf(37)) {
 				AssignmentOperator(
-#line  2524 "VBNET.ATG" 
+#line  2527 "VBNET.ATG" 
 out op);
 				Expr(
-#line  2524 "VBNET.ATG" 
+#line  2527 "VBNET.ATG" 
 out val);
 
-#line  2524 "VBNET.ATG" 
+#line  2527 "VBNET.ATG" 
 				expr = new AssignmentExpression(expr, op, val); 
-			} else if (la.kind == 1 || la.kind == 13 || la.kind == 86) {
+			} else if (la.kind == 1 || la.kind == 13 || la.kind == 87) {
 
-#line  2525 "VBNET.ATG" 
+#line  2528 "VBNET.ATG" 
 				if (mustBeAssignment) Error("error in assignment."); 
-			} else SynErr(259);
+			} else SynErr(260);
 
-#line  2528 "VBNET.ATG" 
+#line  2531 "VBNET.ATG" 
 			// a field reference expression that stands alone is a
 			// invocation expression without parantheses and arguments
 			if(expr is MemberReferenceExpression || expr is IdentifierExpression) {
@@ -5647,90 +5655,90 @@ out val);
 			
 			break;
 		}
-		case 56: {
+		case 57: {
 			lexer.NextToken();
 			SimpleExpr(
-#line  2535 "VBNET.ATG" 
+#line  2538 "VBNET.ATG" 
 out expr);
 
-#line  2535 "VBNET.ATG" 
+#line  2538 "VBNET.ATG" 
 			statement = new ExpressionStatement(expr); 
 			break;
 		}
-		case 189: {
+		case 190: {
 			lexer.NextToken();
 
-#line  2537 "VBNET.ATG" 
+#line  2540 "VBNET.ATG" 
 			Statement block;  
 			if (
-#line  2538 "VBNET.ATG" 
+#line  2541 "VBNET.ATG" 
 Peek(1).kind == Tokens.As) {
 
-#line  2539 "VBNET.ATG" 
+#line  2542 "VBNET.ATG" 
 				LocalVariableDeclaration resourceAquisition = new LocalVariableDeclaration(Modifiers.None); 
 				VariableDeclarator(
-#line  2540 "VBNET.ATG" 
+#line  2543 "VBNET.ATG" 
 resourceAquisition.Variables);
 				while (la.kind == 12) {
 					lexer.NextToken();
 					VariableDeclarator(
-#line  2542 "VBNET.ATG" 
+#line  2545 "VBNET.ATG" 
 resourceAquisition.Variables);
 				}
 				Block(
-#line  2544 "VBNET.ATG" 
+#line  2547 "VBNET.ATG" 
 out block);
 
-#line  2545 "VBNET.ATG" 
+#line  2548 "VBNET.ATG" 
 				statement = new UsingStatement(resourceAquisition, block); 
 			} else if (StartOf(27)) {
 				Expr(
-#line  2546 "VBNET.ATG" 
+#line  2549 "VBNET.ATG" 
 out expr);
 				Block(
-#line  2547 "VBNET.ATG" 
+#line  2550 "VBNET.ATG" 
 out block);
 
-#line  2548 "VBNET.ATG" 
+#line  2551 "VBNET.ATG" 
 				statement = new UsingStatement(new ExpressionStatement(expr), block); 
-			} else SynErr(260);
-			Expect(88);
-			Expect(189);
+			} else SynErr(261);
+			Expect(89);
+			Expect(190);
 			break;
 		}
-		default: SynErr(261); break;
+		default: SynErr(262); break;
 		}
 	}
 
 	void LocalDeclarationStatement(
-#line  2257 "VBNET.ATG" 
+#line  2260 "VBNET.ATG" 
 out Statement statement) {
 
-#line  2259 "VBNET.ATG" 
+#line  2262 "VBNET.ATG" 
 		ModifierList m = new ModifierList();
 		LocalVariableDeclaration localVariableDeclaration;
 		bool dimfound = false;
 		
-		while (la.kind == 71 || la.kind == 81 || la.kind == 161) {
-			if (la.kind == 71) {
+		while (la.kind == 72 || la.kind == 82 || la.kind == 162) {
+			if (la.kind == 72) {
 				lexer.NextToken();
 
-#line  2265 "VBNET.ATG" 
+#line  2268 "VBNET.ATG" 
 				m.Add(Modifiers.Const, t.Location); 
-			} else if (la.kind == 161) {
+			} else if (la.kind == 162) {
 				lexer.NextToken();
 
-#line  2266 "VBNET.ATG" 
+#line  2269 "VBNET.ATG" 
 				m.Add(Modifiers.Static, t.Location); 
 			} else {
 				lexer.NextToken();
 
-#line  2267 "VBNET.ATG" 
+#line  2270 "VBNET.ATG" 
 				dimfound = true; 
 			}
 		}
 
-#line  2270 "VBNET.ATG" 
+#line  2273 "VBNET.ATG" 
 		if(dimfound && (m.Modifier & Modifiers.Const) != 0) {
 		Error("Dim is not allowed on constants.");
 		}
@@ -5743,135 +5751,135 @@ out Statement statement) {
 		localVariableDeclaration.StartLocation = t.Location;
 		
 		VariableDeclarator(
-#line  2281 "VBNET.ATG" 
+#line  2284 "VBNET.ATG" 
 localVariableDeclaration.Variables);
 		while (la.kind == 12) {
 			lexer.NextToken();
 			VariableDeclarator(
-#line  2282 "VBNET.ATG" 
+#line  2285 "VBNET.ATG" 
 localVariableDeclaration.Variables);
 		}
 
-#line  2284 "VBNET.ATG" 
+#line  2287 "VBNET.ATG" 
 		statement = localVariableDeclaration;
 		
 	}
 
 	void TryStatement(
-#line  2751 "VBNET.ATG" 
+#line  2754 "VBNET.ATG" 
 out Statement tryStatement) {
 
-#line  2753 "VBNET.ATG" 
+#line  2756 "VBNET.ATG" 
 		Statement blockStmt = null, finallyStmt = null;List<CatchClause> catchClauses = null;
 		
-		Expect(174);
+		Expect(175);
 		EndOfStmt();
 		Block(
-#line  2756 "VBNET.ATG" 
+#line  2759 "VBNET.ATG" 
 out blockStmt);
-		if (la.kind == 58 || la.kind == 88 || la.kind == 97) {
+		if (la.kind == 59 || la.kind == 89 || la.kind == 98) {
 			CatchClauses(
-#line  2757 "VBNET.ATG" 
+#line  2760 "VBNET.ATG" 
 out catchClauses);
 		}
-		if (la.kind == 97) {
+		if (la.kind == 98) {
 			lexer.NextToken();
 			EndOfStmt();
 			Block(
-#line  2758 "VBNET.ATG" 
+#line  2761 "VBNET.ATG" 
 out finallyStmt);
 		}
-		Expect(88);
-		Expect(174);
+		Expect(89);
+		Expect(175);
 
-#line  2761 "VBNET.ATG" 
+#line  2764 "VBNET.ATG" 
 		tryStatement = new TryCatchStatement(blockStmt, catchClauses, finallyStmt);
 		
 	}
 
 	void WithStatement(
-#line  2731 "VBNET.ATG" 
+#line  2734 "VBNET.ATG" 
 out Statement withStatement) {
 
-#line  2733 "VBNET.ATG" 
+#line  2736 "VBNET.ATG" 
 		Statement blockStmt = null;
 		Expression expr = null;
 		
-		Expect(182);
+		Expect(183);
 
-#line  2736 "VBNET.ATG" 
+#line  2739 "VBNET.ATG" 
 		Location start = t.Location; 
 		Expr(
-#line  2737 "VBNET.ATG" 
+#line  2740 "VBNET.ATG" 
 out expr);
 		EndOfStmt();
 
-#line  2739 "VBNET.ATG" 
+#line  2742 "VBNET.ATG" 
 		withStatement = new WithStatement(expr);
 		withStatement.StartLocation = start;
 		
 		Block(
-#line  2742 "VBNET.ATG" 
+#line  2745 "VBNET.ATG" 
 out blockStmt);
 
-#line  2744 "VBNET.ATG" 
+#line  2747 "VBNET.ATG" 
 		((WithStatement)withStatement).Body = (BlockStatement)blockStmt;
 		
-		Expect(88);
-		Expect(182);
+		Expect(89);
+		Expect(183);
 
-#line  2747 "VBNET.ATG" 
+#line  2750 "VBNET.ATG" 
 		withStatement.EndLocation = t.Location; 
 	}
 
 	void WhileOrUntil(
-#line  2724 "VBNET.ATG" 
+#line  2727 "VBNET.ATG" 
 out ConditionType conditionType) {
 
-#line  2725 "VBNET.ATG" 
+#line  2728 "VBNET.ATG" 
 		conditionType = ConditionType.None; 
-		if (la.kind == 181) {
+		if (la.kind == 182) {
 			lexer.NextToken();
 
-#line  2726 "VBNET.ATG" 
+#line  2729 "VBNET.ATG" 
 			conditionType = ConditionType.While; 
-		} else if (la.kind == 177) {
+		} else if (la.kind == 178) {
 			lexer.NextToken();
 
-#line  2727 "VBNET.ATG" 
+#line  2730 "VBNET.ATG" 
 			conditionType = ConditionType.Until; 
-		} else SynErr(262);
+		} else SynErr(263);
 	}
 
 	void LoopControlVariable(
-#line  2567 "VBNET.ATG" 
+#line  2570 "VBNET.ATG" 
 out TypeReference type, out string name) {
 
-#line  2568 "VBNET.ATG" 
+#line  2571 "VBNET.ATG" 
 		ArrayList arrayModifiers = null;
 		type = null;
 		
 		Qualident(
-#line  2572 "VBNET.ATG" 
+#line  2575 "VBNET.ATG" 
 out name);
 		if (
-#line  2573 "VBNET.ATG" 
+#line  2576 "VBNET.ATG" 
 IsDims()) {
 			ArrayTypeModifiers(
-#line  2573 "VBNET.ATG" 
+#line  2576 "VBNET.ATG" 
 out arrayModifiers);
 		}
-		if (la.kind == 48) {
+		if (la.kind == 49) {
 			lexer.NextToken();
 			TypeName(
-#line  2574 "VBNET.ATG" 
+#line  2577 "VBNET.ATG" 
 out type);
 
-#line  2574 "VBNET.ATG" 
+#line  2577 "VBNET.ATG" 
 			if (name.IndexOf('.') > 0) { Error("No type def for 'for each' member indexer allowed."); } 
 		}
 
-#line  2576 "VBNET.ATG" 
+#line  2579 "VBNET.ATG" 
 		if (type != null) {
 		if(type.RankSpecifier != null && arrayModifiers != null) {
 			Error("array rank only allowed one time");
@@ -5883,111 +5891,111 @@ out type);
 	}
 
 	void ReDimClause(
-#line  2646 "VBNET.ATG" 
+#line  2649 "VBNET.ATG" 
 out Expression expr) {
 		SimpleNonInvocationExpression(
-#line  2648 "VBNET.ATG" 
+#line  2651 "VBNET.ATG" 
 out expr);
 		ReDimClauseInternal(
-#line  2649 "VBNET.ATG" 
+#line  2652 "VBNET.ATG" 
 ref expr);
 	}
 
 	void SingleLineStatementList(
-#line  2553 "VBNET.ATG" 
+#line  2556 "VBNET.ATG" 
 List<Statement> list) {
 
-#line  2554 "VBNET.ATG" 
+#line  2557 "VBNET.ATG" 
 		Statement embeddedStatement = null; 
-		if (la.kind == 88) {
+		if (la.kind == 89) {
 			lexer.NextToken();
 
-#line  2556 "VBNET.ATG" 
+#line  2559 "VBNET.ATG" 
 			embeddedStatement = new EndStatement(); 
 		} else if (StartOf(34)) {
 			EmbeddedStatement(
-#line  2557 "VBNET.ATG" 
+#line  2560 "VBNET.ATG" 
 out embeddedStatement);
-		} else SynErr(263);
+		} else SynErr(264);
 
-#line  2558 "VBNET.ATG" 
+#line  2561 "VBNET.ATG" 
 		if (embeddedStatement != null) list.Add(embeddedStatement); 
 		while (la.kind == 13) {
 			lexer.NextToken();
 			while (la.kind == 13) {
 				lexer.NextToken();
 			}
-			if (la.kind == 88) {
+			if (la.kind == 89) {
 				lexer.NextToken();
 
-#line  2560 "VBNET.ATG" 
+#line  2563 "VBNET.ATG" 
 				embeddedStatement = new EndStatement(); 
 			} else if (StartOf(34)) {
 				EmbeddedStatement(
-#line  2561 "VBNET.ATG" 
+#line  2564 "VBNET.ATG" 
 out embeddedStatement);
-			} else SynErr(264);
+			} else SynErr(265);
 
-#line  2562 "VBNET.ATG" 
+#line  2565 "VBNET.ATG" 
 			if (embeddedStatement != null) list.Add(embeddedStatement); 
 		}
 	}
 
 	void CaseClauses(
-#line  2684 "VBNET.ATG" 
+#line  2687 "VBNET.ATG" 
 out List<CaseLabel> caseClauses) {
 
-#line  2686 "VBNET.ATG" 
+#line  2689 "VBNET.ATG" 
 		caseClauses = new List<CaseLabel>();
 		CaseLabel caseClause = null;
 		
 		CaseClause(
-#line  2689 "VBNET.ATG" 
+#line  2692 "VBNET.ATG" 
 out caseClause);
 
-#line  2689 "VBNET.ATG" 
+#line  2692 "VBNET.ATG" 
 		if (caseClause != null) { caseClauses.Add(caseClause); } 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			CaseClause(
-#line  2690 "VBNET.ATG" 
+#line  2693 "VBNET.ATG" 
 out caseClause);
 
-#line  2690 "VBNET.ATG" 
+#line  2693 "VBNET.ATG" 
 			if (caseClause != null) { caseClauses.Add(caseClause); } 
 		}
 	}
 
 	void OnErrorStatement(
-#line  2587 "VBNET.ATG" 
+#line  2590 "VBNET.ATG" 
 out OnErrorStatement stmt) {
 
-#line  2589 "VBNET.ATG" 
+#line  2592 "VBNET.ATG" 
 		stmt = null;
 		GotoStatement goToStatement = null;
 		
-		Expect(135);
-		Expect(92);
+		Expect(136);
+		Expect(93);
 		if (
-#line  2595 "VBNET.ATG" 
+#line  2598 "VBNET.ATG" 
 IsNegativeLabelName()) {
-			Expect(104);
+			Expect(105);
 			Expect(15);
 			Expect(5);
 
-#line  2597 "VBNET.ATG" 
+#line  2600 "VBNET.ATG" 
 			long intLabel = Int64.Parse(t.val);
 			if(intLabel != 1) {
 				Error("invalid label in on error statement.");
 			}
 			stmt = new OnErrorStatement(new GotoStatement((intLabel * -1).ToString()));
 			
-		} else if (la.kind == 104) {
+		} else if (la.kind == 105) {
 			GotoStatement(
-#line  2603 "VBNET.ATG" 
+#line  2606 "VBNET.ATG" 
 out goToStatement);
 
-#line  2605 "VBNET.ATG" 
+#line  2608 "VBNET.ATG" 
 			string val = goToStatement.Label;
 			
 			// if value is numeric, make sure that is 0
@@ -6000,92 +6008,92 @@ out goToStatement);
 			}
 			stmt = new OnErrorStatement(goToStatement);
 			
-		} else if (la.kind == 153) {
+		} else if (la.kind == 154) {
 			lexer.NextToken();
-			Expect(128);
+			Expect(129);
 
-#line  2619 "VBNET.ATG" 
+#line  2622 "VBNET.ATG" 
 			stmt = new OnErrorStatement(new ResumeStatement(true));
 			
-		} else SynErr(265);
+		} else SynErr(266);
 	}
 
 	void GotoStatement(
-#line  2625 "VBNET.ATG" 
+#line  2628 "VBNET.ATG" 
 out GotoStatement goToStatement) {
 
-#line  2627 "VBNET.ATG" 
+#line  2630 "VBNET.ATG" 
 		string label = String.Empty;
 		
-		Expect(104);
+		Expect(105);
 		LabelName(
-#line  2630 "VBNET.ATG" 
+#line  2633 "VBNET.ATG" 
 out label);
 
-#line  2632 "VBNET.ATG" 
+#line  2635 "VBNET.ATG" 
 		goToStatement = new GotoStatement(label);
 		
 	}
 
 	void ResumeStatement(
-#line  2673 "VBNET.ATG" 
+#line  2676 "VBNET.ATG" 
 out ResumeStatement resumeStatement) {
 
-#line  2675 "VBNET.ATG" 
+#line  2678 "VBNET.ATG" 
 		resumeStatement = null;
 		string label = String.Empty;
 		
 		if (
-#line  2678 "VBNET.ATG" 
+#line  2681 "VBNET.ATG" 
 IsResumeNext()) {
-			Expect(153);
-			Expect(128);
+			Expect(154);
+			Expect(129);
 
-#line  2679 "VBNET.ATG" 
+#line  2682 "VBNET.ATG" 
 			resumeStatement = new ResumeStatement(true); 
-		} else if (la.kind == 153) {
+		} else if (la.kind == 154) {
 			lexer.NextToken();
 			if (StartOf(38)) {
 				LabelName(
-#line  2680 "VBNET.ATG" 
+#line  2683 "VBNET.ATG" 
 out label);
 			}
 
-#line  2680 "VBNET.ATG" 
+#line  2683 "VBNET.ATG" 
 			resumeStatement = new ResumeStatement(label); 
-		} else SynErr(266);
+		} else SynErr(267);
 	}
 
 	void ReDimClauseInternal(
-#line  2652 "VBNET.ATG" 
+#line  2655 "VBNET.ATG" 
 ref Expression expr) {
 
-#line  2653 "VBNET.ATG" 
+#line  2656 "VBNET.ATG" 
 		List<Expression> arguments; bool canBeNormal; bool canBeRedim; string name; 
 		while (la.kind == 10 || 
-#line  2656 "VBNET.ATG" 
+#line  2659 "VBNET.ATG" 
 la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) {
 			if (la.kind == 10) {
 				lexer.NextToken();
 				IdentifierOrKeyword(
-#line  2655 "VBNET.ATG" 
+#line  2658 "VBNET.ATG" 
 out name);
 
-#line  2655 "VBNET.ATG" 
+#line  2658 "VBNET.ATG" 
 				expr = new MemberReferenceExpression(expr, name); 
 			} else {
 				InvocationExpression(
-#line  2657 "VBNET.ATG" 
+#line  2660 "VBNET.ATG" 
 ref expr);
 			}
 		}
-		Expect(24);
+		Expect(25);
 		NormalOrReDimArgumentList(
-#line  2660 "VBNET.ATG" 
+#line  2663 "VBNET.ATG" 
 out arguments, out canBeNormal, out canBeRedim);
-		Expect(25);
+		Expect(26);
 
-#line  2662 "VBNET.ATG" 
+#line  2665 "VBNET.ATG" 
 		expr = new InvocationExpression(expr, arguments);
 		if (canBeRedim == false || canBeNormal && (la.kind == Tokens.Dot || la.kind == Tokens.OpenParenthesis)) {
 			if (this.Errors.Count == 0) {
@@ -6097,130 +6105,130 @@ out arguments, out canBeNormal, out canBeRedim);
 	}
 
 	void CaseClause(
-#line  2694 "VBNET.ATG" 
+#line  2697 "VBNET.ATG" 
 out CaseLabel caseClause) {
 
-#line  2696 "VBNET.ATG" 
+#line  2699 "VBNET.ATG" 
 		Expression expr = null;
 		Expression sexpr = null;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		caseClause = null;
 		
-		if (la.kind == 86) {
+		if (la.kind == 87) {
 			lexer.NextToken();
 
-#line  2702 "VBNET.ATG" 
+#line  2705 "VBNET.ATG" 
 			caseClause = new CaseLabel(); 
 		} else if (StartOf(39)) {
-			if (la.kind == 113) {
+			if (la.kind == 114) {
 				lexer.NextToken();
 			}
 			switch (la.kind) {
-			case 27: {
+			case 28: {
 				lexer.NextToken();
 
-#line  2706 "VBNET.ATG" 
+#line  2709 "VBNET.ATG" 
 				op = BinaryOperatorType.LessThan; 
 				break;
 			}
-			case 26: {
+			case 27: {
 				lexer.NextToken();
 
-#line  2707 "VBNET.ATG" 
+#line  2710 "VBNET.ATG" 
 				op = BinaryOperatorType.GreaterThan; 
 				break;
 			}
-			case 30: {
+			case 31: {
 				lexer.NextToken();
 
-#line  2708 "VBNET.ATG" 
+#line  2711 "VBNET.ATG" 
 				op = BinaryOperatorType.LessThanOrEqual; 
 				break;
 			}
-			case 29: {
+			case 30: {
 				lexer.NextToken();
 
-#line  2709 "VBNET.ATG" 
+#line  2712 "VBNET.ATG" 
 				op = BinaryOperatorType.GreaterThanOrEqual; 
 				break;
 			}
 			case 11: {
 				lexer.NextToken();
 
-#line  2710 "VBNET.ATG" 
+#line  2713 "VBNET.ATG" 
 				op = BinaryOperatorType.Equality; 
 				break;
 			}
-			case 28: {
+			case 29: {
 				lexer.NextToken();
 
-#line  2711 "VBNET.ATG" 
+#line  2714 "VBNET.ATG" 
 				op = BinaryOperatorType.InEquality; 
 				break;
 			}
-			default: SynErr(267); break;
+			default: SynErr(268); break;
 			}
 			Expr(
-#line  2713 "VBNET.ATG" 
+#line  2716 "VBNET.ATG" 
 out expr);
 
-#line  2715 "VBNET.ATG" 
+#line  2718 "VBNET.ATG" 
 			caseClause = new CaseLabel(op, expr);
 			
 		} else if (StartOf(27)) {
 			Expr(
-#line  2717 "VBNET.ATG" 
+#line  2720 "VBNET.ATG" 
 out expr);
-			if (la.kind == 172) {
+			if (la.kind == 173) {
 				lexer.NextToken();
 				Expr(
-#line  2717 "VBNET.ATG" 
+#line  2720 "VBNET.ATG" 
 out sexpr);
 			}
 
-#line  2719 "VBNET.ATG" 
+#line  2722 "VBNET.ATG" 
 			caseClause = new CaseLabel(expr, sexpr);
 			
-		} else SynErr(268);
+		} else SynErr(269);
 	}
 
 	void CatchClauses(
-#line  2766 "VBNET.ATG" 
+#line  2769 "VBNET.ATG" 
 out List<CatchClause> catchClauses) {
 
-#line  2768 "VBNET.ATG" 
+#line  2771 "VBNET.ATG" 
 		catchClauses = new List<CatchClause>();
 		TypeReference type = null;
 		Statement blockStmt = null;
 		Expression expr = null;
 		string name = String.Empty;
 		
-		while (la.kind == 58) {
+		while (la.kind == 59) {
 			lexer.NextToken();
 			if (StartOf(13)) {
 				Identifier();
 
-#line  2776 "VBNET.ATG" 
+#line  2779 "VBNET.ATG" 
 				name = t.val; 
-				if (la.kind == 48) {
+				if (la.kind == 49) {
 					lexer.NextToken();
 					TypeName(
-#line  2776 "VBNET.ATG" 
+#line  2779 "VBNET.ATG" 
 out type);
 				}
 			}
-			if (la.kind == 180) {
+			if (la.kind == 181) {
 				lexer.NextToken();
 				Expr(
-#line  2777 "VBNET.ATG" 
+#line  2780 "VBNET.ATG" 
 out expr);
 			}
 			EndOfStmt();
 			Block(
-#line  2779 "VBNET.ATG" 
+#line  2782 "VBNET.ATG" 
 out blockStmt);
 
-#line  2780 "VBNET.ATG" 
+#line  2783 "VBNET.ATG" 
 			catchClauses.Add(new CatchClause(type, name, blockStmt, expr)); 
 		}
 	}
@@ -6259,253 +6267,254 @@ out blockStmt);
 			case 19: s = "\"&\" expected"; break;
 			case 20: s = "\"^\" expected"; break;
 			case 21: s = "\"?\" expected"; break;
-			case 22: s = "\"{\" expected"; break;
-			case 23: s = "\"}\" expected"; break;
-			case 24: s = "\"(\" expected"; break;
-			case 25: s = "\")\" expected"; break;
-			case 26: s = "\">\" expected"; break;
-			case 27: s = "\"<\" expected"; break;
-			case 28: s = "\"<>\" expected"; break;
-			case 29: s = "\">=\" expected"; break;
-			case 30: s = "\"<=\" expected"; break;
-			case 31: s = "\"<<\" expected"; break;
-			case 32: s = "\">>\" expected"; break;
-			case 33: s = "\"+=\" expected"; break;
-			case 34: s = "\"^=\" expected"; break;
-			case 35: s = "\"-=\" expected"; break;
-			case 36: s = "\"*=\" expected"; break;
-			case 37: s = "\"/=\" expected"; break;
-			case 38: s = "\"\\\\=\" expected"; break;
-			case 39: s = "\"<<=\" expected"; break;
-			case 40: s = "\">>=\" expected"; break;
-			case 41: s = "\"&=\" expected"; break;
-			case 42: s = "\"AddHandler\" expected"; break;
-			case 43: s = "\"AddressOf\" expected"; break;
-			case 44: s = "\"Alias\" expected"; break;
-			case 45: s = "\"And\" expected"; break;
-			case 46: s = "\"AndAlso\" expected"; break;
-			case 47: s = "\"Ansi\" expected"; break;
-			case 48: s = "\"As\" expected"; break;
-			case 49: s = "\"Assembly\" expected"; break;
-			case 50: s = "\"Auto\" expected"; break;
-			case 51: s = "\"Binary\" expected"; break;
-			case 52: s = "\"Boolean\" expected"; break;
-			case 53: s = "\"ByRef\" expected"; break;
-			case 54: s = "\"Byte\" expected"; break;
-			case 55: s = "\"ByVal\" expected"; break;
-			case 56: s = "\"Call\" expected"; break;
-			case 57: s = "\"Case\" expected"; break;
-			case 58: s = "\"Catch\" expected"; break;
-			case 59: s = "\"CBool\" expected"; break;
-			case 60: s = "\"CByte\" expected"; break;
-			case 61: s = "\"CChar\" expected"; break;
-			case 62: s = "\"CDate\" expected"; break;
-			case 63: s = "\"CDbl\" expected"; break;
-			case 64: s = "\"CDec\" expected"; break;
-			case 65: s = "\"Char\" expected"; break;
-			case 66: s = "\"CInt\" expected"; break;
-			case 67: s = "\"Class\" expected"; break;
-			case 68: s = "\"CLng\" expected"; break;
-			case 69: s = "\"CObj\" expected"; break;
-			case 70: s = "\"Compare\" expected"; break;
-			case 71: s = "\"Const\" expected"; break;
-			case 72: s = "\"CShort\" expected"; break;
-			case 73: s = "\"CSng\" expected"; break;
-			case 74: s = "\"CStr\" expected"; break;
-			case 75: s = "\"CType\" expected"; break;
-			case 76: s = "\"Date\" expected"; break;
-			case 77: s = "\"Decimal\" expected"; break;
-			case 78: s = "\"Declare\" expected"; break;
-			case 79: s = "\"Default\" expected"; break;
-			case 80: s = "\"Delegate\" expected"; break;
-			case 81: s = "\"Dim\" expected"; break;
-			case 82: s = "\"DirectCast\" expected"; break;
-			case 83: s = "\"Do\" expected"; break;
-			case 84: s = "\"Double\" expected"; break;
-			case 85: s = "\"Each\" expected"; break;
-			case 86: s = "\"Else\" expected"; break;
-			case 87: s = "\"ElseIf\" expected"; break;
-			case 88: s = "\"End\" expected"; break;
-			case 89: s = "\"EndIf\" expected"; break;
-			case 90: s = "\"Enum\" expected"; break;
-			case 91: s = "\"Erase\" expected"; break;
-			case 92: s = "\"Error\" expected"; break;
-			case 93: s = "\"Event\" expected"; break;
-			case 94: s = "\"Exit\" expected"; break;
-			case 95: s = "\"Explicit\" expected"; break;
-			case 96: s = "\"False\" expected"; break;
-			case 97: s = "\"Finally\" expected"; break;
-			case 98: s = "\"For\" expected"; break;
-			case 99: s = "\"Friend\" expected"; break;
-			case 100: s = "\"Function\" expected"; break;
-			case 101: s = "\"Get\" expected"; break;
-			case 102: s = "\"GetType\" expected"; break;
-			case 103: s = "\"GoSub\" expected"; break;
-			case 104: s = "\"GoTo\" expected"; break;
-			case 105: s = "\"Handles\" expected"; break;
-			case 106: s = "\"If\" expected"; break;
-			case 107: s = "\"Implements\" expected"; break;
-			case 108: s = "\"Imports\" expected"; break;
-			case 109: s = "\"In\" expected"; break;
-			case 110: s = "\"Inherits\" expected"; break;
-			case 111: s = "\"Integer\" expected"; break;
-			case 112: s = "\"Interface\" expected"; break;
-			case 113: s = "\"Is\" expected"; break;
-			case 114: s = "\"Let\" expected"; break;
-			case 115: s = "\"Lib\" expected"; break;
-			case 116: s = "\"Like\" expected"; break;
-			case 117: s = "\"Long\" expected"; break;
-			case 118: s = "\"Loop\" expected"; break;
-			case 119: s = "\"Me\" expected"; break;
-			case 120: s = "\"Mod\" expected"; break;
-			case 121: s = "\"Module\" expected"; break;
-			case 122: s = "\"MustInherit\" expected"; break;
-			case 123: s = "\"MustOverride\" expected"; break;
-			case 124: s = "\"MyBase\" expected"; break;
-			case 125: s = "\"MyClass\" expected"; break;
-			case 126: s = "\"Namespace\" expected"; break;
-			case 127: s = "\"New\" expected"; break;
-			case 128: s = "\"Next\" expected"; break;
-			case 129: s = "\"Not\" expected"; break;
-			case 130: s = "\"Nothing\" expected"; break;
-			case 131: s = "\"NotInheritable\" expected"; break;
-			case 132: s = "\"NotOverridable\" expected"; break;
-			case 133: s = "\"Object\" expected"; break;
-			case 134: s = "\"Off\" expected"; break;
-			case 135: s = "\"On\" expected"; break;
-			case 136: s = "\"Option\" expected"; break;
-			case 137: s = "\"Optional\" expected"; break;
-			case 138: s = "\"Or\" expected"; break;
-			case 139: s = "\"OrElse\" expected"; break;
-			case 140: s = "\"Overloads\" expected"; break;
-			case 141: s = "\"Overridable\" expected"; break;
-			case 142: s = "\"Overrides\" expected"; break;
-			case 143: s = "\"ParamArray\" expected"; break;
-			case 144: s = "\"Preserve\" expected"; break;
-			case 145: s = "\"Private\" expected"; break;
-			case 146: s = "\"Property\" expected"; break;
-			case 147: s = "\"Protected\" expected"; break;
-			case 148: s = "\"Public\" expected"; break;
-			case 149: s = "\"RaiseEvent\" expected"; break;
-			case 150: s = "\"ReadOnly\" expected"; break;
-			case 151: s = "\"ReDim\" expected"; break;
-			case 152: s = "\"RemoveHandler\" expected"; break;
-			case 153: s = "\"Resume\" expected"; break;
-			case 154: s = "\"Return\" expected"; break;
-			case 155: s = "\"Select\" expected"; break;
-			case 156: s = "\"Set\" expected"; break;
-			case 157: s = "\"Shadows\" expected"; break;
-			case 158: s = "\"Shared\" expected"; break;
-			case 159: s = "\"Short\" expected"; break;
-			case 160: s = "\"Single\" expected"; break;
-			case 161: s = "\"Static\" expected"; break;
-			case 162: s = "\"Step\" expected"; break;
-			case 163: s = "\"Stop\" expected"; break;
-			case 164: s = "\"Strict\" expected"; break;
-			case 165: s = "\"String\" expected"; break;
-			case 166: s = "\"Structure\" expected"; break;
-			case 167: s = "\"Sub\" expected"; break;
-			case 168: s = "\"SyncLock\" expected"; break;
-			case 169: s = "\"Text\" expected"; break;
-			case 170: s = "\"Then\" expected"; break;
-			case 171: s = "\"Throw\" expected"; break;
-			case 172: s = "\"To\" expected"; break;
-			case 173: s = "\"True\" expected"; break;
-			case 174: s = "\"Try\" expected"; break;
-			case 175: s = "\"TypeOf\" expected"; break;
-			case 176: s = "\"Unicode\" expected"; break;
-			case 177: s = "\"Until\" expected"; break;
-			case 178: s = "\"Variant\" expected"; break;
-			case 179: s = "\"Wend\" expected"; break;
-			case 180: s = "\"When\" expected"; break;
-			case 181: s = "\"While\" expected"; break;
-			case 182: s = "\"With\" expected"; break;
-			case 183: s = "\"WithEvents\" expected"; break;
-			case 184: s = "\"WriteOnly\" expected"; break;
-			case 185: s = "\"Xor\" expected"; break;
-			case 186: s = "\"Rem\" expected"; break;
-			case 187: s = "\"Continue\" expected"; break;
-			case 188: s = "\"Operator\" expected"; break;
-			case 189: s = "\"Using\" expected"; break;
-			case 190: s = "\"IsNot\" expected"; break;
-			case 191: s = "\"SByte\" expected"; break;
-			case 192: s = "\"UInteger\" expected"; break;
-			case 193: s = "\"ULong\" expected"; break;
-			case 194: s = "\"UShort\" expected"; break;
-			case 195: s = "\"CSByte\" expected"; break;
-			case 196: s = "\"CUShort\" expected"; break;
-			case 197: s = "\"CUInt\" expected"; break;
-			case 198: s = "\"CULng\" expected"; break;
-			case 199: s = "\"Global\" expected"; break;
-			case 200: s = "\"TryCast\" expected"; break;
-			case 201: s = "\"Of\" expected"; break;
-			case 202: s = "\"Narrowing\" expected"; break;
-			case 203: s = "\"Widening\" expected"; break;
-			case 204: s = "\"Partial\" expected"; break;
-			case 205: s = "\"Custom\" expected"; break;
-			case 206: s = "??? expected"; break;
-			case 207: s = "invalid OptionStmt"; break;
+			case 22: s = "\"!\" expected"; break;
+			case 23: s = "\"{\" expected"; break;
+			case 24: s = "\"}\" expected"; break;
+			case 25: s = "\"(\" expected"; break;
+			case 26: s = "\")\" expected"; break;
+			case 27: s = "\">\" expected"; break;
+			case 28: s = "\"<\" expected"; break;
+			case 29: s = "\"<>\" expected"; break;
+			case 30: s = "\">=\" expected"; break;
+			case 31: s = "\"<=\" expected"; break;
+			case 32: s = "\"<<\" expected"; break;
+			case 33: s = "\">>\" expected"; break;
+			case 34: s = "\"+=\" expected"; break;
+			case 35: s = "\"^=\" expected"; break;
+			case 36: s = "\"-=\" expected"; break;
+			case 37: s = "\"*=\" expected"; break;
+			case 38: s = "\"/=\" expected"; break;
+			case 39: s = "\"\\\\=\" expected"; break;
+			case 40: s = "\"<<=\" expected"; break;
+			case 41: s = "\">>=\" expected"; break;
+			case 42: s = "\"&=\" expected"; break;
+			case 43: s = "\"AddHandler\" expected"; break;
+			case 44: s = "\"AddressOf\" expected"; break;
+			case 45: s = "\"Alias\" expected"; break;
+			case 46: s = "\"And\" expected"; break;
+			case 47: s = "\"AndAlso\" expected"; break;
+			case 48: s = "\"Ansi\" expected"; break;
+			case 49: s = "\"As\" expected"; break;
+			case 50: s = "\"Assembly\" expected"; break;
+			case 51: s = "\"Auto\" expected"; break;
+			case 52: s = "\"Binary\" expected"; break;
+			case 53: s = "\"Boolean\" expected"; break;
+			case 54: s = "\"ByRef\" expected"; break;
+			case 55: s = "\"Byte\" expected"; break;
+			case 56: s = "\"ByVal\" expected"; break;
+			case 57: s = "\"Call\" expected"; break;
+			case 58: s = "\"Case\" expected"; break;
+			case 59: s = "\"Catch\" expected"; break;
+			case 60: s = "\"CBool\" expected"; break;
+			case 61: s = "\"CByte\" expected"; break;
+			case 62: s = "\"CChar\" expected"; break;
+			case 63: s = "\"CDate\" expected"; break;
+			case 64: s = "\"CDbl\" expected"; break;
+			case 65: s = "\"CDec\" expected"; break;
+			case 66: s = "\"Char\" expected"; break;
+			case 67: s = "\"CInt\" expected"; break;
+			case 68: s = "\"Class\" expected"; break;
+			case 69: s = "\"CLng\" expected"; break;
+			case 70: s = "\"CObj\" expected"; break;
+			case 71: s = "\"Compare\" expected"; break;
+			case 72: s = "\"Const\" expected"; break;
+			case 73: s = "\"CShort\" expected"; break;
+			case 74: s = "\"CSng\" expected"; break;
+			case 75: s = "\"CStr\" expected"; break;
+			case 76: s = "\"CType\" expected"; break;
+			case 77: s = "\"Date\" expected"; break;
+			case 78: s = "\"Decimal\" expected"; break;
+			case 79: s = "\"Declare\" expected"; break;
+			case 80: s = "\"Default\" expected"; break;
+			case 81: s = "\"Delegate\" expected"; break;
+			case 82: s = "\"Dim\" expected"; break;
+			case 83: s = "\"DirectCast\" expected"; break;
+			case 84: s = "\"Do\" expected"; break;
+			case 85: s = "\"Double\" expected"; break;
+			case 86: s = "\"Each\" expected"; break;
+			case 87: s = "\"Else\" expected"; break;
+			case 88: s = "\"ElseIf\" expected"; break;
+			case 89: s = "\"End\" expected"; break;
+			case 90: s = "\"EndIf\" expected"; break;
+			case 91: s = "\"Enum\" expected"; break;
+			case 92: s = "\"Erase\" expected"; break;
+			case 93: s = "\"Error\" expected"; break;
+			case 94: s = "\"Event\" expected"; break;
+			case 95: s = "\"Exit\" expected"; break;
+			case 96: s = "\"Explicit\" expected"; break;
+			case 97: s = "\"False\" expected"; break;
+			case 98: s = "\"Finally\" expected"; break;
+			case 99: s = "\"For\" expected"; break;
+			case 100: s = "\"Friend\" expected"; break;
+			case 101: s = "\"Function\" expected"; break;
+			case 102: s = "\"Get\" expected"; break;
+			case 103: s = "\"GetType\" expected"; break;
+			case 104: s = "\"GoSub\" expected"; break;
+			case 105: s = "\"GoTo\" expected"; break;
+			case 106: s = "\"Handles\" expected"; break;
+			case 107: s = "\"If\" expected"; break;
+			case 108: s = "\"Implements\" expected"; break;
+			case 109: s = "\"Imports\" expected"; break;
+			case 110: s = "\"In\" expected"; break;
+			case 111: s = "\"Inherits\" expected"; break;
+			case 112: s = "\"Integer\" expected"; break;
+			case 113: s = "\"Interface\" expected"; break;
+			case 114: s = "\"Is\" expected"; break;
+			case 115: s = "\"Let\" expected"; break;
+			case 116: s = "\"Lib\" expected"; break;
+			case 117: s = "\"Like\" expected"; break;
+			case 118: s = "\"Long\" expected"; break;
+			case 119: s = "\"Loop\" expected"; break;
+			case 120: s = "\"Me\" expected"; break;
+			case 121: s = "\"Mod\" expected"; break;
+			case 122: s = "\"Module\" expected"; break;
+			case 123: s = "\"MustInherit\" expected"; break;
+			case 124: s = "\"MustOverride\" expected"; break;
+			case 125: s = "\"MyBase\" expected"; break;
+			case 126: s = "\"MyClass\" expected"; break;
+			case 127: s = "\"Namespace\" expected"; break;
+			case 128: s = "\"New\" expected"; break;
+			case 129: s = "\"Next\" expected"; break;
+			case 130: s = "\"Not\" expected"; break;
+			case 131: s = "\"Nothing\" expected"; break;
+			case 132: s = "\"NotInheritable\" expected"; break;
+			case 133: s = "\"NotOverridable\" expected"; break;
+			case 134: s = "\"Object\" expected"; break;
+			case 135: s = "\"Off\" expected"; break;
+			case 136: s = "\"On\" expected"; break;
+			case 137: s = "\"Option\" expected"; break;
+			case 138: s = "\"Optional\" expected"; break;
+			case 139: s = "\"Or\" expected"; break;
+			case 140: s = "\"OrElse\" expected"; break;
+			case 141: s = "\"Overloads\" expected"; break;
+			case 142: s = "\"Overridable\" expected"; break;
+			case 143: s = "\"Overrides\" expected"; break;
+			case 144: s = "\"ParamArray\" expected"; break;
+			case 145: s = "\"Preserve\" expected"; break;
+			case 146: s = "\"Private\" expected"; break;
+			case 147: s = "\"Property\" expected"; break;
+			case 148: s = "\"Protected\" expected"; break;
+			case 149: s = "\"Public\" expected"; break;
+			case 150: s = "\"RaiseEvent\" expected"; break;
+			case 151: s = "\"ReadOnly\" expected"; break;
+			case 152: s = "\"ReDim\" expected"; break;
+			case 153: s = "\"RemoveHandler\" expected"; break;
+			case 154: s = "\"Resume\" expected"; break;
+			case 155: s = "\"Return\" expected"; break;
+			case 156: s = "\"Select\" expected"; break;
+			case 157: s = "\"Set\" expected"; break;
+			case 158: s = "\"Shadows\" expected"; break;
+			case 159: s = "\"Shared\" expected"; break;
+			case 160: s = "\"Short\" expected"; break;
+			case 161: s = "\"Single\" expected"; break;
+			case 162: s = "\"Static\" expected"; break;
+			case 163: s = "\"Step\" expected"; break;
+			case 164: s = "\"Stop\" expected"; break;
+			case 165: s = "\"Strict\" expected"; break;
+			case 166: s = "\"String\" expected"; break;
+			case 167: s = "\"Structure\" expected"; break;
+			case 168: s = "\"Sub\" expected"; break;
+			case 169: s = "\"SyncLock\" expected"; break;
+			case 170: s = "\"Text\" expected"; break;
+			case 171: s = "\"Then\" expected"; break;
+			case 172: s = "\"Throw\" expected"; break;
+			case 173: s = "\"To\" expected"; break;
+			case 174: s = "\"True\" expected"; break;
+			case 175: s = "\"Try\" expected"; break;
+			case 176: s = "\"TypeOf\" expected"; break;
+			case 177: s = "\"Unicode\" expected"; break;
+			case 178: s = "\"Until\" expected"; break;
+			case 179: s = "\"Variant\" expected"; break;
+			case 180: s = "\"Wend\" expected"; break;
+			case 181: s = "\"When\" expected"; break;
+			case 182: s = "\"While\" expected"; break;
+			case 183: s = "\"With\" expected"; break;
+			case 184: s = "\"WithEvents\" expected"; break;
+			case 185: s = "\"WriteOnly\" expected"; break;
+			case 186: s = "\"Xor\" expected"; break;
+			case 187: s = "\"Rem\" expected"; break;
+			case 188: s = "\"Continue\" expected"; break;
+			case 189: s = "\"Operator\" expected"; break;
+			case 190: s = "\"Using\" expected"; break;
+			case 191: s = "\"IsNot\" expected"; break;
+			case 192: s = "\"SByte\" expected"; break;
+			case 193: s = "\"UInteger\" expected"; break;
+			case 194: s = "\"ULong\" expected"; break;
+			case 195: s = "\"UShort\" expected"; break;
+			case 196: s = "\"CSByte\" expected"; break;
+			case 197: s = "\"CUShort\" expected"; break;
+			case 198: s = "\"CUInt\" expected"; break;
+			case 199: s = "\"CULng\" expected"; break;
+			case 200: s = "\"Global\" expected"; break;
+			case 201: s = "\"TryCast\" expected"; break;
+			case 202: s = "\"Of\" expected"; break;
+			case 203: s = "\"Narrowing\" expected"; break;
+			case 204: s = "\"Widening\" expected"; break;
+			case 205: s = "\"Partial\" expected"; break;
+			case 206: s = "\"Custom\" expected"; break;
+			case 207: s = "??? expected"; break;
 			case 208: s = "invalid OptionStmt"; break;
-			case 209: s = "invalid GlobalAttributeSection"; break;
+			case 209: s = "invalid OptionStmt"; break;
 			case 210: s = "invalid GlobalAttributeSection"; break;
-			case 211: s = "invalid NamespaceMemberDecl"; break;
-			case 212: s = "invalid OptionValue"; break;
-			case 213: s = "invalid EndOfStmt"; break;
-			case 214: s = "invalid TypeModifier"; break;
-			case 215: s = "invalid NonModuleDeclaration"; break;
+			case 211: s = "invalid GlobalAttributeSection"; break;
+			case 212: s = "invalid NamespaceMemberDecl"; break;
+			case 213: s = "invalid OptionValue"; break;
+			case 214: s = "invalid EndOfStmt"; break;
+			case 215: s = "invalid TypeModifier"; break;
 			case 216: s = "invalid NonModuleDeclaration"; break;
-			case 217: s = "invalid Identifier"; break;
-			case 218: s = "invalid TypeParameterConstraints"; break;
-			case 219: s = "invalid TypeParameterConstraint"; break;
-			case 220: s = "invalid NonArrayTypeName"; break;
-			case 221: s = "invalid MemberModifier"; break;
-			case 222: s = "invalid StructureMemberDecl"; break;
+			case 217: s = "invalid NonModuleDeclaration"; break;
+			case 218: s = "invalid Identifier"; break;
+			case 219: s = "invalid TypeParameterConstraints"; break;
+			case 220: s = "invalid TypeParameterConstraint"; break;
+			case 221: s = "invalid NonArrayTypeName"; break;
+			case 222: s = "invalid MemberModifier"; break;
 			case 223: s = "invalid StructureMemberDecl"; break;
 			case 224: s = "invalid StructureMemberDecl"; break;
 			case 225: s = "invalid StructureMemberDecl"; break;
 			case 226: s = "invalid StructureMemberDecl"; break;
 			case 227: s = "invalid StructureMemberDecl"; break;
 			case 228: s = "invalid StructureMemberDecl"; break;
-			case 229: s = "invalid InterfaceMemberDecl"; break;
+			case 229: s = "invalid StructureMemberDecl"; break;
 			case 230: s = "invalid InterfaceMemberDecl"; break;
-			case 231: s = "invalid Charset"; break;
-			case 232: s = "invalid IdentifierForFieldDeclaration"; break;
-			case 233: s = "invalid VariableDeclaratorPartAfterIdentifier"; break;
-			case 234: s = "invalid AccessorDecls"; break;
-			case 235: s = "invalid EventAccessorDeclaration"; break;
-			case 236: s = "invalid OverloadableOperator"; break;
-			case 237: s = "invalid VariableInitializer"; break;
-			case 238: s = "invalid EventMemberSpecifier"; break;
-			case 239: s = "invalid AssignmentOperator"; break;
-			case 240: s = "invalid SimpleNonInvocationExpression"; break;
+			case 231: s = "invalid InterfaceMemberDecl"; break;
+			case 232: s = "invalid Charset"; break;
+			case 233: s = "invalid IdentifierForFieldDeclaration"; break;
+			case 234: s = "invalid VariableDeclaratorPartAfterIdentifier"; break;
+			case 235: s = "invalid AccessorDecls"; break;
+			case 236: s = "invalid EventAccessorDeclaration"; break;
+			case 237: s = "invalid OverloadableOperator"; break;
+			case 238: s = "invalid VariableInitializer"; break;
+			case 239: s = "invalid EventMemberSpecifier"; break;
+			case 240: s = "invalid AssignmentOperator"; break;
 			case 241: s = "invalid SimpleNonInvocationExpression"; break;
 			case 242: s = "invalid SimpleNonInvocationExpression"; break;
 			case 243: s = "invalid SimpleNonInvocationExpression"; break;
-			case 244: s = "invalid InvocationExpression"; break;
+			case 244: s = "invalid SimpleNonInvocationExpression"; break;
 			case 245: s = "invalid InvocationExpression"; break;
-			case 246: s = "invalid PrimitiveTypeName"; break;
-			case 247: s = "invalid CastTarget"; break;
-			case 248: s = "invalid ComparisonExpr"; break;
-			case 249: s = "invalid Argument"; break;
-			case 250: s = "invalid QualIdentAndTypeArguments"; break;
-			case 251: s = "invalid AttributeArguments"; break;
-			case 252: s = "invalid ParameterModifier"; break;
-			case 253: s = "invalid Statement"; break;
-			case 254: s = "invalid LabelName"; break;
-			case 255: s = "invalid EmbeddedStatement"; break;
+			case 246: s = "invalid InvocationExpression"; break;
+			case 247: s = "invalid PrimitiveTypeName"; break;
+			case 248: s = "invalid CastTarget"; break;
+			case 249: s = "invalid ComparisonExpr"; break;
+			case 250: s = "invalid Argument"; break;
+			case 251: s = "invalid QualIdentAndTypeArguments"; break;
+			case 252: s = "invalid AttributeArguments"; break;
+			case 253: s = "invalid ParameterModifier"; break;
+			case 254: s = "invalid Statement"; break;
+			case 255: s = "invalid LabelName"; break;
 			case 256: s = "invalid EmbeddedStatement"; break;
 			case 257: s = "invalid EmbeddedStatement"; break;
 			case 258: s = "invalid EmbeddedStatement"; break;
 			case 259: s = "invalid EmbeddedStatement"; break;
 			case 260: s = "invalid EmbeddedStatement"; break;
 			case 261: s = "invalid EmbeddedStatement"; break;
-			case 262: s = "invalid WhileOrUntil"; break;
-			case 263: s = "invalid SingleLineStatementList"; break;
+			case 262: s = "invalid EmbeddedStatement"; break;
+			case 263: s = "invalid WhileOrUntil"; break;
 			case 264: s = "invalid SingleLineStatementList"; break;
-			case 265: s = "invalid OnErrorStatement"; break;
-			case 266: s = "invalid ResumeStatement"; break;
-			case 267: s = "invalid CaseClause"; break;
+			case 265: s = "invalid SingleLineStatementList"; break;
+			case 266: s = "invalid OnErrorStatement"; break;
+			case 267: s = "invalid ResumeStatement"; break;
 			case 268: s = "invalid CaseClause"; break;
+			case 269: s = "invalid CaseClause"; break;
 
 			default: s = "error " + errorNumber; break;
 		}
@@ -6518,46 +6527,46 @@ out blockStmt);
 	}
 	
 	static bool[,] set = {
-	{T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,T,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,x, x,x,x,T, x,x,x,x, x,T,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,x, x,x,x,T, x,x,x,x, x,T,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,T, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,T,x, x,T,x,T, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,T, x,x,x,x, x,x,x,T, T,x,T,x, x,x,x,x, T,T,T,x, T,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,T, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,T, T,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,x,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,T, T,T,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
-	{x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, T,x,x,T, T,x,T,T, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,x,T, x,T,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, x,x,x,T, T,x,T,T, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,x,T, x,T,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,T,T,T, T,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, T,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, T,x,x,T, T,x,T,T, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,x,T, x,T,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, T,x,T,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,T, T,x,x,x, x,x,x,T, T,x,T,T, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,x,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,x,T, x,T,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,T, T,x,x,x, T,x,x,T, T,x,T,T, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,x,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,x,T, x,T,x,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
-	{x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
-	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}
+	{T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,T, x,x,x,x, x,T,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,T, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, x,x,x,x, T,x,x,x, x,x,T,x, x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, x,x,x,x, x,T,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, x,x,x,x, T,x,x,x, x,x,T,x, x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,T, T,x,x,x, x,x,x,T, T,T,T,x, x,x,x,x, x,x,x,T, x,x,T,x, T,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,T, T,x,x,x, x,x,x,x, T,T,x,T, x,x,x,x, x,T,T,T, x,T,T,T, T,T,x,T, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, T,T,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,T,T,T, x,x,T,x, T,T,x,T, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, T,T,T,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,T,T,T, x,x,T,T, T,T,x,T, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x},
+	{x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,T,x,x, x,T,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,T,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,T,T,T, x,x,T,T, T,T,x,T, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,T,x,x, x,x,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,T,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,T,T,T, T,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,T,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,T,x,x, x,T,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,T,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,T,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,T,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, T,x,T,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,T,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, T,T,x,x, x,x,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,x,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, T,T,x,x, x,T,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,x,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x},
+	{x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x},
+	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}
 
 	};
 } // end Parser
diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
index aa95f43900..a578548d71 100644
--- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
+++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
@@ -35,6 +35,7 @@ TOKENS
 	"&"
 	"^"
 	"?"
+	"!"
 	"{"
 	"}"
 	"("
@@ -1582,10 +1583,12 @@ AssignmentOperator<out AssignmentOperatorType op>
 
 /* 11.4 */
 SimpleExpr<out Expression pexpr>
+(. string name; .)
 =
 	SimpleNonInvocationExpression<out pexpr>
-	{		(. string name; .)
+	{
 		"." IdentifierOrKeyword<out name> (. pexpr = new MemberReferenceExpression(pexpr, name); .)
+	|	"!" IdentifierOrKeyword<out name> (. pexpr = new BinaryOperatorExpression(pexpr, BinaryOperatorType.DictionaryAccess, new PrimitiveExpression(name, name)); .)
 	|	InvocationExpression<ref pexpr>
 	}
 .
diff --git a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
index f8930c77bc..6bcda5465f 100644
--- a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
+++ b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
@@ -1835,6 +1835,12 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
 					TrackVisit(binaryOperatorExpression.Right, data);
 					outputFormatter.PrintToken(Tokens.CloseParenthesis);
 					return null;
+				case BinaryOperatorType.DictionaryAccess:
+					TrackVisit(binaryOperatorExpression.Left, data);
+					outputFormatter.PrintToken(Tokens.OpenSquareBracket);
+					TrackVisit(binaryOperatorExpression.Right, data);
+					outputFormatter.PrintToken(Tokens.CloseSquareBracket);
+					return null;
 			}
 			TrackVisit(binaryOperatorExpression.Left, data);
 			switch (binaryOperatorExpression.Op) {
diff --git a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs
index 051b0bb480..d3cdc07e1e 100644
--- a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs
+++ b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs
@@ -2198,6 +2198,19 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
 					TrackedVisit(binaryOperatorExpression.Right, data);
 					outputFormatter.PrintToken(Tokens.CloseParenthesis);
 					return null;
+				case BinaryOperatorType.DictionaryAccess:
+					{
+						PrimitiveExpression pright = binaryOperatorExpression.Right as PrimitiveExpression;
+						TrackedVisit(binaryOperatorExpression.Left, data);
+						if (pright != null && pright.Value is string) {
+							outputFormatter.PrintText("!" + (string)pright.Value);
+						} else {
+							outputFormatter.PrintToken(Tokens.OpenParenthesis);
+							TrackedVisit(binaryOperatorExpression.Right, data);
+							outputFormatter.PrintToken(Tokens.CloseParenthesis);
+						}
+						return null;
+					}
 				case BinaryOperatorType.LessThan:
 					op = Tokens.LessThan;
 					break;
diff --git a/src/Libraries/NRefactory/Test/Lexer/VBNet/CustomLexerTests.cs b/src/Libraries/NRefactory/Test/Lexer/VBNet/CustomLexerTests.cs
index b1a14e5fdd..e9c1105866 100644
--- a/src/Libraries/NRefactory/Test/Lexer/VBNet/CustomLexerTests.cs
+++ b/src/Libraries/NRefactory/Test/Lexer/VBNet/CustomLexerTests.cs
@@ -42,5 +42,82 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB
 			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOL));
 			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
 		}
+		
+		[Test]
+		public void EscapedIdentifier()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("[Stop]"));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOL));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
+		}
+		
+		[Test]
+		public void IdentifierWithTypeCharacter()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("Stop$"));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOL));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
+		}
+		
+		[Test]
+		public void ExclamationMarkIsTypeCharacter()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("a!=b"));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Assign));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOL));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
+		}
+		
+		[Test]
+		public void ExclamationMarkIsTypeCharacter2()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("a! b"));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOL));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
+		}
+		
+		[Test]
+		public void ExclamationMarkIsIdentifier()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("a!b"));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.ExclamationMark));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOL));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
+		}
+		
+		[Test]
+		public void ExclamationMarkIsIdentifier2()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("a![b]"));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.ExclamationMark));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOL));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
+		}
+		
+		[Test]
+		public void RemCommentTest()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("a rem b"));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.Identifier));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOL));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
+		}
+		
+		[Test]
+		public void RemCommentTest2()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("REM c"));
+			Assert.That(lexer.NextToken().kind, Is.EqualTo(Tokens.EOF));
+		}
 	}
 }
diff --git a/src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs b/src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs
index d2185d8b96..c60f092a64 100644
--- a/src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs
+++ b/src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs
@@ -106,6 +106,13 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB
 			Assert.AreEqual(Tokens.QuestionMark, lexer.NextToken().kind);
 		}
 
+		[Test]
+		public void TestExclamationMark()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("!"));
+			Assert.AreEqual(Tokens.ExclamationMark, lexer.NextToken().kind);
+		}
+
 		[Test]
 		public void TestOpenCurlyBrace()
 		{
@@ -239,6 +246,13 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB
 			Assert.AreEqual(Tokens.ShiftRightAssign, lexer.NextToken().kind);
 		}
 
+		[Test]
+		public void TestConcatStringAssign()
+		{
+			ILexer lexer = GenerateLexer(new StringReader("&="));
+			Assert.AreEqual(Tokens.ConcatStringAssign, lexer.NextToken().kind);
+		}
+
 		[Test()]
 		public void TestAddHandler()
 		{
diff --git a/src/Libraries/NRefactory/Test/Output/VBNet/VBNetOutputTest.cs b/src/Libraries/NRefactory/Test/Output/VBNet/VBNetOutputTest.cs
index 73da60ee4c..9b3d560e04 100644
--- a/src/Libraries/NRefactory/Test/Output/VBNet/VBNetOutputTest.cs
+++ b/src/Libraries/NRefactory/Test/Output/VBNet/VBNetOutputTest.cs
@@ -203,6 +203,12 @@ End Using");
 			TestExpression("12");
 		}
 		
+		[Test]
+		public void DictionaryAccess()
+		{
+			TestExpression("c!key");
+		}
+		
 		[Test]
 		public void GenericMethodInvocation()
 		{
diff --git a/src/Libraries/NRefactory/Test/Parser/TypeLevel/MethodDeclarationTests.cs b/src/Libraries/NRefactory/Test/Parser/TypeLevel/MethodDeclarationTests.cs
index 737fa6b251..02cdcfc291 100644
--- a/src/Libraries/NRefactory/Test/Parser/TypeLevel/MethodDeclarationTests.cs
+++ b/src/Libraries/NRefactory/Test/Parser/TypeLevel/MethodDeclarationTests.cs
@@ -402,6 +402,17 @@ End Interface
 			Assert.AreEqual(new string[] { "MyBase.Event", "Button1.Click" }, md.HandlesClause.ToArray());
 		}
 		
+		[Test]
+		public void VBNetMethodWithTypeCharactersTest()
+		{
+			const string program = @"Public Function Func!(ByVal Param&)
+				Func! = CSingle(Param&)
+			End Function";
+			
+			MethodDeclaration md = ParseUtilVBNet.ParseTypeMember<MethodDeclaration>(program);
+			Assert.AreEqual(Modifiers.Public, md.Modifier);
+		}
+		
 		#endregion
 	}
 }