From 2b7a0c9c7c40ca25e3be00fcaef49c7416af595c Mon Sep 17 00:00:00 2001 From: comintern Date: Thu, 12 Jan 2017 18:04:19 -0600 Subject: [PATCH 01/18] Initial Hungarian notation inspection commit --- .../HungarianNotationInspection.cs | 123 ++++++++++++++++++ .../Resources/InspectionsUI.Designer.cs | 29 ++++- .../Inspections/Resources/InspectionsUI.resx | 9 ++ .../HungarianNotationInspectionResult.cs | 42 ++++++ RetailCoder.VBE/Rubberduck.csproj | 2 + Rubberduck.Parsing/Rubberduck.Parsing.csproj | 4 +- 6 files changed, 206 insertions(+), 3 deletions(-) create mode 100644 RetailCoder.VBE/Inspections/HungarianNotationInspection.cs create mode 100644 RetailCoder.VBE/Inspections/Results/HungarianNotationInspectionResult.cs diff --git a/RetailCoder.VBE/Inspections/HungarianNotationInspection.cs b/RetailCoder.VBE/Inspections/HungarianNotationInspection.cs new file mode 100644 index 0000000000..8d69db5c0c --- /dev/null +++ b/RetailCoder.VBE/Inspections/HungarianNotationInspection.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Rubberduck.Inspections.Abstract; +using Rubberduck.Inspections.Resources; +using Rubberduck.Inspections.Results; +using Rubberduck.Parsing.Symbols; +using Rubberduck.Parsing.VBA; + +namespace Rubberduck.Inspections +{ + public sealed class HungarianNotationInspection : InspectionBase + { + #region statics + private static readonly List HungarianPrefixes = new List + { + "chk", + "cbo", + "cmd", + "btn", + "fra", + "img", + "lbl", + "lst", + "mnu", + "opt", + "pic", + "shp", + "txt", + "tmr", + "chk", + "dlg", + "drv", + "frm", + "grd", + "obj", + "rpt", + "fld", + "idx", + "tbl", + "tbd", + "bas", + "cls", + "g", + "m", + "bln", + "byt", + "col", + "dtm", + "dbl", + "cur", + "int", + "lng", + "sng", + "str", + "udt", + "vnt", + "var", + "pgr", + "dao", + "b", + "by", + "c", + "chr", + "i", + "l", + "s", + "o", + "n", + "dt", + "dat", + "a", + "arr" + }; + + private static readonly Regex HungarianIdentifierRegex = new Regex(string.Format("^({0})[A-Z0-9].*$", string.Join("|", HungarianPrefixes))); + + private static readonly List TargetDeclarationTypes = new List + { + DeclarationType.Parameter, + DeclarationType.Constant, + DeclarationType.Control, + DeclarationType.ClassModule, + DeclarationType.Member, + DeclarationType.Module, + DeclarationType.ProceduralModule, + DeclarationType.UserForm, + DeclarationType.UserDefinedType, + DeclarationType.UserDefinedTypeMember, + DeclarationType.Variable + }; + + #endregion + + public HungarianNotationInspection(RubberduckParserState state, CodeInspectionSeverity defaultSeverity = CodeInspectionSeverity.Suggestion) + : base(state, defaultSeverity) + { + } + + public override string Description + { + get { return InspectionsUI.HungarianNotationInspectionName; } + } + + public override CodeInspectionType InspectionType + { + get { return CodeInspectionType.MaintainabilityAndReadabilityIssues; } + } + + public override IEnumerable GetInspectionResults() + { + var hungarians = UserDeclarations + .Where(declaration => TargetDeclarationTypes.Contains(declaration.DeclarationType) && + HungarianIdentifierRegex.IsMatch(declaration.IdentifierName)) + .Select(issue => new HungarianNotationInspectionResult(this, issue)) + .ToList(); + return hungarians; + } + } +} diff --git a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs index 5ba2fee303..b9cdab2903 100644 --- a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs +++ b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// Runtime Version:4.0.30319.36373 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -294,6 +294,33 @@ public static string FunctionReturnValueNotUsedInspectionResultFormat { } } + /// + /// Looks up a localized string similar to Hungarian notation makes code less readable, and is redundant when strongly typed variables and meaningful names are used.. + /// + public static string HungarianNotationInspectionMeta { + get { + return ResourceManager.GetString("HungarianNotationInspectionMeta", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Variable uses Hungarian notation.. + /// + public static string HungarianNotationInspectionName { + get { + return ResourceManager.GetString("HungarianNotationInspectionName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Consider renaming {0} '{1}'. + /// + public static string HungarianNotationInspectionResultFormat { + get { + return ResourceManager.GetString("HungarianNotationInspectionResultFormat", resourceCulture); + } + } + /// /// Looks up a localized string similar to {0} '{1}' is not used. /// diff --git a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx index 7de01c9287..77e55b2df2 100644 --- a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx +++ b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx @@ -606,4 +606,13 @@ If the parameter can be null, ignore this inspection result; passing a null valu {0} ({1} results) {0} inpection description, {1} result count + + Hungarian notation makes code less readable, and is redundant when strongly typed variables and meaningful names are used. + + + Variable uses Hungarian notation. + + + Consider renaming {0} '{1}' + \ No newline at end of file diff --git a/RetailCoder.VBE/Inspections/Results/HungarianNotationInspectionResult.cs b/RetailCoder.VBE/Inspections/Results/HungarianNotationInspectionResult.cs new file mode 100644 index 0000000000..59888c8247 --- /dev/null +++ b/RetailCoder.VBE/Inspections/Results/HungarianNotationInspectionResult.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using Antlr4.Runtime; +using Rubberduck.Common; +using Rubberduck.Inspections.Abstract; +using Rubberduck.Inspections.QuickFixes; +using Rubberduck.Inspections.Resources; +using Rubberduck.Parsing.Symbols; +using Rubberduck.UI; +using Rubberduck.VBEditor; + +namespace Rubberduck.Inspections.Results +{ + public sealed class HungarianNotationInspectionResult : InspectionResultBase + { + private readonly IEnumerable _quickFixes; + + public HungarianNotationInspectionResult(IInspection inspection, Declaration target) + : base(inspection, target) + { + _quickFixes = new QuickFixBase[] + { + new IgnoreOnceQuickFix(Context, QualifiedSelection, Inspection.AnnotationName), + }; + } + + public override string Description + { + get + { + return + string.Format(InspectionsUI.HungarianNotationInspectionResultFormat, + RubberduckUI.ResourceManager.GetString("DeclarationType_" + Target.DeclarationType, + UI.Settings.Settings.Culture), Target.IdentifierName).Captialize(); + } + } + + public override NavigateCodeEventArgs GetNavigationArgs() + { + return new NavigateCodeEventArgs(Target); + } + } +} diff --git a/RetailCoder.VBE/Rubberduck.csproj b/RetailCoder.VBE/Rubberduck.csproj index 406b3c85ac..32c4ac817f 100644 --- a/RetailCoder.VBE/Rubberduck.csproj +++ b/RetailCoder.VBE/Rubberduck.csproj @@ -365,6 +365,7 @@ + True @@ -372,6 +373,7 @@ InspectionsUI.resx + diff --git a/Rubberduck.Parsing/Rubberduck.Parsing.csproj b/Rubberduck.Parsing/Rubberduck.Parsing.csproj index 1c48487d15..3be2ce65d8 100644 --- a/Rubberduck.Parsing/Rubberduck.Parsing.csproj +++ b/Rubberduck.Parsing/Rubberduck.Parsing.csproj @@ -305,11 +305,11 @@ - + MSBuild:Compile Rubberduck.Parsing.Grammar Always - + MSBuild:Compile From 10e5f4553b1324fd93a0106ad00a237706102e80 Mon Sep 17 00:00:00 2001 From: comintern Date: Thu, 12 Jan 2017 19:38:31 -0600 Subject: [PATCH 02/18] Allow BF to be used as an identifier. --- Rubberduck.Parsing/Grammar/VBAParser.cs | 3040 +++++++++-------- Rubberduck.Parsing/Grammar/VBAParser.g4 | 2 +- .../Grammar/VBAParserBaseListener.cs | 2 +- .../Grammar/VBAParserBaseVisitor.cs | 2 +- .../Grammar/VBAParserListener.cs | 2 +- .../Grammar/VBAParserVisitor.cs | 2 +- Rubberduck.Parsing/Rubberduck.Parsing.csproj | 4 +- RubberduckTests/Grammar/ResolverTests.cs | 62 + 8 files changed, 1596 insertions(+), 1520 deletions(-) diff --git a/Rubberduck.Parsing/Grammar/VBAParser.cs b/Rubberduck.Parsing/Grammar/VBAParser.cs index 66d154e3af..f39947c8e4 100644 --- a/Rubberduck.Parsing/Grammar/VBAParser.cs +++ b/Rubberduck.Parsing/Grammar/VBAParser.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -// Generated from C:\Work\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 +// Generated from C:\Dev\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 // Unreachable code detected #pragma warning disable 0162 @@ -5018,7 +5018,7 @@ public PutStmtContext putStmt() { } State = 981; _la = _input.La(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { { State = 980; recordNumber(); } @@ -5216,7 +5216,7 @@ public GetStmtContext getStmt() { } State = 1007; _la = _input.La(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { { State = 1006; recordNumber(); } @@ -6741,7 +6741,7 @@ public EnumerationStmtContext enumerationStmt() { State = 1250; _errHandler.Sync(this); _la = _input.La(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { { { State = 1247; enumerationStmt_Constant(); @@ -9329,7 +9329,7 @@ public RaiseEventStmtContext raiseEventStmt() { } State = 1678; _la = _input.La(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { { State = 1677; eventArgumentList(); } @@ -9808,6 +9808,7 @@ public CallStmtContext callStmt() { case ANY: case ARRAY: case B_CHAR: + case BF: case CBOOL: case CBYTE: case CCUR: @@ -10016,6 +10017,7 @@ public ResumeStmtContext resumeStmt() { case ANY: case ARRAY: case B_CHAR: + case BF: case CBOOL: case CBYTE: case CCUR: @@ -11688,7 +11690,7 @@ public ArrayDimContext arrayDim() { } State = 1942; _la = _input.La(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { { State = 1941; boundsList(); } @@ -12277,7 +12279,7 @@ public VariableSubStmtContext variableSubStmt() { State = 2019; _la = _input.La(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { { State = 2015; subscripts(); State = 2017; @@ -12660,7 +12662,7 @@ public CircleSpecialFormContext circleSpecialForm() { { State = 2091; _la = _input.La(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { { State = 2083; expression(0); State = 2085; @@ -12800,7 +12802,7 @@ public ScaleSpecialFormContext scaleSpecialForm() { { State = 2122; _la = _input.La(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (EMPTY - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LPAREN - 195)) | (1L << (MINUS - 195)) | (1L << (L_SQUARE_BRACKET - 195)) | (1L << (STRINGLITERAL - 195)) | (1L << (OCTLITERAL - 195)) | (1L << (HEXLITERAL - 195)) | (1L << (FLOATLITERAL - 195)) | (1L << (INTEGERLITERAL - 195)) | (1L << (DATELITERAL - 195)) | (1L << (IDENTIFIER - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) { { State = 2114; expression(0); State = 2116; @@ -13200,6 +13202,7 @@ public UnrestrictedIdentifierContext unrestrictedIdentifier() { case ANY: case ARRAY: case B_CHAR: + case BF: case CBOOL: case CBYTE: case CCUR: @@ -13569,6 +13572,7 @@ public KeywordContext keyword() { public ForeignNameContext foreignName() { return GetRuleContext(0); } + public ITerminalNode BF() { return GetToken(VBAParser.BF, 0); } public IdentifierValueContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -13594,7 +13598,7 @@ public IdentifierValueContext identifierValue() { IdentifierValueContext _localctx = new IdentifierValueContext(_ctx, State); EnterRule(_localctx, 338, RULE_identifierValue); try { - State = 2196; + State = 2197; switch (_input.La(1)) { case IDENTIFIER: EnterOuterAlt(_localctx, 1); @@ -13729,6 +13733,12 @@ public IdentifierValueContext identifierValue() { State = 2195; foreignName(); } break; + case BF: + EnterOuterAlt(_localctx, 4); + { + State = 2196; Match(BF); + } + break; default: throw new NoViableAltException(this); } @@ -13781,21 +13791,21 @@ public ForeignNameContext foreignName() { try { EnterOuterAlt(_localctx, 1); { - State = 2198; Match(L_SQUARE_BRACKET); - State = 2202; + State = 2199; Match(L_SQUARE_BRACKET); + State = 2203; _errHandler.Sync(this); _la = _input.La(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << BF) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CIRCLE) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << EXIT) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << OPTION) | (1L << PSET) | (1L << SCALE) | (1L << SGN) | (1L << UBOUND) | (1L << COMMA) | (1L << COLON) | (1L << SEMICOLON) | (1L << EXCLAMATIONPOINT) | (1L << DOT) | (1L << HASH) | (1L << AT) | (1L << PERCENT) | (1L << DOLLAR) | (1L << AMPERSAND) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << AS) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALL - 64)) | (1L << (CASE - 64)) | (1L << (CLASS - 64)) | (1L << (CLOSE - 64)) | (1L << (CONST - 64)) | (1L << (DATABASE - 64)) | (1L << (DATE - 64)) | (1L << (DECLARE - 64)) | (1L << (DEFBOOL - 64)) | (1L << (DEFBYTE - 64)) | (1L << (DEFDATE - 64)) | (1L << (DEFDBL - 64)) | (1L << (DEFCUR - 64)) | (1L << (DEFINT - 64)) | (1L << (DEFLNG - 64)) | (1L << (DEFLNGLNG - 64)) | (1L << (DEFLNGPTR - 64)) | (1L << (DEFOBJ - 64)) | (1L << (DEFSNG - 64)) | (1L << (DEFSTR - 64)) | (1L << (DEFVAR - 64)) | (1L << (DIM - 64)) | (1L << (DO - 64)) | (1L << (DOUBLE - 64)) | (1L << (EACH - 64)) | (1L << (ELSE - 64)) | (1L << (ELSEIF - 64)) | (1L << (EMPTY - 64)) | (1L << (END_ENUM - 64)) | (1L << (END_FUNCTION - 64)) | (1L << (END_IF - 64)) | (1L << (END_PROPERTY - 64)) | (1L << (END_SELECT - 64)) | (1L << (END_SUB - 64)) | (1L << (END_TYPE - 64)) | (1L << (END_WITH - 64)) | (1L << (END - 64)) | (1L << (ENUM - 64)) | (1L << (EQV - 64)) | (1L << (ERASE - 64)) | (1L << (ERROR - 64)) | (1L << (EVENT - 64)) | (1L << (EXIT_DO - 64)) | (1L << (EXIT_FOR - 64)) | (1L << (EXIT_FUNCTION - 64)) | (1L << (EXIT_PROPERTY - 64)) | (1L << (EXIT_SUB - 64)) | (1L << (FALSE - 64)) | (1L << (FRIEND - 64)) | (1L << (FOR - 64)) | (1L << (FUNCTION - 64)) | (1L << (GET - 64)) | (1L << (GLOBAL - 64)) | (1L << (GOSUB - 64)) | (1L << (GOTO - 64)) | (1L << (IF - 64)) | (1L << (IMP - 64)) | (1L << (IMPLEMENTS - 64)) | (1L << (IN - 64)) | (1L << (INPUT - 64)) | (1L << (IS - 64)) | (1L << (INTEGER - 64)) | (1L << (LOCK - 64)) | (1L << (LONG - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LOOP - 128)) | (1L << (LET - 128)) | (1L << (LIB - 128)) | (1L << (LIKE - 128)) | (1L << (LINE_INPUT - 128)) | (1L << (LOCK_READ - 128)) | (1L << (LOCK_WRITE - 128)) | (1L << (LOCK_READ_WRITE - 128)) | (1L << (LSET - 128)) | (1L << (ME - 128)) | (1L << (MID - 128)) | (1L << (MOD - 128)) | (1L << (NAME - 128)) | (1L << (NEXT - 128)) | (1L << (NEW - 128)) | (1L << (NOT - 128)) | (1L << (NOTHING - 128)) | (1L << (NULL - 128)) | (1L << (OBJECT - 128)) | (1L << (ON - 128)) | (1L << (ON_ERROR - 128)) | (1L << (ON_LOCAL_ERROR - 128)) | (1L << (OPEN - 128)) | (1L << (OPTIONAL - 128)) | (1L << (OPTION_BASE - 128)) | (1L << (OPTION_EXPLICIT - 128)) | (1L << (OPTION_COMPARE - 128)) | (1L << (OPTION_PRIVATE_MODULE - 128)) | (1L << (OR - 128)) | (1L << (OUTPUT - 128)) | (1L << (PARAMARRAY - 128)) | (1L << (PRESERVE - 128)) | (1L << (PRINT - 128)) | (1L << (PRIVATE - 128)) | (1L << (PROPERTY_GET - 128)) | (1L << (PROPERTY_LET - 128)) | (1L << (PROPERTY_SET - 128)) | (1L << (PTRSAFE - 128)) | (1L << (PUBLIC - 128)) | (1L << (PUT - 128)) | (1L << (RANDOM - 128)) | (1L << (RAISEEVENT - 128)) | (1L << (READ - 128)) | (1L << (READ_WRITE - 128)) | (1L << (REDIM - 128)) | (1L << (REM - 128)) | (1L << (RESET - 128)) | (1L << (RESUME - 128)) | (1L << (RETURN - 128)) | (1L << (RSET - 128)) | (1L << (SEEK - 128)) | (1L << (SELECT - 128)) | (1L << (SET - 128)) | (1L << (SHARED - 128)) | (1L << (SINGLE - 128)) | (1L << (SPC - 128)) | (1L << (STATIC - 128)) | (1L << (STEP - 128)) | (1L << (STOP - 128)) | (1L << (STRING - 128)) | (1L << (SUB - 128)) | (1L << (TAB - 128)) | (1L << (TEXT - 128)) | (1L << (THEN - 128)))) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & ((1L << (TO - 192)) | (1L << (TRUE - 192)) | (1L << (TYPE - 192)) | (1L << (TYPEOF - 192)) | (1L << (UNLOCK - 192)) | (1L << (UNTIL - 192)) | (1L << (VARIANT - 192)) | (1L << (VERSION - 192)) | (1L << (WEND - 192)) | (1L << (WHILE - 192)) | (1L << (WIDTH - 192)) | (1L << (WITH - 192)) | (1L << (WITHEVENTS - 192)) | (1L << (WRITE - 192)) | (1L << (XOR - 192)) | (1L << (ASSIGN - 192)) | (1L << (DIV - 192)) | (1L << (INTDIV - 192)) | (1L << (EQ - 192)) | (1L << (GEQ - 192)) | (1L << (GT - 192)) | (1L << (LEQ - 192)) | (1L << (LPAREN - 192)) | (1L << (LT - 192)) | (1L << (MINUS - 192)) | (1L << (MULT - 192)) | (1L << (NEQ - 192)) | (1L << (PLUS - 192)) | (1L << (POW - 192)) | (1L << (RPAREN - 192)) | (1L << (L_SQUARE_BRACKET - 192)) | (1L << (STRINGLITERAL - 192)) | (1L << (OCTLITERAL - 192)) | (1L << (HEXLITERAL - 192)) | (1L << (FLOATLITERAL - 192)) | (1L << (INTEGERLITERAL - 192)) | (1L << (DATELITERAL - 192)) | (1L << (NEWLINE - 192)) | (1L << (SINGLEQUOTE - 192)) | (1L << (UNDERSCORE - 192)) | (1L << (WS - 192)) | (1L << (GUIDLITERAL - 192)) | (1L << (IDENTIFIER - 192)) | (1L << (LINE_CONTINUATION - 192)) | (1L << (ERRORCHAR - 192)) | (1L << (LOAD - 192)) | (1L << (RESUME_NEXT - 192)))) != 0)) { { { - State = 2199; foreignIdentifier(); + State = 2200; foreignIdentifier(); } } - State = 2204; + State = 2205; _errHandler.Sync(this); _la = _input.La(1); } - State = 2205; Match(R_SQUARE_BRACKET); + State = 2206; Match(R_SQUARE_BRACKET); } } catch (RecognitionException re) { @@ -13841,7 +13851,7 @@ public ForeignIdentifierContext foreignIdentifier() { EnterRule(_localctx, 342, RULE_foreignIdentifier); int _la; try { - State = 2209; + State = 2210; switch (_input.La(1)) { case ABS: case ANY: @@ -14082,7 +14092,7 @@ public ForeignIdentifierContext foreignIdentifier() { case RESUME_NEXT: EnterOuterAlt(_localctx, 1); { - State = 2207; + State = 2208; _la = _input.La(1); if ( _la <= 0 || (_la==L_SQUARE_BRACKET || _la==R_SQUARE_BRACKET) ) { _errHandler.RecoverInline(this); @@ -14093,7 +14103,7 @@ public ForeignIdentifierContext foreignIdentifier() { case L_SQUARE_BRACKET: EnterOuterAlt(_localctx, 2); { - State = 2208; foreignName(); + State = 2209; foreignName(); } break; default: @@ -14154,38 +14164,38 @@ public AsTypeClauseContext asTypeClause() { try { EnterOuterAlt(_localctx, 1); { - State = 2211; Match(AS); - State = 2213; + State = 2212; Match(AS); + State = 2214; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2212; whiteSpace(); + State = 2213; whiteSpace(); } } - State = 2217; + State = 2218; switch ( Interpreter.AdaptivePredict(_input,298,_ctx) ) { case 1: { - State = 2215; Match(NEW); - State = 2216; whiteSpace(); + State = 2216; Match(NEW); + State = 2217; whiteSpace(); } break; } - State = 2219; type(); - State = 2224; + State = 2220; type(); + State = 2225; switch ( Interpreter.AdaptivePredict(_input,300,_ctx) ) { case 1: { - State = 2221; + State = 2222; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2220; whiteSpace(); + State = 2221; whiteSpace(); } } - State = 2223; fieldLength(); + State = 2224; fieldLength(); } break; } @@ -14244,7 +14254,7 @@ public BaseTypeContext baseType() { try { EnterOuterAlt(_localctx, 1); { - State = 2226; + State = 2227; _la = _input.La(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANY) | (1L << CURRENCY) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << BOOLEAN) | (1L << BYTE))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (DATE - 70)) | (1L << (DOUBLE - 70)) | (1L << (INTEGER - 70)) | (1L << (LONG - 70)))) != 0) || ((((_la - 182)) & ~0x3f) == 0 && ((1L << (_la - 182)) & ((1L << (SINGLE - 182)) | (1L << (STRING - 182)) | (1L << (VARIANT - 182)))) != 0)) ) { _errHandler.RecoverInline(this); @@ -14300,7 +14310,7 @@ public ComparisonOperatorContext comparisonOperator() { try { EnterOuterAlt(_localctx, 1); { - State = 2228; + State = 2229; _la = _input.La(1); if ( !(_la==IS || _la==LIKE || ((((_la - 210)) & ~0x3f) == 0 && ((1L << (_la - 210)) & ((1L << (EQ - 210)) | (1L << (GEQ - 210)) | (1L << (GT - 210)) | (1L << (LEQ - 210)) | (1L << (LT - 210)) | (1L << (NEQ - 210)))) != 0)) ) { _errHandler.RecoverInline(this); @@ -14488,13 +14498,13 @@ public ComplexTypeContext complexType() { EnterRule(_localctx, 350, RULE_complexType); int _la; try { - State = 2253; + State = 2254; switch ( Interpreter.AdaptivePredict(_input,303,_ctx) ) { case 1: _localctx = new CtLiteralExprContext(_localctx); EnterOuterAlt(_localctx, 1); { - State = 2230; literalExpression(); + State = 2231; literalExpression(); } break; @@ -14502,7 +14512,7 @@ public ComplexTypeContext complexType() { _localctx = new CtLExprContext(_localctx); EnterOuterAlt(_localctx, 2); { - State = 2231; lExpression(0); + State = 2232; lExpression(0); } break; @@ -14510,7 +14520,7 @@ public ComplexTypeContext complexType() { _localctx = new CtBuiltInTypeExprContext(_localctx); EnterOuterAlt(_localctx, 3); { - State = 2232; builtInType(); + State = 2233; builtInType(); } break; @@ -14518,25 +14528,25 @@ public ComplexTypeContext complexType() { _localctx = new CtParenthesizedExprContext(_localctx); EnterOuterAlt(_localctx, 4); { - State = 2233; Match(LPAREN); - State = 2235; + State = 2234; Match(LPAREN); + State = 2236; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2234; whiteSpace(); + State = 2235; whiteSpace(); } } - State = 2237; complexType(); - State = 2239; + State = 2238; complexType(); + State = 2240; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2238; whiteSpace(); + State = 2239; whiteSpace(); } } - State = 2241; Match(RPAREN); + State = 2242; Match(RPAREN); } break; @@ -14544,9 +14554,9 @@ public ComplexTypeContext complexType() { _localctx = new CtTypeofexprContext(_localctx); EnterOuterAlt(_localctx, 5); { - State = 2243; Match(TYPEOF); - State = 2244; whiteSpace(); - State = 2245; complexType(); + State = 2244; Match(TYPEOF); + State = 2245; whiteSpace(); + State = 2246; complexType(); } break; @@ -14554,9 +14564,9 @@ public ComplexTypeContext complexType() { _localctx = new CtNewExprContext(_localctx); EnterOuterAlt(_localctx, 6); { - State = 2247; Match(NEW); - State = 2248; whiteSpace(); - State = 2249; complexType(); + State = 2248; Match(NEW); + State = 2249; whiteSpace(); + State = 2250; complexType(); } break; @@ -14564,8 +14574,8 @@ public ComplexTypeContext complexType() { _localctx = new CtMarkedFileNumberExprContext(_localctx); EnterOuterAlt(_localctx, 7); { - State = 2251; Match(HASH); - State = 2252; expression(0); + State = 2252; Match(HASH); + State = 2253; expression(0); } break; } @@ -14620,29 +14630,30 @@ public FieldLengthContext fieldLength() { try { EnterOuterAlt(_localctx, 1); { - State = 2255; Match(MULT); - State = 2257; + State = 2256; Match(MULT); + State = 2258; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2256; whiteSpace(); + State = 2257; whiteSpace(); } } - State = 2261; + State = 2262; switch (_input.La(1)) { case OCTLITERAL: case HEXLITERAL: case FLOATLITERAL: case INTEGERLITERAL: { - State = 2259; numberLiteral(); + State = 2260; numberLiteral(); } break; case ABS: case ANY: case ARRAY: case B_CHAR: + case BF: case CBOOL: case CBYTE: case CCUR: @@ -14758,7 +14769,7 @@ public FieldLengthContext fieldLength() { case LOAD: case RESUME_NEXT: { - State = 2260; identifierValue(); + State = 2261; identifierValue(); } break; default: @@ -14809,12 +14820,13 @@ public StatementLabelDefinitionContext statementLabelDefinition() { StatementLabelDefinitionContext _localctx = new StatementLabelDefinitionContext(_ctx, State); EnterRule(_localctx, 354, RULE_statementLabelDefinition); try { - State = 2265; + State = 2266; switch (_input.La(1)) { case ABS: case ANY: case ARRAY: case B_CHAR: + case BF: case CBOOL: case CBYTE: case CCUR: @@ -14994,7 +15006,7 @@ public StatementLabelDefinitionContext statementLabelDefinition() { case RESUME_NEXT: EnterOuterAlt(_localctx, 1); { - State = 2263; identifierStatementLabel(); + State = 2264; identifierStatementLabel(); } break; case OCTLITERAL: @@ -15003,7 +15015,7 @@ public StatementLabelDefinitionContext statementLabelDefinition() { case INTEGERLITERAL: EnterOuterAlt(_localctx, 2); { - State = 2264; lineNumberLabel(); + State = 2265; lineNumberLabel(); } break; default: @@ -15057,16 +15069,16 @@ public IdentifierStatementLabelContext identifierStatementLabel() { try { EnterOuterAlt(_localctx, 1); { - State = 2267; unrestrictedIdentifier(); - State = 2269; + State = 2268; unrestrictedIdentifier(); + State = 2270; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2268; whiteSpace(); + State = 2269; whiteSpace(); } } - State = 2271; Match(COLON); + State = 2272; Match(COLON); } } catch (RecognitionException re) { @@ -15115,20 +15127,20 @@ public LineNumberLabelContext lineNumberLabel() { try { EnterOuterAlt(_localctx, 1); { - State = 2273; numberLiteral(); - State = 2275; + State = 2274; numberLiteral(); + State = 2276; switch ( Interpreter.AdaptivePredict(_input,308,_ctx) ) { case 1: { - State = 2274; whiteSpace(); + State = 2275; whiteSpace(); } break; } - State = 2278; + State = 2279; switch ( Interpreter.AdaptivePredict(_input,309,_ctx) ) { case 1: { - State = 2277; Match(COLON); + State = 2278; Match(COLON); } break; } @@ -15178,7 +15190,7 @@ public NumberLiteralContext numberLiteral() { try { EnterOuterAlt(_localctx, 1); { - State = 2280; + State = 2281; _la = _input.La(1); if ( !(((((_la - 225)) & ~0x3f) == 0 && ((1L << (_la - 225)) & ((1L << (OCTLITERAL - 225)) | (1L << (HEXLITERAL - 225)) | (1L << (FLOATLITERAL - 225)) | (1L << (INTEGERLITERAL - 225)))) != 0)) ) { _errHandler.RecoverInline(this); @@ -15240,42 +15252,42 @@ public TypeContext type() { try { EnterOuterAlt(_localctx, 1); { - State = 2284; + State = 2285; switch ( Interpreter.AdaptivePredict(_input,310,_ctx) ) { case 1: { - State = 2282; baseType(); + State = 2283; baseType(); } break; case 2: { - State = 2283; complexType(); + State = 2284; complexType(); } break; } - State = 2294; + State = 2295; switch ( Interpreter.AdaptivePredict(_input,313,_ctx) ) { case 1: { - State = 2287; + State = 2288; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2286; whiteSpace(); + State = 2287; whiteSpace(); } } - State = 2289; Match(LPAREN); - State = 2291; + State = 2290; Match(LPAREN); + State = 2292; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2290; whiteSpace(); + State = 2291; whiteSpace(); } } - State = 2293; Match(RPAREN); + State = 2294; Match(RPAREN); } break; } @@ -15328,7 +15340,7 @@ public TypeHintContext typeHint() { try { EnterOuterAlt(_localctx, 1); { - State = 2296; + State = 2297; _la = _input.La(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << EXCLAMATIONPOINT) | (1L << HASH) | (1L << AT) | (1L << PERCENT) | (1L << DOLLAR) | (1L << AMPERSAND))) != 0) || _la==POW) ) { _errHandler.RecoverInline(this); @@ -15380,7 +15392,7 @@ public VisibilityContext visibility() { try { EnterOuterAlt(_localctx, 1); { - State = 2298; + State = 2299; _la = _input.La(1); if ( !(((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & ((1L << (FRIEND - 112)) | (1L << (GLOBAL - 112)) | (1L << (PRIVATE - 112)) | (1L << (PUBLIC - 112)))) != 0)) ) { _errHandler.RecoverInline(this); @@ -15982,7 +15994,7 @@ private ExpressionContext expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 2334; + State = 2335; switch ( Interpreter.AdaptivePredict(_input,318,_ctx) ) { case 1: { @@ -15990,9 +16002,9 @@ private ExpressionContext expression(int _p) { _ctx = _localctx; _prevctx = _localctx; - State = 2301; Match(TYPEOF); - State = 2302; whiteSpace(); - State = 2303; expression(17); + State = 2302; Match(TYPEOF); + State = 2303; whiteSpace(); + State = 2304; expression(17); } break; @@ -16001,9 +16013,9 @@ private ExpressionContext expression(int _p) { _localctx = new NewExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2305; Match(NEW); - State = 2306; whiteSpace(); - State = 2307; expression(16); + State = 2306; Match(NEW); + State = 2307; whiteSpace(); + State = 2308; expression(16); } break; @@ -16012,16 +16024,16 @@ private ExpressionContext expression(int _p) { _localctx = new UnaryMinusOpContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2309; Match(MINUS); - State = 2311; + State = 2310; Match(MINUS); + State = 2312; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2310; whiteSpace(); + State = 2311; whiteSpace(); } } - State = 2313; expression(14); + State = 2314; expression(14); } break; @@ -16030,16 +16042,16 @@ private ExpressionContext expression(int _p) { _localctx = new LogicalNotOpContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2314; Match(NOT); - State = 2316; + State = 2315; Match(NOT); + State = 2317; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2315; whiteSpace(); + State = 2316; whiteSpace(); } } - State = 2318; expression(7); + State = 2319; expression(7); } break; @@ -16048,8 +16060,8 @@ private ExpressionContext expression(int _p) { _localctx = new MarkedFileNumberExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2319; Match(HASH); - State = 2320; expression(1); + State = 2320; Match(HASH); + State = 2321; expression(1); } break; @@ -16058,7 +16070,7 @@ private ExpressionContext expression(int _p) { _localctx = new LiteralExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2321; literalExpression(); + State = 2322; literalExpression(); } break; @@ -16067,7 +16079,7 @@ private ExpressionContext expression(int _p) { _localctx = new LExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2322; lExpression(0); + State = 2323; lExpression(0); } break; @@ -16076,7 +16088,7 @@ private ExpressionContext expression(int _p) { _localctx = new BuiltInTypeExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2323; builtInType(); + State = 2324; builtInType(); } break; @@ -16085,30 +16097,30 @@ private ExpressionContext expression(int _p) { _localctx = new ParenthesizedExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2324; Match(LPAREN); - State = 2326; + State = 2325; Match(LPAREN); + State = 2327; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2325; whiteSpace(); + State = 2326; whiteSpace(); } } - State = 2328; expression(0); - State = 2330; + State = 2329; expression(0); + State = 2331; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2329; whiteSpace(); + State = 2330; whiteSpace(); } } - State = 2332; Match(RPAREN); + State = 2333; Match(RPAREN); } break; } _ctx.stop = _input.Lt(-1); - State = 2446; + State = 2447; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,344,_ctx); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ) { @@ -16116,32 +16128,32 @@ private ExpressionContext expression(int _p) { if ( _parseListeners!=null ) TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 2444; + State = 2445; switch ( Interpreter.AdaptivePredict(_input,343,_ctx) ) { case 1: { _localctx = new PowOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2336; + State = 2337; if (!(Precpred(_ctx, 15))) throw new FailedPredicateException(this, "Precpred(_ctx, 15)"); - State = 2338; + State = 2339; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2337; whiteSpace(); + State = 2338; whiteSpace(); } } - State = 2340; Match(POW); - State = 2342; + State = 2341; Match(POW); + State = 2343; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2341; whiteSpace(); + State = 2342; whiteSpace(); } } - State = 2344; expression(16); + State = 2345; expression(16); } break; @@ -16149,31 +16161,31 @@ private ExpressionContext expression(int _p) { { _localctx = new MultOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2345; + State = 2346; if (!(Precpred(_ctx, 13))) throw new FailedPredicateException(this, "Precpred(_ctx, 13)"); - State = 2347; + State = 2348; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2346; whiteSpace(); + State = 2347; whiteSpace(); } } - State = 2349; + State = 2350; _la = _input.La(1); if ( !(_la==DIV || _la==MULT) ) { _errHandler.RecoverInline(this); } Consume(); - State = 2351; + State = 2352; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2350; whiteSpace(); + State = 2351; whiteSpace(); } } - State = 2353; expression(14); + State = 2354; expression(14); } break; @@ -16181,26 +16193,26 @@ private ExpressionContext expression(int _p) { { _localctx = new IntDivOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2354; + State = 2355; if (!(Precpred(_ctx, 12))) throw new FailedPredicateException(this, "Precpred(_ctx, 12)"); - State = 2356; + State = 2357; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2355; whiteSpace(); + State = 2356; whiteSpace(); } } - State = 2358; Match(INTDIV); - State = 2360; + State = 2359; Match(INTDIV); + State = 2361; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2359; whiteSpace(); + State = 2360; whiteSpace(); } } - State = 2362; expression(13); + State = 2363; expression(13); } break; @@ -16208,26 +16220,26 @@ private ExpressionContext expression(int _p) { { _localctx = new ModOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2363; + State = 2364; if (!(Precpred(_ctx, 11))) throw new FailedPredicateException(this, "Precpred(_ctx, 11)"); - State = 2365; + State = 2366; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2364; whiteSpace(); + State = 2365; whiteSpace(); } } - State = 2367; Match(MOD); - State = 2369; + State = 2368; Match(MOD); + State = 2370; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2368; whiteSpace(); + State = 2369; whiteSpace(); } } - State = 2371; expression(12); + State = 2372; expression(12); } break; @@ -16235,31 +16247,31 @@ private ExpressionContext expression(int _p) { { _localctx = new AddOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2372; + State = 2373; if (!(Precpred(_ctx, 10))) throw new FailedPredicateException(this, "Precpred(_ctx, 10)"); - State = 2374; + State = 2375; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2373; whiteSpace(); + State = 2374; whiteSpace(); } } - State = 2376; + State = 2377; _la = _input.La(1); if ( !(_la==MINUS || _la==PLUS) ) { _errHandler.RecoverInline(this); } Consume(); - State = 2378; + State = 2379; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2377; whiteSpace(); + State = 2378; whiteSpace(); } } - State = 2380; expression(11); + State = 2381; expression(11); } break; @@ -16267,26 +16279,26 @@ private ExpressionContext expression(int _p) { { _localctx = new ConcatOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2381; + State = 2382; if (!(Precpred(_ctx, 9))) throw new FailedPredicateException(this, "Precpred(_ctx, 9)"); - State = 2383; + State = 2384; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2382; whiteSpace(); + State = 2383; whiteSpace(); } } - State = 2385; Match(AMPERSAND); - State = 2387; + State = 2386; Match(AMPERSAND); + State = 2388; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2386; whiteSpace(); + State = 2387; whiteSpace(); } } - State = 2389; expression(10); + State = 2390; expression(10); } break; @@ -16294,31 +16306,31 @@ private ExpressionContext expression(int _p) { { _localctx = new RelationalOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2390; + State = 2391; if (!(Precpred(_ctx, 8))) throw new FailedPredicateException(this, "Precpred(_ctx, 8)"); - State = 2392; + State = 2393; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2391; whiteSpace(); + State = 2392; whiteSpace(); } } - State = 2394; + State = 2395; _la = _input.La(1); if ( !(_la==IS || _la==LIKE || ((((_la - 210)) & ~0x3f) == 0 && ((1L << (_la - 210)) & ((1L << (EQ - 210)) | (1L << (GEQ - 210)) | (1L << (GT - 210)) | (1L << (LEQ - 210)) | (1L << (LT - 210)) | (1L << (NEQ - 210)))) != 0)) ) { _errHandler.RecoverInline(this); } Consume(); - State = 2396; + State = 2397; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2395; whiteSpace(); + State = 2396; whiteSpace(); } } - State = 2398; expression(9); + State = 2399; expression(9); } break; @@ -16326,26 +16338,26 @@ private ExpressionContext expression(int _p) { { _localctx = new LogicalAndOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2399; + State = 2400; if (!(Precpred(_ctx, 6))) throw new FailedPredicateException(this, "Precpred(_ctx, 6)"); - State = 2401; + State = 2402; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2400; whiteSpace(); + State = 2401; whiteSpace(); } } - State = 2403; Match(AND); - State = 2405; + State = 2404; Match(AND); + State = 2406; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2404; whiteSpace(); + State = 2405; whiteSpace(); } } - State = 2407; expression(7); + State = 2408; expression(7); } break; @@ -16353,26 +16365,26 @@ private ExpressionContext expression(int _p) { { _localctx = new LogicalOrOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2408; + State = 2409; if (!(Precpred(_ctx, 5))) throw new FailedPredicateException(this, "Precpred(_ctx, 5)"); - State = 2410; + State = 2411; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2409; whiteSpace(); + State = 2410; whiteSpace(); } } - State = 2412; Match(OR); - State = 2414; + State = 2413; Match(OR); + State = 2415; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2413; whiteSpace(); + State = 2414; whiteSpace(); } } - State = 2416; expression(6); + State = 2417; expression(6); } break; @@ -16380,26 +16392,26 @@ private ExpressionContext expression(int _p) { { _localctx = new LogicalXorOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2417; + State = 2418; if (!(Precpred(_ctx, 4))) throw new FailedPredicateException(this, "Precpred(_ctx, 4)"); - State = 2419; + State = 2420; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2418; whiteSpace(); + State = 2419; whiteSpace(); } } - State = 2421; Match(XOR); - State = 2423; + State = 2422; Match(XOR); + State = 2424; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2422; whiteSpace(); + State = 2423; whiteSpace(); } } - State = 2425; expression(5); + State = 2426; expression(5); } break; @@ -16407,26 +16419,26 @@ private ExpressionContext expression(int _p) { { _localctx = new LogicalEqvOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2426; + State = 2427; if (!(Precpred(_ctx, 3))) throw new FailedPredicateException(this, "Precpred(_ctx, 3)"); - State = 2428; + State = 2429; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2427; whiteSpace(); + State = 2428; whiteSpace(); } } - State = 2430; Match(EQV); - State = 2432; + State = 2431; Match(EQV); + State = 2433; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2431; whiteSpace(); + State = 2432; whiteSpace(); } } - State = 2434; expression(4); + State = 2435; expression(4); } break; @@ -16434,32 +16446,32 @@ private ExpressionContext expression(int _p) { { _localctx = new LogicalImpOpContext(new ExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_expression); - State = 2435; + State = 2436; if (!(Precpred(_ctx, 2))) throw new FailedPredicateException(this, "Precpred(_ctx, 2)"); - State = 2437; + State = 2438; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2436; whiteSpace(); + State = 2437; whiteSpace(); } } - State = 2439; Match(IMP); - State = 2441; + State = 2440; Match(IMP); + State = 2442; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2440; whiteSpace(); + State = 2441; whiteSpace(); } } - State = 2443; expression(3); + State = 2444; expression(3); } break; } } } - State = 2448; + State = 2449; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,344,_ctx); } @@ -16513,7 +16525,7 @@ public LiteralExpressionContext literalExpression() { LiteralExpressionContext _localctx = new LiteralExpressionContext(_ctx, State); EnterRule(_localctx, 370, RULE_literalExpression); try { - State = 2456; + State = 2457; switch (_input.La(1)) { case OCTLITERAL: case HEXLITERAL: @@ -16521,19 +16533,19 @@ public LiteralExpressionContext literalExpression() { case INTEGERLITERAL: EnterOuterAlt(_localctx, 1); { - State = 2449; numberLiteral(); + State = 2450; numberLiteral(); } break; case DATELITERAL: EnterOuterAlt(_localctx, 2); { - State = 2450; Match(DATELITERAL); + State = 2451; Match(DATELITERAL); } break; case STRINGLITERAL: EnterOuterAlt(_localctx, 3); { - State = 2451; Match(STRINGLITERAL); + State = 2452; Match(STRINGLITERAL); } break; case EMPTY: @@ -16543,12 +16555,12 @@ public LiteralExpressionContext literalExpression() { case TRUE: EnterOuterAlt(_localctx, 4); { - State = 2452; literalIdentifier(); - State = 2454; + State = 2453; literalIdentifier(); + State = 2455; switch ( Interpreter.AdaptivePredict(_input,345,_ctx) ) { case 1: { - State = 2453; typeHint(); + State = 2454; typeHint(); } break; } @@ -16604,26 +16616,26 @@ public LiteralIdentifierContext literalIdentifier() { LiteralIdentifierContext _localctx = new LiteralIdentifierContext(_ctx, State); EnterRule(_localctx, 372, RULE_literalIdentifier); try { - State = 2461; + State = 2462; switch (_input.La(1)) { case FALSE: case TRUE: EnterOuterAlt(_localctx, 1); { - State = 2458; booleanLiteralIdentifier(); + State = 2459; booleanLiteralIdentifier(); } break; case NOTHING: EnterOuterAlt(_localctx, 2); { - State = 2459; objectLiteralIdentifier(); + State = 2460; objectLiteralIdentifier(); } break; case EMPTY: case NULL: EnterOuterAlt(_localctx, 3); { - State = 2460; variantLiteralIdentifier(); + State = 2461; variantLiteralIdentifier(); } break; default: @@ -16672,7 +16684,7 @@ public BooleanLiteralIdentifierContext booleanLiteralIdentifier() { try { EnterOuterAlt(_localctx, 1); { - State = 2463; + State = 2464; _la = _input.La(1); if ( !(_la==FALSE || _la==TRUE) ) { _errHandler.RecoverInline(this); @@ -16720,7 +16732,7 @@ public ObjectLiteralIdentifierContext objectLiteralIdentifier() { try { EnterOuterAlt(_localctx, 1); { - State = 2465; Match(NOTHING); + State = 2466; Match(NOTHING); } } catch (RecognitionException re) { @@ -16765,7 +16777,7 @@ public VariantLiteralIdentifierContext variantLiteralIdentifier() { try { EnterOuterAlt(_localctx, 1); { - State = 2467; + State = 2468; _la = _input.La(1); if ( !(_la==EMPTY || _la==NULL) ) { _errHandler.RecoverInline(this); @@ -16984,7 +16996,7 @@ private LExpressionContext lExpression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 2482; + State = 2483; switch ( Interpreter.AdaptivePredict(_input,350,_ctx) ) { case 1: { @@ -16992,7 +17004,7 @@ private LExpressionContext lExpression(int _p) { _ctx = _localctx; _prevctx = _localctx; - State = 2470; Match(ME); + State = 2471; Match(ME); } break; @@ -17001,7 +17013,7 @@ private LExpressionContext lExpression(int _p) { _localctx = new SimpleNameExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2471; identifier(); + State = 2472; identifier(); } break; @@ -17010,16 +17022,16 @@ private LExpressionContext lExpression(int _p) { _localctx = new WithMemberAccessExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2472; Match(DOT); - State = 2474; + State = 2473; Match(DOT); + State = 2475; _la = _input.La(1); if (_la==LINE_CONTINUATION) { { - State = 2473; mandatoryLineContinuation(); + State = 2474; mandatoryLineContinuation(); } } - State = 2476; unrestrictedIdentifier(); + State = 2477; unrestrictedIdentifier(); } break; @@ -17028,21 +17040,21 @@ private LExpressionContext lExpression(int _p) { _localctx = new WithDictionaryAccessExprContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - State = 2477; Match(EXCLAMATIONPOINT); - State = 2479; + State = 2478; Match(EXCLAMATIONPOINT); + State = 2480; _la = _input.La(1); if (_la==LINE_CONTINUATION) { { - State = 2478; mandatoryLineContinuation(); + State = 2479; mandatoryLineContinuation(); } } - State = 2481; unrestrictedIdentifier(); + State = 2482; unrestrictedIdentifier(); } break; } _ctx.stop = _input.Lt(-1); - State = 2519; + State = 2520; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,360,_ctx); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ) { @@ -17050,48 +17062,48 @@ private LExpressionContext lExpression(int _p) { if ( _parseListeners!=null ) TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 2517; + State = 2518; switch ( Interpreter.AdaptivePredict(_input,359,_ctx) ) { case 1: { _localctx = new IndexExprContext(new LExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_lExpression); - State = 2484; + State = 2485; if (!(Precpred(_ctx, 7))) throw new FailedPredicateException(this, "Precpred(_ctx, 7)"); - State = 2486; + State = 2487; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2485; whiteSpace(); + State = 2486; whiteSpace(); } } - State = 2488; Match(LPAREN); - State = 2490; + State = 2489; Match(LPAREN); + State = 2491; switch ( Interpreter.AdaptivePredict(_input,352,_ctx) ) { case 1: { - State = 2489; whiteSpace(); + State = 2490; whiteSpace(); } break; } - State = 2493; + State = 2494; switch ( Interpreter.AdaptivePredict(_input,353,_ctx) ) { case 1: { - State = 2492; argumentList(); + State = 2493; argumentList(); } break; } - State = 2496; + State = 2497; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2495; whiteSpace(); + State = 2496; whiteSpace(); } } - State = 2498; Match(RPAREN); + State = 2499; Match(RPAREN); } break; @@ -17099,26 +17111,26 @@ private LExpressionContext lExpression(int _p) { { _localctx = new MemberAccessExprContext(new LExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_lExpression); - State = 2499; + State = 2500; if (!(Precpred(_ctx, 6))) throw new FailedPredicateException(this, "Precpred(_ctx, 6)"); - State = 2501; + State = 2502; _la = _input.La(1); if (_la==LINE_CONTINUATION) { { - State = 2500; mandatoryLineContinuation(); + State = 2501; mandatoryLineContinuation(); } } - State = 2503; Match(DOT); - State = 2505; + State = 2504; Match(DOT); + State = 2506; _la = _input.La(1); if (_la==LINE_CONTINUATION) { { - State = 2504; mandatoryLineContinuation(); + State = 2505; mandatoryLineContinuation(); } } - State = 2507; unrestrictedIdentifier(); + State = 2508; unrestrictedIdentifier(); } break; @@ -17126,32 +17138,32 @@ private LExpressionContext lExpression(int _p) { { _localctx = new DictionaryAccessExprContext(new LExpressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_lExpression); - State = 2508; + State = 2509; if (!(Precpred(_ctx, 5))) throw new FailedPredicateException(this, "Precpred(_ctx, 5)"); - State = 2510; + State = 2511; _la = _input.La(1); if (_la==LINE_CONTINUATION) { { - State = 2509; mandatoryLineContinuation(); + State = 2510; mandatoryLineContinuation(); } } - State = 2512; Match(EXCLAMATIONPOINT); - State = 2514; + State = 2513; Match(EXCLAMATIONPOINT); + State = 2515; _la = _input.La(1); if (_la==LINE_CONTINUATION) { { - State = 2513; mandatoryLineContinuation(); + State = 2514; mandatoryLineContinuation(); } } - State = 2516; unrestrictedIdentifier(); + State = 2517; unrestrictedIdentifier(); } break; } } } - State = 2521; + State = 2522; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,360,_ctx); } @@ -17207,69 +17219,69 @@ public BuiltInTypeContext builtInType() { EnterRule(_localctx, 382, RULE_builtInType); int _la; try { - State = 2543; + State = 2544; switch ( Interpreter.AdaptivePredict(_input,365,_ctx) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2522; baseType(); + State = 2523; baseType(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2523; Match(L_SQUARE_BRACKET); - State = 2525; + State = 2524; Match(L_SQUARE_BRACKET); + State = 2526; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2524; whiteSpace(); + State = 2525; whiteSpace(); } } - State = 2527; baseType(); - State = 2529; + State = 2528; baseType(); + State = 2530; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2528; whiteSpace(); + State = 2529; whiteSpace(); } } - State = 2531; Match(R_SQUARE_BRACKET); + State = 2532; Match(R_SQUARE_BRACKET); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2533; Match(OBJECT); + State = 2534; Match(OBJECT); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2534; Match(L_SQUARE_BRACKET); - State = 2536; + State = 2535; Match(L_SQUARE_BRACKET); + State = 2537; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2535; whiteSpace(); + State = 2536; whiteSpace(); } } - State = 2538; Match(OBJECT); - State = 2540; + State = 2539; Match(OBJECT); + State = 2541; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2539; whiteSpace(); + State = 2540; whiteSpace(); } } - State = 2542; Match(R_SQUARE_BRACKET); + State = 2543; Match(R_SQUARE_BRACKET); } break; } @@ -17316,7 +17328,7 @@ public ArgumentListContext argumentList() { try { EnterOuterAlt(_localctx, 1); { - State = 2545; positionalOrNamedArgumentList(); + State = 2546; positionalOrNamedArgumentList(); } } catch (RecognitionException re) { @@ -17375,65 +17387,65 @@ public PositionalOrNamedArgumentListContext positionalOrNamedArgumentList() { EnterRule(_localctx, 386, RULE_positionalOrNamedArgumentList); try { int _alt; - State = 2567; + State = 2568; switch ( Interpreter.AdaptivePredict(_input,370,_ctx) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2553; + State = 2554; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,367,_ctx); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ) { if ( _alt==1 ) { { { - State = 2547; positionalArgumentOrMissing(); - State = 2549; + State = 2548; positionalArgumentOrMissing(); + State = 2550; switch ( Interpreter.AdaptivePredict(_input,366,_ctx) ) { case 1: { - State = 2548; whiteSpace(); + State = 2549; whiteSpace(); } break; } } } } - State = 2555; + State = 2556; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,367,_ctx); } - State = 2556; requiredPositionalArgument(); + State = 2557; requiredPositionalArgument(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2563; + State = 2564; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,369,_ctx); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ) { if ( _alt==1 ) { { { - State = 2557; positionalArgumentOrMissing(); - State = 2559; + State = 2558; positionalArgumentOrMissing(); + State = 2560; switch ( Interpreter.AdaptivePredict(_input,368,_ctx) ) { case 1: { - State = 2558; whiteSpace(); + State = 2559; whiteSpace(); } break; } } } } - State = 2565; + State = 2566; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,369,_ctx); } - State = 2566; namedArgumentList(); + State = 2567; namedArgumentList(); } break; } @@ -17511,12 +17523,13 @@ public PositionalArgumentOrMissingContext positionalArgumentOrMissing() { EnterRule(_localctx, 388, RULE_positionalArgumentOrMissing); int _la; try { - State = 2579; + State = 2580; switch (_input.La(1)) { case ABS: case ANY: case ARRAY: case B_CHAR: + case BF: case CBOOL: case CBYTE: case CCUR: @@ -17646,16 +17659,16 @@ public PositionalArgumentOrMissingContext positionalArgumentOrMissing() { _localctx = new SpecifiedPositionalArgumentContext(_localctx); EnterOuterAlt(_localctx, 1); { - State = 2569; positionalArgument(); - State = 2571; + State = 2570; positionalArgument(); + State = 2572; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2570; whiteSpace(); + State = 2571; whiteSpace(); } } - State = 2573; Match(COMMA); + State = 2574; Match(COMMA); } break; case COMMA: @@ -17664,15 +17677,15 @@ public PositionalArgumentOrMissingContext positionalArgumentOrMissing() { _localctx = new MissingPositionalArgumentContext(_localctx); EnterOuterAlt(_localctx, 2); { - State = 2576; + State = 2577; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2575; whiteSpace(); + State = 2576; whiteSpace(); } } - State = 2578; Match(COMMA); + State = 2579; Match(COMMA); } break; default: @@ -17721,7 +17734,7 @@ public PositionalArgumentContext positionalArgument() { try { EnterOuterAlt(_localctx, 1); { - State = 2581; argumentExpression(); + State = 2582; argumentExpression(); } } catch (RecognitionException re) { @@ -17766,7 +17779,7 @@ public RequiredPositionalArgumentContext requiredPositionalArgument() { try { EnterOuterAlt(_localctx, 1); { - State = 2583; argumentExpression(); + State = 2584; argumentExpression(); } } catch (RecognitionException re) { @@ -17826,36 +17839,36 @@ public NamedArgumentListContext namedArgumentList() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 2585; namedArgument(); - State = 2596; + State = 2586; namedArgument(); + State = 2597; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,376,_ctx); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ) { if ( _alt==1 ) { { { - State = 2587; + State = 2588; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2586; whiteSpace(); + State = 2587; whiteSpace(); } } - State = 2589; Match(COMMA); - State = 2591; + State = 2590; Match(COMMA); + State = 2592; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2590; whiteSpace(); + State = 2591; whiteSpace(); } } - State = 2593; namedArgument(); + State = 2594; namedArgument(); } } } - State = 2598; + State = 2599; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,376,_ctx); } @@ -17914,25 +17927,25 @@ public NamedArgumentContext namedArgument() { try { EnterOuterAlt(_localctx, 1); { - State = 2599; unrestrictedIdentifier(); - State = 2601; + State = 2600; unrestrictedIdentifier(); + State = 2602; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2600; whiteSpace(); + State = 2601; whiteSpace(); } } - State = 2603; Match(ASSIGN); - State = 2605; + State = 2604; Match(ASSIGN); + State = 2606; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2604; whiteSpace(); + State = 2605; whiteSpace(); } } - State = 2607; argumentExpression(); + State = 2608; argumentExpression(); } } catch (RecognitionException re) { @@ -17992,39 +18005,39 @@ public ArgumentExpressionContext argumentExpression() { ArgumentExpressionContext _localctx = new ArgumentExpressionContext(_ctx, State); EnterRule(_localctx, 398, RULE_argumentExpression); try { - State = 2621; + State = 2622; switch ( Interpreter.AdaptivePredict(_input,380,_ctx) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2611; + State = 2612; switch ( Interpreter.AdaptivePredict(_input,379,_ctx) ) { case 1: { - State = 2609; Match(BYVAL); - State = 2610; whiteSpace(); + State = 2610; Match(BYVAL); + State = 2611; whiteSpace(); } break; } - State = 2613; expression(0); + State = 2614; expression(0); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2614; addressOfExpression(); + State = 2615; addressOfExpression(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2615; lowerBoundArgumentExpression(); - State = 2616; whiteSpace(); - State = 2617; Match(TO); - State = 2618; whiteSpace(); - State = 2619; upperBoundArgumentExpression(); + State = 2616; lowerBoundArgumentExpression(); + State = 2617; whiteSpace(); + State = 2618; Match(TO); + State = 2619; whiteSpace(); + State = 2620; upperBoundArgumentExpression(); } break; } @@ -18071,7 +18084,7 @@ public LowerBoundArgumentExpressionContext lowerBoundArgumentExpression() { try { EnterOuterAlt(_localctx, 1); { - State = 2623; expression(0); + State = 2624; expression(0); } } catch (RecognitionException re) { @@ -18116,7 +18129,7 @@ public UpperBoundArgumentExpressionContext upperBoundArgumentExpression() { try { EnterOuterAlt(_localctx, 1); { - State = 2625; expression(0); + State = 2626; expression(0); } } catch (RecognitionException re) { @@ -18165,9 +18178,9 @@ public AddressOfExpressionContext addressOfExpression() { try { EnterOuterAlt(_localctx, 1); { - State = 2627; Match(ADDRESSOF); - State = 2628; whiteSpace(); - State = 2629; expression(0); + State = 2628; Match(ADDRESSOF); + State = 2629; whiteSpace(); + State = 2630; expression(0); } } catch (RecognitionException re) { @@ -18332,7 +18345,7 @@ public KeywordContext keyword() { try { EnterOuterAlt(_localctx, 1); { - State = 2631; + State = 2632; _la = _input.La(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABS) | (1L << ANY) | (1L << ARRAY) | (1L << B_CHAR) | (1L << CBOOL) | (1L << CBYTE) | (1L << CCUR) | (1L << CDATE) | (1L << CDBL) | (1L << CDEC) | (1L << CINT) | (1L << CLNG) | (1L << CLNGLNG) | (1L << CLNGPTR) | (1L << CSNG) | (1L << CSTR) | (1L << CURRENCY) | (1L << CVAR) | (1L << CVERR) | (1L << DEBUG) | (1L << DOEVENTS) | (1L << FIX) | (1L << INPUTB) | (1L << INT) | (1L << LBOUND) | (1L << LEN) | (1L << LENB) | (1L << LONGLONG) | (1L << LONGPTR) | (1L << MIDB) | (1L << MIDBTYPESUFFIX) | (1L << MIDTYPESUFFIX) | (1L << PSET) | (1L << SGN) | (1L << UBOUND) | (1L << ACCESS) | (1L << ADDRESSOF) | (1L << ALIAS) | (1L << AND) | (1L << ATTRIBUTE) | (1L << APPEND) | (1L << BEGIN) | (1L << BINARY) | (1L << BOOLEAN) | (1L << BYVAL) | (1L << BYREF) | (1L << BYTE))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (CLASS - 66)) | (1L << (CLOSE - 66)) | (1L << (DATABASE - 66)) | (1L << (DATE - 66)) | (1L << (DOUBLE - 66)) | (1L << (END - 66)) | (1L << (EQV - 66)) | (1L << (ERROR - 66)) | (1L << (FALSE - 66)) | (1L << (GET - 66)) | (1L << (IMP - 66)) | (1L << (IN - 66)) | (1L << (INPUT - 66)) | (1L << (IS - 66)) | (1L << (INTEGER - 66)) | (1L << (LOCK - 66)) | (1L << (LONG - 66)))) != 0) || ((((_la - 130)) & ~0x3f) == 0 && ((1L << (_la - 130)) & ((1L << (LIB - 130)) | (1L << (LIKE - 130)) | (1L << (LINE_INPUT - 130)) | (1L << (LOCK_READ - 130)) | (1L << (LOCK_WRITE - 130)) | (1L << (LOCK_READ_WRITE - 130)) | (1L << (ME - 130)) | (1L << (MID - 130)) | (1L << (MOD - 130)) | (1L << (NAME - 130)) | (1L << (NEW - 130)) | (1L << (NOT - 130)) | (1L << (NOTHING - 130)) | (1L << (NULL - 130)) | (1L << (OBJECT - 130)) | (1L << (ON_ERROR - 130)) | (1L << (OPEN - 130)) | (1L << (OPTIONAL - 130)) | (1L << (OR - 130)) | (1L << (OUTPUT - 130)) | (1L << (PARAMARRAY - 130)) | (1L << (PRESERVE - 130)) | (1L << (PRINT - 130)) | (1L << (PTRSAFE - 130)) | (1L << (PUT - 130)) | (1L << (RANDOM - 130)) | (1L << (READ - 130)) | (1L << (READ_WRITE - 130)) | (1L << (REM - 130)) | (1L << (RESET - 130)) | (1L << (SEEK - 130)) | (1L << (SHARED - 130)) | (1L << (SINGLE - 130)) | (1L << (SPC - 130)) | (1L << (STEP - 130)) | (1L << (STRING - 130)) | (1L << (TAB - 130)) | (1L << (TEXT - 130)) | (1L << (THEN - 130)) | (1L << (TO - 130)) | (1L << (TRUE - 130)))) != 0) || ((((_la - 195)) & ~0x3f) == 0 && ((1L << (_la - 195)) & ((1L << (TYPEOF - 195)) | (1L << (UNLOCK - 195)) | (1L << (UNTIL - 195)) | (1L << (VARIANT - 195)) | (1L << (VERSION - 195)) | (1L << (WIDTH - 195)) | (1L << (WITHEVENTS - 195)) | (1L << (WRITE - 195)) | (1L << (XOR - 195)) | (1L << (LOAD - 195)) | (1L << (RESUME_NEXT - 195)))) != 0)) ) { _errHandler.RecoverInline(this); @@ -18380,7 +18393,7 @@ public MarkerKeywordContext markerKeyword() { try { EnterOuterAlt(_localctx, 1); { - State = 2633; Match(AS); + State = 2634; Match(AS); } } catch (RecognitionException re) { @@ -18485,7 +18498,7 @@ public StatementKeywordContext statementKeyword() { try { EnterOuterAlt(_localctx, 1); { - State = 2635; + State = 2636; _la = _input.La(1); if ( !(((((_la - 24)) & ~0x3f) == 0 && ((1L << (_la - 24)) & ((1L << (EXIT - 24)) | (1L << (OPTION - 24)) | (1L << (CALL - 24)) | (1L << (CASE - 24)) | (1L << (CONST - 24)) | (1L << (DECLARE - 24)) | (1L << (DEFBOOL - 24)) | (1L << (DEFBYTE - 24)) | (1L << (DEFDATE - 24)) | (1L << (DEFDBL - 24)) | (1L << (DEFCUR - 24)) | (1L << (DEFINT - 24)) | (1L << (DEFLNG - 24)) | (1L << (DEFLNGLNG - 24)) | (1L << (DEFLNGPTR - 24)) | (1L << (DEFOBJ - 24)) | (1L << (DEFSNG - 24)) | (1L << (DEFSTR - 24)) | (1L << (DEFVAR - 24)) | (1L << (DIM - 24)) | (1L << (DO - 24)))) != 0) || ((((_la - 89)) & ~0x3f) == 0 && ((1L << (_la - 89)) & ((1L << (ELSE - 89)) | (1L << (ELSEIF - 89)) | (1L << (END_SELECT - 89)) | (1L << (END_WITH - 89)) | (1L << (ENUM - 89)) | (1L << (ERASE - 89)) | (1L << (EVENT - 89)) | (1L << (EXIT_DO - 89)) | (1L << (EXIT_FOR - 89)) | (1L << (EXIT_FUNCTION - 89)) | (1L << (EXIT_PROPERTY - 89)) | (1L << (EXIT_SUB - 89)) | (1L << (FRIEND - 89)) | (1L << (FOR - 89)) | (1L << (FUNCTION - 89)) | (1L << (GLOBAL - 89)) | (1L << (GOSUB - 89)) | (1L << (GOTO - 89)) | (1L << (IF - 89)) | (1L << (IMPLEMENTS - 89)) | (1L << (LOOP - 89)) | (1L << (LET - 89)) | (1L << (LSET - 89)) | (1L << (NEXT - 89)) | (1L << (ON - 89)))) != 0) || ((((_la - 161)) & ~0x3f) == 0 && ((1L << (_la - 161)) & ((1L << (PRIVATE - 161)) | (1L << (PUBLIC - 161)) | (1L << (RAISEEVENT - 161)) | (1L << (REDIM - 161)) | (1L << (RESUME - 161)) | (1L << (RETURN - 161)) | (1L << (RSET - 161)) | (1L << (SELECT - 161)) | (1L << (SET - 161)) | (1L << (STATIC - 161)) | (1L << (STOP - 161)) | (1L << (SUB - 161)) | (1L << (TYPE - 161)) | (1L << (WEND - 161)) | (1L << (WHILE - 161)) | (1L << (WITH - 161)))) != 0)) ) { _errHandler.RecoverInline(this); @@ -18541,25 +18554,25 @@ public EndOfLineContext endOfLine() { EnterRule(_localctx, 412, RULE_endOfLine); int _la; try { - State = 2648; + State = 2649; switch ( Interpreter.AdaptivePredict(_input,384,_ctx) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2638; + State = 2639; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2637; whiteSpace(); + State = 2638; whiteSpace(); } } - State = 2640; Match(NEWLINE); - State = 2642; + State = 2641; Match(NEWLINE); + State = 2643; switch ( Interpreter.AdaptivePredict(_input,382,_ctx) ) { case 1: { - State = 2641; whiteSpace(); + State = 2642; whiteSpace(); } break; } @@ -18569,15 +18582,15 @@ public EndOfLineContext endOfLine() { case 2: EnterOuterAlt(_localctx, 2); { - State = 2645; + State = 2646; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2644; whiteSpace(); + State = 2645; whiteSpace(); } } - State = 2647; commentOrAnnotation(); + State = 2648; commentOrAnnotation(); } break; } @@ -18639,37 +18652,37 @@ public EndOfStatementContext endOfStatement() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 2660; + State = 2661; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,388,_ctx); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ) { if ( _alt==1 ) { { - State = 2658; + State = 2659; switch ( Interpreter.AdaptivePredict(_input,387,_ctx) ) { case 1: { - State = 2650; endOfLine(); + State = 2651; endOfLine(); } break; case 2: { { - State = 2652; + State = 2653; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2651; whiteSpace(); + State = 2652; whiteSpace(); } } - State = 2654; Match(COLON); - State = 2656; + State = 2655; Match(COLON); + State = 2657; switch ( Interpreter.AdaptivePredict(_input,386,_ctx) ) { case 1: { - State = 2655; whiteSpace(); + State = 2656; whiteSpace(); } break; } @@ -18679,7 +18692,7 @@ public EndOfStatementContext endOfStatement() { } } } - State = 2662; + State = 2663; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,388,_ctx); } @@ -18731,26 +18744,26 @@ public CommentOrAnnotationContext commentOrAnnotation() { CommentOrAnnotationContext _localctx = new CommentOrAnnotationContext(_ctx, State); EnterRule(_localctx, 416, RULE_commentOrAnnotation); try { - State = 2666; + State = 2667; switch ( Interpreter.AdaptivePredict(_input,389,_ctx) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2663; annotationList(); + State = 2664; annotationList(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2664; comment(); + State = 2665; comment(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2665; remComment(); + State = 2666; remComment(); } break; } @@ -18801,16 +18814,16 @@ public RemCommentContext remComment() { try { EnterOuterAlt(_localctx, 1); { - State = 2668; Match(REM); - State = 2670; + State = 2669; Match(REM); + State = 2671; switch ( Interpreter.AdaptivePredict(_input,390,_ctx) ) { case 1: { - State = 2669; whiteSpace(); + State = 2670; whiteSpace(); } break; } - State = 2672; commentBody(); + State = 2673; commentBody(); } } catch (RecognitionException re) { @@ -18856,8 +18869,8 @@ public CommentContext comment() { try { EnterOuterAlt(_localctx, 1); { - State = 2674; Match(SINGLEQUOTE); - State = 2675; commentBody(); + State = 2675; Match(SINGLEQUOTE); + State = 2676; commentBody(); } } catch (RecognitionException re) { @@ -18909,23 +18922,23 @@ public CommentBodyContext commentBody() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 2681; + State = 2682; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,392,_ctx); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ) { if ( _alt==1 ) { { - State = 2679; + State = 2680; switch ( Interpreter.AdaptivePredict(_input,391,_ctx) ) { case 1: { - State = 2677; Match(LINE_CONTINUATION); + State = 2678; Match(LINE_CONTINUATION); } break; case 2: { - State = 2678; + State = 2679; _la = _input.La(1); if ( _la <= 0 || (_la==NEWLINE) ) { _errHandler.RecoverInline(this); @@ -18936,7 +18949,7 @@ public CommentBodyContext commentBody() { } } } - State = 2683; + State = 2684; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,392,_ctx); } @@ -18999,26 +19012,26 @@ public AnnotationListContext annotationList() { try { EnterOuterAlt(_localctx, 1); { - State = 2684; Match(SINGLEQUOTE); - State = 2690; + State = 2685; Match(SINGLEQUOTE); + State = 2691; _errHandler.Sync(this); _la = _input.La(1); do { { { - State = 2685; Match(AT); - State = 2686; annotation(); - State = 2688; + State = 2686; Match(AT); + State = 2687; annotation(); + State = 2689; switch ( Interpreter.AdaptivePredict(_input,393,_ctx) ) { case 1: { - State = 2687; whiteSpace(); + State = 2688; whiteSpace(); } break; } } } - State = 2692; + State = 2693; _errHandler.Sync(this); _la = _input.La(1); } while ( _la==AT ); @@ -19069,12 +19082,12 @@ public AnnotationContext annotation() { try { EnterOuterAlt(_localctx, 1); { - State = 2694; annotationName(); - State = 2696; + State = 2695; annotationName(); + State = 2697; switch ( Interpreter.AdaptivePredict(_input,395,_ctx) ) { case 1: { - State = 2695; annotationArgList(); + State = 2696; annotationArgList(); } break; } @@ -19122,7 +19135,7 @@ public AnnotationNameContext annotationName() { try { EnterOuterAlt(_localctx, 1); { - State = 2698; unrestrictedIdentifier(); + State = 2699; unrestrictedIdentifier(); } } catch (RecognitionException re) { @@ -19182,22 +19195,22 @@ public AnnotationArgListContext annotationArgList() { int _la; try { int _alt; - State = 2760; + State = 2761; switch ( Interpreter.AdaptivePredict(_input,409,_ctx) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2700; whiteSpace(); - State = 2701; annotationArg(); + State = 2701; whiteSpace(); + State = 2702; annotationArg(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2703; whiteSpace(); - State = 2704; annotationArg(); - State = 2713; + State = 2704; whiteSpace(); + State = 2705; annotationArg(); + State = 2714; _errHandler.Sync(this); _alt = 1; do { @@ -19205,31 +19218,31 @@ public AnnotationArgListContext annotationArgList() { case 1: { { - State = 2706; + State = 2707; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2705; whiteSpace(); + State = 2706; whiteSpace(); } } - State = 2708; Match(COMMA); - State = 2710; + State = 2709; Match(COMMA); + State = 2711; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2709; whiteSpace(); + State = 2710; whiteSpace(); } } - State = 2712; annotationArg(); + State = 2713; annotationArg(); } } break; default: throw new NoViableAltException(this); } - State = 2715; + State = 2716; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,398,_ctx); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ); @@ -19239,74 +19252,74 @@ public AnnotationArgListContext annotationArgList() { case 3: EnterOuterAlt(_localctx, 3); { - State = 2718; + State = 2719; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2717; whiteSpace(); + State = 2718; whiteSpace(); } } - State = 2720; Match(LPAREN); - State = 2722; + State = 2721; Match(LPAREN); + State = 2723; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2721; whiteSpace(); + State = 2722; whiteSpace(); } } - State = 2724; Match(RPAREN); + State = 2725; Match(RPAREN); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2726; + State = 2727; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2725; whiteSpace(); + State = 2726; whiteSpace(); } } - State = 2728; Match(LPAREN); - State = 2730; + State = 2729; Match(LPAREN); + State = 2731; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2729; whiteSpace(); + State = 2730; whiteSpace(); } } - State = 2732; annotationArg(); - State = 2734; + State = 2733; annotationArg(); + State = 2735; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2733; whiteSpace(); + State = 2734; whiteSpace(); } } - State = 2736; Match(RPAREN); + State = 2737; Match(RPAREN); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 2739; + State = 2740; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2738; whiteSpace(); + State = 2739; whiteSpace(); } } - State = 2741; Match(LPAREN); - State = 2742; annotationArg(); - State = 2751; + State = 2742; Match(LPAREN); + State = 2743; annotationArg(); + State = 2752; _errHandler.Sync(this); _alt = 1; do { @@ -19314,43 +19327,43 @@ public AnnotationArgListContext annotationArgList() { case 1: { { - State = 2744; + State = 2745; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2743; whiteSpace(); + State = 2744; whiteSpace(); } } - State = 2746; Match(COMMA); - State = 2748; + State = 2747; Match(COMMA); + State = 2749; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2747; whiteSpace(); + State = 2748; whiteSpace(); } } - State = 2750; annotationArg(); + State = 2751; annotationArg(); } } break; default: throw new NoViableAltException(this); } - State = 2753; + State = 2754; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,407,_ctx); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ); - State = 2756; + State = 2757; _la = _input.La(1); if (_la==WS || _la==LINE_CONTINUATION) { { - State = 2755; whiteSpace(); + State = 2756; whiteSpace(); } } - State = 2758; Match(RPAREN); + State = 2759; Match(RPAREN); } break; } @@ -19397,7 +19410,7 @@ public AnnotationArgContext annotationArg() { try { EnterOuterAlt(_localctx, 1); { - State = 2762; expression(0); + State = 2763; expression(0); } } catch (RecognitionException re) { @@ -19445,17 +19458,17 @@ public MandatoryLineContinuationContext mandatoryLineContinuation() { try { EnterOuterAlt(_localctx, 1); { - State = 2764; Match(LINE_CONTINUATION); - State = 2768; + State = 2765; Match(LINE_CONTINUATION); + State = 2769; _errHandler.Sync(this); _la = _input.La(1); while (_la==WS) { { { - State = 2765; Match(WS); + State = 2766; Match(WS); } } - State = 2770; + State = 2771; _errHandler.Sync(this); _la = _input.La(1); } @@ -19510,7 +19523,7 @@ public WhiteSpaceContext whiteSpace() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 2772; + State = 2773; _errHandler.Sync(this); _alt = 1; do { @@ -19518,7 +19531,7 @@ public WhiteSpaceContext whiteSpace() { case 1: { { - State = 2771; + State = 2772; _la = _input.La(1); if ( !(_la==WS || _la==LINE_CONTINUATION) ) { _errHandler.RecoverInline(this); @@ -19530,7 +19543,7 @@ public WhiteSpaceContext whiteSpace() { default: throw new NoViableAltException(this); } - State = 2774; + State = 2775; _errHandler.Sync(this); _alt = Interpreter.AdaptivePredict(_input,411,_ctx); } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ); @@ -19611,7 +19624,7 @@ private bool upperCaseA_sempred(UpperCaseAContext _localctx, int predIndex) { } public static readonly string _serializedATN = - "\x3\xAF6F\x8320\x479D\xB75C\x4880\x1605\x191C\xAB37\x3\xF1\xADB\x4\x2"+ + "\x3\xAF6F\x8320\x479D\xB75C\x4880\x1605\x191C\xAB37\x3\xF1\xADC\x4\x2"+ "\t\x2\x4\x3\t\x3\x4\x4\t\x4\x4\x5\t\x5\x4\x6\t\x6\x4\a\t\a\x4\b\t\b\x4"+ "\t\t\t\x4\n\t\n\x4\v\t\v\x4\f\t\f\x4\r\t\r\x4\xE\t\xE\x4\xF\t\xF\x4\x10"+ "\t\x10\x4\x11\t\x11\x4\x12\t\x12\x4\x13\t\x13\x4\x14\t\x14\x4\x15\t\x15"+ @@ -19799,1089 +19812,1090 @@ private bool upperCaseA_sempred(UpperCaseAContext _localctx, int predIndex) { "\n\xA5\x3\xA5\x3\xA5\x5\xA5\x875\n\xA5\x3\xA5\a\xA5\x878\n\xA5\f\xA5\xE"+ "\xA5\x87B\v\xA5\x3\xA6\x3\xA6\x3\xA6\x3\xA6\x3\xA6\x5\xA6\x882\n\xA6\x3"+ "\xA6\x3\xA6\x3\xA7\x3\xA7\x3\xA7\x5\xA7\x889\n\xA7\x3\xA8\x3\xA8\x5\xA8"+ - "\x88D\n\xA8\x3\xA9\x3\xA9\x3\xAA\x3\xAA\x3\xAA\x3\xAB\x3\xAB\x3\xAB\x5"+ - "\xAB\x897\n\xAB\x3\xAC\x3\xAC\a\xAC\x89B\n\xAC\f\xAC\xE\xAC\x89E\v\xAC"+ - "\x3\xAC\x3\xAC\x3\xAD\x3\xAD\x5\xAD\x8A4\n\xAD\x3\xAE\x3\xAE\x5\xAE\x8A8"+ - "\n\xAE\x3\xAE\x3\xAE\x5\xAE\x8AC\n\xAE\x3\xAE\x3\xAE\x5\xAE\x8B0\n\xAE"+ - "\x3\xAE\x5\xAE\x8B3\n\xAE\x3\xAF\x3\xAF\x3\xB0\x3\xB0\x3\xB1\x3\xB1\x3"+ - "\xB1\x3\xB1\x3\xB1\x5\xB1\x8BE\n\xB1\x3\xB1\x3\xB1\x5\xB1\x8C2\n\xB1\x3"+ - "\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3"+ - "\xB1\x3\xB1\x5\xB1\x8D0\n\xB1\x3\xB2\x3\xB2\x5\xB2\x8D4\n\xB2\x3\xB2\x3"+ - "\xB2\x5\xB2\x8D8\n\xB2\x3\xB3\x3\xB3\x5\xB3\x8DC\n\xB3\x3\xB4\x3\xB4\x5"+ - "\xB4\x8E0\n\xB4\x3\xB4\x3\xB4\x3\xB5\x3\xB5\x5\xB5\x8E6\n\xB5\x3\xB5\x5"+ - "\xB5\x8E9\n\xB5\x3\xB6\x3\xB6\x3\xB7\x3\xB7\x5\xB7\x8EF\n\xB7\x3\xB7\x5"+ - "\xB7\x8F2\n\xB7\x3\xB7\x3\xB7\x5\xB7\x8F6\n\xB7\x3\xB7\x5\xB7\x8F9\n\xB7"+ - "\x3\xB8\x3\xB8\x3\xB9\x3\xB9\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA"+ - "\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x90A\n\xBA\x3\xBA\x3\xBA\x3"+ - "\xBA\x5\xBA\x90F\n\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA"+ - "\x3\xBA\x5\xBA\x919\n\xBA\x3\xBA\x3\xBA\x5\xBA\x91D\n\xBA\x3\xBA\x3\xBA"+ - "\x5\xBA\x921\n\xBA\x3\xBA\x3\xBA\x5\xBA\x925\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x929\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x92E\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x932\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x937\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x93B\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x940\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x944\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x949\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x94D\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x952\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x956\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x95B\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x95F\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x964\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x968\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x96D\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x971\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x976\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x97A\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x97F\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x983\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x988\n\xBA\x3\xBA\x3\xBA\x5\xBA"+ - "\x98C\n\xBA\x3\xBA\a\xBA\x98F\n\xBA\f\xBA\xE\xBA\x992\v\xBA\x3\xBB\x3"+ - "\xBB\x3\xBB\x3\xBB\x3\xBB\x5\xBB\x999\n\xBB\x5\xBB\x99B\n\xBB\x3\xBC\x3"+ - "\xBC\x3\xBC\x5\xBC\x9A0\n\xBC\x3\xBD\x3\xBD\x3\xBE\x3\xBE\x3\xBF\x3\xBF"+ - "\x3\xC0\x3\xC0\x3\xC0\x3\xC0\x3\xC0\x5\xC0\x9AD\n\xC0\x3\xC0\x3\xC0\x3"+ - "\xC0\x5\xC0\x9B2\n\xC0\x3\xC0\x5\xC0\x9B5\n\xC0\x3\xC0\x3\xC0\x5\xC0\x9B9"+ - "\n\xC0\x3\xC0\x3\xC0\x5\xC0\x9BD\n\xC0\x3\xC0\x5\xC0\x9C0\n\xC0\x3\xC0"+ - "\x5\xC0\x9C3\n\xC0\x3\xC0\x3\xC0\x3\xC0\x5\xC0\x9C8\n\xC0\x3\xC0\x3\xC0"+ - "\x5\xC0\x9CC\n\xC0\x3\xC0\x3\xC0\x3\xC0\x5\xC0\x9D1\n\xC0\x3\xC0\x3\xC0"+ - "\x5\xC0\x9D5\n\xC0\x3\xC0\a\xC0\x9D8\n\xC0\f\xC0\xE\xC0\x9DB\v\xC0\x3"+ - "\xC1\x3\xC1\x3\xC1\x5\xC1\x9E0\n\xC1\x3\xC1\x3\xC1\x5\xC1\x9E4\n\xC1\x3"+ - "\xC1\x3\xC1\x3\xC1\x3\xC1\x3\xC1\x5\xC1\x9EB\n\xC1\x3\xC1\x3\xC1\x5\xC1"+ - "\x9EF\n\xC1\x3\xC1\x5\xC1\x9F2\n\xC1\x3\xC2\x3\xC2\x3\xC3\x3\xC3\x5\xC3"+ - "\x9F8\n\xC3\a\xC3\x9FA\n\xC3\f\xC3\xE\xC3\x9FD\v\xC3\x3\xC3\x3\xC3\x3"+ - "\xC3\x5\xC3\xA02\n\xC3\a\xC3\xA04\n\xC3\f\xC3\xE\xC3\xA07\v\xC3\x3\xC3"+ - "\x5\xC3\xA0A\n\xC3\x3\xC4\x3\xC4\x5\xC4\xA0E\n\xC4\x3\xC4\x3\xC4\x3\xC4"+ - "\x5\xC4\xA13\n\xC4\x3\xC4\x5\xC4\xA16\n\xC4\x3\xC5\x3\xC5\x3\xC6\x3\xC6"+ - "\x3\xC7\x3\xC7\x5\xC7\xA1E\n\xC7\x3\xC7\x3\xC7\x5\xC7\xA22\n\xC7\x3\xC7"+ - "\a\xC7\xA25\n\xC7\f\xC7\xE\xC7\xA28\v\xC7\x3\xC8\x3\xC8\x5\xC8\xA2C\n"+ - "\xC8\x3\xC8\x3\xC8\x5\xC8\xA30\n\xC8\x3\xC8\x3\xC8\x3\xC9\x3\xC9\x5\xC9"+ - "\xA36\n\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9\x5"+ - "\xC9\xA40\n\xC9\x3\xCA\x3\xCA\x3\xCB\x3\xCB\x3\xCC\x3\xCC\x3\xCC\x3\xCC"+ - "\x3\xCD\x3\xCD\x3\xCE\x3\xCE\x3\xCF\x3\xCF\x3\xD0\x5\xD0\xA51\n\xD0\x3"+ - "\xD0\x3\xD0\x5\xD0\xA55\n\xD0\x3\xD0\x5\xD0\xA58\n\xD0\x3\xD0\x5\xD0\xA5B"+ - "\n\xD0\x3\xD1\x3\xD1\x5\xD1\xA5F\n\xD1\x3\xD1\x3\xD1\x5\xD1\xA63\n\xD1"+ - "\a\xD1\xA65\n\xD1\f\xD1\xE\xD1\xA68\v\xD1\x3\xD2\x3\xD2\x3\xD2\x5\xD2"+ - "\xA6D\n\xD2\x3\xD3\x3\xD3\x5\xD3\xA71\n\xD3\x3\xD3\x3\xD3\x3\xD4\x3\xD4"+ - "\x3\xD4\x3\xD5\x3\xD5\a\xD5\xA7A\n\xD5\f\xD5\xE\xD5\xA7D\v\xD5\x3\xD6"+ - "\x3\xD6\x3\xD6\x3\xD6\x5\xD6\xA83\n\xD6\x6\xD6\xA85\n\xD6\r\xD6\xE\xD6"+ - "\xA86\x3\xD7\x3\xD7\x5\xD7\xA8B\n\xD7\x3\xD8\x3\xD8\x3\xD9\x3\xD9\x3\xD9"+ - "\x3\xD9\x3\xD9\x3\xD9\x5\xD9\xA95\n\xD9\x3\xD9\x3\xD9\x5\xD9\xA99\n\xD9"+ - "\x3\xD9\x6\xD9\xA9C\n\xD9\r\xD9\xE\xD9\xA9D\x3\xD9\x5\xD9\xAA1\n\xD9\x3"+ - "\xD9\x3\xD9\x5\xD9\xAA5\n\xD9\x3\xD9\x3\xD9\x5\xD9\xAA9\n\xD9\x3\xD9\x3"+ - "\xD9\x5\xD9\xAAD\n\xD9\x3\xD9\x3\xD9\x5\xD9\xAB1\n\xD9\x3\xD9\x3\xD9\x3"+ - "\xD9\x5\xD9\xAB6\n\xD9\x3\xD9\x3\xD9\x3\xD9\x5\xD9\xABB\n\xD9\x3\xD9\x3"+ - "\xD9\x5\xD9\xABF\n\xD9\x3\xD9\x6\xD9\xAC2\n\xD9\r\xD9\xE\xD9\xAC3\x3\xD9"+ - "\x5\xD9\xAC7\n\xD9\x3\xD9\x3\xD9\x5\xD9\xACB\n\xD9\x3\xDA\x3\xDA\x3\xDB"+ - "\x3\xDB\a\xDB\xAD1\n\xDB\f\xDB\xE\xDB\xAD4\v\xDB\x3\xDC\x6\xDC\xAD7\n"+ - "\xDC\r\xDC\xE\xDC\xAD8\x3\xDC\x2\x2\x4\x172\x17E\xDD\x2\x2\x4\x2\x6\x2"+ - "\b\x2\n\x2\f\x2\xE\x2\x10\x2\x12\x2\x14\x2\x16\x2\x18\x2\x1A\x2\x1C\x2"+ - "\x1E\x2 \x2\"\x2$\x2&\x2(\x2*\x2,\x2.\x2\x30\x2\x32\x2\x34\x2\x36\x2\x38"+ - "\x2:\x2<\x2>\x2@\x2\x42\x2\x44\x2\x46\x2H\x2J\x2L\x2N\x2P\x2R\x2T\x2V"+ - "\x2X\x2Z\x2\\\x2^\x2`\x2\x62\x2\x64\x2\x66\x2h\x2j\x2l\x2n\x2p\x2r\x2"+ - "t\x2v\x2x\x2z\x2|\x2~\x2\x80\x2\x82\x2\x84\x2\x86\x2\x88\x2\x8A\x2\x8C"+ - "\x2\x8E\x2\x90\x2\x92\x2\x94\x2\x96\x2\x98\x2\x9A\x2\x9C\x2\x9E\x2\xA0"+ - "\x2\xA2\x2\xA4\x2\xA6\x2\xA8\x2\xAA\x2\xAC\x2\xAE\x2\xB0\x2\xB2\x2\xB4"+ - "\x2\xB6\x2\xB8\x2\xBA\x2\xBC\x2\xBE\x2\xC0\x2\xC2\x2\xC4\x2\xC6\x2\xC8"+ - "\x2\xCA\x2\xCC\x2\xCE\x2\xD0\x2\xD2\x2\xD4\x2\xD6\x2\xD8\x2\xDA\x2\xDC"+ - "\x2\xDE\x2\xE0\x2\xE2\x2\xE4\x2\xE6\x2\xE8\x2\xEA\x2\xEC\x2\xEE\x2\xF0"+ - "\x2\xF2\x2\xF4\x2\xF6\x2\xF8\x2\xFA\x2\xFC\x2\xFE\x2\x100\x2\x102\x2\x104"+ - "\x2\x106\x2\x108\x2\x10A\x2\x10C\x2\x10E\x2\x110\x2\x112\x2\x114\x2\x116"+ - "\x2\x118\x2\x11A\x2\x11C\x2\x11E\x2\x120\x2\x122\x2\x124\x2\x126\x2\x128"+ - "\x2\x12A\x2\x12C\x2\x12E\x2\x130\x2\x132\x2\x134\x2\x136\x2\x138\x2\x13A"+ - "\x2\x13C\x2\x13E\x2\x140\x2\x142\x2\x144\x2\x146\x2\x148\x2\x14A\x2\x14C"+ - "\x2\x14E\x2\x150\x2\x152\x2\x154\x2\x156\x2\x158\x2\x15A\x2\x15C\x2\x15E"+ - "\x2\x160\x2\x162\x2\x164\x2\x166\x2\x168\x2\x16A\x2\x16C\x2\x16E\x2\x170"+ - "\x2\x172\x2\x174\x2\x176\x2\x178\x2\x17A\x2\x17C\x2\x17E\x2\x180\x2\x182"+ - "\x2\x184\x2\x186\x2\x188\x2\x18A\x2\x18C\x2\x18E\x2\x190\x2\x192\x2\x194"+ - "\x2\x196\x2\x198\x2\x19A\x2\x19C\x2\x19E\x2\x1A0\x2\x1A2\x2\x1A4\x2\x1A6"+ - "\x2\x1A8\x2\x1AA\x2\x1AC\x2\x1AE\x2\x1B0\x2\x1B2\x2\x1B4\x2\x1B6\x2\x2"+ - "\x1D\x5\x2==GG\xC0\xC0\a\x2::==}}\x9F\x9F\xAA\xAA\x4\x2\xAC\xAD\xCF\xCF"+ - "\x4\x2\x87\x89\xB7\xB7\x4\x2++--\x4\x2tt\xBE\xBE\x3\x2?@\x3\x2JV\x4\x2"+ - "\xC7\xC7\xCB\xCB\x3\x2lp\x3\x2\x96\x97\x4\x2vv\xA8\xA8\x3\x2\x6\a\x3\x2"+ - "\xE0\xE1\xE\x2\x4\x4\x15\x15!\">>\x41\x41HHYY\x7F\x7F\x81\x81\xB8\xB8"+ - "\xBD\xBD\xC8\xC8\a\x2~~\x85\x85\xD4\xD7\xD9\xD9\xDC\xDC\x3\x2\xE3\xE6"+ - "\x5\x2..\x30\x34\xDE\xDE\x6\x2rrvv\xA3\xA3\xA8\xA8\x4\x2\xD2\xD2\xDB\xDB"+ - "\x4\x2\xDA\xDA\xDD\xDD\x4\x2qq\xC3\xC3\x4\x2]]\x93\x93\'\x2\x3\x6\b\xE"+ - "\x10\x19\x1B%\'\')*\x35:<\x41\x44\x45GHYY\x66\x66hhjjqquuzz|\x81\x84\x89"+ - "\x8B\x8E\x90\x94\x96\x96\x98\x99\x9E\xA2\xA7\xA7\xA9\xAA\xAC\xAD\xAF\xB0"+ - "\xB4\xB4\xB7\xB9\xBB\xBB\xBD\xBD\xBF\xC3\xC5\xC9\xCC\xCC\xCE\xD0\xF0\xF1"+ - " \x2\x1A\x1A&&\x42\x43\x46\x46IX[\\\x62\x62\x65\x65ggiikprtvy{{\x82\x83"+ - "\x8A\x8A\x8F\x8F\x95\x95\xA3\xA3\xA8\xA8\xAB\xAB\xAE\xAE\xB1\xB3\xB5\xB6"+ - "\xBA\xBA\xBC\xBC\xBE\xBE\xC4\xC4\xCA\xCB\xCD\xCD\x3\x2\xE8\xE8\x4\x2\xEB"+ - "\xEB\xEE\xEE\xC03\x2\x1B8\x3\x2\x2\x2\x4\x1BB\x3\x2\x2\x2\x6\x1CC\x3\x2"+ - "\x2\x2\b\x1D7\x3\x2\x2\x2\n\x1EA\x3\x2\x2\x2\f\x204\x3\x2\x2\x2\xE\x207"+ - "\x3\x2\x2\x2\x10\x21F\x3\x2\x2\x2\x12\x221\x3\x2\x2\x2\x14\x228\x3\x2"+ - "\x2\x2\x16\x235\x3\x2\x2\x2\x18\x238\x3\x2\x2\x2\x1A\x248\x3\x2\x2\x2"+ - "\x1C\x257\x3\x2\x2\x2\x1E\x25E\x3\x2\x2\x2 \x286\x3\x2\x2\x2\"\x296\x3"+ - "\x2\x2\x2$\x298\x3\x2\x2\x2&\x2B3\x3\x2\x2\x2(\x2B5\x3\x2\x2\x2*\x2B9"+ - "\x3\x2\x2\x2,\x2BB\x3\x2\x2\x2.\x2BF\x3\x2\x2\x2\x30\x2C1\x3\x2\x2\x2"+ - "\x32\x2C3\x3\x2\x2\x2\x34\x2CD\x3\x2\x2\x2\x36\x2D1\x3\x2\x2\x2\x38\x2D3"+ - "\x3\x2\x2\x2:\x2D6\x3\x2\x2\x2<\x2D8\x3\x2\x2\x2>\x2DE\x3\x2\x2\x2@\x2E0"+ - "\x3\x2\x2\x2\x42\x2EE\x3\x2\x2\x2\x44\x2FA\x3\x2\x2\x2\x46\x2FC\x3\x2"+ - "\x2\x2H\x313\x3\x2\x2\x2J\x315\x3\x2\x2\x2L\x317\x3\x2\x2\x2N\x319\x3"+ - "\x2\x2\x2P\x326\x3\x2\x2\x2R\x332\x3\x2\x2\x2T\x334\x3\x2\x2\x2V\x340"+ - "\x3\x2\x2\x2X\x342\x3\x2\x2\x2Z\x348\x3\x2\x2\x2\\\x352\x3\x2\x2\x2^\x354"+ - "\x3\x2\x2\x2`\x356\x3\x2\x2\x2\x62\x363\x3\x2\x2\x2\x64\x375\x3\x2\x2"+ - "\x2\x66\x37A\x3\x2\x2\x2h\x37C\x3\x2\x2\x2j\x37E\x3\x2\x2\x2l\x380\x3"+ - "\x2\x2\x2n\x38E\x3\x2\x2\x2p\x390\x3\x2\x2\x2r\x397\x3\x2\x2\x2t\x3A1"+ - "\x3\x2\x2\x2v\x3A3\x3\x2\x2\x2x\x3B0\x3\x2\x2\x2z\x3BC\x3\x2\x2\x2|\x3CA"+ - "\x3\x2\x2\x2~\x3CC\x3\x2\x2\x2\x80\x3E2\x3\x2\x2\x2\x82\x3E4\x3\x2\x2"+ - "\x2\x84\x3E6\x3\x2\x2\x2\x86\x3FC\x3\x2\x2\x2\x88\x401\x3\x2\x2\x2\x8A"+ - "\x413\x3\x2\x2\x2\x8C\x425\x3\x2\x2\x2\x8E\x446\x3\x2\x2\x2\x90\x461\x3"+ - "\x2\x2\x2\x92\x482\x3\x2\x2\x2\x94\x488\x3\x2\x2\x2\x96\x498\x3\x2\x2"+ - "\x2\x98\x49D\x3\x2\x2\x2\x9A\x49F\x3\x2\x2\x2\x9C\x4A1\x3\x2\x2\x2\x9E"+ - "\x4AB\x3\x2\x2\x2\xA0\x4AE\x3\x2\x2\x2\xA2\x4B1\x3\x2\x2\x2\xA4\x4BB\x3"+ - "\x2\x2\x2\xA6\x4BD\x3\x2\x2\x2\xA8\x4D6\x3\x2\x2\x2\xAA\x4DB\x3\x2\x2"+ - "\x2\xAC\x4E9\x3\x2\x2\x2\xAE\x4F6\x3\x2\x2\x2\xB0\x4F8\x3\x2\x2\x2\xB2"+ - "\x508\x3\x2\x2\x2\xB4\x50F\x3\x2\x2\x2\xB6\x519\x3\x2\x2\x2\xB8\x51B\x3"+ - "\x2\x2\x2\xBA\x52C\x3\x2\x2\x2\xBC\x545\x3\x2\x2\x2\xBE\x560\x3\x2\x2"+ - "\x2\xC0\x562\x3\x2\x2\x2\xC2\x566\x3\x2\x2\x2\xC4\x56A\x3\x2\x2\x2\xC6"+ - "\x58E\x3\x2\x2\x2\xC8\x590\x3\x2\x2\x2\xCA\x596\x3\x2\x2\x2\xCC\x598\x3"+ - "\x2\x2\x2\xCE\x5AA\x3\x2\x2\x2\xD0\x5B9\x3\x2\x2\x2\xD2\x5E6\x3\x2\x2"+ - "\x2\xD4\x5E8\x3\x2\x2\x2\xD6\x5EA\x3\x2\x2\x2\xD8\x5EC\x3\x2\x2\x2\xDA"+ - "\x5F2\x3\x2\x2\x2\xDC\x5FE\x3\x2\x2\x2\xDE\x60A\x3\x2\x2\x2\xE0\x616\x3"+ - "\x2\x2\x2\xE2\x62A\x3\x2\x2\x2\xE4\x641\x3\x2\x2\x2\xE6\x65C\x3\x2\x2"+ - "\x2\xE8\x672\x3\x2\x2\x2\xEA\x685\x3\x2\x2\x2\xEC\x698\x3\x2\x2\x2\xEE"+ - "\x6A6\x3\x2\x2\x2\xF0\x6A8\x3\x2\x2\x2\xF2\x6B0\x3\x2\x2\x2\xF4\x6BE\x3"+ - "\x2\x2\x2\xF6\x6C4\x3\x2\x2\x2\xF8\x6D0\x3\x2\x2\x2\xFA\x6D2\x3\x2\x2"+ - "\x2\xFC\x6DA\x3\x2\x2\x2\xFE\x6DC\x3\x2\x2\x2\x100\x6E8\x3\x2\x2\x2\x102"+ - "\x6EA\x3\x2\x2\x2\x104\x6F2\x3\x2\x2\x2\x106\x707\x3\x2\x2\x2\x108\x709"+ - "\x3\x2\x2\x2\x10A\x71C\x3\x2\x2\x2\x10C\x737\x3\x2\x2\x2\x10E\x739\x3"+ - "\x2\x2\x2\x110\x73B\x3\x2\x2\x2\x112\x73D\x3\x2\x2\x2\x114\x74C\x3\x2"+ - "\x2\x2\x116\x761\x3\x2\x2\x2\x118\x765\x3\x2\x2\x2\x11A\x769\x3\x2\x2"+ - "\x2\x11C\x76D\x3\x2\x2\x2\x11E\x775\x3\x2\x2\x2\x120\x780\x3\x2\x2\x2"+ - "\x122\x782\x3\x2\x2\x2\x124\x788\x3\x2\x2\x2\x126\x78F\x3\x2\x2\x2\x128"+ - "\x793\x3\x2\x2\x2\x12A\x79F\x3\x2\x2\x2\x12C\x7B1\x3\x2\x2\x2\x12E\x7B5"+ - "\x3\x2\x2\x2\x130\x7BB\x3\x2\x2\x2\x132\x7BD\x3\x2\x2\x2\x134\x7C2\x3"+ - "\x2\x2\x2\x136\x7CB\x3\x2\x2\x2\x138\x7D9\x3\x2\x2\x2\x13A\x7F2\x3\x2"+ - "\x2\x2\x13C\x7F9\x3\x2\x2\x2\x13E\x800\x3\x2\x2\x2\x140\x82D\x3\x2\x2"+ - "\x2\x142\x84C\x3\x2\x2\x2\x144\x85A\x3\x2\x2\x2\x146\x86C\x3\x2\x2\x2"+ - "\x148\x86E\x3\x2\x2\x2\x14A\x881\x3\x2\x2\x2\x14C\x888\x3\x2\x2\x2\x14E"+ - "\x88C\x3\x2\x2\x2\x150\x88E\x3\x2\x2\x2\x152\x890\x3\x2\x2\x2\x154\x896"+ - "\x3\x2\x2\x2\x156\x898\x3\x2\x2\x2\x158\x8A3\x3\x2\x2\x2\x15A\x8A5\x3"+ - "\x2\x2\x2\x15C\x8B4\x3\x2\x2\x2\x15E\x8B6\x3\x2\x2\x2\x160\x8CF\x3\x2"+ - "\x2\x2\x162\x8D1\x3\x2\x2\x2\x164\x8DB\x3\x2\x2\x2\x166\x8DD\x3\x2\x2"+ - "\x2\x168\x8E3\x3\x2\x2\x2\x16A\x8EA\x3\x2\x2\x2\x16C\x8EE\x3\x2\x2\x2"+ - "\x16E\x8FA\x3\x2\x2\x2\x170\x8FC\x3\x2\x2\x2\x172\x920\x3\x2\x2\x2\x174"+ - "\x99A\x3\x2\x2\x2\x176\x99F\x3\x2\x2\x2\x178\x9A1\x3\x2\x2\x2\x17A\x9A3"+ - "\x3\x2\x2\x2\x17C\x9A5\x3\x2\x2\x2\x17E\x9B4\x3\x2\x2\x2\x180\x9F1\x3"+ - "\x2\x2\x2\x182\x9F3\x3\x2\x2\x2\x184\xA09\x3\x2\x2\x2\x186\xA15\x3\x2"+ - "\x2\x2\x188\xA17\x3\x2\x2\x2\x18A\xA19\x3\x2\x2\x2\x18C\xA1B\x3\x2\x2"+ - "\x2\x18E\xA29\x3\x2\x2\x2\x190\xA3F\x3\x2\x2\x2\x192\xA41\x3\x2\x2\x2"+ - "\x194\xA43\x3\x2\x2\x2\x196\xA45\x3\x2\x2\x2\x198\xA49\x3\x2\x2\x2\x19A"+ - "\xA4B\x3\x2\x2\x2\x19C\xA4D\x3\x2\x2\x2\x19E\xA5A\x3\x2\x2\x2\x1A0\xA66"+ - "\x3\x2\x2\x2\x1A2\xA6C\x3\x2\x2\x2\x1A4\xA6E\x3\x2\x2\x2\x1A6\xA74\x3"+ - "\x2\x2\x2\x1A8\xA7B\x3\x2\x2\x2\x1AA\xA7E\x3\x2\x2\x2\x1AC\xA88\x3\x2"+ - "\x2\x2\x1AE\xA8C\x3\x2\x2\x2\x1B0\xACA\x3\x2\x2\x2\x1B2\xACC\x3\x2\x2"+ - "\x2\x1B4\xACE\x3\x2\x2\x2\x1B6\xAD6\x3\x2\x2\x2\x1B8\x1B9\x5\x4\x3\x2"+ - "\x1B9\x1BA\a\x2\x2\x3\x1BA\x3\x3\x2\x2\x2\x1BB\x1BC\x5\x1A0\xD1\x2\x1BC"+ - "\x1BE\x5\f\a\x2\x1BD\x1BF\x5\x6\x4\x2\x1BE\x1BD\x3\x2\x2\x2\x1BE\x1BF"+ - "\x3\x2\x2\x2\x1BF\x1C0\x3\x2\x2\x2\x1C0\x1C2\x5\f\a\x2\x1C1\x1C3\x5\b"+ - "\x5\x2\x1C2\x1C1\x3\x2\x2\x2\x1C2\x1C3\x3\x2\x2\x2\x1C3\x1C4\x3\x2\x2"+ - "\x2\x1C4\x1C5\x5\f\a\x2\x1C5\x1C6\x5\x14\v\x2\x1C6\x1C7\x5\f\a\x2\x1C7"+ - "\x1C8\x5\x1A\xE\x2\x1C8\x1CA\x5\f\a\x2\x1C9\x1CB\x5\x1B6\xDC\x2\x1CA\x1C9"+ - "\x3\x2\x2\x2\x1CA\x1CB\x3\x2\x2\x2\x1CB\x5\x3\x2\x2\x2\x1CC\x1CD\a\xC9"+ - "\x2\x2\x1CD\x1CE\x5\x1B6\xDC\x2\x1CE\x1D0\x5\x16A\xB6\x2\x1CF\x1D1\x5"+ - "\x1B6\xDC\x2\x1D0\x1CF\x3\x2\x2\x2\x1D0\x1D1\x3\x2\x2\x2\x1D1\x1D3\x3"+ - "\x2\x2\x2\x1D2\x1D4\a\x44\x2\x2\x1D3\x1D2\x3\x2\x2\x2\x1D3\x1D4\x3\x2"+ - "\x2\x2\x1D4\x1D5\x3\x2\x2\x2\x1D5\x1D6\x5\x1A0\xD1\x2\x1D6\a\x3\x2\x2"+ - "\x2\x1D7\x1DF\a<\x2\x2\x1D8\x1D9\x5\x1B6\xDC\x2\x1D9\x1DA\a\xEC\x2\x2"+ - "\x1DA\x1DB\x5\x1B6\xDC\x2\x1DB\x1DD\x5\x14C\xA7\x2\x1DC\x1DE\x5\x1B6\xDC"+ - "\x2\x1DD\x1DC\x3\x2\x2\x2\x1DD\x1DE\x3\x2\x2\x2\x1DE\x1E0\x3\x2\x2\x2"+ - "\x1DF\x1D8\x3\x2\x2\x2\x1DF\x1E0\x3\x2\x2\x2\x1E0\x1E1\x3\x2\x2\x2\x1E1"+ - "\x1E3\x5\x1A0\xD1\x2\x1E2\x1E4\x5\n\x6\x2\x1E3\x1E2\x3\x2\x2\x2\x1E4\x1E5"+ - "\x3\x2\x2\x2\x1E5\x1E3\x3\x2\x2\x2\x1E5\x1E6\x3\x2\x2\x2\x1E6\x1E7\x3"+ - "\x2\x2\x2\x1E7\x1E8\a\x66\x2\x2\x1E8\x1E9\x5\x1A0\xD1\x2\x1E9\t\x3\x2"+ - "\x2\x2\x1EA\x1EE\x5\x14C\xA7\x2\x1EB\x1ED\x5\x1B6\xDC\x2\x1EC\x1EB\x3"+ - "\x2\x2\x2\x1ED\x1F0\x3\x2\x2\x2\x1EE\x1EC\x3\x2\x2\x2\x1EE\x1EF\x3\x2"+ - "\x2\x2\x1EF\x1F1\x3\x2\x2\x2\x1F0\x1EE\x3\x2\x2\x2\x1F1\x1F5\a\xD4\x2"+ - "\x2\x1F2\x1F4\x5\x1B6\xDC\x2\x1F3\x1F2\x3\x2\x2\x2\x1F4\x1F7\x3\x2\x2"+ - "\x2\x1F5\x1F3\x3\x2\x2\x2\x1F5\x1F6\x3\x2\x2\x2\x1F6\x1F8\x3\x2\x2\x2"+ - "\x1F7\x1F5\x3\x2\x2\x2\x1F8\x1FB\x5\x172\xBA\x2\x1F9\x1FA\a,\x2\x2\x1FA"+ - "\x1FC\x5\x16A\xB6\x2\x1FB\x1F9\x3\x2\x2\x2\x1FB\x1FC\x3\x2\x2\x2\x1FC"+ - "\x1FD\x3\x2\x2\x2\x1FD\x1FE\x5\x1A0\xD1\x2\x1FE\v\x3\x2\x2\x2\x1FF\x200"+ - "\x5\xE\b\x2\x200\x201\x5\x1A0\xD1\x2\x201\x203\x3\x2\x2\x2\x202\x1FF\x3"+ - "\x2\x2\x2\x203\x206\x3\x2\x2\x2\x204\x202\x3\x2\x2\x2\x204\x205\x3\x2"+ - "\x2\x2\x205\r\x3\x2\x2\x2\x206\x204\x3\x2\x2\x2\x207\x208\a\x39\x2\x2"+ - "\x208\x209\x5\x1B6\xDC\x2\x209\x20B\x5\x10\t\x2\x20A\x20C\x5\x1B6\xDC"+ - "\x2\x20B\x20A\x3\x2\x2\x2\x20B\x20C\x3\x2\x2\x2\x20C\x20D\x3\x2\x2\x2"+ - "\x20D\x20F\a\xD4\x2\x2\x20E\x210\x5\x1B6\xDC\x2\x20F\x20E\x3\x2\x2\x2"+ - "\x20F\x210\x3\x2\x2\x2\x210\x211\x3\x2\x2\x2\x211\x21C\x5\x12\n\x2\x212"+ - "\x214\x5\x1B6\xDC\x2\x213\x212\x3\x2\x2\x2\x213\x214\x3\x2\x2\x2\x214"+ - "\x215\x3\x2\x2\x2\x215\x217\a+\x2\x2\x216\x218\x5\x1B6\xDC\x2\x217\x216"+ - "\x3\x2\x2\x2\x217\x218\x3\x2\x2\x2\x218\x219\x3\x2\x2\x2\x219\x21B\x5"+ - "\x12\n\x2\x21A\x213\x3\x2\x2\x2\x21B\x21E\x3\x2\x2\x2\x21C\x21A\x3\x2"+ - "\x2\x2\x21C\x21D\x3\x2\x2\x2\x21D\xF\x3\x2\x2\x2\x21E\x21C\x3\x2\x2\x2"+ - "\x21F\x220\x5\x17E\xC0\x2\x220\x11\x3\x2\x2\x2\x221\x222\x5\x172\xBA\x2"+ - "\x222\x13\x3\x2\x2\x2\x223\x224\x5\x18\r\x2\x224\x225\x5\x1A0\xD1\x2\x225"+ - "\x227\x3\x2\x2\x2\x226\x223\x3\x2\x2\x2\x227\x22A\x3\x2\x2\x2\x228\x226"+ - "\x3\x2\x2\x2\x228\x229\x3\x2\x2\x2\x229\x15\x3\x2\x2\x2\x22A\x228\x3\x2"+ - "\x2\x2\x22B\x22C\a\x9A\x2\x2\x22C\x22D\x5\x1B6\xDC\x2\x22D\x22E\x5\x16A"+ - "\xB6\x2\x22E\x236\x3\x2\x2\x2\x22F\x230\a\x9C\x2\x2\x230\x231\x5\x1B6"+ - "\xDC\x2\x231\x232\t\x2\x2\x2\x232\x236\x3\x2\x2\x2\x233\x236\a\x9B\x2"+ - "\x2\x234\x236\a\x9D\x2\x2\x235\x22B\x3\x2\x2\x2\x235\x22F\x3\x2\x2\x2"+ - "\x235\x233\x3\x2\x2\x2\x235\x234\x3\x2\x2\x2\x236\x17\x3\x2\x2\x2\x237"+ - "\x239\x5\x1B6\xDC\x2\x238\x237\x3\x2\x2\x2\x238\x239\x3\x2\x2\x2\x239"+ - "\x245\x3\x2\x2\x2\x23A\x246\x5\xE\b\x2\x23B\x246\x5\x8CG\x2\x23C\x246"+ - "\x5\x94K\x2\x23D\x246\x5\xAAV\x2\x23E\x246\x5\xB4[\x2\x23F\x246\x5\x88"+ - "\x45\x2\x240\x246\x5\xD8m\x2\x241\x246\x5\x134\x9B\x2\x242\x246\x5\x16"+ - "\f\x2\x243\x246\x5\x118\x8D\x2\x244\x246\x5\x11A\x8E\x2\x245\x23A\x3\x2"+ - "\x2\x2\x245\x23B\x3\x2\x2\x2\x245\x23C\x3\x2\x2\x2\x245\x23D\x3\x2\x2"+ - "\x2\x245\x23E\x3\x2\x2\x2\x245\x23F\x3\x2\x2\x2\x245\x240\x3\x2\x2\x2"+ - "\x245\x241\x3\x2\x2\x2\x245\x242\x3\x2\x2\x2\x245\x243\x3\x2\x2\x2\x245"+ - "\x244\x3\x2\x2\x2\x246\x19\x3\x2\x2\x2\x247\x249\x5\x1B6\xDC\x2\x248\x247"+ - "\x3\x2\x2\x2\x248\x249\x3\x2\x2\x2\x249\x24F\x3\x2\x2\x2\x24A\x24B\x5"+ - "\x1C\xF\x2\x24B\x24C\x5\x1A0\xD1\x2\x24C\x24E\x3\x2\x2\x2\x24D\x24A\x3"+ - "\x2\x2\x2\x24E\x251\x3\x2\x2\x2\x24F\x24D\x3\x2\x2\x2\x24F\x250\x3\x2"+ - "\x2\x2\x250\x1B\x3\x2\x2\x2\x251\x24F\x3\x2\x2\x2\x252\x258\x5\xBC_\x2"+ - "\x253\x258\x5\xE4s\x2\x254\x258\x5\xE6t\x2\x255\x258\x5\xE8u\x2\x256\x258"+ - "\x5\x114\x8B\x2\x257\x252\x3\x2\x2\x2\x257\x253\x3\x2\x2\x2\x257\x254"+ - "\x3\x2\x2\x2\x257\x255\x3\x2\x2\x2\x257\x256\x3\x2\x2\x2\x258\x1D\x3\x2"+ - "\x2\x2\x259\x25A\x5 \x11\x2\x25A\x25B\x5\x1A0\xD1\x2\x25B\x25D\x3\x2\x2"+ - "\x2\x25C\x259\x3\x2\x2\x2\x25D\x260\x3\x2\x2\x2\x25E\x25C\x3\x2\x2\x2"+ - "\x25E\x25F\x3\x2\x2\x2\x25F\x1F\x3\x2\x2\x2\x260\x25E\x3\x2\x2\x2\x261"+ - "\x287\x5\x164\xB3\x2\x262\x287\x5\"\x12\x2\x263\x287\x5\xE\b\x2\x264\x287"+ - "\x5\x88\x45\x2\x265\x287\x5\xA8U\x2\x266\x287\x5\xAEX\x2\x267\x287\x5"+ - "\xB0Y\x2\x268\x287\x5\xB2Z\x2\x269\x287\x5\xB6\\\x2\x26A\x287\x5\xB8]"+ - "\x2\x26B\x287\x5\xBA^\x2\x26C\x287\x5\xC0\x61\x2\x26D\x287\x5\xC2\x62"+ - "\x2\x26E\x287\x5\xC4\x63\x2\x26F\x287\x5\xCA\x66\x2\x270\x287\x5\xD8m"+ - "\x2\x271\x287\x5\xDAn\x2\x272\x287\x5\xDCo\x2\x273\x287\x5\xDEp\x2\x274"+ - "\x287\x5\xE0q\x2\x275\x287\x5\xE2r\x2\x276\x287\x5\xEAv\x2\x277\x287\x5"+ - "\xF0y\x2\x278\x287\x5\xFA~\x2\x279\x287\x5\xFC\x7F\x2\x27A\x287\x5\xFE"+ - "\x80\x2\x27B\x287\x5\x104\x83\x2\x27C\x287\x5\x112\x8A\x2\x27D\x287\x5"+ - "\x100\x81\x2\x27E\x287\x5\x134\x9B\x2\x27F\x287\x5\x13A\x9E\x2\x280\x287"+ - "\x5\x13C\x9F\x2\x281\x287\x5\x13E\xA0\x2\x282\x287\x5\x140\xA1\x2\x283"+ - "\x287\x5\x142\xA2\x2\x284\x287\x5\xF8}\x2\x285\x287\x5\x102\x82\x2\x286"+ - "\x261\x3\x2\x2\x2\x286\x262\x3\x2\x2\x2\x286\x263\x3\x2\x2\x2\x286\x264"+ - "\x3\x2\x2\x2\x286\x265\x3\x2\x2\x2\x286\x266\x3\x2\x2\x2\x286\x267\x3"+ - "\x2\x2\x2\x286\x268\x3\x2\x2\x2\x286\x269\x3\x2\x2\x2\x286\x26A\x3\x2"+ - "\x2\x2\x286\x26B\x3\x2\x2\x2\x286\x26C\x3\x2\x2\x2\x286\x26D\x3\x2\x2"+ - "\x2\x286\x26E\x3\x2\x2\x2\x286\x26F\x3\x2\x2\x2\x286\x270\x3\x2\x2\x2"+ - "\x286\x271\x3\x2\x2\x2\x286\x272\x3\x2\x2\x2\x286\x273\x3\x2\x2\x2\x286"+ - "\x274\x3\x2\x2\x2\x286\x275\x3\x2\x2\x2\x286\x276\x3\x2\x2\x2\x286\x277"+ - "\x3\x2\x2\x2\x286\x278\x3\x2\x2\x2\x286\x279\x3\x2\x2\x2\x286\x27A\x3"+ - "\x2\x2\x2\x286\x27B\x3\x2\x2\x2\x286\x27C\x3\x2\x2\x2\x286\x27D\x3\x2"+ - "\x2\x2\x286\x27E\x3\x2\x2\x2\x286\x27F\x3\x2\x2\x2\x286\x280\x3\x2\x2"+ - "\x2\x286\x281\x3\x2\x2\x2\x286\x282\x3\x2\x2\x2\x286\x283\x3\x2\x2\x2"+ - "\x286\x284\x3\x2\x2\x2\x286\x285\x3\x2\x2\x2\x287!\x3\x2\x2\x2\x288\x297"+ - "\x5$\x13\x2\x289\x297\x5> \x2\x28A\x297\x5<\x1F\x2\x28B\x297\x5\x42\""+ - "\x2\x28C\x297\x5\x46$\x2\x28D\x297\x5N(\x2\x28E\x297\x5P)\x2\x28F\x297"+ - "\x5T+\x2\x290\x297\x5X-\x2\x291\x297\x5`\x31\x2\x292\x297\x5v<\x2\x293"+ - "\x297\x5x=\x2\x294\x297\x5~@\x2\x295\x297\x5\x84\x43\x2\x296\x288\x3\x2"+ - "\x2\x2\x296\x289\x3\x2\x2\x2\x296\x28A\x3\x2\x2\x2\x296\x28B\x3\x2\x2"+ - "\x2\x296\x28C\x3\x2\x2\x2\x296\x28D\x3\x2\x2\x2\x296\x28E\x3\x2\x2\x2"+ - "\x296\x28F\x3\x2\x2\x2\x296\x290\x3\x2\x2\x2\x296\x291\x3\x2\x2\x2\x296"+ - "\x292\x3\x2\x2\x2\x296\x293\x3\x2\x2\x2\x296\x294\x3\x2\x2\x2\x296\x295"+ - "\x3\x2\x2\x2\x297#\x3\x2\x2\x2\x298\x299\a\x98\x2\x2\x299\x29A\x5\x1B6"+ - "\xDC\x2\x29A\x29E\x5&\x14\x2\x29B\x29C\x5\x1B6\xDC\x2\x29C\x29D\x5(\x15"+ - "\x2\x29D\x29F\x3\x2\x2\x2\x29E\x29B\x3\x2\x2\x2\x29E\x29F\x3\x2\x2\x2"+ - "\x29F\x2A3\x3\x2\x2\x2\x2A0\x2A1\x5\x1B6\xDC\x2\x2A1\x2A2\x5,\x17\x2\x2A2"+ - "\x2A4\x3\x2\x2\x2\x2A3\x2A0\x3\x2\x2\x2\x2A3\x2A4\x3\x2\x2\x2\x2A4\x2A8"+ - "\x3\x2\x2\x2\x2A5\x2A6\x5\x1B6\xDC\x2\x2A6\x2A7\x5\x30\x19\x2\x2A7\x2A9"+ - "\x3\x2\x2\x2\x2A8\x2A5\x3\x2\x2\x2\x2A8\x2A9\x3\x2\x2\x2\x2A9\x2AA\x3"+ - "\x2\x2\x2\x2AA\x2AB\x5\x1B6\xDC\x2\x2AB\x2AC\a;\x2\x2\x2AC\x2AD\x5\x1B6"+ - "\xDC\x2\x2AD\x2B1\x5\x36\x1C\x2\x2AE\x2AF\x5\x1B6\xDC\x2\x2AF\x2B0\x5"+ - "\x32\x1A\x2\x2B0\x2B2\x3\x2\x2\x2\x2B1\x2AE\x3\x2\x2\x2\x2B1\x2B2\x3\x2"+ - "\x2\x2\x2B2%\x3\x2\x2\x2\x2B3\x2B4\x5\x172\xBA\x2\x2B4\'\x3\x2\x2\x2\x2B5"+ - "\x2B6\as\x2\x2\x2B6\x2B7\x5\x1B6\xDC\x2\x2B7\x2B8\x5*\x16\x2\x2B8)\x3"+ - "\x2\x2\x2\x2B9\x2BA\t\x3\x2\x2\x2BA+\x3\x2\x2\x2\x2BB\x2BC\a\x35\x2\x2"+ - "\x2BC\x2BD\x5\x1B6\xDC\x2\x2BD\x2BE\x5.\x18\x2\x2BE-\x3\x2\x2\x2\x2BF"+ - "\x2C0\t\x4\x2\x2\x2C0/\x3\x2\x2\x2\x2C1\x2C2\t\x5\x2\x2\x2C2\x31\x3\x2"+ - "\x2\x2\x2C3\x2C5\a\x1F\x2\x2\x2C4\x2C6\x5\x1B6\xDC\x2\x2C5\x2C4\x3\x2"+ - "\x2\x2\x2C5\x2C6\x3\x2\x2\x2\x2C6\x2C7\x3\x2\x2\x2\x2C7\x2C9\a\xD4\x2"+ - "\x2\x2C8\x2CA\x5\x1B6\xDC\x2\x2C9\x2C8\x3\x2\x2\x2\x2C9\x2CA\x3\x2\x2"+ - "\x2\x2CA\x2CB\x3\x2\x2\x2\x2CB\x2CC\x5\x34\x1B\x2\x2CC\x33\x3\x2\x2\x2"+ - "\x2CD\x2CE\x5\x172\xBA\x2\x2CE\x35\x3\x2\x2\x2\x2CF\x2D2\x5\x38\x1D\x2"+ - "\x2D0\x2D2\x5:\x1E\x2\x2D1\x2CF\x3\x2\x2\x2\x2D1\x2D0\x3\x2\x2\x2\x2D2"+ - "\x37\x3\x2\x2\x2\x2D3\x2D4\a\x30\x2\x2\x2D4\x2D5\x5\x172\xBA\x2\x2D5\x39"+ - "\x3\x2\x2\x2\x2D6\x2D7\x5\x172\xBA\x2\x2D7;\x3\x2\x2\x2\x2D8\x2DC\a\x45"+ - "\x2\x2\x2D9\x2DA\x5\x1B6\xDC\x2\x2DA\x2DB\x5@!\x2\x2DB\x2DD\x3\x2\x2\x2"+ - "\x2DC\x2D9\x3\x2\x2\x2\x2DC\x2DD\x3\x2\x2\x2\x2DD=\x3\x2\x2\x2\x2DE\x2DF"+ - "\a\xB0\x2\x2\x2DF?\x3\x2\x2\x2\x2E0\x2EB\x5\x36\x1C\x2\x2E1\x2E3\x5\x1B6"+ - "\xDC\x2\x2E2\x2E1\x3\x2\x2\x2\x2E2\x2E3\x3\x2\x2\x2\x2E3\x2E4\x3\x2\x2"+ - "\x2\x2E4\x2E6\a+\x2\x2\x2E5\x2E7\x5\x1B6\xDC\x2\x2E6\x2E5\x3\x2\x2\x2"+ - "\x2E6\x2E7\x3\x2\x2\x2\x2E7\x2E8\x3\x2\x2\x2\x2E8\x2EA\x5\x36\x1C\x2\x2E9"+ - "\x2E2\x3\x2\x2\x2\x2EA\x2ED\x3\x2\x2\x2\x2EB\x2E9\x3\x2\x2\x2\x2EB\x2EC"+ - "\x3\x2\x2\x2\x2EC\x41\x3\x2\x2\x2\x2ED\x2EB\x3\x2\x2\x2\x2EE\x2EF\a\xB4"+ - "\x2\x2\x2EF\x2F0\x5\x1B6\xDC\x2\x2F0\x2F2\x5\x36\x1C\x2\x2F1\x2F3\x5\x1B6"+ - "\xDC\x2\x2F2\x2F1\x3\x2\x2\x2\x2F2\x2F3\x3\x2\x2\x2\x2F3\x2F4\x3\x2\x2"+ - "\x2\x2F4\x2F6\a+\x2\x2\x2F5\x2F7\x5\x1B6\xDC\x2\x2F6\x2F5\x3\x2\x2\x2"+ - "\x2F6\x2F7\x3\x2\x2\x2\x2F7\x2F8\x3\x2\x2\x2\x2F8\x2F9\x5\x44#\x2\x2F9"+ - "\x43\x3\x2\x2\x2\x2FA\x2FB\x5\x172\xBA\x2\x2FB\x45\x3\x2\x2\x2\x2FC\x2FD"+ - "\a\x80\x2\x2\x2FD\x2FE\x5\x1B6\xDC\x2\x2FE\x307\x5\x36\x1C\x2\x2FF\x301"+ - "\x5\x1B6\xDC\x2\x300\x2FF\x3\x2\x2\x2\x300\x301\x3\x2\x2\x2\x301\x302"+ - "\x3\x2\x2\x2\x302\x304\a+\x2\x2\x303\x305\x5\x1B6\xDC\x2\x304\x303\x3"+ - "\x2\x2\x2\x304\x305\x3\x2\x2\x2\x305\x306\x3\x2\x2\x2\x306\x308\x5H%\x2"+ - "\x307\x300\x3\x2\x2\x2\x307\x308\x3\x2\x2\x2\x308G\x3\x2\x2\x2\x309\x314"+ - "\x5J&\x2\x30A\x30B\x5J&\x2\x30B\x30C\x5\x1B6\xDC\x2\x30C\x30E\x3\x2\x2"+ - "\x2\x30D\x30A\x3\x2\x2\x2\x30D\x30E\x3\x2\x2\x2\x30E\x30F\x3\x2\x2\x2"+ - "\x30F\x310\a\xC2\x2\x2\x310\x311\x5\x1B6\xDC\x2\x311\x312\x5L\'\x2\x312"+ - "\x314\x3\x2\x2\x2\x313\x309\x3\x2\x2\x2\x313\x30D\x3\x2\x2\x2\x314I\x3"+ - "\x2\x2\x2\x315\x316\x5\x172\xBA\x2\x316K\x3\x2\x2\x2\x317\x318\x5\x172"+ - "\xBA\x2\x318M\x3\x2\x2\x2\x319\x31A\a\xC6\x2\x2\x31A\x31B\x5\x1B6\xDC"+ - "\x2\x31B\x324\x5\x36\x1C\x2\x31C\x31E\x5\x1B6\xDC\x2\x31D\x31C\x3\x2\x2"+ - "\x2\x31D\x31E\x3\x2\x2\x2\x31E\x31F\x3\x2\x2\x2\x31F\x321\a+\x2\x2\x320"+ - "\x322\x5\x1B6\xDC\x2\x321\x320\x3\x2\x2\x2\x321\x322\x3\x2\x2\x2\x322"+ - "\x323\x3\x2\x2\x2\x323\x325\x5H%\x2\x324\x31D\x3\x2\x2\x2\x324\x325\x3"+ - "\x2\x2\x2\x325O\x3\x2\x2\x2\x326\x327\a\x86\x2\x2\x327\x328\x5\x1B6\xDC"+ - "\x2\x328\x32A\x5\x38\x1D\x2\x329\x32B\x5\x1B6\xDC\x2\x32A\x329\x3\x2\x2"+ - "\x2\x32A\x32B\x3\x2\x2\x2\x32B\x32C\x3\x2\x2\x2\x32C\x32E\a+\x2\x2\x32D"+ - "\x32F\x5\x1B6\xDC\x2\x32E\x32D\x3\x2\x2\x2\x32E\x32F\x3\x2\x2\x2\x32F"+ - "\x330\x3\x2\x2\x2\x330\x331\x5R*\x2\x331Q\x3\x2\x2\x2\x332\x333\x5\x172"+ - "\xBA\x2\x333S\x3\x2\x2\x2\x334\x335\a\xCC\x2\x2\x335\x336\x5\x1B6\xDC"+ - "\x2\x336\x338\x5\x38\x1D\x2\x337\x339\x5\x1B6\xDC\x2\x338\x337\x3\x2\x2"+ - "\x2\x338\x339\x3\x2\x2\x2\x339\x33A\x3\x2\x2\x2\x33A\x33C\a+\x2\x2\x33B"+ - "\x33D\x5\x1B6\xDC\x2\x33C\x33B\x3\x2\x2\x2\x33C\x33D\x3\x2\x2\x2\x33D"+ - "\x33E\x3\x2\x2\x2\x33E\x33F\x5V,\x2\x33FU\x3\x2\x2\x2\x340\x341\x5\x172"+ - "\xBA\x2\x341W\x3\x2\x2\x2\x342\x346\x5Z.\x2\x343\x344\x5\x1B6\xDC\x2\x344"+ - "\x345\x5\x62\x32\x2\x345\x347\x3\x2\x2\x2\x346\x343\x3\x2\x2\x2\x346\x347"+ - "\x3\x2\x2\x2\x347Y\x3\x2\x2\x2\x348\x34A\x5\\/\x2\x349\x34B\x5\x1B6\xDC"+ - "\x2\x34A\x349\x3\x2\x2\x2\x34A\x34B\x3\x2\x2\x2\x34B\x34C\x3\x2\x2\x2"+ - "\x34C\x34E\a/\x2\x2\x34D\x34F\x5\x1B6\xDC\x2\x34E\x34D\x3\x2\x2\x2\x34E"+ - "\x34F\x3\x2\x2\x2\x34F\x350\x3\x2\x2\x2\x350\x351\x5^\x30\x2\x351[\x3"+ - "\x2\x2\x2\x352\x353\a\x18\x2\x2\x353]\x3\x2\x2\x2\x354\x355\a\xA2\x2\x2"+ - "\x355_\x3\x2\x2\x2\x356\x357\a\xA2\x2\x2\x357\x358\x5\x1B6\xDC\x2\x358"+ - "\x35A\x5\x38\x1D\x2\x359\x35B\x5\x1B6\xDC\x2\x35A\x359\x3\x2\x2\x2\x35A"+ - "\x35B\x3\x2\x2\x2\x35B\x35C\x3\x2\x2\x2\x35C\x361\a+\x2\x2\x35D\x35F\x5"+ - "\x1B6\xDC\x2\x35E\x35D\x3\x2\x2\x2\x35E\x35F\x3\x2\x2\x2\x35F\x360\x3"+ - "\x2\x2\x2\x360\x362\x5\x62\x32\x2\x361\x35E\x3\x2\x2\x2\x361\x362\x3\x2"+ - "\x2\x2\x362\x61\x3\x2\x2\x2\x363\x36A\x5\x64\x33\x2\x364\x366\x5\x1B6"+ - "\xDC\x2\x365\x364\x3\x2\x2\x2\x365\x366\x3\x2\x2\x2\x366\x367\x3\x2\x2"+ - "\x2\x367\x369\x5\x64\x33\x2\x368\x365\x3\x2\x2\x2\x369\x36C\x3\x2\x2\x2"+ - "\x36A\x368\x3\x2\x2\x2\x36A\x36B\x3\x2\x2\x2\x36B\x63\x3\x2\x2\x2\x36C"+ - "\x36A\x3\x2\x2\x2\x36D\x376\x5\x66\x34\x2\x36E\x376\x5h\x35\x2\x36F\x371"+ - "\x5\x66\x34\x2\x370\x372\x5\x1B6\xDC\x2\x371\x370\x3\x2\x2\x2\x371\x372"+ - "\x3\x2\x2\x2\x372\x373\x3\x2\x2\x2\x373\x374\x5h\x35\x2\x374\x376\x3\x2"+ - "\x2\x2\x375\x36D\x3\x2\x2\x2\x375\x36E\x3\x2\x2\x2\x375\x36F\x3\x2\x2"+ - "\x2\x376\x65\x3\x2\x2\x2\x377\x37B\x5l\x37\x2\x378\x37B\x5p\x39\x2\x379"+ - "\x37B\x5j\x36\x2\x37A\x377\x3\x2\x2\x2\x37A\x378\x3\x2\x2\x2\x37A\x379"+ - "\x3\x2\x2\x2\x37Bg\x3\x2\x2\x2\x37C\x37D\t\x6\x2\x2\x37Di\x3\x2\x2\x2"+ - "\x37E\x37F\x5\x172\xBA\x2\x37Fk\x3\x2\x2\x2\x380\x382\a\xB9\x2\x2\x381"+ - "\x383\x5\x1B6\xDC\x2\x382\x381\x3\x2\x2\x2\x382\x383\x3\x2\x2\x2\x383"+ - "\x384\x3\x2\x2\x2\x384\x386\a\xD8\x2\x2\x385\x387\x5\x1B6\xDC\x2\x386"+ - "\x385\x3\x2\x2\x2\x386\x387\x3\x2\x2\x2\x387\x388\x3\x2\x2\x2\x388\x38A"+ - "\x5n\x38\x2\x389\x38B\x5\x1B6\xDC\x2\x38A\x389\x3\x2\x2\x2\x38A\x38B\x3"+ - "\x2\x2\x2\x38B\x38C\x3\x2\x2\x2\x38C\x38D\a\xDF\x2\x2\x38Dm\x3\x2\x2\x2"+ - "\x38E\x38F\x5\x172\xBA\x2\x38Fo\x3\x2\x2\x2\x390\x395\a\xBF\x2\x2\x391"+ - "\x393\x5\x1B6\xDC\x2\x392\x391\x3\x2\x2\x2\x392\x393\x3\x2\x2\x2\x393"+ - "\x394\x3\x2\x2\x2\x394\x396\x5r:\x2\x395\x392\x3\x2\x2\x2\x395\x396\x3"+ - "\x2\x2\x2\x396q\x3\x2\x2\x2\x397\x399\a\xD8\x2\x2\x398\x39A\x5\x1B6\xDC"+ - "\x2\x399\x398\x3\x2\x2\x2\x399\x39A\x3\x2\x2\x2\x39A\x39B\x3\x2\x2\x2"+ - "\x39B\x39D\x5t;\x2\x39C\x39E\x5\x1B6\xDC\x2\x39D\x39C\x3\x2\x2\x2\x39D"+ - "\x39E\x3\x2\x2\x2\x39E\x39F\x3\x2\x2\x2\x39F\x3A0\a\xDF\x2\x2\x3A0s\x3"+ - "\x2\x2\x2\x3A1\x3A2\x5\x172\xBA\x2\x3A2u\x3\x2\x2\x2\x3A3\x3A4\a\xCF\x2"+ - "\x2\x3A4\x3A5\x5\x1B6\xDC\x2\x3A5\x3A7\x5\x38\x1D\x2\x3A6\x3A8\x5\x1B6"+ - "\xDC\x2\x3A7\x3A6\x3\x2\x2\x2\x3A7\x3A8\x3\x2\x2\x2\x3A8\x3A9\x3\x2\x2"+ - "\x2\x3A9\x3AE\a+\x2\x2\x3AA\x3AC\x5\x1B6\xDC\x2\x3AB\x3AA\x3\x2\x2\x2"+ - "\x3AB\x3AC\x3\x2\x2\x2\x3AC\x3AD\x3\x2\x2\x2\x3AD\x3AF\x5\x62\x32\x2\x3AE"+ - "\x3AB\x3\x2\x2\x2\x3AE\x3AF\x3\x2\x2\x2\x3AFw\x3\x2\x2\x2\x3B0\x3B1\a"+ - "}\x2\x2\x3B1\x3B2\x5\x1B6\xDC\x2\x3B2\x3B4\x5\x38\x1D\x2\x3B3\x3B5\x5"+ - "\x1B6\xDC\x2\x3B4\x3B3\x3\x2\x2\x2\x3B4\x3B5\x3\x2\x2\x2\x3B5\x3B6\x3"+ - "\x2\x2\x2\x3B6\x3B8\a+\x2\x2\x3B7\x3B9\x5\x1B6\xDC\x2\x3B8\x3B7\x3\x2"+ - "\x2\x2\x3B8\x3B9\x3\x2\x2\x2\x3B9\x3BA\x3\x2\x2\x2\x3BA\x3BB\x5z>\x2\x3BB"+ - "y\x3\x2\x2\x2\x3BC\x3C7\x5|?\x2\x3BD\x3BF\x5\x1B6\xDC\x2\x3BE\x3BD\x3"+ - "\x2\x2\x2\x3BE\x3BF\x3\x2\x2\x2\x3BF\x3C0\x3\x2\x2\x2\x3C0\x3C2\a+\x2"+ - "\x2\x3C1\x3C3\x5\x1B6\xDC\x2\x3C2\x3C1\x3\x2\x2\x2\x3C2\x3C3\x3\x2\x2"+ - "\x2\x3C3\x3C4\x3\x2\x2\x2\x3C4\x3C6\x5|?\x2\x3C5\x3BE\x3\x2\x2\x2\x3C6"+ - "\x3C9\x3\x2\x2\x2\x3C7\x3C5\x3\x2\x2\x2\x3C7\x3C8\x3\x2\x2\x2\x3C8{\x3"+ - "\x2\x2\x2\x3C9\x3C7\x3\x2\x2\x2\x3CA\x3CB\x5\x172\xBA\x2\x3CB}\x3\x2\x2"+ - "\x2\x3CC\x3CD\a\xA9\x2\x2\x3CD\x3CE\x5\x1B6\xDC\x2\x3CE\x3D0\x5\x36\x1C"+ - "\x2\x3CF\x3D1\x5\x1B6\xDC\x2\x3D0\x3CF\x3\x2\x2\x2\x3D0\x3D1\x3\x2\x2"+ - "\x2\x3D1\x3D2\x3\x2\x2\x2\x3D2\x3D4\a+\x2\x2\x3D3\x3D5\x5\x1B6\xDC\x2"+ - "\x3D4\x3D3\x3\x2\x2\x2\x3D4\x3D5\x3\x2\x2\x2\x3D5\x3D7\x3\x2\x2\x2\x3D6"+ - "\x3D8\x5\x80\x41\x2\x3D7\x3D6\x3\x2\x2\x2\x3D7\x3D8\x3\x2\x2\x2\x3D8\x3DA"+ - "\x3\x2\x2\x2\x3D9\x3DB\x5\x1B6\xDC\x2\x3DA\x3D9\x3\x2\x2\x2\x3DA\x3DB"+ - "\x3\x2\x2\x2\x3DB\x3DC\x3\x2\x2\x2\x3DC\x3DE\a+\x2\x2\x3DD\x3DF\x5\x1B6"+ - "\xDC\x2\x3DE\x3DD\x3\x2\x2\x2\x3DE\x3DF\x3\x2\x2\x2\x3DF\x3E0\x3\x2\x2"+ - "\x2\x3E0\x3E1\x5\x82\x42\x2\x3E1\x7F\x3\x2\x2\x2\x3E2\x3E3\x5\x172\xBA"+ - "\x2\x3E3\x81\x3\x2\x2\x2\x3E4\x3E5\x5\x172\xBA\x2\x3E5\x83\x3\x2\x2\x2"+ - "\x3E6\x3E7\au\x2\x2\x3E7\x3E8\x5\x1B6\xDC\x2\x3E8\x3EA\x5\x36\x1C\x2\x3E9"+ - "\x3EB\x5\x1B6\xDC\x2\x3EA\x3E9\x3\x2\x2\x2\x3EA\x3EB\x3\x2\x2\x2\x3EB"+ - "\x3EC\x3\x2\x2\x2\x3EC\x3EE\a+\x2\x2\x3ED\x3EF\x5\x1B6\xDC\x2\x3EE\x3ED"+ - "\x3\x2\x2\x2\x3EE\x3EF\x3\x2\x2\x2\x3EF\x3F1\x3\x2\x2\x2\x3F0\x3F2\x5"+ - "\x80\x41\x2\x3F1\x3F0\x3\x2\x2\x2\x3F1\x3F2\x3\x2\x2\x2\x3F2\x3F4\x3\x2"+ - "\x2\x2\x3F3\x3F5\x5\x1B6\xDC\x2\x3F4\x3F3\x3\x2\x2\x2\x3F4\x3F5\x3\x2"+ - "\x2\x2\x3F5\x3F6\x3\x2\x2\x2\x3F6\x3F8\a+\x2\x2\x3F7\x3F9\x5\x1B6\xDC"+ - "\x2\x3F8\x3F7\x3\x2\x2\x2\x3F8\x3F9\x3\x2\x2\x2\x3F9\x3FA\x3\x2\x2\x2"+ - "\x3FA\x3FB\x5\x86\x44\x2\x3FB\x85\x3\x2\x2\x2\x3FC\x3FD\x5\x172\xBA\x2"+ - "\x3FD\x87\x3\x2\x2\x2\x3FE\x3FF\x5\x170\xB9\x2\x3FF\x400\x5\x1B6\xDC\x2"+ - "\x400\x402\x3\x2\x2\x2\x401\x3FE\x3\x2\x2\x2\x401\x402\x3\x2\x2\x2\x402"+ - "\x403\x3\x2\x2\x2\x403\x404\a\x46\x2\x2\x404\x405\x5\x1B6\xDC\x2\x405"+ - "\x410\x5\x8A\x46\x2\x406\x408\x5\x1B6\xDC\x2\x407\x406\x3\x2\x2\x2\x407"+ - "\x408\x3\x2\x2\x2\x408\x409\x3\x2\x2\x2\x409\x40B\a+\x2\x2\x40A\x40C\x5"+ - "\x1B6\xDC\x2\x40B\x40A\x3\x2\x2\x2\x40B\x40C\x3\x2\x2\x2\x40C\x40D\x3"+ - "\x2\x2\x2\x40D\x40F\x5\x8A\x46\x2\x40E\x407\x3\x2\x2\x2\x40F\x412\x3\x2"+ - "\x2\x2\x410\x40E\x3\x2\x2\x2\x410\x411\x3\x2\x2\x2\x411\x89\x3\x2\x2\x2"+ - "\x412\x410\x3\x2\x2\x2\x413\x417\x5\x14E\xA8\x2\x414\x415\x5\x1B6\xDC"+ - "\x2\x415\x416\x5\x15A\xAE\x2\x416\x418\x3\x2\x2\x2\x417\x414\x3\x2\x2"+ - "\x2\x417\x418\x3\x2\x2\x2\x418\x41A\x3\x2\x2\x2\x419\x41B\x5\x1B6\xDC"+ - "\x2\x41A\x419\x3\x2\x2\x2\x41A\x41B\x3\x2\x2\x2\x41B\x41C\x3\x2\x2\x2"+ - "\x41C\x41E\a\xD4\x2\x2\x41D\x41F\x5\x1B6\xDC\x2\x41E\x41D\x3\x2\x2\x2"+ - "\x41E\x41F\x3\x2\x2\x2\x41F\x420\x3\x2\x2\x2\x420\x421\x5\x172\xBA\x2"+ - "\x421\x8B\x3\x2\x2\x2\x422\x423\x5\x170\xB9\x2\x423\x424\x5\x1B6\xDC\x2"+ - "\x424\x426\x3\x2\x2\x2\x425\x422\x3\x2\x2\x2\x425\x426\x3\x2\x2\x2\x426"+ - "\x427\x3\x2\x2\x2\x427\x428\aI\x2\x2\x428\x42B\x5\x1B6\xDC\x2\x429\x42A"+ - "\a\xA7\x2\x2\x42A\x42C\x5\x1B6\xDC\x2\x42B\x429\x3\x2\x2\x2\x42B\x42C"+ - "\x3\x2\x2\x2\x42C\x42D\x3\x2\x2\x2\x42D\x42E\t\a\x2\x2\x42E\x42F\x5\x1B6"+ - "\xDC\x2\x42F\x430\x5\x14E\xA8\x2\x430\x431\x5\x1B6\xDC\x2\x431\x432\a"+ - "\x84\x2\x2\x432\x433\x5\x1B6\xDC\x2\x433\x439\a\xE2\x2\x2\x434\x435\x5"+ - "\x1B6\xDC\x2\x435\x436\a\x37\x2\x2\x436\x437\x5\x1B6\xDC\x2\x437\x438"+ - "\a\xE2\x2\x2\x438\x43A\x3\x2\x2\x2\x439\x434\x3\x2\x2\x2\x439\x43A\x3"+ - "\x2\x2\x2\x43A\x43F\x3\x2\x2\x2\x43B\x43D\x5\x1B6\xDC\x2\x43C\x43B\x3"+ - "\x2\x2\x2\x43C\x43D\x3\x2\x2\x2\x43D\x43E\x3\x2\x2\x2\x43E\x440\x5\x8E"+ - "H\x2\x43F\x43C\x3\x2\x2\x2\x43F\x440\x3\x2\x2\x2\x440\x444\x3\x2\x2\x2"+ - "\x441\x442\x5\x1B6\xDC\x2\x442\x443\x5\x15A\xAE\x2\x443\x445\x3\x2\x2"+ - "\x2\x444\x441\x3\x2\x2\x2\x444\x445\x3\x2\x2\x2\x445\x8D\x3\x2\x2\x2\x446"+ - "\x458\a\xD8\x2\x2\x447\x449\x5\x1B6\xDC\x2\x448\x447\x3\x2\x2\x2\x448"+ - "\x449\x3\x2\x2\x2\x449\x44A\x3\x2\x2\x2\x44A\x455\x5\x90I\x2\x44B\x44D"+ - "\x5\x1B6\xDC\x2\x44C\x44B\x3\x2\x2\x2\x44C\x44D\x3\x2\x2\x2\x44D\x44E"+ - "\x3\x2\x2\x2\x44E\x450\a+\x2\x2\x44F\x451\x5\x1B6\xDC\x2\x450\x44F\x3"+ - "\x2\x2\x2\x450\x451\x3\x2\x2\x2\x451\x452\x3\x2\x2\x2\x452\x454\x5\x90"+ - "I\x2\x453\x44C\x3\x2\x2\x2\x454\x457\x3\x2\x2\x2\x455\x453\x3\x2\x2\x2"+ - "\x455\x456\x3\x2\x2\x2\x456\x459\x3\x2\x2\x2\x457\x455\x3\x2\x2\x2\x458"+ - "\x448\x3\x2\x2\x2\x458\x459\x3\x2\x2\x2\x459\x45B\x3\x2\x2\x2\x45A\x45C"+ - "\x5\x1B6\xDC\x2\x45B\x45A\x3\x2\x2\x2\x45B\x45C\x3\x2\x2\x2\x45C\x45D"+ - "\x3\x2\x2\x2\x45D\x45E\a\xDF\x2\x2\x45E\x8F\x3\x2\x2\x2\x45F\x460\a\x99"+ - "\x2\x2\x460\x462\x5\x1B6\xDC\x2\x461\x45F\x3\x2\x2\x2\x461\x462\x3\x2"+ - "\x2\x2\x462\x465\x3\x2\x2\x2\x463\x464\t\b\x2\x2\x464\x466\x5\x1B6\xDC"+ - "\x2\x465\x463\x3\x2\x2\x2\x465\x466\x3\x2\x2\x2\x466\x469\x3\x2\x2\x2"+ - "\x467\x468\a\xA0\x2\x2\x468\x46A\x5\x1B6\xDC\x2\x469\x467\x3\x2\x2\x2"+ - "\x469\x46A\x3\x2\x2\x2\x46A\x46B\x3\x2\x2\x2\x46B\x474\x5\x14C\xA7\x2"+ - "\x46C\x46E\x5\x1B6\xDC\x2\x46D\x46C\x3\x2\x2\x2\x46D\x46E\x3\x2\x2\x2"+ - "\x46E\x46F\x3\x2\x2\x2\x46F\x471\a\xD8\x2\x2\x470\x472\x5\x1B6\xDC\x2"+ - "\x471\x470\x3\x2\x2\x2\x471\x472\x3\x2\x2\x2\x472\x473\x3\x2\x2\x2\x473"+ - "\x475\a\xDF\x2\x2\x474\x46D\x3\x2\x2\x2\x474\x475\x3\x2\x2\x2\x475\x47A"+ - "\x3\x2\x2\x2\x476\x478\x5\x1B6\xDC\x2\x477\x476\x3\x2\x2\x2\x477\x478"+ - "\x3\x2\x2\x2\x478\x479\x3\x2\x2\x2\x479\x47B\x5\x15A\xAE\x2\x47A\x477"+ - "\x3\x2\x2\x2\x47A\x47B\x3\x2\x2\x2\x47B\x480\x3\x2\x2\x2\x47C\x47E\x5"+ - "\x1B6\xDC\x2\x47D\x47C\x3\x2\x2\x2\x47D\x47E\x3\x2\x2\x2\x47E\x47F\x3"+ - "\x2\x2\x2\x47F\x481\x5\x92J\x2\x480\x47D\x3\x2\x2\x2\x480\x481\x3\x2\x2"+ - "\x2\x481\x91\x3\x2\x2\x2\x482\x484\a\xD4\x2\x2\x483\x485\x5\x1B6\xDC\x2"+ - "\x484\x483\x3\x2\x2\x2\x484\x485\x3\x2\x2\x2\x485\x486\x3\x2\x2\x2\x486"+ - "\x487\x5\x172\xBA\x2\x487\x93\x3\x2\x2\x2\x488\x489\x5\x96L\x2\x489\x48A"+ - "\x5\x1B6\xDC\x2\x48A\x495\x5\x98M\x2\x48B\x48D\x5\x1B6\xDC\x2\x48C\x48B"+ - "\x3\x2\x2\x2\x48C\x48D\x3\x2\x2\x2\x48D\x48E\x3\x2\x2\x2\x48E\x490\a+"+ - "\x2\x2\x48F\x491\x5\x1B6\xDC\x2\x490\x48F\x3\x2\x2\x2\x490\x491\x3\x2"+ - "\x2\x2\x491\x492\x3\x2\x2\x2\x492\x494\x5\x98M\x2\x493\x48C\x3\x2\x2\x2"+ - "\x494\x497\x3\x2\x2\x2\x495\x493\x3\x2\x2\x2\x495\x496\x3\x2\x2\x2\x496"+ - "\x95\x3\x2\x2\x2\x497\x495\x3\x2\x2\x2\x498\x499\t\t\x2\x2\x499\x97\x3"+ - "\x2\x2\x2\x49A\x49E\x5\x9AN\x2\x49B\x49E\x5\x9CO\x2\x49C\x49E\x5\xA2R"+ - "\x2\x49D\x49A\x3\x2\x2\x2\x49D\x49B\x3\x2\x2\x2\x49D\x49C\x3\x2\x2\x2"+ - "\x49E\x99\x3\x2\x2\x2\x49F\x4A0\x5\x14C\xA7\x2\x4A0\x9B\x3\x2\x2\x2\x4A1"+ - "\x4A3\x5\x9EP\x2\x4A2\x4A4\x5\x1B6\xDC\x2\x4A3\x4A2\x3\x2\x2\x2\x4A3\x4A4"+ - "\x3\x2\x2\x2\x4A4\x4A5\x3\x2\x2\x2\x4A5\x4A7\a\xDA\x2\x2\x4A6\x4A8\x5"+ - "\x1B6\xDC\x2\x4A7\x4A6\x3\x2\x2\x2\x4A7\x4A8\x3\x2\x2\x2\x4A8\x4A9\x3"+ - "\x2\x2\x2\x4A9\x4AA\x5\xA0Q\x2\x4AA\x9D\x3\x2\x2\x2\x4AB\x4AC\x6P\x2\x2"+ - "\x4AC\x4AD\x5\x14C\xA7\x2\x4AD\x9F\x3\x2\x2\x2\x4AE\x4AF\x6Q\x3\x2\x4AF"+ - "\x4B0\x5\x14C\xA7\x2\x4B0\xA1\x3\x2\x2\x2\x4B1\x4B3\x5\xA4S\x2\x4B2\x4B4"+ - "\x5\x1B6\xDC\x2\x4B3\x4B2\x3\x2\x2\x2\x4B3\x4B4\x3\x2\x2\x2\x4B4\x4B5"+ - "\x3\x2\x2\x2\x4B5\x4B7\a\xDA\x2\x2\x4B6\x4B8\x5\x1B6\xDC\x2\x4B7\x4B6"+ - "\x3\x2\x2\x2\x4B7\x4B8\x3\x2\x2\x2\x4B8\x4B9\x3\x2\x2\x2\x4B9\x4BA\x5"+ - "\xA6T\x2\x4BA\xA3\x3\x2\x2\x2\x4BB\x4BC\x5\x14C\xA7\x2\x4BC\xA5\x3\x2"+ - "\x2\x2\x4BD\x4BE\x5\x14C\xA7\x2\x4BE\xA7\x3\x2\x2\x2\x4BF\x4C0\aX\x2\x2"+ - "\x4C0\x4C1\x5\x1A0\xD1\x2\x4C1\x4C2\x5\x1E\x10\x2\x4C2\x4C3\a\x82\x2\x2"+ - "\x4C3\x4D7\x3\x2\x2\x2\x4C4\x4C5\aX\x2\x2\x4C5\x4C6\x5\x1B6\xDC\x2\x4C6"+ - "\x4C7\t\n\x2\x2\x4C7\x4C8\x5\x1B6\xDC\x2\x4C8\x4C9\x5\x172\xBA\x2\x4C9"+ - "\x4CA\x5\x1A0\xD1\x2\x4CA\x4CB\x5\x1E\x10\x2\x4CB\x4CC\a\x82\x2\x2\x4CC"+ - "\x4D7\x3\x2\x2\x2\x4CD\x4CE\aX\x2\x2\x4CE\x4CF\x5\x1A0\xD1\x2\x4CF\x4D0"+ - "\x5\x1E\x10\x2\x4D0\x4D1\a\x82\x2\x2\x4D1\x4D2\x5\x1B6\xDC\x2\x4D2\x4D3"+ - "\t\n\x2\x2\x4D3\x4D4\x5\x1B6\xDC\x2\x4D4\x4D5\x5\x172\xBA\x2\x4D5\x4D7"+ - "\x3\x2\x2\x2\x4D6\x4BF\x3\x2\x2\x2\x4D6\x4C4\x3\x2\x2\x2\x4D6\x4CD\x3"+ - "\x2\x2\x2\x4D7\xA9\x3\x2\x2\x2\x4D8\x4D9\x5\x170\xB9\x2\x4D9\x4DA\x5\x1B6"+ - "\xDC\x2\x4DA\x4DC\x3\x2\x2\x2\x4DB\x4D8\x3\x2\x2\x2\x4DB\x4DC\x3\x2\x2"+ - "\x2\x4DC\x4DD\x3\x2\x2\x2\x4DD\x4DE\ag\x2\x2\x4DE\x4DF\x5\x1B6\xDC\x2"+ - "\x4DF\x4E0\x5\x14E\xA8\x2\x4E0\x4E4\x5\x1A0\xD1\x2\x4E1\x4E3\x5\xACW\x2"+ - "\x4E2\x4E1\x3\x2\x2\x2\x4E3\x4E6\x3\x2\x2\x2\x4E4\x4E2\x3\x2\x2\x2\x4E4"+ - "\x4E5\x3\x2\x2\x2\x4E5\x4E7\x3\x2\x2\x2\x4E6\x4E4\x3\x2\x2\x2\x4E7\x4E8"+ - "\a^\x2\x2\x4E8\xAB\x3\x2\x2\x2\x4E9\x4F2\x5\x14E\xA8\x2\x4EA\x4EC\x5\x1B6"+ - "\xDC\x2\x4EB\x4EA\x3\x2\x2\x2\x4EB\x4EC\x3\x2\x2\x2\x4EC\x4ED\x3\x2\x2"+ - "\x2\x4ED\x4EF\a\xD4\x2\x2\x4EE\x4F0\x5\x1B6\xDC\x2\x4EF\x4EE\x3\x2\x2"+ - "\x2\x4EF\x4F0\x3\x2\x2\x2\x4F0\x4F1\x3\x2\x2\x2\x4F1\x4F3\x5\x172\xBA"+ - "\x2\x4F2\x4EB\x3\x2\x2\x2\x4F2\x4F3\x3\x2\x2\x2\x4F3\x4F4\x3\x2\x2\x2"+ - "\x4F4\x4F5\x5\x1A0\xD1\x2\x4F5\xAD\x3\x2\x2\x2\x4F6\x4F7\a\x66\x2\x2\x4F7"+ - "\xAF\x3\x2\x2\x2\x4F8\x4F9\ai\x2\x2\x4F9\x4FA\x5\x1B6\xDC\x2\x4FA\x505"+ - "\x5\x172\xBA\x2\x4FB\x4FD\x5\x1B6\xDC\x2\x4FC\x4FB\x3\x2\x2\x2\x4FC\x4FD"+ - "\x3\x2\x2\x2\x4FD\x4FE\x3\x2\x2\x2\x4FE\x500\a+\x2\x2\x4FF\x501\x5\x1B6"+ - "\xDC\x2\x500\x4FF\x3\x2\x2\x2\x500\x501\x3\x2\x2\x2\x501\x502\x3\x2\x2"+ - "\x2\x502\x504\x5\x172\xBA\x2\x503\x4FC\x3\x2\x2\x2\x504\x507\x3\x2\x2"+ - "\x2\x505\x503\x3\x2\x2\x2\x505\x506\x3\x2\x2\x2\x506\xB1\x3\x2\x2\x2\x507"+ - "\x505\x3\x2\x2\x2\x508\x509\aj\x2\x2\x509\x50A\x5\x1B6\xDC\x2\x50A\x50B"+ - "\x5\x172\xBA\x2\x50B\xB3\x3\x2\x2\x2\x50C\x50D\x5\x170\xB9\x2\x50D\x50E"+ - "\x5\x1B6\xDC\x2\x50E\x510\x3\x2\x2\x2\x50F\x50C\x3\x2\x2\x2\x50F\x510"+ - "\x3\x2\x2\x2\x510\x511\x3\x2\x2\x2\x511\x512\ak\x2\x2\x512\x513\x5\x1B6"+ - "\xDC\x2\x513\x515\x5\x14E\xA8\x2\x514\x516\x5\x1B6\xDC\x2\x515\x514\x3"+ - "\x2\x2\x2\x515\x516\x3\x2\x2\x2\x516\x517\x3\x2\x2\x2\x517\x518\x5\x8E"+ - "H\x2\x518\xB5\x3\x2\x2\x2\x519\x51A\t\v\x2\x2\x51A\xB7\x3\x2\x2\x2\x51B"+ - "\x51C\as\x2\x2\x51C\x51D\x5\x1B6\xDC\x2\x51D\x51E\aZ\x2\x2\x51E\x51F\x5"+ - "\x1B6\xDC\x2\x51F\x520\x5\x172\xBA\x2\x520\x521\x5\x1B6\xDC\x2\x521\x522"+ - "\a|\x2\x2\x522\x523\x5\x1B6\xDC\x2\x523\x524\x5\x172\xBA\x2\x524\x525"+ - "\x5\x1A0\xD1\x2\x525\x526\x5\x1E\x10\x2\x526\x52A\a\x8F\x2\x2\x527\x528"+ - "\x5\x1B6\xDC\x2\x528\x529\x5\x172\xBA\x2\x529\x52B\x3\x2\x2\x2\x52A\x527"+ - "\x3\x2\x2\x2\x52A\x52B\x3\x2\x2\x2\x52B\xB9\x3\x2\x2\x2\x52C\x52D\as\x2"+ - "\x2\x52D\x52E\x5\x1B6\xDC\x2\x52E\x52F\x5\x172\xBA\x2\x52F\x530\x5\x1B6"+ - "\xDC\x2\x530\x531\a\xC2\x2\x2\x531\x532\x5\x1B6\xDC\x2\x532\x538\x5\x172"+ - "\xBA\x2\x533\x534\x5\x1B6\xDC\x2\x534\x535\a\xBB\x2\x2\x535\x536\x5\x1B6"+ - "\xDC\x2\x536\x537\x5\x172\xBA\x2\x537\x539\x3\x2\x2\x2\x538\x533\x3\x2"+ - "\x2\x2\x538\x539\x3\x2\x2\x2\x539\x53A\x3\x2\x2\x2\x53A\x53B\x5\x1A0\xD1"+ - "\x2\x53B\x53C\x5\x1E\x10\x2\x53C\x540\a\x8F\x2\x2\x53D\x53E\x5\x1B6\xDC"+ - "\x2\x53E\x53F\x5\x172\xBA\x2\x53F\x541\x3\x2\x2\x2\x540\x53D\x3\x2\x2"+ - "\x2\x540\x541\x3\x2\x2\x2\x541\xBB\x3\x2\x2\x2\x542\x543\x5\x170\xB9\x2"+ - "\x543\x544\x5\x1B6\xDC\x2\x544\x546\x3\x2\x2\x2\x545\x542\x3\x2\x2\x2"+ - "\x545\x546\x3\x2\x2\x2\x546\x549\x3\x2\x2\x2\x547\x548\a\xBA\x2\x2\x548"+ - "\x54A\x5\x1B6\xDC\x2\x549\x547\x3\x2\x2\x2\x549\x54A\x3\x2\x2\x2\x54A"+ - "\x54B\x3\x2\x2\x2\x54B\x54D\at\x2\x2\x54C\x54E\x5\x1B6\xDC\x2\x54D\x54C"+ - "\x3\x2\x2\x2\x54D\x54E\x3\x2\x2\x2\x54E\x54F\x3\x2\x2\x2\x54F\x554\x5"+ - "\xBE`\x2\x550\x552\x5\x1B6\xDC\x2\x551\x550\x3\x2\x2\x2\x551\x552\x3\x2"+ - "\x2\x2\x552\x553\x3\x2\x2\x2\x553\x555\x5\x8EH\x2\x554\x551\x3\x2\x2\x2"+ - "\x554\x555\x3\x2\x2\x2\x555\x55A\x3\x2\x2\x2\x556\x558\x5\x1B6\xDC\x2"+ - "\x557\x556\x3\x2\x2\x2\x557\x558\x3\x2\x2\x2\x558\x559\x3\x2\x2\x2\x559"+ - "\x55B\x5\x15A\xAE\x2\x55A\x557\x3\x2\x2\x2\x55A\x55B\x3\x2\x2\x2\x55B"+ - "\x55C\x3\x2\x2\x2\x55C\x55D\x5\x1A0\xD1\x2\x55D\x55E\x5\x1E\x10\x2\x55E"+ - "\x55F\a_\x2\x2\x55F\xBD\x3\x2\x2\x2\x560\x561\x5\x14E\xA8\x2\x561\xBF"+ - "\x3\x2\x2\x2\x562\x563\aw\x2\x2\x563\x564\x5\x1B6\xDC\x2\x564\x565\x5"+ - "\x172\xBA\x2\x565\xC1\x3\x2\x2\x2\x566\x567\ax\x2\x2\x567\x568\x5\x1B6"+ - "\xDC\x2\x568\x569\x5\x172\xBA\x2\x569\xC3\x3\x2\x2\x2\x56A\x56B\ay\x2"+ - "\x2\x56B\x56C\x5\x1B6\xDC\x2\x56C\x56D\x5\xD6l\x2\x56D\x56E\x5\x1B6\xDC"+ - "\x2\x56E\x56F\a\xC1\x2\x2\x56F\x570\x5\x1A0\xD1\x2\x570\x574\x5\x1E\x10"+ - "\x2\x571\x573\x5\xC6\x64\x2\x572\x571\x3\x2\x2\x2\x573\x576\x3\x2\x2\x2"+ - "\x574\x572\x3\x2\x2\x2\x574\x575\x3\x2\x2\x2\x575\x578\x3\x2\x2\x2\x576"+ - "\x574\x3\x2\x2\x2\x577\x579\x5\xC8\x65\x2\x578\x577\x3\x2\x2\x2\x578\x579"+ - "\x3\x2\x2\x2\x579\x57A\x3\x2\x2\x2\x57A\x57B\a`\x2\x2\x57B\xC5\x3\x2\x2"+ - "\x2\x57C\x57D\a\\\x2\x2\x57D\x57E\x5\x1B6\xDC\x2\x57E\x57F\x5\xD6l\x2"+ - "\x57F\x580\x5\x1B6\xDC\x2\x580\x581\a\xC1\x2\x2\x581\x582\x5\x1A0\xD1"+ - "\x2\x582\x583\x5\x1E\x10\x2\x583\x58F\x3\x2\x2\x2\x584\x585\a\\\x2\x2"+ - "\x585\x586\x5\x1B6\xDC\x2\x586\x587\x5\xD6l\x2\x587\x588\x5\x1B6\xDC\x2"+ - "\x588\x58A\a\xC1\x2\x2\x589\x58B\x5\x1B6\xDC\x2\x58A\x589\x3\x2\x2\x2"+ - "\x58A\x58B\x3\x2\x2\x2\x58B\x58C\x3\x2\x2\x2\x58C\x58D\x5\x1E\x10\x2\x58D"+ - "\x58F\x3\x2\x2\x2\x58E\x57C\x3\x2\x2\x2\x58E\x584\x3\x2\x2\x2\x58F\xC7"+ - "\x3\x2\x2\x2\x590\x591\a[\x2\x2\x591\x592\x5\x1A0\xD1\x2\x592\x593\x5"+ - "\x1E\x10\x2\x593\xC9\x3\x2\x2\x2\x594\x597\x5\xCCg\x2\x595\x597\x5\xCE"+ - "h\x2\x596\x594\x3\x2\x2\x2\x596\x595\x3\x2\x2\x2\x597\xCB\x3\x2\x2\x2"+ - "\x598\x59A\ay\x2\x2\x599\x59B\x5\x1B6\xDC\x2\x59A\x599\x3\x2\x2\x2\x59A"+ - "\x59B\x3\x2\x2\x2\x59B\x59C\x3\x2\x2\x2\x59C\x59E\x5\xD6l\x2\x59D\x59F"+ - "\x5\x1B6\xDC\x2\x59E\x59D\x3\x2\x2\x2\x59E\x59F\x3\x2\x2\x2\x59F\x5A0"+ - "\x3\x2\x2\x2\x5A0\x5A2\a\xC1\x2\x2\x5A1\x5A3\x5\x1B6\xDC\x2\x5A2\x5A1"+ - "\x3\x2\x2\x2\x5A2\x5A3\x3\x2\x2\x2\x5A3\x5A4\x3\x2\x2\x2\x5A4\x5A8\x5"+ - "\xD2j\x2\x5A5\x5A6\x5\x1B6\xDC\x2\x5A6\x5A7\x5\xD0i\x2\x5A7\x5A9\x3\x2"+ - "\x2\x2\x5A8\x5A5\x3\x2\x2\x2\x5A8\x5A9\x3\x2\x2\x2\x5A9\xCD\x3\x2\x2\x2"+ - "\x5AA\x5AC\ay\x2\x2\x5AB\x5AD\x5\x1B6\xDC\x2\x5AC\x5AB\x3\x2\x2\x2\x5AC"+ - "\x5AD\x3\x2\x2\x2\x5AD\x5AE\x3\x2\x2\x2\x5AE\x5B0\x5\xD6l\x2\x5AF\x5B1"+ - "\x5\x1B6\xDC\x2\x5B0\x5AF\x3\x2\x2\x2\x5B0\x5B1\x3\x2\x2\x2\x5B1\x5B2"+ - "\x3\x2\x2\x2\x5B2\x5B3\a\xC1\x2\x2\x5B3\x5B5\x5\x1A0\xD1\x2\x5B4\x5B6"+ - "\x5\x1B6\xDC\x2\x5B5\x5B4\x3\x2\x2\x2\x5B5\x5B6\x3\x2\x2\x2\x5B6\x5B7"+ - "\x3\x2\x2\x2\x5B7\x5B8\x5\xD0i\x2\x5B8\xCF\x3\x2\x2\x2\x5B9\x5BB\a[\x2"+ - "\x2\x5BA\x5BC\x5\x1B6\xDC\x2\x5BB\x5BA\x3\x2\x2\x2\x5BB\x5BC\x3\x2\x2"+ - "\x2\x5BC\x5BE\x3\x2\x2\x2\x5BD\x5BF\x5\xD2j\x2\x5BE\x5BD\x3\x2\x2\x2\x5BE"+ - "\x5BF\x3\x2\x2\x2\x5BF\xD1\x3\x2\x2\x2\x5C0\x5CD\x5\x168\xB5\x2\x5C1\x5C3"+ - "\x5\x1B6\xDC\x2\x5C2\x5C1\x3\x2\x2\x2\x5C2\x5C3\x3\x2\x2\x2\x5C3\x5C4"+ - "\x3\x2\x2\x2\x5C4\x5C6\a,\x2\x2\x5C5\x5C7\x5\x1B6\xDC\x2\x5C6\x5C5\x3"+ - "\x2\x2\x2\x5C6\x5C7\x3\x2\x2\x2\x5C7\x5C9\x3\x2\x2\x2\x5C8\x5CA\x5\xD4"+ - "k\x2\x5C9\x5C8\x3\x2\x2\x2\x5C9\x5CA\x3\x2\x2\x2\x5CA\x5CC\x3\x2\x2\x2"+ - "\x5CB\x5C2\x3\x2\x2\x2\x5CC\x5CF\x3\x2\x2\x2\x5CD\x5CB\x3\x2\x2\x2\x5CD"+ - "\x5CE\x3\x2\x2\x2\x5CE\x5E7\x3\x2\x2\x2\x5CF\x5CD\x3\x2\x2\x2\x5D0\x5D2"+ - "\a,\x2\x2\x5D1\x5D3\x5\x1B6\xDC\x2\x5D2\x5D1\x3\x2\x2\x2\x5D2\x5D3\x3"+ - "\x2\x2\x2\x5D3\x5D5\x3\x2\x2\x2\x5D4\x5D0\x3\x2\x2\x2\x5D4\x5D5\x3\x2"+ - "\x2\x2\x5D5\x5D6\x3\x2\x2\x2\x5D6\x5E3\x5\xD4k\x2\x5D7\x5D9\x5\x1B6\xDC"+ - "\x2\x5D8\x5D7\x3\x2\x2\x2\x5D8\x5D9\x3\x2\x2\x2\x5D9\x5DA\x3\x2\x2\x2"+ - "\x5DA\x5DC\a,\x2\x2\x5DB\x5DD\x5\x1B6\xDC\x2\x5DC\x5DB\x3\x2\x2\x2\x5DC"+ - "\x5DD\x3\x2\x2\x2\x5DD\x5DF\x3\x2\x2\x2\x5DE\x5E0\x5\xD4k\x2\x5DF\x5DE"+ - "\x3\x2\x2\x2\x5DF\x5E0\x3\x2\x2\x2\x5E0\x5E2\x3\x2\x2\x2\x5E1\x5D8\x3"+ - "\x2\x2\x2\x5E2\x5E5\x3\x2\x2\x2\x5E3\x5E1\x3\x2\x2\x2\x5E3\x5E4\x3\x2"+ - "\x2\x2\x5E4\x5E7\x3\x2\x2\x2\x5E5\x5E3\x3\x2\x2\x2\x5E6\x5C0\x3\x2\x2"+ - "\x2\x5E6\x5D4\x3\x2\x2\x2\x5E7\xD3\x3\x2\x2\x2\x5E8\x5E9\x5 \x11\x2\x5E9"+ - "\xD5\x3\x2\x2\x2\x5EA\x5EB\x5\x172\xBA\x2\x5EB\xD7\x3\x2\x2\x2\x5EC\x5ED"+ - "\a{\x2\x2\x5ED\x5EE\x5\x1B6\xDC\x2\x5EE\x5EF\x5\x172\xBA\x2\x5EF\xD9\x3"+ - "\x2\x2\x2\x5F0\x5F1\a\x83\x2\x2\x5F1\x5F3\x5\x1B6\xDC\x2\x5F2\x5F0\x3"+ - "\x2\x2\x2\x5F2\x5F3\x3\x2\x2\x2\x5F3\x5F4\x3\x2\x2\x2\x5F4\x5F6\x5\x17E"+ - "\xC0\x2\x5F5\x5F7\x5\x1B6\xDC\x2\x5F6\x5F5\x3\x2\x2\x2\x5F6\x5F7\x3\x2"+ - "\x2\x2\x5F7\x5F8\x3\x2\x2\x2\x5F8\x5FA\a\xD4\x2\x2\x5F9\x5FB\x5\x1B6\xDC"+ - "\x2\x5FA\x5F9\x3\x2\x2\x2\x5FA\x5FB\x3\x2\x2\x2\x5FB\x5FC\x3\x2\x2\x2"+ - "\x5FC\x5FD\x5\x172\xBA\x2\x5FD\xDB\x3\x2\x2\x2\x5FE\x5FF\a\x8A\x2\x2\x5FF"+ - "\x600\x5\x1B6\xDC\x2\x600\x602\x5\x172\xBA\x2\x601\x603\x5\x1B6\xDC\x2"+ - "\x602\x601\x3\x2\x2\x2\x602\x603\x3\x2\x2\x2\x603\x604\x3\x2\x2\x2\x604"+ - "\x606\a\xD4\x2\x2\x605\x607\x5\x1B6\xDC\x2\x606\x605\x3\x2\x2\x2\x606"+ - "\x607\x3\x2\x2\x2\x607\x608\x3\x2\x2\x2\x608\x609\x5\x172\xBA\x2\x609"+ - "\xDD\x3\x2\x2\x2\x60A\x60B\t\f\x2\x2\x60B\x614\x5\x1B6\xDC\x2\x60C\x60D"+ - "\ax\x2\x2\x60D\x60E\x5\x1B6\xDC\x2\x60E\x60F\x5\x172\xBA\x2\x60F\x615"+ - "\x3\x2\x2\x2\x610\x611\a\xB1\x2\x2\x611\x612\x5\x1B6\xDC\x2\x612\x613"+ - "\a\x8F\x2\x2\x613\x615\x3\x2\x2\x2\x614\x60C\x3\x2\x2\x2\x614\x610\x3"+ - "\x2\x2\x2\x615\xDF\x3\x2\x2\x2\x616\x617\a\x95\x2\x2\x617\x618\x5\x1B6"+ - "\xDC\x2\x618\x619\x5\x172\xBA\x2\x619\x61A\x5\x1B6\xDC\x2\x61A\x61B\a"+ - "x\x2\x2\x61B\x61C\x5\x1B6\xDC\x2\x61C\x627\x5\x172\xBA\x2\x61D\x61F\x5"+ - "\x1B6\xDC\x2\x61E\x61D\x3\x2\x2\x2\x61E\x61F\x3\x2\x2\x2\x61F\x620\x3"+ - "\x2\x2\x2\x620\x622\a+\x2\x2\x621\x623\x5\x1B6\xDC\x2\x622\x621\x3\x2"+ - "\x2\x2\x622\x623\x3\x2\x2\x2\x623\x624\x3\x2\x2\x2\x624\x626\x5\x172\xBA"+ - "\x2\x625\x61E\x3\x2\x2\x2\x626\x629\x3\x2\x2\x2\x627\x625\x3\x2\x2\x2"+ - "\x627\x628\x3\x2\x2\x2\x628\xE1\x3\x2\x2\x2\x629\x627\x3\x2\x2\x2\x62A"+ - "\x62B\a\x95\x2\x2\x62B\x62C\x5\x1B6\xDC\x2\x62C\x62D\x5\x172\xBA\x2\x62D"+ - "\x62E\x5\x1B6\xDC\x2\x62E\x62F\aw\x2\x2\x62F\x630\x5\x1B6\xDC\x2\x630"+ - "\x63B\x5\x172\xBA\x2\x631\x633\x5\x1B6\xDC\x2\x632\x631\x3\x2\x2\x2\x632"+ - "\x633\x3\x2\x2\x2\x633\x634\x3\x2\x2\x2\x634\x636\a+\x2\x2\x635\x637\x5"+ - "\x1B6\xDC\x2\x636\x635\x3\x2\x2\x2\x636\x637\x3\x2\x2\x2\x637\x638\x3"+ - "\x2\x2\x2\x638\x63A\x5\x172\xBA\x2\x639\x632\x3\x2\x2\x2\x63A\x63D\x3"+ - "\x2\x2\x2\x63B\x639\x3\x2\x2\x2\x63B\x63C\x3\x2\x2\x2\x63C\xE3\x3\x2\x2"+ - "\x2\x63D\x63B\x3\x2\x2\x2\x63E\x63F\x5\x170\xB9\x2\x63F\x640\x5\x1B6\xDC"+ - "\x2\x640\x642\x3\x2\x2\x2\x641\x63E\x3\x2\x2\x2\x641\x642\x3\x2\x2\x2"+ - "\x642\x645\x3\x2\x2\x2\x643\x644\a\xBA\x2\x2\x644\x646\x5\x1B6\xDC\x2"+ - "\x645\x643\x3\x2\x2\x2\x645\x646\x3\x2\x2\x2\x646\x647\x3\x2\x2\x2\x647"+ - "\x648\a\xA4\x2\x2\x648\x649\x5\x1B6\xDC\x2\x649\x64E\x5\xBE`\x2\x64A\x64C"+ - "\x5\x1B6\xDC\x2\x64B\x64A\x3\x2\x2\x2\x64B\x64C\x3\x2\x2\x2\x64C\x64D"+ - "\x3\x2\x2\x2\x64D\x64F\x5\x8EH\x2\x64E\x64B\x3\x2\x2\x2\x64E\x64F\x3\x2"+ - "\x2\x2\x64F\x653\x3\x2\x2\x2\x650\x651\x5\x1B6\xDC\x2\x651\x652\x5\x15A"+ - "\xAE\x2\x652\x654\x3\x2\x2\x2\x653\x650\x3\x2\x2\x2\x653\x654\x3\x2\x2"+ - "\x2\x654\x655\x3\x2\x2\x2\x655\x656\x5\x1A0\xD1\x2\x656\x657\x5\x1E\x10"+ - "\x2\x657\x658\a\x61\x2\x2\x658\xE5\x3\x2\x2\x2\x659\x65A\x5\x170\xB9\x2"+ - "\x65A\x65B\x5\x1B6\xDC\x2\x65B\x65D\x3\x2\x2\x2\x65C\x659\x3\x2\x2\x2"+ - "\x65C\x65D\x3\x2\x2\x2\x65D\x660\x3\x2\x2\x2\x65E\x65F\a\xBA\x2\x2\x65F"+ - "\x661\x5\x1B6\xDC\x2\x660\x65E\x3\x2\x2\x2\x660\x661\x3\x2\x2\x2\x661"+ - "\x662\x3\x2\x2\x2\x662\x663\a\xA6\x2\x2\x663\x664\x5\x1B6\xDC\x2\x664"+ - "\x669\x5\x116\x8C\x2\x665\x667\x5\x1B6\xDC\x2\x666\x665\x3\x2\x2\x2\x666"+ - "\x667\x3\x2\x2\x2\x667\x668\x3\x2\x2\x2\x668\x66A\x5\x8EH\x2\x669\x666"+ - "\x3\x2\x2\x2\x669\x66A\x3\x2\x2\x2\x66A\x66B\x3\x2\x2\x2\x66B\x66C\x5"+ - "\x1A0\xD1\x2\x66C\x66D\x5\x1E\x10\x2\x66D\x66E\a\x61\x2\x2\x66E\xE7\x3"+ - "\x2\x2\x2\x66F\x670\x5\x170\xB9\x2\x670\x671\x5\x1B6\xDC\x2\x671\x673"+ - "\x3\x2\x2\x2\x672\x66F\x3\x2\x2\x2\x672\x673\x3\x2\x2\x2\x673\x676\x3"+ - "\x2\x2\x2\x674\x675\a\xBA\x2\x2\x675\x677\x5\x1B6\xDC\x2\x676\x674\x3"+ - "\x2\x2\x2\x676\x677\x3\x2\x2\x2\x677\x678\x3\x2\x2\x2\x678\x679\a\xA5"+ - "\x2\x2\x679\x67A\x5\x1B6\xDC\x2\x67A\x67F\x5\x116\x8C\x2\x67B\x67D\x5"+ - "\x1B6\xDC\x2\x67C\x67B\x3\x2\x2\x2\x67C\x67D\x3\x2\x2\x2\x67D\x67E\x3"+ - "\x2\x2\x2\x67E\x680\x5\x8EH\x2\x67F\x67C\x3\x2\x2\x2\x67F\x680\x3\x2\x2"+ - "\x2\x680\x681\x3\x2\x2\x2\x681\x682\x5\x1A0\xD1\x2\x682\x683\x5\x1E\x10"+ - "\x2\x683\x684\a\x61\x2\x2\x684\xE9\x3\x2\x2\x2\x685\x686\a\xAB\x2\x2\x686"+ - "\x687\x5\x1B6\xDC\x2\x687\x696\x5\x14E\xA8\x2\x688\x68A\x5\x1B6\xDC\x2"+ - "\x689\x688\x3\x2\x2\x2\x689\x68A\x3\x2\x2\x2\x68A\x68B\x3\x2\x2\x2\x68B"+ - "\x68D\a\xD8\x2\x2\x68C\x68E\x5\x1B6\xDC\x2\x68D\x68C\x3\x2\x2\x2\x68D"+ - "\x68E\x3\x2\x2\x2\x68E\x690\x3\x2\x2\x2\x68F\x691\x5\xECw\x2\x690\x68F"+ - "\x3\x2\x2\x2\x690\x691\x3\x2\x2\x2\x691\x693\x3\x2\x2\x2\x692\x694\x5"+ - "\x1B6\xDC\x2\x693\x692\x3\x2\x2\x2\x693\x694\x3\x2\x2\x2\x694\x695\x3"+ - "\x2\x2\x2\x695\x697\a\xDF\x2\x2\x696\x689\x3\x2\x2\x2\x696\x697\x3\x2"+ - "\x2\x2\x697\xEB\x3\x2\x2\x2\x698\x6A3\x5\xEEx\x2\x699\x69B\x5\x1B6\xDC"+ - "\x2\x69A\x699\x3\x2\x2\x2\x69A\x69B\x3\x2\x2\x2\x69B\x69C\x3\x2\x2\x2"+ - "\x69C\x69E\a+\x2\x2\x69D\x69F\x5\x1B6\xDC\x2\x69E\x69D\x3\x2\x2\x2\x69E"+ - "\x69F\x3\x2\x2\x2\x69F\x6A0\x3\x2\x2\x2\x6A0\x6A2\x5\xEEx\x2\x6A1\x69A"+ - "\x3\x2\x2\x2\x6A2\x6A5\x3\x2\x2\x2\x6A3\x6A1\x3\x2\x2\x2\x6A3\x6A4\x3"+ - "\x2\x2\x2\x6A4\xED\x3\x2\x2\x2\x6A5\x6A3\x3\x2\x2\x2\x6A6\x6A7\x5\x172"+ - "\xBA\x2\x6A7\xEF\x3\x2\x2\x2\x6A8\x6A9\a\xAE\x2\x2\x6A9\x6AC\x5\x1B6\xDC"+ - "\x2\x6AA\x6AB\a\xA1\x2\x2\x6AB\x6AD\x5\x1B6\xDC\x2\x6AC\x6AA\x3\x2\x2"+ - "\x2\x6AC\x6AD\x3\x2\x2\x2\x6AD\x6AE\x3\x2\x2\x2\x6AE\x6AF\x5\xF2z\x2\x6AF"+ - "\xF1\x3\x2\x2\x2\x6B0\x6BB\x5\xF4{\x2\x6B1\x6B3\x5\x1B6\xDC\x2\x6B2\x6B1"+ - "\x3\x2\x2\x2\x6B2\x6B3\x3\x2\x2\x2\x6B3\x6B4\x3\x2\x2\x2\x6B4\x6B6\a+"+ - "\x2\x2\x6B5\x6B7\x5\x1B6\xDC\x2\x6B6\x6B5\x3\x2\x2\x2\x6B6\x6B7\x3\x2"+ - "\x2\x2\x6B7\x6B8\x3\x2\x2\x2\x6B8\x6BA\x5\xF4{\x2\x6B9\x6B2\x3\x2\x2\x2"+ - "\x6BA\x6BD\x3\x2\x2\x2\x6BB\x6B9\x3\x2\x2\x2\x6BB\x6BC\x3\x2\x2\x2\x6BC"+ - "\xF3\x3\x2\x2\x2\x6BD\x6BB\x3\x2\x2\x2\x6BE\x6C2\x5\x172\xBA\x2\x6BF\x6C0"+ - "\x5\x1B6\xDC\x2\x6C0\x6C1\x5\x15A\xAE\x2\x6C1\x6C3\x3\x2\x2\x2\x6C2\x6BF"+ - "\x3\x2\x2\x2\x6C2\x6C3\x3\x2\x2\x2\x6C3\xF5\x3\x2\x2\x2\x6C4\x6C5\x5\x172"+ - "\xBA\x2\x6C5\xF7\x3\x2\x2\x2\x6C6\x6C7\a\x42\x2\x2\x6C7\x6C8\x5\x1B6\xDC"+ - "\x2\x6C8\x6C9\x5\x172\xBA\x2\x6C9\x6D1\x3\x2\x2\x2\x6CA\x6CE\x5\x172\xBA"+ - "\x2\x6CB\x6CC\x5\x1B6\xDC\x2\x6CC\x6CD\x5\x182\xC2\x2\x6CD\x6CF\x3\x2"+ - "\x2\x2\x6CE\x6CB\x3\x2\x2\x2\x6CE\x6CF\x3\x2\x2\x2\x6CF\x6D1\x3\x2\x2"+ - "\x2\x6D0\x6C6\x3\x2\x2\x2\x6D0\x6CA\x3\x2\x2\x2\x6D1\xF9\x3\x2\x2\x2\x6D2"+ - "\x6D8\a\xB1\x2\x2\x6D3\x6D6\x5\x1B6\xDC\x2\x6D4\x6D7\a\x8F\x2\x2\x6D5"+ - "\x6D7\x5\x172\xBA\x2\x6D6\x6D4\x3\x2\x2\x2\x6D6\x6D5\x3\x2\x2\x2\x6D7"+ - "\x6D9\x3\x2\x2\x2\x6D8\x6D3\x3\x2\x2\x2\x6D8\x6D9\x3\x2\x2\x2\x6D9\xFB"+ - "\x3\x2\x2\x2\x6DA\x6DB\a\xB2\x2\x2\x6DB\xFD\x3\x2\x2\x2\x6DC\x6DD\a\xB3"+ - "\x2\x2\x6DD\x6DE\x5\x1B6\xDC\x2\x6DE\x6E0\x5\x172\xBA\x2\x6DF\x6E1\x5"+ - "\x1B6\xDC\x2\x6E0\x6DF\x3\x2\x2\x2\x6E0\x6E1\x3\x2\x2\x2\x6E1\x6E2\x3"+ - "\x2\x2\x2\x6E2\x6E4\a\xD4\x2\x2\x6E3\x6E5\x5\x1B6\xDC\x2\x6E4\x6E3\x3"+ - "\x2\x2\x2\x6E4\x6E5\x3\x2\x2\x2\x6E5\x6E6\x3\x2\x2\x2\x6E6\x6E7\x5\x172"+ - "\xBA\x2\x6E7\xFF\x3\x2\x2\x2\x6E8\x6E9\a\xBC\x2\x2\x6E9\x101\x3\x2\x2"+ - "\x2\x6EA\x6EB\a\x8E\x2\x2\x6EB\x6EC\x5\x1B6\xDC\x2\x6EC\x6ED\x5\x172\xBA"+ - "\x2\x6ED\x6EE\x5\x1B6\xDC\x2\x6EE\x6EF\a;\x2\x2\x6EF\x6F0\x5\x1B6\xDC"+ - "\x2\x6F0\x6F1\x5\x172\xBA\x2\x6F1\x103\x3\x2\x2\x2\x6F2\x6F4\a\xB5\x2"+ - "\x2\x6F3\x6F5\x5\x1B6\xDC\x2\x6F4\x6F3\x3\x2\x2\x2\x6F4\x6F5\x3\x2\x2"+ - "\x2\x6F5\x6F6\x3\x2\x2\x2\x6F6\x6F8\a\x43\x2\x2\x6F7\x6F9\x5\x1B6\xDC"+ - "\x2\x6F8\x6F7\x3\x2\x2\x2\x6F8\x6F9\x3\x2\x2\x2\x6F9\x6FA\x3\x2\x2\x2"+ - "\x6FA\x6FB\x5\x106\x84\x2\x6FB\x6FF\x5\x1A0\xD1\x2\x6FC\x6FE\x5\x108\x85"+ - "\x2\x6FD\x6FC\x3\x2\x2\x2\x6FE\x701\x3\x2\x2\x2\x6FF\x6FD\x3\x2\x2\x2"+ - "\x6FF\x700\x3\x2\x2\x2\x700\x703\x3\x2\x2\x2\x701\x6FF\x3\x2\x2\x2\x702"+ - "\x704\x5\x10A\x86\x2\x703\x702\x3\x2\x2\x2\x703\x704\x3\x2\x2\x2\x704"+ - "\x705\x3\x2\x2\x2\x705\x706\a\x62\x2\x2\x706\x105\x3\x2\x2\x2\x707\x708"+ - "\x5\x172\xBA\x2\x708\x107\x3\x2\x2\x2\x709\x70A\a\x43\x2\x2\x70A\x70B"+ - "\x5\x1B6\xDC\x2\x70B\x716\x5\x10C\x87\x2\x70C\x70E\x5\x1B6\xDC\x2\x70D"+ - "\x70C\x3\x2\x2\x2\x70D\x70E\x3\x2\x2\x2\x70E\x70F\x3\x2\x2\x2\x70F\x711"+ - "\a+\x2\x2\x710\x712\x5\x1B6\xDC\x2\x711\x710\x3\x2\x2\x2\x711\x712\x3"+ - "\x2\x2\x2\x712\x713\x3\x2\x2\x2\x713\x715\x5\x10C\x87\x2\x714\x70D\x3"+ - "\x2\x2\x2\x715\x718\x3\x2\x2\x2\x716\x714\x3\x2\x2\x2\x716\x717\x3\x2"+ - "\x2\x2\x717\x719\x3\x2\x2\x2\x718\x716\x3\x2\x2\x2\x719\x71A\x5\x1A0\xD1"+ - "\x2\x71A\x71B\x5\x1E\x10\x2\x71B\x109\x3\x2\x2\x2\x71C\x71E\a\x43\x2\x2"+ - "\x71D\x71F\x5\x1B6\xDC\x2\x71E\x71D\x3\x2\x2\x2\x71E\x71F\x3\x2\x2\x2"+ - "\x71F\x720\x3\x2\x2\x2\x720\x721\a[\x2\x2\x721\x722\x5\x1A0\xD1\x2\x722"+ - "\x723\x5\x1E\x10\x2\x723\x10B\x3\x2\x2\x2\x724\x726\a~\x2\x2\x725\x727"+ - "\x5\x1B6\xDC\x2\x726\x725\x3\x2\x2\x2\x726\x727\x3\x2\x2\x2\x727\x729"+ - "\x3\x2\x2\x2\x728\x724\x3\x2\x2\x2\x728\x729\x3\x2\x2\x2\x729\x72A\x3"+ - "\x2\x2\x2\x72A\x72C\x5\x15E\xB0\x2\x72B\x72D\x5\x1B6\xDC\x2\x72C\x72B"+ - "\x3\x2\x2\x2\x72C\x72D\x3\x2\x2\x2\x72D\x72E\x3\x2\x2\x2\x72E\x72F\x5"+ - "\x172\xBA\x2\x72F\x738\x3\x2\x2\x2\x730\x731\x5\x10E\x88\x2\x731\x732"+ - "\x5\x1B6\xDC\x2\x732\x733\a\xC2\x2\x2\x733\x734\x5\x1B6\xDC\x2\x734\x735"+ - "\x5\x110\x89\x2\x735\x738\x3\x2\x2\x2\x736\x738\x5\x172\xBA\x2\x737\x728"+ - "\x3\x2\x2\x2\x737\x730\x3\x2\x2\x2\x737\x736\x3\x2\x2\x2\x738\x10D\x3"+ - "\x2\x2\x2\x739\x73A\x5\x172\xBA\x2\x73A\x10F\x3\x2\x2\x2\x73B\x73C\x5"+ - "\x172\xBA\x2\x73C\x111\x3\x2\x2\x2\x73D\x73E\a\xB6\x2\x2\x73E\x73F\x5"+ - "\x1B6\xDC\x2\x73F\x741\x5\x17E\xC0\x2\x740\x742\x5\x1B6\xDC\x2\x741\x740"+ - "\x3\x2\x2\x2\x741\x742\x3\x2\x2\x2\x742\x743\x3\x2\x2\x2\x743\x745\a\xD4"+ - "\x2\x2\x744\x746\x5\x1B6\xDC\x2\x745\x744\x3\x2\x2\x2\x745\x746\x3\x2"+ - "\x2\x2\x746\x747\x3\x2\x2\x2\x747\x748\x5\x172\xBA\x2\x748\x113\x3\x2"+ - "\x2\x2\x749\x74A\x5\x170\xB9\x2\x74A\x74B\x5\x1B6\xDC\x2\x74B\x74D\x3"+ - "\x2\x2\x2\x74C\x749\x3\x2\x2\x2\x74C\x74D\x3\x2\x2\x2\x74D\x750\x3\x2"+ - "\x2\x2\x74E\x74F\a\xBA\x2\x2\x74F\x751\x5\x1B6\xDC\x2\x750\x74E\x3\x2"+ - "\x2\x2\x750\x751\x3\x2\x2\x2\x751\x752\x3\x2\x2\x2\x752\x754\a\xBE\x2"+ - "\x2\x753\x755\x5\x1B6\xDC\x2\x754\x753\x3\x2\x2\x2\x754\x755\x3\x2\x2"+ - "\x2\x755\x756\x3\x2\x2\x2\x756\x75B\x5\x116\x8C\x2\x757\x759\x5\x1B6\xDC"+ - "\x2\x758\x757\x3\x2\x2\x2\x758\x759\x3\x2\x2\x2\x759\x75A\x3\x2\x2\x2"+ - "\x75A\x75C\x5\x8EH\x2\x75B\x758\x3\x2\x2\x2\x75B\x75C\x3\x2\x2\x2\x75C"+ - "\x75D\x3\x2\x2\x2\x75D\x75E\x5\x1A0\xD1\x2\x75E\x75F\x5\x1E\x10\x2\x75F"+ - "\x760\a\x63\x2\x2\x760\x115\x3\x2\x2\x2\x761\x762\x5\x14E\xA8\x2\x762"+ - "\x117\x3\x2\x2\x2\x763\x764\t\r\x2\x2\x764\x766\x5\x1B6\xDC\x2\x765\x763"+ - "\x3\x2\x2\x2\x765\x766\x3\x2\x2\x2\x766\x767\x3\x2\x2\x2\x767\x768\x5"+ - "\x11C\x8F\x2\x768\x119\x3\x2\x2\x2\x769\x76A\a\xA3\x2\x2\x76A\x76B\x5"+ - "\x1B6\xDC\x2\x76B\x76C\x5\x11C\x8F\x2\x76C\x11B\x3\x2\x2\x2\x76D\x76E"+ - "\a\xC4\x2\x2\x76E\x76F\x5\x1B6\xDC\x2\x76F\x770\x5\x150\xA9\x2\x770\x771"+ - "\x5\x1A0\xD1\x2\x771\x772\x5\x11E\x90\x2\x772\x773\x5\x1A0\xD1\x2\x773"+ - "\x774\a\x64\x2\x2\x774\x11D\x3\x2\x2\x2\x775\x77B\x5\x120\x91\x2\x776"+ - "\x777\x5\x1A0\xD1\x2\x777\x778\x5\x120\x91\x2\x778\x77A\x3\x2\x2\x2\x779"+ - "\x776\x3\x2\x2\x2\x77A\x77D\x3\x2\x2\x2\x77B\x779\x3\x2\x2\x2\x77B\x77C"+ - "\x3\x2\x2\x2\x77C\x11F\x3\x2\x2\x2\x77D\x77B\x3\x2\x2\x2\x77E\x781\x5"+ - "\x124\x93\x2\x77F\x781\x5\x122\x92\x2\x780\x77E\x3\x2\x2\x2\x780\x77F"+ - "\x3\x2\x2\x2\x781\x121\x3\x2\x2\x2\x782\x784\x5\x150\xA9\x2\x783\x785"+ - "\x5\x1B6\xDC\x2\x784\x783\x3\x2\x2\x2\x784\x785\x3\x2\x2\x2\x785\x786"+ - "\x3\x2\x2\x2\x786\x787\x5\x126\x94\x2\x787\x123\x3\x2\x2\x2\x788\x789"+ - "\x5\x14C\xA7\x2\x789\x78A\x5\x1B6\xDC\x2\x78A\x78B\x5\x15A\xAE\x2\x78B"+ - "\x125\x3\x2\x2\x2\x78C\x78D\x5\x128\x95\x2\x78D\x78E\x5\x1B6\xDC\x2\x78E"+ - "\x790\x3\x2\x2\x2\x78F\x78C\x3\x2\x2\x2\x78F\x790\x3\x2\x2\x2\x790\x791"+ - "\x3\x2\x2\x2\x791\x792\x5\x15A\xAE\x2\x792\x127\x3\x2\x2\x2\x793\x795"+ - "\a\xD8\x2\x2\x794\x796\x5\x1B6\xDC\x2\x795\x794\x3\x2\x2\x2\x795\x796"+ - "\x3\x2\x2\x2\x796\x798\x3\x2\x2\x2\x797\x799\x5\x12A\x96\x2\x798\x797"+ - "\x3\x2\x2\x2\x798\x799\x3\x2\x2\x2\x799\x79B\x3\x2\x2\x2\x79A\x79C\x5"+ - "\x1B6\xDC\x2\x79B\x79A\x3\x2\x2\x2\x79B\x79C\x3\x2\x2\x2\x79C\x79D\x3"+ - "\x2\x2\x2\x79D\x79E\a\xDF\x2\x2\x79E\x129\x3\x2\x2\x2\x79F\x7AA\x5\x12C"+ - "\x97\x2\x7A0\x7A2\x5\x1B6\xDC\x2\x7A1\x7A0\x3\x2\x2\x2\x7A1\x7A2\x3\x2"+ - "\x2\x2\x7A2\x7A3\x3\x2\x2\x2\x7A3\x7A5\a+\x2\x2\x7A4\x7A6\x5\x1B6\xDC"+ - "\x2\x7A5\x7A4\x3\x2\x2\x2\x7A5\x7A6\x3\x2\x2\x2\x7A6\x7A7\x3\x2\x2\x2"+ - "\x7A7\x7A9\x5\x12C\x97\x2\x7A8\x7A1\x3\x2\x2\x2\x7A9\x7AC\x3\x2\x2\x2"+ - "\x7AA\x7A8\x3\x2\x2\x2\x7AA\x7AB\x3\x2\x2\x2\x7AB\x12B\x3\x2\x2\x2\x7AC"+ - "\x7AA\x3\x2\x2\x2\x7AD\x7AF\x5\x12E\x98\x2\x7AE\x7B0\x5\x1B6\xDC\x2\x7AF"+ - "\x7AE\x3\x2\x2\x2\x7AF\x7B0\x3\x2\x2\x2\x7B0\x7B2\x3\x2\x2\x2\x7B1\x7AD"+ - "\x3\x2\x2\x2\x7B1\x7B2\x3\x2\x2\x2\x7B2\x7B3\x3\x2\x2\x2\x7B3\x7B4\x5"+ - "\x130\x99\x2\x7B4\x12D\x3\x2\x2\x2\x7B5\x7B7\x5\x132\x9A\x2\x7B6\x7B8"+ - "\x5\x1B6\xDC\x2\x7B7\x7B6\x3\x2\x2\x2\x7B7\x7B8\x3\x2\x2\x2\x7B8\x7B9"+ - "\x3\x2\x2\x2\x7B9\x7BA\a\xC2\x2\x2\x7BA\x12F\x3\x2\x2\x2\x7BB\x7BC\x5"+ - "\x132\x9A\x2\x7BC\x131\x3\x2\x2\x2\x7BD\x7BE\x5\x172\xBA\x2\x7BE\x133"+ - "\x3\x2\x2\x2\x7BF\x7C3\aW\x2\x2\x7C0\x7C3\a\xBA\x2\x2\x7C1\x7C3\x5\x170"+ - "\xB9\x2\x7C2\x7BF\x3\x2\x2\x2\x7C2\x7C0\x3\x2\x2\x2\x7C2\x7C1\x3\x2\x2"+ - "\x2\x7C3\x7C4\x3\x2\x2\x2\x7C4\x7C7\x5\x1B6\xDC\x2\x7C5\x7C6\a\xCE\x2"+ - "\x2\x7C6\x7C8\x5\x1B6\xDC\x2\x7C7\x7C5\x3\x2\x2\x2\x7C7\x7C8\x3\x2\x2"+ - "\x2\x7C8\x7C9\x3\x2\x2\x2\x7C9\x7CA\x5\x136\x9C\x2\x7CA\x135\x3\x2\x2"+ - "\x2\x7CB\x7D6\x5\x138\x9D\x2\x7CC\x7CE\x5\x1B6\xDC\x2\x7CD\x7CC\x3\x2"+ - "\x2\x2\x7CD\x7CE\x3\x2\x2\x2\x7CE\x7CF\x3\x2\x2\x2\x7CF\x7D1\a+\x2\x2"+ - "\x7D0\x7D2\x5\x1B6\xDC\x2\x7D1\x7D0\x3\x2\x2\x2\x7D1\x7D2\x3\x2\x2\x2"+ - "\x7D2\x7D3\x3\x2\x2\x2\x7D3\x7D5\x5\x138\x9D\x2\x7D4\x7CD\x3\x2\x2\x2"+ - "\x7D5\x7D8\x3\x2\x2\x2\x7D6\x7D4\x3\x2\x2\x2\x7D6\x7D7\x3\x2\x2\x2\x7D7"+ - "\x137\x3\x2\x2\x2\x7D8\x7D6\x3\x2\x2\x2\x7D9\x7EB\x5\x14E\xA8\x2\x7DA"+ - "\x7DC\x5\x1B6\xDC\x2\x7DB\x7DA\x3\x2\x2\x2\x7DB\x7DC\x3\x2\x2\x2\x7DC"+ - "\x7DD\x3\x2\x2\x2\x7DD\x7DF\a\xD8\x2\x2\x7DE\x7E0\x5\x1B6\xDC\x2\x7DF"+ - "\x7DE\x3\x2\x2\x2\x7DF\x7E0\x3\x2\x2\x2\x7E0\x7E5\x3\x2\x2\x2\x7E1\x7E3"+ - "\x5\x148\xA5\x2\x7E2\x7E4\x5\x1B6\xDC\x2\x7E3\x7E2\x3\x2\x2\x2\x7E3\x7E4"+ - "\x3\x2\x2\x2\x7E4\x7E6\x3\x2\x2\x2\x7E5\x7E1\x3\x2\x2\x2\x7E5\x7E6\x3"+ - "\x2\x2\x2\x7E6\x7E7\x3\x2\x2\x2\x7E7\x7E9\a\xDF\x2\x2\x7E8\x7EA\x5\x1B6"+ - "\xDC\x2\x7E9\x7E8\x3\x2\x2\x2\x7E9\x7EA\x3\x2\x2\x2\x7EA\x7EC\x3\x2\x2"+ - "\x2\x7EB\x7DB\x3\x2\x2\x2\x7EB\x7EC\x3\x2\x2\x2\x7EC\x7F0\x3\x2\x2\x2"+ - "\x7ED\x7EE\x5\x1B6\xDC\x2\x7EE\x7EF\x5\x15A\xAE\x2\x7EF\x7F1\x3\x2\x2"+ - "\x2\x7F0\x7ED\x3\x2\x2\x2\x7F0\x7F1\x3\x2\x2\x2\x7F1\x139\x3\x2\x2\x2"+ - "\x7F2\x7F3\a\xCB\x2\x2\x7F3\x7F4\x5\x1B6\xDC\x2\x7F4\x7F5\x5\x172\xBA"+ - "\x2\x7F5\x7F6\x5\x1A0\xD1\x2\x7F6\x7F7\x5\x1E\x10\x2\x7F7\x7F8\a\xCA\x2"+ - "\x2\x7F8\x13B\x3\x2\x2\x2\x7F9\x7FA\a\xCD\x2\x2\x7FA\x7FB\x5\x1B6\xDC"+ - "\x2\x7FB\x7FC\x5\x172\xBA\x2\x7FC\x7FD\x5\x1A0\xD1\x2\x7FD\x7FE\x5\x1E"+ - "\x10\x2\x7FE\x7FF\a\x65\x2\x2\x7FF\x13D\x3\x2\x2\x2\x800\x801\x5\x172"+ - "\xBA\x2\x801\x806\x5\x1B6\xDC\x2\x802\x804\a\xBB\x2\x2\x803\x805\x5\x1B6"+ - "\xDC\x2\x804\x803\x3\x2\x2\x2\x804\x805\x3\x2\x2\x2\x805\x807\x3\x2\x2"+ - "\x2\x806\x802\x3\x2\x2\x2\x806\x807\x3\x2\x2\x2\x807\x808\x3\x2\x2\x2"+ - "\x808\x809\x5\x144\xA3\x2\x809\x80E\a\xDA\x2\x2\x80A\x80C\a\xBB\x2\x2"+ - "\x80B\x80D\x5\x1B6\xDC\x2\x80C\x80B\x3\x2\x2\x2\x80C\x80D\x3\x2\x2\x2"+ - "\x80D\x80F\x3\x2\x2\x2\x80E\x80A\x3\x2\x2\x2\x80E\x80F\x3\x2\x2\x2\x80F"+ - "\x810\x3\x2\x2\x2\x810\x812\x5\x144\xA3\x2\x811\x813\x5\x1B6\xDC\x2\x812"+ - "\x811\x3\x2\x2\x2\x812\x813\x3\x2\x2\x2\x813\x819\x3\x2\x2\x2\x814\x816"+ - "\a+\x2\x2\x815\x817\x5\x1B6\xDC\x2\x816\x815\x3\x2\x2\x2\x816\x817\x3"+ - "\x2\x2\x2\x817\x818\x3\x2\x2\x2\x818\x81A\x5\x172\xBA\x2\x819\x814\x3"+ - "\x2\x2\x2\x819\x81A\x3\x2\x2\x2\x81A\x81C\x3\x2\x2\x2\x81B\x81D\x5\x1B6"+ - "\xDC\x2\x81C\x81B\x3\x2\x2\x2\x81C\x81D\x3\x2\x2\x2\x81D\x823\x3\x2\x2"+ - "\x2\x81E\x820\a+\x2\x2\x81F\x821\x5\x1B6\xDC\x2\x820\x81F\x3\x2\x2\x2"+ - "\x820\x821\x3\x2\x2\x2\x821\x822\x3\x2\x2\x2\x822\x824\x5\x146\xA4\x2"+ - "\x823\x81E\x3\x2\x2\x2\x823\x824\x3\x2\x2\x2\x824\x13F\x3\x2\x2\x2\x825"+ - "\x827\x5\x172\xBA\x2\x826\x828\x5\x1B6\xDC\x2\x827\x826\x3\x2\x2\x2\x827"+ - "\x828\x3\x2\x2\x2\x828\x829\x3\x2\x2\x2\x829\x82B\a/\x2\x2\x82A\x82C\x5"+ - "\x1B6\xDC\x2\x82B\x82A\x3\x2\x2\x2\x82B\x82C\x3\x2\x2\x2\x82C\x82E\x3"+ - "\x2\x2\x2\x82D\x825\x3\x2\x2\x2\x82D\x82E\x3\x2\x2\x2\x82E\x82F\x3\x2"+ - "\x2\x2\x82F\x830\a\xF\x2\x2\x830\x835\x5\x1B6\xDC\x2\x831\x833\a\xBB\x2"+ - "\x2\x832\x834\x5\x1B6\xDC\x2\x833\x832\x3\x2\x2\x2\x833\x834\x3\x2\x2"+ - "\x2\x834\x836\x3\x2\x2\x2\x835\x831\x3\x2\x2\x2\x835\x836\x3\x2\x2\x2"+ - "\x836\x837\x3\x2\x2\x2\x837\x840\x5\x144\xA3\x2\x838\x83A\x5\x1B6\xDC"+ - "\x2\x839\x838\x3\x2\x2\x2\x839\x83A\x3\x2\x2\x2\x83A\x83B\x3\x2\x2\x2"+ - "\x83B\x83D\a+\x2\x2\x83C\x83E\x5\x1B6\xDC\x2\x83D\x83C\x3\x2\x2\x2\x83D"+ - "\x83E\x3\x2\x2\x2\x83E\x83F\x3\x2\x2\x2\x83F\x841\x5\x172\xBA\x2\x840"+ - "\x839\x3\x2\x2\x2\x841\x842\x3\x2\x2\x2\x842\x840\x3\x2\x2\x2\x842\x843"+ - "\x3\x2\x2\x2\x843\x141\x3\x2\x2\x2\x844\x846\x5\x172\xBA\x2\x845\x847"+ - "\x5\x1B6\xDC\x2\x846\x845\x3\x2\x2\x2\x846\x847\x3\x2\x2\x2\x847\x848"+ - "\x3\x2\x2\x2\x848\x84A\a/\x2\x2\x849\x84B\x5\x1B6\xDC\x2\x84A\x849\x3"+ - "\x2\x2\x2\x84A\x84B\x3\x2\x2\x2\x84B\x84D\x3\x2\x2\x2\x84C\x844\x3\x2"+ - "\x2\x2\x84C\x84D\x3\x2\x2\x2\x84D\x84E\x3\x2\x2\x2\x84E\x84F\a(\x2\x2"+ - "\x84F\x850\x5\x1B6\xDC\x2\x850\x852\x5\x144\xA3\x2\x851\x853\x5\x1B6\xDC"+ - "\x2\x852\x851\x3\x2\x2\x2\x852\x853\x3\x2\x2\x2\x853\x854\x3\x2\x2\x2"+ - "\x854\x856\a\xDA\x2\x2\x855\x857\x5\x1B6\xDC\x2\x856\x855\x3\x2\x2\x2"+ - "\x856\x857\x3\x2\x2\x2\x857\x858\x3\x2\x2\x2\x858\x859\x5\x144\xA3\x2"+ - "\x859\x143\x3\x2\x2\x2\x85A\x85C\a\xD8\x2\x2\x85B\x85D\x5\x1B6\xDC\x2"+ - "\x85C\x85B\x3\x2\x2\x2\x85C\x85D\x3\x2\x2\x2\x85D\x85E\x3\x2\x2\x2\x85E"+ - "\x860\x5\x172\xBA\x2\x85F\x861\x5\x1B6\xDC\x2\x860\x85F\x3\x2\x2\x2\x860"+ - "\x861\x3\x2\x2\x2\x861\x862\x3\x2\x2\x2\x862\x864\a+\x2\x2\x863\x865\x5"+ - "\x1B6\xDC\x2\x864\x863\x3\x2\x2\x2\x864\x865\x3\x2\x2\x2\x865\x866\x3"+ - "\x2\x2\x2\x866\x868\x5\x172\xBA\x2\x867\x869\x5\x1B6\xDC\x2\x868\x867"+ - "\x3\x2\x2\x2\x868\x869\x3\x2\x2\x2\x869\x86A\x3\x2\x2\x2\x86A\x86B\a\xDF"+ - "\x2\x2\x86B\x145\x3\x2\x2\x2\x86C\x86D\t\xE\x2\x2\x86D\x147\x3\x2\x2\x2"+ - "\x86E\x879\x5\x14A\xA6\x2\x86F\x871\x5\x1B6\xDC\x2\x870\x86F\x3\x2\x2"+ - "\x2\x870\x871\x3\x2\x2\x2\x871\x872\x3\x2\x2\x2\x872\x874\a+\x2\x2\x873"+ - "\x875\x5\x1B6\xDC\x2\x874\x873\x3\x2\x2\x2\x874\x875\x3\x2\x2\x2\x875"+ - "\x876\x3\x2\x2\x2\x876\x878\x5\x14A\xA6\x2\x877\x870\x3\x2\x2\x2\x878"+ - "\x87B\x3\x2\x2\x2\x879\x877\x3\x2\x2\x2\x879\x87A\x3\x2\x2\x2\x87A\x149"+ - "\x3\x2\x2\x2\x87B\x879\x3\x2\x2\x2\x87C\x87D\x5\x172\xBA\x2\x87D\x87E"+ - "\x5\x1B6\xDC\x2\x87E\x87F\a\xC2\x2\x2\x87F\x880\x5\x1B6\xDC\x2\x880\x882"+ - "\x3\x2\x2\x2\x881\x87C\x3\x2\x2\x2\x881\x882\x3\x2\x2\x2\x882\x883\x3"+ - "\x2\x2\x2\x883\x884\x5\x172\xBA\x2\x884\x14B\x3\x2\x2\x2\x885\x889\x5"+ - "\x14E\xA8\x2\x886\x889\x5\x19C\xCF\x2\x887\x889\x5\x19A\xCE\x2\x888\x885"+ - "\x3\x2\x2\x2\x888\x886\x3\x2\x2\x2\x888\x887\x3\x2\x2\x2\x889\x14D\x3"+ - "\x2\x2\x2\x88A\x88D\x5\x150\xA9\x2\x88B\x88D\x5\x152\xAA\x2\x88C\x88A"+ - "\x3\x2\x2\x2\x88C\x88B\x3\x2\x2\x2\x88D\x14F\x3\x2\x2\x2\x88E\x88F\x5"+ - "\x154\xAB\x2\x88F\x151\x3\x2\x2\x2\x890\x891\x5\x154\xAB\x2\x891\x892"+ - "\x5\x16E\xB8\x2\x892\x153\x3\x2\x2\x2\x893\x897\a\xED\x2\x2\x894\x897"+ - "\x5\x198\xCD\x2\x895\x897\x5\x156\xAC\x2\x896\x893\x3\x2\x2\x2\x896\x894"+ - "\x3\x2\x2\x2\x896\x895\x3\x2\x2\x2\x897\x155\x3\x2\x2\x2\x898\x89C\a\xE0"+ - "\x2\x2\x899\x89B\x5\x158\xAD\x2\x89A\x899\x3\x2\x2\x2\x89B\x89E\x3\x2"+ - "\x2\x2\x89C\x89A\x3\x2\x2\x2\x89C\x89D\x3\x2\x2\x2\x89D\x89F\x3\x2\x2"+ - "\x2\x89E\x89C\x3\x2\x2\x2\x89F\x8A0\a\xE1\x2\x2\x8A0\x157\x3\x2\x2\x2"+ - "\x8A1\x8A4\n\xF\x2\x2\x8A2\x8A4\x5\x156\xAC\x2\x8A3\x8A1\x3\x2\x2\x2\x8A3"+ - "\x8A2\x3\x2\x2\x2\x8A4\x159\x3\x2\x2\x2\x8A5\x8A7\a;\x2\x2\x8A6\x8A8\x5"+ - "\x1B6\xDC\x2\x8A7\x8A6\x3\x2\x2\x2\x8A7\x8A8\x3\x2\x2\x2\x8A8\x8AB\x3"+ - "\x2\x2\x2\x8A9\x8AA\a\x90\x2\x2\x8AA\x8AC\x5\x1B6\xDC\x2\x8AB\x8A9\x3"+ - "\x2\x2\x2\x8AB\x8AC\x3\x2\x2\x2\x8AC\x8AD\x3\x2\x2\x2\x8AD\x8B2\x5\x16C"+ - "\xB7\x2\x8AE\x8B0\x5\x1B6\xDC\x2\x8AF\x8AE\x3\x2\x2\x2\x8AF\x8B0\x3\x2"+ - "\x2\x2\x8B0\x8B1\x3\x2\x2\x2\x8B1\x8B3\x5\x162\xB2\x2\x8B2\x8AF\x3\x2"+ - "\x2\x2\x8B2\x8B3\x3\x2\x2\x2\x8B3\x15B\x3\x2\x2\x2\x8B4\x8B5\t\x10\x2"+ - "\x2\x8B5\x15D\x3\x2\x2\x2\x8B6\x8B7\t\x11\x2\x2\x8B7\x15F\x3\x2\x2\x2"+ - "\x8B8\x8D0\x5\x174\xBB\x2\x8B9\x8D0\x5\x17E\xC0\x2\x8BA\x8D0\x5\x180\xC1"+ - "\x2\x8BB\x8BD\a\xD8\x2\x2\x8BC\x8BE\x5\x1B6\xDC\x2\x8BD\x8BC\x3\x2\x2"+ - "\x2\x8BD\x8BE\x3\x2\x2\x2\x8BE\x8BF\x3\x2\x2\x2\x8BF\x8C1\x5\x160\xB1"+ - "\x2\x8C0\x8C2\x5\x1B6\xDC\x2\x8C1\x8C0\x3\x2\x2\x2\x8C1\x8C2\x3\x2\x2"+ - "\x2\x8C2\x8C3\x3\x2\x2\x2\x8C3\x8C4\a\xDF\x2\x2\x8C4\x8D0\x3\x2\x2\x2"+ - "\x8C5\x8C6\a\xC5\x2\x2\x8C6\x8C7\x5\x1B6\xDC\x2\x8C7\x8C8\x5\x160\xB1"+ - "\x2\x8C8\x8D0\x3\x2\x2\x2\x8C9\x8CA\a\x90\x2\x2\x8CA\x8CB\x5\x1B6\xDC"+ - "\x2\x8CB\x8CC\x5\x160\xB1\x2\x8CC\x8D0\x3\x2\x2\x2\x8CD\x8CE\a\x30\x2"+ - "\x2\x8CE\x8D0\x5\x172\xBA\x2\x8CF\x8B8\x3\x2\x2\x2\x8CF\x8B9\x3\x2\x2"+ - "\x2\x8CF\x8BA\x3\x2\x2\x2\x8CF\x8BB\x3\x2\x2\x2\x8CF\x8C5\x3\x2\x2\x2"+ - "\x8CF\x8C9\x3\x2\x2\x2\x8CF\x8CD\x3\x2\x2\x2\x8D0\x161\x3\x2\x2\x2\x8D1"+ - "\x8D3\a\xDB\x2\x2\x8D2\x8D4\x5\x1B6\xDC\x2\x8D3\x8D2\x3\x2\x2\x2\x8D3"+ - "\x8D4\x3\x2\x2\x2\x8D4\x8D7\x3\x2\x2\x2\x8D5\x8D8\x5\x16A\xB6\x2\x8D6"+ - "\x8D8\x5\x154\xAB\x2\x8D7\x8D5\x3\x2\x2\x2\x8D7\x8D6\x3\x2\x2\x2\x8D8"+ - "\x163\x3\x2\x2\x2\x8D9\x8DC\x5\x166\xB4\x2\x8DA\x8DC\x5\x168\xB5\x2\x8DB"+ - "\x8D9\x3\x2\x2\x2\x8DB\x8DA\x3\x2\x2\x2\x8DC\x165\x3\x2\x2\x2\x8DD\x8DF"+ - "\x5\x14C\xA7\x2\x8DE\x8E0\x5\x1B6\xDC\x2\x8DF\x8DE\x3\x2\x2\x2\x8DF\x8E0"+ - "\x3\x2\x2\x2\x8E0\x8E1\x3\x2\x2\x2\x8E1\x8E2\a,\x2\x2\x8E2\x167\x3\x2"+ - "\x2\x2\x8E3\x8E5\x5\x16A\xB6\x2\x8E4\x8E6\x5\x1B6\xDC\x2\x8E5\x8E4\x3"+ - "\x2\x2\x2\x8E5\x8E6\x3\x2\x2\x2\x8E6\x8E8\x3\x2\x2\x2\x8E7\x8E9\a,\x2"+ - "\x2\x8E8\x8E7\x3\x2\x2\x2\x8E8\x8E9\x3\x2\x2\x2\x8E9\x169\x3\x2\x2\x2"+ - "\x8EA\x8EB\t\x12\x2\x2\x8EB\x16B\x3\x2\x2\x2\x8EC\x8EF\x5\x15C\xAF\x2"+ - "\x8ED\x8EF\x5\x160\xB1\x2\x8EE\x8EC\x3\x2\x2\x2\x8EE\x8ED\x3\x2\x2\x2"+ - "\x8EF\x8F8\x3\x2\x2\x2\x8F0\x8F2\x5\x1B6\xDC\x2\x8F1\x8F0\x3\x2\x2\x2"+ - "\x8F1\x8F2\x3\x2\x2\x2\x8F2\x8F3\x3\x2\x2\x2\x8F3\x8F5\a\xD8\x2\x2\x8F4"+ - "\x8F6\x5\x1B6\xDC\x2\x8F5\x8F4\x3\x2\x2\x2\x8F5\x8F6\x3\x2\x2\x2\x8F6"+ - "\x8F7\x3\x2\x2\x2\x8F7\x8F9\a\xDF\x2\x2\x8F8\x8F1\x3\x2\x2\x2\x8F8\x8F9"+ - "\x3\x2\x2\x2\x8F9\x16D\x3\x2\x2\x2\x8FA\x8FB\t\x13\x2\x2\x8FB\x16F\x3"+ - "\x2\x2\x2\x8FC\x8FD\t\x14\x2\x2\x8FD\x171\x3\x2\x2\x2\x8FE\x8FF\b\xBA"+ - "\x1\x2\x8FF\x900\a\xC5\x2\x2\x900\x901\x5\x1B6\xDC\x2\x901\x902\x5\x172"+ - "\xBA\x13\x902\x921\x3\x2\x2\x2\x903\x904\a\x90\x2\x2\x904\x905\x5\x1B6"+ - "\xDC\x2\x905\x906\x5\x172\xBA\x12\x906\x921\x3\x2\x2\x2\x907\x909\a\xDA"+ - "\x2\x2\x908\x90A\x5\x1B6\xDC\x2\x909\x908\x3\x2\x2\x2\x909\x90A\x3\x2"+ - "\x2\x2\x90A\x90B\x3\x2\x2\x2\x90B\x921\x5\x172\xBA\x10\x90C\x90E\a\x91"+ - "\x2\x2\x90D\x90F\x5\x1B6\xDC\x2\x90E\x90D\x3\x2\x2\x2\x90E\x90F\x3\x2"+ - "\x2\x2\x90F\x910\x3\x2\x2\x2\x910\x921\x5\x172\xBA\t\x911\x912\a\x30\x2"+ - "\x2\x912\x921\x5\x172\xBA\x3\x913\x921\x5\x174\xBB\x2\x914\x921\x5\x17E"+ - "\xC0\x2\x915\x921\x5\x180\xC1\x2\x916\x918\a\xD8\x2\x2\x917\x919\x5\x1B6"+ - "\xDC\x2\x918\x917\x3\x2\x2\x2\x918\x919\x3\x2\x2\x2\x919\x91A\x3\x2\x2"+ - "\x2\x91A\x91C\x5\x172\xBA\x2\x91B\x91D\x5\x1B6\xDC\x2\x91C\x91B\x3\x2"+ - "\x2\x2\x91C\x91D\x3\x2\x2\x2\x91D\x91E\x3\x2\x2\x2\x91E\x91F\a\xDF\x2"+ - "\x2\x91F\x921\x3\x2\x2\x2\x920\x8FE\x3\x2\x2\x2\x920\x903\x3\x2\x2\x2"+ - "\x920\x907\x3\x2\x2\x2\x920\x90C\x3\x2\x2\x2\x920\x911\x3\x2\x2\x2\x920"+ - "\x913\x3\x2\x2\x2\x920\x914\x3\x2\x2\x2\x920\x915\x3\x2\x2\x2\x920\x916"+ - "\x3\x2\x2\x2\x921\x990\x3\x2\x2\x2\x922\x924\f\x11\x2\x2\x923\x925\x5"+ - "\x1B6\xDC\x2\x924\x923\x3\x2\x2\x2\x924\x925\x3\x2\x2\x2\x925\x926\x3"+ - "\x2\x2\x2\x926\x928\a\xDE\x2\x2\x927\x929\x5\x1B6\xDC\x2\x928\x927\x3"+ - "\x2\x2\x2\x928\x929\x3\x2\x2\x2\x929\x92A\x3\x2\x2\x2\x92A\x98F\x5\x172"+ - "\xBA\x12\x92B\x92D\f\xF\x2\x2\x92C\x92E\x5\x1B6\xDC\x2\x92D\x92C\x3\x2"+ - "\x2\x2\x92D\x92E\x3\x2\x2\x2\x92E\x92F\x3\x2\x2\x2\x92F\x931\t\x15\x2"+ - "\x2\x930\x932\x5\x1B6\xDC\x2\x931\x930\x3\x2\x2\x2\x931\x932\x3\x2\x2"+ - "\x2\x932\x933\x3\x2\x2\x2\x933\x98F\x5\x172\xBA\x10\x934\x936\f\xE\x2"+ - "\x2\x935\x937\x5\x1B6\xDC\x2\x936\x935\x3\x2\x2\x2\x936\x937\x3\x2\x2"+ - "\x2\x937\x938\x3\x2\x2\x2\x938\x93A\a\xD3\x2\x2\x939\x93B\x5\x1B6\xDC"+ - "\x2\x93A\x939\x3\x2\x2\x2\x93A\x93B\x3\x2\x2\x2\x93B\x93C\x3\x2\x2\x2"+ - "\x93C\x98F\x5\x172\xBA\xF\x93D\x93F\f\r\x2\x2\x93E\x940\x5\x1B6\xDC\x2"+ - "\x93F\x93E\x3\x2\x2\x2\x93F\x940\x3\x2\x2\x2\x940\x941\x3\x2\x2\x2\x941"+ - "\x943\a\x8D\x2\x2\x942\x944\x5\x1B6\xDC\x2\x943\x942\x3\x2\x2\x2\x943"+ - "\x944\x3\x2\x2\x2\x944\x945\x3\x2\x2\x2\x945\x98F\x5\x172\xBA\xE\x946"+ - "\x948\f\f\x2\x2\x947\x949\x5\x1B6\xDC\x2\x948\x947\x3\x2\x2\x2\x948\x949"+ - "\x3\x2\x2\x2\x949\x94A\x3\x2\x2\x2\x94A\x94C\t\x16\x2\x2\x94B\x94D\x5"+ - "\x1B6\xDC\x2\x94C\x94B\x3\x2\x2\x2\x94C\x94D\x3\x2\x2\x2\x94D\x94E\x3"+ - "\x2\x2\x2\x94E\x98F\x5\x172\xBA\r\x94F\x951\f\v\x2\x2\x950\x952\x5\x1B6"+ - "\xDC\x2\x951\x950\x3\x2\x2\x2\x951\x952\x3\x2\x2\x2\x952\x953\x3\x2\x2"+ - "\x2\x953\x955\a\x34\x2\x2\x954\x956\x5\x1B6\xDC\x2\x955\x954\x3\x2\x2"+ - "\x2\x955\x956\x3\x2\x2\x2\x956\x957\x3\x2\x2\x2\x957\x98F\x5\x172\xBA"+ - "\f\x958\x95A\f\n\x2\x2\x959\x95B\x5\x1B6\xDC\x2\x95A\x959\x3\x2\x2\x2"+ - "\x95A\x95B\x3\x2\x2\x2\x95B\x95C\x3\x2\x2\x2\x95C\x95E\t\x11\x2\x2\x95D"+ - "\x95F\x5\x1B6\xDC\x2\x95E\x95D\x3\x2\x2\x2\x95E\x95F\x3\x2\x2\x2\x95F"+ - "\x960\x3\x2\x2\x2\x960\x98F\x5\x172\xBA\v\x961\x963\f\b\x2\x2\x962\x964"+ - "\x5\x1B6\xDC\x2\x963\x962\x3\x2\x2\x2\x963\x964\x3\x2\x2\x2\x964\x965"+ - "\x3\x2\x2\x2\x965\x967\a\x38\x2\x2\x966\x968\x5\x1B6\xDC\x2\x967\x966"+ - "\x3\x2\x2\x2\x967\x968\x3\x2\x2\x2\x968\x969\x3\x2\x2\x2\x969\x98F\x5"+ - "\x172\xBA\t\x96A\x96C\f\a\x2\x2\x96B\x96D\x5\x1B6\xDC\x2\x96C\x96B\x3"+ - "\x2\x2\x2\x96C\x96D\x3\x2\x2\x2\x96D\x96E\x3\x2\x2\x2\x96E\x970\a\x9E"+ - "\x2\x2\x96F\x971\x5\x1B6\xDC\x2\x970\x96F\x3\x2\x2\x2\x970\x971\x3\x2"+ - "\x2\x2\x971\x972\x3\x2\x2\x2\x972\x98F\x5\x172\xBA\b\x973\x975\f\x6\x2"+ - "\x2\x974\x976\x5\x1B6\xDC\x2\x975\x974\x3\x2\x2\x2\x975\x976\x3\x2\x2"+ - "\x2\x976\x977\x3\x2\x2\x2\x977\x979\a\xD0\x2\x2\x978\x97A\x5\x1B6\xDC"+ - "\x2\x979\x978\x3\x2\x2\x2\x979\x97A\x3\x2\x2\x2\x97A\x97B\x3\x2\x2\x2"+ - "\x97B\x98F\x5\x172\xBA\a\x97C\x97E\f\x5\x2\x2\x97D\x97F\x5\x1B6\xDC\x2"+ - "\x97E\x97D\x3\x2\x2\x2\x97E\x97F\x3\x2\x2\x2\x97F\x980\x3\x2\x2\x2\x980"+ - "\x982\ah\x2\x2\x981\x983\x5\x1B6\xDC\x2\x982\x981\x3\x2\x2\x2\x982\x983"+ - "\x3\x2\x2\x2\x983\x984\x3\x2\x2\x2\x984\x98F\x5\x172\xBA\x6\x985\x987"+ - "\f\x4\x2\x2\x986\x988\x5\x1B6\xDC\x2\x987\x986\x3\x2\x2\x2\x987\x988\x3"+ - "\x2\x2\x2\x988\x989\x3\x2\x2\x2\x989\x98B\az\x2\x2\x98A\x98C\x5\x1B6\xDC"+ - "\x2\x98B\x98A\x3\x2\x2\x2\x98B\x98C\x3\x2\x2\x2\x98C\x98D\x3\x2\x2\x2"+ - "\x98D\x98F\x5\x172\xBA\x5\x98E\x922\x3\x2\x2\x2\x98E\x92B\x3\x2\x2\x2"+ - "\x98E\x934\x3\x2\x2\x2\x98E\x93D\x3\x2\x2\x2\x98E\x946\x3\x2\x2\x2\x98E"+ - "\x94F\x3\x2\x2\x2\x98E\x958\x3\x2\x2\x2\x98E\x961\x3\x2\x2\x2\x98E\x96A"+ - "\x3\x2\x2\x2\x98E\x973\x3\x2\x2\x2\x98E\x97C\x3\x2\x2\x2\x98E\x985\x3"+ - "\x2\x2\x2\x98F\x992\x3\x2\x2\x2\x990\x98E\x3\x2\x2\x2\x990\x991\x3\x2"+ - "\x2\x2\x991\x173\x3\x2\x2\x2\x992\x990\x3\x2\x2\x2\x993\x99B\x5\x16A\xB6"+ - "\x2\x994\x99B\a\xE7\x2\x2\x995\x99B\a\xE2\x2\x2\x996\x998\x5\x176\xBC"+ - "\x2\x997\x999\x5\x16E\xB8\x2\x998\x997\x3\x2\x2\x2\x998\x999\x3\x2\x2"+ - "\x2\x999\x99B\x3\x2\x2\x2\x99A\x993\x3\x2\x2\x2\x99A\x994\x3\x2\x2\x2"+ - "\x99A\x995\x3\x2\x2\x2\x99A\x996\x3\x2\x2\x2\x99B\x175\x3\x2\x2\x2\x99C"+ - "\x9A0\x5\x178\xBD\x2\x99D\x9A0\x5\x17A\xBE\x2\x99E\x9A0\x5\x17C\xBF\x2"+ - "\x99F\x99C\x3\x2\x2\x2\x99F\x99D\x3\x2\x2\x2\x99F\x99E\x3\x2\x2\x2\x9A0"+ - "\x177\x3\x2\x2\x2\x9A1\x9A2\t\x17\x2\x2\x9A2\x179\x3\x2\x2\x2\x9A3\x9A4"+ - "\a\x92\x2\x2\x9A4\x17B\x3\x2\x2\x2\x9A5\x9A6\t\x18\x2\x2\x9A6\x17D\x3"+ - "\x2\x2\x2\x9A7\x9A8\b\xC0\x1\x2\x9A8\x9B5\a\x8B\x2\x2\x9A9\x9B5\x5\x14E"+ - "\xA8\x2\x9AA\x9AC\a/\x2\x2\x9AB\x9AD\x5\x1B4\xDB\x2\x9AC\x9AB\x3\x2\x2"+ - "\x2\x9AC\x9AD\x3\x2\x2\x2\x9AD\x9AE\x3\x2\x2\x2\x9AE\x9B5\x5\x14C\xA7"+ - "\x2\x9AF\x9B1\a.\x2\x2\x9B0\x9B2\x5\x1B4\xDB\x2\x9B1\x9B0\x3\x2\x2\x2"+ - "\x9B1\x9B2\x3\x2\x2\x2\x9B2\x9B3\x3\x2\x2\x2\x9B3\x9B5\x5\x14C\xA7\x2"+ - "\x9B4\x9A7\x3\x2\x2\x2\x9B4\x9A9\x3\x2\x2\x2\x9B4\x9AA\x3\x2\x2\x2\x9B4"+ - "\x9AF\x3\x2\x2\x2\x9B5\x9D9\x3\x2\x2\x2\x9B6\x9B8\f\t\x2\x2\x9B7\x9B9"+ - "\x5\x1B6\xDC\x2\x9B8\x9B7\x3\x2\x2\x2\x9B8\x9B9\x3\x2\x2\x2\x9B9\x9BA"+ - "\x3\x2\x2\x2\x9BA\x9BC\a\xD8\x2\x2\x9BB\x9BD\x5\x1B6\xDC\x2\x9BC\x9BB"+ - "\x3\x2\x2\x2\x9BC\x9BD\x3\x2\x2\x2\x9BD\x9BF\x3\x2\x2\x2\x9BE\x9C0\x5"+ - "\x182\xC2\x2\x9BF\x9BE\x3\x2\x2\x2\x9BF\x9C0\x3\x2\x2\x2\x9C0\x9C2\x3"+ - "\x2\x2\x2\x9C1\x9C3\x5\x1B6\xDC\x2\x9C2\x9C1\x3\x2\x2\x2\x9C2\x9C3\x3"+ - "\x2\x2\x2\x9C3\x9C4\x3\x2\x2\x2\x9C4\x9D8\a\xDF\x2\x2\x9C5\x9C7\f\b\x2"+ - "\x2\x9C6\x9C8\x5\x1B4\xDB\x2\x9C7\x9C6\x3\x2\x2\x2\x9C7\x9C8\x3\x2\x2"+ - "\x2\x9C8\x9C9\x3\x2\x2\x2\x9C9\x9CB\a/\x2\x2\x9CA\x9CC\x5\x1B4\xDB\x2"+ - "\x9CB\x9CA\x3\x2\x2\x2\x9CB\x9CC\x3\x2\x2\x2\x9CC\x9CD\x3\x2\x2\x2\x9CD"+ - "\x9D8\x5\x14C\xA7\x2\x9CE\x9D0\f\a\x2\x2\x9CF\x9D1\x5\x1B4\xDB\x2\x9D0"+ - "\x9CF\x3\x2\x2\x2\x9D0\x9D1\x3\x2\x2\x2\x9D1\x9D2\x3\x2\x2\x2\x9D2\x9D4"+ - "\a.\x2\x2\x9D3\x9D5\x5\x1B4\xDB\x2\x9D4\x9D3\x3\x2\x2\x2\x9D4\x9D5\x3"+ - "\x2\x2\x2\x9D5\x9D6\x3\x2\x2\x2\x9D6\x9D8\x5\x14C\xA7\x2\x9D7\x9B6\x3"+ - "\x2\x2\x2\x9D7\x9C5\x3\x2\x2\x2\x9D7\x9CE\x3\x2\x2\x2\x9D8\x9DB\x3\x2"+ - "\x2\x2\x9D9\x9D7\x3\x2\x2\x2\x9D9\x9DA\x3\x2\x2\x2\x9DA\x17F\x3\x2\x2"+ - "\x2\x9DB\x9D9\x3\x2\x2\x2\x9DC\x9F2\x5\x15C\xAF\x2\x9DD\x9DF\a\xE0\x2"+ - "\x2\x9DE\x9E0\x5\x1B6\xDC\x2\x9DF\x9DE\x3\x2\x2\x2\x9DF\x9E0\x3\x2\x2"+ - "\x2\x9E0\x9E1\x3\x2\x2\x2\x9E1\x9E3\x5\x15C\xAF\x2\x9E2\x9E4\x5\x1B6\xDC"+ - "\x2\x9E3\x9E2\x3\x2\x2\x2\x9E3\x9E4\x3\x2\x2\x2\x9E4\x9E5\x3\x2\x2\x2"+ - "\x9E5\x9E6\a\xE1\x2\x2\x9E6\x9F2\x3\x2\x2\x2\x9E7\x9F2\a\x94\x2\x2\x9E8"+ - "\x9EA\a\xE0\x2\x2\x9E9\x9EB\x5\x1B6\xDC\x2\x9EA\x9E9\x3\x2\x2\x2\x9EA"+ - "\x9EB\x3\x2\x2\x2\x9EB\x9EC\x3\x2\x2\x2\x9EC\x9EE\a\x94\x2\x2\x9ED\x9EF"+ - "\x5\x1B6\xDC\x2\x9EE\x9ED\x3\x2\x2\x2\x9EE\x9EF\x3\x2\x2\x2\x9EF\x9F0"+ - "\x3\x2\x2\x2\x9F0\x9F2\a\xE1\x2\x2\x9F1\x9DC\x3\x2\x2\x2\x9F1\x9DD\x3"+ - "\x2\x2\x2\x9F1\x9E7\x3\x2\x2\x2\x9F1\x9E8\x3\x2\x2\x2\x9F2\x181\x3\x2"+ - "\x2\x2\x9F3\x9F4\x5\x184\xC3\x2\x9F4\x183\x3\x2\x2\x2\x9F5\x9F7\x5\x186"+ - "\xC4\x2\x9F6\x9F8\x5\x1B6\xDC\x2\x9F7\x9F6\x3\x2\x2\x2\x9F7\x9F8\x3\x2"+ - "\x2\x2\x9F8\x9FA\x3\x2\x2\x2\x9F9\x9F5\x3\x2\x2\x2\x9FA\x9FD\x3\x2\x2"+ - "\x2\x9FB\x9F9\x3\x2\x2\x2\x9FB\x9FC\x3\x2\x2\x2\x9FC\x9FE\x3\x2\x2\x2"+ - "\x9FD\x9FB\x3\x2\x2\x2\x9FE\xA0A\x5\x18A\xC6\x2\x9FF\xA01\x5\x186\xC4"+ - "\x2\xA00\xA02\x5\x1B6\xDC\x2\xA01\xA00\x3\x2\x2\x2\xA01\xA02\x3\x2\x2"+ - "\x2\xA02\xA04\x3\x2\x2\x2\xA03\x9FF\x3\x2\x2\x2\xA04\xA07\x3\x2\x2\x2"+ - "\xA05\xA03\x3\x2\x2\x2\xA05\xA06\x3\x2\x2\x2\xA06\xA08\x3\x2\x2\x2\xA07"+ - "\xA05\x3\x2\x2\x2\xA08\xA0A\x5\x18C\xC7\x2\xA09\x9FB\x3\x2\x2\x2\xA09"+ - "\xA05\x3\x2\x2\x2\xA0A\x185\x3\x2\x2\x2\xA0B\xA0D\x5\x188\xC5\x2\xA0C"+ - "\xA0E\x5\x1B6\xDC\x2\xA0D\xA0C\x3\x2\x2\x2\xA0D\xA0E\x3\x2\x2\x2\xA0E"+ - "\xA0F\x3\x2\x2\x2\xA0F\xA10\a+\x2\x2\xA10\xA16\x3\x2\x2\x2\xA11\xA13\x5"+ - "\x1B6\xDC\x2\xA12\xA11\x3\x2\x2\x2\xA12\xA13\x3\x2\x2\x2\xA13\xA14\x3"+ - "\x2\x2\x2\xA14\xA16\a+\x2\x2\xA15\xA0B\x3\x2\x2\x2\xA15\xA12\x3\x2\x2"+ - "\x2\xA16\x187\x3\x2\x2\x2\xA17\xA18\x5\x190\xC9\x2\xA18\x189\x3\x2\x2"+ - "\x2\xA19\xA1A\x5\x190\xC9\x2\xA1A\x18B\x3\x2\x2\x2\xA1B\xA26\x5\x18E\xC8"+ - "\x2\xA1C\xA1E\x5\x1B6\xDC\x2\xA1D\xA1C\x3\x2\x2\x2\xA1D\xA1E\x3\x2\x2"+ - "\x2\xA1E\xA1F\x3\x2\x2\x2\xA1F\xA21\a+\x2\x2\xA20\xA22\x5\x1B6\xDC\x2"+ - "\xA21\xA20\x3\x2\x2\x2\xA21\xA22\x3\x2\x2\x2\xA22\xA23\x3\x2\x2\x2\xA23"+ - "\xA25\x5\x18E\xC8\x2\xA24\xA1D\x3\x2\x2\x2\xA25\xA28\x3\x2\x2\x2\xA26"+ - "\xA24\x3\x2\x2\x2\xA26\xA27\x3\x2\x2\x2\xA27\x18D\x3\x2\x2\x2\xA28\xA26"+ - "\x3\x2\x2\x2\xA29\xA2B\x5\x14C\xA7\x2\xA2A\xA2C\x5\x1B6\xDC\x2\xA2B\xA2A"+ - "\x3\x2\x2\x2\xA2B\xA2C\x3\x2\x2\x2\xA2C\xA2D\x3\x2\x2\x2\xA2D\xA2F\a\xD1"+ - "\x2\x2\xA2E\xA30\x5\x1B6\xDC\x2\xA2F\xA2E\x3\x2\x2\x2\xA2F\xA30\x3\x2"+ - "\x2\x2\xA30\xA31\x3\x2\x2\x2\xA31\xA32\x5\x190\xC9\x2\xA32\x18F\x3\x2"+ - "\x2\x2\xA33\xA34\a?\x2\x2\xA34\xA36\x5\x1B6\xDC\x2\xA35\xA33\x3\x2\x2"+ - "\x2\xA35\xA36\x3\x2\x2\x2\xA36\xA37\x3\x2\x2\x2\xA37\xA40\x5\x172\xBA"+ - "\x2\xA38\xA40\x5\x196\xCC\x2\xA39\xA3A\x5\x192\xCA\x2\xA3A\xA3B\x5\x1B6"+ - "\xDC\x2\xA3B\xA3C\a\xC2\x2\x2\xA3C\xA3D\x5\x1B6\xDC\x2\xA3D\xA3E\x5\x194"+ - "\xCB\x2\xA3E\xA40\x3\x2\x2\x2\xA3F\xA35\x3\x2\x2\x2\xA3F\xA38\x3\x2\x2"+ - "\x2\xA3F\xA39\x3\x2\x2\x2\xA40\x191\x3\x2\x2\x2\xA41\xA42\x5\x172\xBA"+ - "\x2\xA42\x193\x3\x2\x2\x2\xA43\xA44\x5\x172\xBA\x2\xA44\x195\x3\x2\x2"+ - "\x2\xA45\xA46\a\x36\x2\x2\xA46\xA47\x5\x1B6\xDC\x2\xA47\xA48\x5\x172\xBA"+ - "\x2\xA48\x197\x3\x2\x2\x2\xA49\xA4A\t\x19\x2\x2\xA4A\x199\x3\x2\x2\x2"+ - "\xA4B\xA4C\a;\x2\x2\xA4C\x19B\x3\x2\x2\x2\xA4D\xA4E\t\x1A\x2\x2\xA4E\x19D"+ - "\x3\x2\x2\x2\xA4F\xA51\x5\x1B6\xDC\x2\xA50\xA4F\x3\x2\x2\x2\xA50\xA51"+ - "\x3\x2\x2\x2\xA51\xA52\x3\x2\x2\x2\xA52\xA54\a\xE8\x2\x2\xA53\xA55\x5"+ - "\x1B6\xDC\x2\xA54\xA53\x3\x2\x2\x2\xA54\xA55\x3\x2\x2\x2\xA55\xA5B\x3"+ - "\x2\x2\x2\xA56\xA58\x5\x1B6\xDC\x2\xA57\xA56\x3\x2\x2\x2\xA57\xA58\x3"+ - "\x2\x2\x2\xA58\xA59\x3\x2\x2\x2\xA59\xA5B\x5\x1A2\xD2\x2\xA5A\xA50\x3"+ - "\x2\x2\x2\xA5A\xA57\x3\x2\x2\x2\xA5B\x19F\x3\x2\x2\x2\xA5C\xA65\x5\x19E"+ - "\xD0\x2\xA5D\xA5F\x5\x1B6\xDC\x2\xA5E\xA5D\x3\x2\x2\x2\xA5E\xA5F\x3\x2"+ - "\x2\x2\xA5F\xA60\x3\x2\x2\x2\xA60\xA62\a,\x2\x2\xA61\xA63\x5\x1B6\xDC"+ - "\x2\xA62\xA61\x3\x2\x2\x2\xA62\xA63\x3\x2\x2\x2\xA63\xA65\x3\x2\x2\x2"+ - "\xA64\xA5C\x3\x2\x2\x2\xA64\xA5E\x3\x2\x2\x2\xA65\xA68\x3\x2\x2\x2\xA66"+ - "\xA64\x3\x2\x2\x2\xA66\xA67\x3\x2\x2\x2\xA67\x1A1\x3\x2\x2\x2\xA68\xA66"+ - "\x3\x2\x2\x2\xA69\xA6D\x5\x1AA\xD6\x2\xA6A\xA6D\x5\x1A6\xD4\x2\xA6B\xA6D"+ - "\x5\x1A4\xD3\x2\xA6C\xA69\x3\x2\x2\x2\xA6C\xA6A\x3\x2\x2\x2\xA6C\xA6B"+ - "\x3\x2\x2\x2\xA6D\x1A3\x3\x2\x2\x2\xA6E\xA70\a\xAF\x2\x2\xA6F\xA71\x5"+ - "\x1B6\xDC\x2\xA70\xA6F\x3\x2\x2\x2\xA70\xA71\x3\x2\x2\x2\xA71\xA72\x3"+ - "\x2\x2\x2\xA72\xA73\x5\x1A8\xD5\x2\xA73\x1A5\x3\x2\x2\x2\xA74\xA75\a\xE9"+ - "\x2\x2\xA75\xA76\x5\x1A8\xD5\x2\xA76\x1A7\x3\x2\x2\x2\xA77\xA7A\a\xEE"+ - "\x2\x2\xA78\xA7A\n\x1B\x2\x2\xA79\xA77\x3\x2\x2\x2\xA79\xA78\x3\x2\x2"+ - "\x2\xA7A\xA7D\x3\x2\x2\x2\xA7B\xA79\x3\x2\x2\x2\xA7B\xA7C\x3\x2\x2\x2"+ - "\xA7C\x1A9\x3\x2\x2\x2\xA7D\xA7B\x3\x2\x2\x2\xA7E\xA84\a\xE9\x2\x2\xA7F"+ - "\xA80\a\x31\x2\x2\xA80\xA82\x5\x1AC\xD7\x2\xA81\xA83\x5\x1B6\xDC\x2\xA82"+ - "\xA81\x3\x2\x2\x2\xA82\xA83\x3\x2\x2\x2\xA83\xA85\x3\x2\x2\x2\xA84\xA7F"+ - "\x3\x2\x2\x2\xA85\xA86\x3\x2\x2\x2\xA86\xA84\x3\x2\x2\x2\xA86\xA87\x3"+ - "\x2\x2\x2\xA87\x1AB\x3\x2\x2\x2\xA88\xA8A\x5\x1AE\xD8\x2\xA89\xA8B\x5"+ - "\x1B0\xD9\x2\xA8A\xA89\x3\x2\x2\x2\xA8A\xA8B\x3\x2\x2\x2\xA8B\x1AD\x3"+ - "\x2\x2\x2\xA8C\xA8D\x5\x14C\xA7\x2\xA8D\x1AF\x3\x2\x2\x2\xA8E\xA8F\x5"+ - "\x1B6\xDC\x2\xA8F\xA90\x5\x1B2\xDA\x2\xA90\xACB\x3\x2\x2\x2\xA91\xA92"+ - "\x5\x1B6\xDC\x2\xA92\xA9B\x5\x1B2\xDA\x2\xA93\xA95\x5\x1B6\xDC\x2\xA94"+ - "\xA93\x3\x2\x2\x2\xA94\xA95\x3\x2\x2\x2\xA95\xA96\x3\x2\x2\x2\xA96\xA98"+ - "\a+\x2\x2\xA97\xA99\x5\x1B6\xDC\x2\xA98\xA97\x3\x2\x2\x2\xA98\xA99\x3"+ - "\x2\x2\x2\xA99\xA9A\x3\x2\x2\x2\xA9A\xA9C\x5\x1B2\xDA\x2\xA9B\xA94\x3"+ - "\x2\x2\x2\xA9C\xA9D\x3\x2\x2\x2\xA9D\xA9B\x3\x2\x2\x2\xA9D\xA9E\x3\x2"+ - "\x2\x2\xA9E\xACB\x3\x2\x2\x2\xA9F\xAA1\x5\x1B6\xDC\x2\xAA0\xA9F\x3\x2"+ - "\x2\x2\xAA0\xAA1\x3\x2\x2\x2\xAA1\xAA2\x3\x2\x2\x2\xAA2\xAA4\a\xD8\x2"+ - "\x2\xAA3\xAA5\x5\x1B6\xDC\x2\xAA4\xAA3\x3\x2\x2\x2\xAA4\xAA5\x3\x2\x2"+ - "\x2\xAA5\xAA6\x3\x2\x2\x2\xAA6\xACB\a\xDF\x2\x2\xAA7\xAA9\x5\x1B6\xDC"+ - "\x2\xAA8\xAA7\x3\x2\x2\x2\xAA8\xAA9\x3\x2\x2\x2\xAA9\xAAA\x3\x2\x2\x2"+ - "\xAAA\xAAC\a\xD8\x2\x2\xAAB\xAAD\x5\x1B6\xDC\x2\xAAC\xAAB\x3\x2\x2\x2"+ - "\xAAC\xAAD\x3\x2\x2\x2\xAAD\xAAE\x3\x2\x2\x2\xAAE\xAB0\x5\x1B2\xDA\x2"+ - "\xAAF\xAB1\x5\x1B6\xDC\x2\xAB0\xAAF\x3\x2\x2\x2\xAB0\xAB1\x3\x2\x2\x2"+ - "\xAB1\xAB2\x3\x2\x2\x2\xAB2\xAB3\a\xDF\x2\x2\xAB3\xACB\x3\x2\x2\x2\xAB4"+ - "\xAB6\x5\x1B6\xDC\x2\xAB5\xAB4\x3\x2\x2\x2\xAB5\xAB6\x3\x2\x2\x2\xAB6"+ - "\xAB7\x3\x2\x2\x2\xAB7\xAB8\a\xD8\x2\x2\xAB8\xAC1\x5\x1B2\xDA\x2\xAB9"+ - "\xABB\x5\x1B6\xDC\x2\xABA\xAB9\x3\x2\x2\x2\xABA\xABB\x3\x2\x2\x2\xABB"+ - "\xABC\x3\x2\x2\x2\xABC\xABE\a+\x2\x2\xABD\xABF\x5\x1B6\xDC\x2\xABE\xABD"+ - "\x3\x2\x2\x2\xABE\xABF\x3\x2\x2\x2\xABF\xAC0\x3\x2\x2\x2\xAC0\xAC2\x5"+ - "\x1B2\xDA\x2\xAC1\xABA\x3\x2\x2\x2\xAC2\xAC3\x3\x2\x2\x2\xAC3\xAC1\x3"+ - "\x2\x2\x2\xAC3\xAC4\x3\x2\x2\x2\xAC4\xAC6\x3\x2\x2\x2\xAC5\xAC7\x5\x1B6"+ - "\xDC\x2\xAC6\xAC5\x3\x2\x2\x2\xAC6\xAC7\x3\x2\x2\x2\xAC7\xAC8\x3\x2\x2"+ - "\x2\xAC8\xAC9\a\xDF\x2\x2\xAC9\xACB\x3\x2\x2\x2\xACA\xA8E\x3\x2\x2\x2"+ - "\xACA\xA91\x3\x2\x2\x2\xACA\xAA0\x3\x2\x2\x2\xACA\xAA8\x3\x2\x2\x2\xACA"+ - "\xAB5\x3\x2\x2\x2\xACB\x1B1\x3\x2\x2\x2\xACC\xACD\x5\x172\xBA\x2\xACD"+ - "\x1B3\x3\x2\x2\x2\xACE\xAD2\a\xEE\x2\x2\xACF\xAD1\a\xEB\x2\x2\xAD0\xACF"+ - "\x3\x2\x2\x2\xAD1\xAD4\x3\x2\x2\x2\xAD2\xAD0\x3\x2\x2\x2\xAD2\xAD3\x3"+ - "\x2\x2\x2\xAD3\x1B5\x3\x2\x2\x2\xAD4\xAD2\x3\x2\x2\x2\xAD5\xAD7\t\x1C"+ - "\x2\x2\xAD6\xAD5\x3\x2\x2\x2\xAD7\xAD8\x3\x2\x2\x2\xAD8\xAD6\x3\x2\x2"+ - "\x2\xAD8\xAD9\x3\x2\x2\x2\xAD9\x1B7\x3\x2\x2\x2\x19E\x1BE\x1C2\x1CA\x1D0"+ + "\x88D\n\xA8\x3\xA9\x3\xA9\x3\xAA\x3\xAA\x3\xAA\x3\xAB\x3\xAB\x3\xAB\x3"+ + "\xAB\x5\xAB\x898\n\xAB\x3\xAC\x3\xAC\a\xAC\x89C\n\xAC\f\xAC\xE\xAC\x89F"+ + "\v\xAC\x3\xAC\x3\xAC\x3\xAD\x3\xAD\x5\xAD\x8A5\n\xAD\x3\xAE\x3\xAE\x5"+ + "\xAE\x8A9\n\xAE\x3\xAE\x3\xAE\x5\xAE\x8AD\n\xAE\x3\xAE\x3\xAE\x5\xAE\x8B1"+ + "\n\xAE\x3\xAE\x5\xAE\x8B4\n\xAE\x3\xAF\x3\xAF\x3\xB0\x3\xB0\x3\xB1\x3"+ + "\xB1\x3\xB1\x3\xB1\x3\xB1\x5\xB1\x8BF\n\xB1\x3\xB1\x3\xB1\x5\xB1\x8C3"+ + "\n\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1\x3\xB1"+ + "\x3\xB1\x3\xB1\x3\xB1\x5\xB1\x8D1\n\xB1\x3\xB2\x3\xB2\x5\xB2\x8D5\n\xB2"+ + "\x3\xB2\x3\xB2\x5\xB2\x8D9\n\xB2\x3\xB3\x3\xB3\x5\xB3\x8DD\n\xB3\x3\xB4"+ + "\x3\xB4\x5\xB4\x8E1\n\xB4\x3\xB4\x3\xB4\x3\xB5\x3\xB5\x5\xB5\x8E7\n\xB5"+ + "\x3\xB5\x5\xB5\x8EA\n\xB5\x3\xB6\x3\xB6\x3\xB7\x3\xB7\x5\xB7\x8F0\n\xB7"+ + "\x3\xB7\x5\xB7\x8F3\n\xB7\x3\xB7\x3\xB7\x5\xB7\x8F7\n\xB7\x3\xB7\x5\xB7"+ + "\x8FA\n\xB7\x3\xB8\x3\xB8\x3\xB9\x3\xB9\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3"+ + "\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x90B\n\xBA\x3\xBA"+ + "\x3\xBA\x3\xBA\x5\xBA\x910\n\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3\xBA\x3"+ + "\xBA\x3\xBA\x3\xBA\x5\xBA\x91A\n\xBA\x3\xBA\x3\xBA\x5\xBA\x91E\n\xBA\x3"+ + "\xBA\x3\xBA\x5\xBA\x922\n\xBA\x3\xBA\x3\xBA\x5\xBA\x926\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x92A\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x92F\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x933\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x938\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x93C\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x941\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x945\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x94A\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x94E\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x953\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x957\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x95C\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x960\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x965\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x969\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x96E\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x972\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x977\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x97B\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x980\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x984\n\xBA\x3\xBA\x3\xBA\x3\xBA\x5\xBA\x989\n\xBA\x3\xBA\x3"+ + "\xBA\x5\xBA\x98D\n\xBA\x3\xBA\a\xBA\x990\n\xBA\f\xBA\xE\xBA\x993\v\xBA"+ + "\x3\xBB\x3\xBB\x3\xBB\x3\xBB\x3\xBB\x5\xBB\x99A\n\xBB\x5\xBB\x99C\n\xBB"+ + "\x3\xBC\x3\xBC\x3\xBC\x5\xBC\x9A1\n\xBC\x3\xBD\x3\xBD\x3\xBE\x3\xBE\x3"+ + "\xBF\x3\xBF\x3\xC0\x3\xC0\x3\xC0\x3\xC0\x3\xC0\x5\xC0\x9AE\n\xC0\x3\xC0"+ + "\x3\xC0\x3\xC0\x5\xC0\x9B3\n\xC0\x3\xC0\x5\xC0\x9B6\n\xC0\x3\xC0\x3\xC0"+ + "\x5\xC0\x9BA\n\xC0\x3\xC0\x3\xC0\x5\xC0\x9BE\n\xC0\x3\xC0\x5\xC0\x9C1"+ + "\n\xC0\x3\xC0\x5\xC0\x9C4\n\xC0\x3\xC0\x3\xC0\x3\xC0\x5\xC0\x9C9\n\xC0"+ + "\x3\xC0\x3\xC0\x5\xC0\x9CD\n\xC0\x3\xC0\x3\xC0\x3\xC0\x5\xC0\x9D2\n\xC0"+ + "\x3\xC0\x3\xC0\x5\xC0\x9D6\n\xC0\x3\xC0\a\xC0\x9D9\n\xC0\f\xC0\xE\xC0"+ + "\x9DC\v\xC0\x3\xC1\x3\xC1\x3\xC1\x5\xC1\x9E1\n\xC1\x3\xC1\x3\xC1\x5\xC1"+ + "\x9E5\n\xC1\x3\xC1\x3\xC1\x3\xC1\x3\xC1\x3\xC1\x5\xC1\x9EC\n\xC1\x3\xC1"+ + "\x3\xC1\x5\xC1\x9F0\n\xC1\x3\xC1\x5\xC1\x9F3\n\xC1\x3\xC2\x3\xC2\x3\xC3"+ + "\x3\xC3\x5\xC3\x9F9\n\xC3\a\xC3\x9FB\n\xC3\f\xC3\xE\xC3\x9FE\v\xC3\x3"+ + "\xC3\x3\xC3\x3\xC3\x5\xC3\xA03\n\xC3\a\xC3\xA05\n\xC3\f\xC3\xE\xC3\xA08"+ + "\v\xC3\x3\xC3\x5\xC3\xA0B\n\xC3\x3\xC4\x3\xC4\x5\xC4\xA0F\n\xC4\x3\xC4"+ + "\x3\xC4\x3\xC4\x5\xC4\xA14\n\xC4\x3\xC4\x5\xC4\xA17\n\xC4\x3\xC5\x3\xC5"+ + "\x3\xC6\x3\xC6\x3\xC7\x3\xC7\x5\xC7\xA1F\n\xC7\x3\xC7\x3\xC7\x5\xC7\xA23"+ + "\n\xC7\x3\xC7\a\xC7\xA26\n\xC7\f\xC7\xE\xC7\xA29\v\xC7\x3\xC8\x3\xC8\x5"+ + "\xC8\xA2D\n\xC8\x3\xC8\x3\xC8\x5\xC8\xA31\n\xC8\x3\xC8\x3\xC8\x3\xC9\x3"+ + "\xC9\x5\xC9\xA37\n\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9\x3\xC9"+ + "\x3\xC9\x5\xC9\xA41\n\xC9\x3\xCA\x3\xCA\x3\xCB\x3\xCB\x3\xCC\x3\xCC\x3"+ + "\xCC\x3\xCC\x3\xCD\x3\xCD\x3\xCE\x3\xCE\x3\xCF\x3\xCF\x3\xD0\x5\xD0\xA52"+ + "\n\xD0\x3\xD0\x3\xD0\x5\xD0\xA56\n\xD0\x3\xD0\x5\xD0\xA59\n\xD0\x3\xD0"+ + "\x5\xD0\xA5C\n\xD0\x3\xD1\x3\xD1\x5\xD1\xA60\n\xD1\x3\xD1\x3\xD1\x5\xD1"+ + "\xA64\n\xD1\a\xD1\xA66\n\xD1\f\xD1\xE\xD1\xA69\v\xD1\x3\xD2\x3\xD2\x3"+ + "\xD2\x5\xD2\xA6E\n\xD2\x3\xD3\x3\xD3\x5\xD3\xA72\n\xD3\x3\xD3\x3\xD3\x3"+ + "\xD4\x3\xD4\x3\xD4\x3\xD5\x3\xD5\a\xD5\xA7B\n\xD5\f\xD5\xE\xD5\xA7E\v"+ + "\xD5\x3\xD6\x3\xD6\x3\xD6\x3\xD6\x5\xD6\xA84\n\xD6\x6\xD6\xA86\n\xD6\r"+ + "\xD6\xE\xD6\xA87\x3\xD7\x3\xD7\x5\xD7\xA8C\n\xD7\x3\xD8\x3\xD8\x3\xD9"+ + "\x3\xD9\x3\xD9\x3\xD9\x3\xD9\x3\xD9\x5\xD9\xA96\n\xD9\x3\xD9\x3\xD9\x5"+ + "\xD9\xA9A\n\xD9\x3\xD9\x6\xD9\xA9D\n\xD9\r\xD9\xE\xD9\xA9E\x3\xD9\x5\xD9"+ + "\xAA2\n\xD9\x3\xD9\x3\xD9\x5\xD9\xAA6\n\xD9\x3\xD9\x3\xD9\x5\xD9\xAAA"+ + "\n\xD9\x3\xD9\x3\xD9\x5\xD9\xAAE\n\xD9\x3\xD9\x3\xD9\x5\xD9\xAB2\n\xD9"+ + "\x3\xD9\x3\xD9\x3\xD9\x5\xD9\xAB7\n\xD9\x3\xD9\x3\xD9\x3\xD9\x5\xD9\xABC"+ + "\n\xD9\x3\xD9\x3\xD9\x5\xD9\xAC0\n\xD9\x3\xD9\x6\xD9\xAC3\n\xD9\r\xD9"+ + "\xE\xD9\xAC4\x3\xD9\x5\xD9\xAC8\n\xD9\x3\xD9\x3\xD9\x5\xD9\xACC\n\xD9"+ + "\x3\xDA\x3\xDA\x3\xDB\x3\xDB\a\xDB\xAD2\n\xDB\f\xDB\xE\xDB\xAD5\v\xDB"+ + "\x3\xDC\x6\xDC\xAD8\n\xDC\r\xDC\xE\xDC\xAD9\x3\xDC\x2\x2\x4\x172\x17E"+ + "\xDD\x2\x2\x4\x2\x6\x2\b\x2\n\x2\f\x2\xE\x2\x10\x2\x12\x2\x14\x2\x16\x2"+ + "\x18\x2\x1A\x2\x1C\x2\x1E\x2 \x2\"\x2$\x2&\x2(\x2*\x2,\x2.\x2\x30\x2\x32"+ + "\x2\x34\x2\x36\x2\x38\x2:\x2<\x2>\x2@\x2\x42\x2\x44\x2\x46\x2H\x2J\x2"+ + "L\x2N\x2P\x2R\x2T\x2V\x2X\x2Z\x2\\\x2^\x2`\x2\x62\x2\x64\x2\x66\x2h\x2"+ + "j\x2l\x2n\x2p\x2r\x2t\x2v\x2x\x2z\x2|\x2~\x2\x80\x2\x82\x2\x84\x2\x86"+ + "\x2\x88\x2\x8A\x2\x8C\x2\x8E\x2\x90\x2\x92\x2\x94\x2\x96\x2\x98\x2\x9A"+ + "\x2\x9C\x2\x9E\x2\xA0\x2\xA2\x2\xA4\x2\xA6\x2\xA8\x2\xAA\x2\xAC\x2\xAE"+ + "\x2\xB0\x2\xB2\x2\xB4\x2\xB6\x2\xB8\x2\xBA\x2\xBC\x2\xBE\x2\xC0\x2\xC2"+ + "\x2\xC4\x2\xC6\x2\xC8\x2\xCA\x2\xCC\x2\xCE\x2\xD0\x2\xD2\x2\xD4\x2\xD6"+ + "\x2\xD8\x2\xDA\x2\xDC\x2\xDE\x2\xE0\x2\xE2\x2\xE4\x2\xE6\x2\xE8\x2\xEA"+ + "\x2\xEC\x2\xEE\x2\xF0\x2\xF2\x2\xF4\x2\xF6\x2\xF8\x2\xFA\x2\xFC\x2\xFE"+ + "\x2\x100\x2\x102\x2\x104\x2\x106\x2\x108\x2\x10A\x2\x10C\x2\x10E\x2\x110"+ + "\x2\x112\x2\x114\x2\x116\x2\x118\x2\x11A\x2\x11C\x2\x11E\x2\x120\x2\x122"+ + "\x2\x124\x2\x126\x2\x128\x2\x12A\x2\x12C\x2\x12E\x2\x130\x2\x132\x2\x134"+ + "\x2\x136\x2\x138\x2\x13A\x2\x13C\x2\x13E\x2\x140\x2\x142\x2\x144\x2\x146"+ + "\x2\x148\x2\x14A\x2\x14C\x2\x14E\x2\x150\x2\x152\x2\x154\x2\x156\x2\x158"+ + "\x2\x15A\x2\x15C\x2\x15E\x2\x160\x2\x162\x2\x164\x2\x166\x2\x168\x2\x16A"+ + "\x2\x16C\x2\x16E\x2\x170\x2\x172\x2\x174\x2\x176\x2\x178\x2\x17A\x2\x17C"+ + "\x2\x17E\x2\x180\x2\x182\x2\x184\x2\x186\x2\x188\x2\x18A\x2\x18C\x2\x18E"+ + "\x2\x190\x2\x192\x2\x194\x2\x196\x2\x198\x2\x19A\x2\x19C\x2\x19E\x2\x1A0"+ + "\x2\x1A2\x2\x1A4\x2\x1A6\x2\x1A8\x2\x1AA\x2\x1AC\x2\x1AE\x2\x1B0\x2\x1B2"+ + "\x2\x1B4\x2\x1B6\x2\x2\x1D\x5\x2==GG\xC0\xC0\a\x2::==}}\x9F\x9F\xAA\xAA"+ + "\x4\x2\xAC\xAD\xCF\xCF\x4\x2\x87\x89\xB7\xB7\x4\x2++--\x4\x2tt\xBE\xBE"+ + "\x3\x2?@\x3\x2JV\x4\x2\xC7\xC7\xCB\xCB\x3\x2lp\x3\x2\x96\x97\x4\x2vv\xA8"+ + "\xA8\x3\x2\x6\a\x3\x2\xE0\xE1\xE\x2\x4\x4\x15\x15!\">>\x41\x41HHYY\x7F"+ + "\x7F\x81\x81\xB8\xB8\xBD\xBD\xC8\xC8\a\x2~~\x85\x85\xD4\xD7\xD9\xD9\xDC"+ + "\xDC\x3\x2\xE3\xE6\x5\x2..\x30\x34\xDE\xDE\x6\x2rrvv\xA3\xA3\xA8\xA8\x4"+ + "\x2\xD2\xD2\xDB\xDB\x4\x2\xDA\xDA\xDD\xDD\x4\x2qq\xC3\xC3\x4\x2]]\x93"+ + "\x93\'\x2\x3\x6\b\xE\x10\x19\x1B%\'\')*\x35:<\x41\x44\x45GHYY\x66\x66"+ + "hhjjqquuzz|\x81\x84\x89\x8B\x8E\x90\x94\x96\x96\x98\x99\x9E\xA2\xA7\xA7"+ + "\xA9\xAA\xAC\xAD\xAF\xB0\xB4\xB4\xB7\xB9\xBB\xBB\xBD\xBD\xBF\xC3\xC5\xC9"+ + "\xCC\xCC\xCE\xD0\xF0\xF1 \x2\x1A\x1A&&\x42\x43\x46\x46IX[\\\x62\x62\x65"+ + "\x65ggiikprtvy{{\x82\x83\x8A\x8A\x8F\x8F\x95\x95\xA3\xA3\xA8\xA8\xAB\xAB"+ + "\xAE\xAE\xB1\xB3\xB5\xB6\xBA\xBA\xBC\xBC\xBE\xBE\xC4\xC4\xCA\xCB\xCD\xCD"+ + "\x3\x2\xE8\xE8\x4\x2\xEB\xEB\xEE\xEE\xC05\x2\x1B8\x3\x2\x2\x2\x4\x1BB"+ + "\x3\x2\x2\x2\x6\x1CC\x3\x2\x2\x2\b\x1D7\x3\x2\x2\x2\n\x1EA\x3\x2\x2\x2"+ + "\f\x204\x3\x2\x2\x2\xE\x207\x3\x2\x2\x2\x10\x21F\x3\x2\x2\x2\x12\x221"+ + "\x3\x2\x2\x2\x14\x228\x3\x2\x2\x2\x16\x235\x3\x2\x2\x2\x18\x238\x3\x2"+ + "\x2\x2\x1A\x248\x3\x2\x2\x2\x1C\x257\x3\x2\x2\x2\x1E\x25E\x3\x2\x2\x2"+ + " \x286\x3\x2\x2\x2\"\x296\x3\x2\x2\x2$\x298\x3\x2\x2\x2&\x2B3\x3\x2\x2"+ + "\x2(\x2B5\x3\x2\x2\x2*\x2B9\x3\x2\x2\x2,\x2BB\x3\x2\x2\x2.\x2BF\x3\x2"+ + "\x2\x2\x30\x2C1\x3\x2\x2\x2\x32\x2C3\x3\x2\x2\x2\x34\x2CD\x3\x2\x2\x2"+ + "\x36\x2D1\x3\x2\x2\x2\x38\x2D3\x3\x2\x2\x2:\x2D6\x3\x2\x2\x2<\x2D8\x3"+ + "\x2\x2\x2>\x2DE\x3\x2\x2\x2@\x2E0\x3\x2\x2\x2\x42\x2EE\x3\x2\x2\x2\x44"+ + "\x2FA\x3\x2\x2\x2\x46\x2FC\x3\x2\x2\x2H\x313\x3\x2\x2\x2J\x315\x3\x2\x2"+ + "\x2L\x317\x3\x2\x2\x2N\x319\x3\x2\x2\x2P\x326\x3\x2\x2\x2R\x332\x3\x2"+ + "\x2\x2T\x334\x3\x2\x2\x2V\x340\x3\x2\x2\x2X\x342\x3\x2\x2\x2Z\x348\x3"+ + "\x2\x2\x2\\\x352\x3\x2\x2\x2^\x354\x3\x2\x2\x2`\x356\x3\x2\x2\x2\x62\x363"+ + "\x3\x2\x2\x2\x64\x375\x3\x2\x2\x2\x66\x37A\x3\x2\x2\x2h\x37C\x3\x2\x2"+ + "\x2j\x37E\x3\x2\x2\x2l\x380\x3\x2\x2\x2n\x38E\x3\x2\x2\x2p\x390\x3\x2"+ + "\x2\x2r\x397\x3\x2\x2\x2t\x3A1\x3\x2\x2\x2v\x3A3\x3\x2\x2\x2x\x3B0\x3"+ + "\x2\x2\x2z\x3BC\x3\x2\x2\x2|\x3CA\x3\x2\x2\x2~\x3CC\x3\x2\x2\x2\x80\x3E2"+ + "\x3\x2\x2\x2\x82\x3E4\x3\x2\x2\x2\x84\x3E6\x3\x2\x2\x2\x86\x3FC\x3\x2"+ + "\x2\x2\x88\x401\x3\x2\x2\x2\x8A\x413\x3\x2\x2\x2\x8C\x425\x3\x2\x2\x2"+ + "\x8E\x446\x3\x2\x2\x2\x90\x461\x3\x2\x2\x2\x92\x482\x3\x2\x2\x2\x94\x488"+ + "\x3\x2\x2\x2\x96\x498\x3\x2\x2\x2\x98\x49D\x3\x2\x2\x2\x9A\x49F\x3\x2"+ + "\x2\x2\x9C\x4A1\x3\x2\x2\x2\x9E\x4AB\x3\x2\x2\x2\xA0\x4AE\x3\x2\x2\x2"+ + "\xA2\x4B1\x3\x2\x2\x2\xA4\x4BB\x3\x2\x2\x2\xA6\x4BD\x3\x2\x2\x2\xA8\x4D6"+ + "\x3\x2\x2\x2\xAA\x4DB\x3\x2\x2\x2\xAC\x4E9\x3\x2\x2\x2\xAE\x4F6\x3\x2"+ + "\x2\x2\xB0\x4F8\x3\x2\x2\x2\xB2\x508\x3\x2\x2\x2\xB4\x50F\x3\x2\x2\x2"+ + "\xB6\x519\x3\x2\x2\x2\xB8\x51B\x3\x2\x2\x2\xBA\x52C\x3\x2\x2\x2\xBC\x545"+ + "\x3\x2\x2\x2\xBE\x560\x3\x2\x2\x2\xC0\x562\x3\x2\x2\x2\xC2\x566\x3\x2"+ + "\x2\x2\xC4\x56A\x3\x2\x2\x2\xC6\x58E\x3\x2\x2\x2\xC8\x590\x3\x2\x2\x2"+ + "\xCA\x596\x3\x2\x2\x2\xCC\x598\x3\x2\x2\x2\xCE\x5AA\x3\x2\x2\x2\xD0\x5B9"+ + "\x3\x2\x2\x2\xD2\x5E6\x3\x2\x2\x2\xD4\x5E8\x3\x2\x2\x2\xD6\x5EA\x3\x2"+ + "\x2\x2\xD8\x5EC\x3\x2\x2\x2\xDA\x5F2\x3\x2\x2\x2\xDC\x5FE\x3\x2\x2\x2"+ + "\xDE\x60A\x3\x2\x2\x2\xE0\x616\x3\x2\x2\x2\xE2\x62A\x3\x2\x2\x2\xE4\x641"+ + "\x3\x2\x2\x2\xE6\x65C\x3\x2\x2\x2\xE8\x672\x3\x2\x2\x2\xEA\x685\x3\x2"+ + "\x2\x2\xEC\x698\x3\x2\x2\x2\xEE\x6A6\x3\x2\x2\x2\xF0\x6A8\x3\x2\x2\x2"+ + "\xF2\x6B0\x3\x2\x2\x2\xF4\x6BE\x3\x2\x2\x2\xF6\x6C4\x3\x2\x2\x2\xF8\x6D0"+ + "\x3\x2\x2\x2\xFA\x6D2\x3\x2\x2\x2\xFC\x6DA\x3\x2\x2\x2\xFE\x6DC\x3\x2"+ + "\x2\x2\x100\x6E8\x3\x2\x2\x2\x102\x6EA\x3\x2\x2\x2\x104\x6F2\x3\x2\x2"+ + "\x2\x106\x707\x3\x2\x2\x2\x108\x709\x3\x2\x2\x2\x10A\x71C\x3\x2\x2\x2"+ + "\x10C\x737\x3\x2\x2\x2\x10E\x739\x3\x2\x2\x2\x110\x73B\x3\x2\x2\x2\x112"+ + "\x73D\x3\x2\x2\x2\x114\x74C\x3\x2\x2\x2\x116\x761\x3\x2\x2\x2\x118\x765"+ + "\x3\x2\x2\x2\x11A\x769\x3\x2\x2\x2\x11C\x76D\x3\x2\x2\x2\x11E\x775\x3"+ + "\x2\x2\x2\x120\x780\x3\x2\x2\x2\x122\x782\x3\x2\x2\x2\x124\x788\x3\x2"+ + "\x2\x2\x126\x78F\x3\x2\x2\x2\x128\x793\x3\x2\x2\x2\x12A\x79F\x3\x2\x2"+ + "\x2\x12C\x7B1\x3\x2\x2\x2\x12E\x7B5\x3\x2\x2\x2\x130\x7BB\x3\x2\x2\x2"+ + "\x132\x7BD\x3\x2\x2\x2\x134\x7C2\x3\x2\x2\x2\x136\x7CB\x3\x2\x2\x2\x138"+ + "\x7D9\x3\x2\x2\x2\x13A\x7F2\x3\x2\x2\x2\x13C\x7F9\x3\x2\x2\x2\x13E\x800"+ + "\x3\x2\x2\x2\x140\x82D\x3\x2\x2\x2\x142\x84C\x3\x2\x2\x2\x144\x85A\x3"+ + "\x2\x2\x2\x146\x86C\x3\x2\x2\x2\x148\x86E\x3\x2\x2\x2\x14A\x881\x3\x2"+ + "\x2\x2\x14C\x888\x3\x2\x2\x2\x14E\x88C\x3\x2\x2\x2\x150\x88E\x3\x2\x2"+ + "\x2\x152\x890\x3\x2\x2\x2\x154\x897\x3\x2\x2\x2\x156\x899\x3\x2\x2\x2"+ + "\x158\x8A4\x3\x2\x2\x2\x15A\x8A6\x3\x2\x2\x2\x15C\x8B5\x3\x2\x2\x2\x15E"+ + "\x8B7\x3\x2\x2\x2\x160\x8D0\x3\x2\x2\x2\x162\x8D2\x3\x2\x2\x2\x164\x8DC"+ + "\x3\x2\x2\x2\x166\x8DE\x3\x2\x2\x2\x168\x8E4\x3\x2\x2\x2\x16A\x8EB\x3"+ + "\x2\x2\x2\x16C\x8EF\x3\x2\x2\x2\x16E\x8FB\x3\x2\x2\x2\x170\x8FD\x3\x2"+ + "\x2\x2\x172\x921\x3\x2\x2\x2\x174\x99B\x3\x2\x2\x2\x176\x9A0\x3\x2\x2"+ + "\x2\x178\x9A2\x3\x2\x2\x2\x17A\x9A4\x3\x2\x2\x2\x17C\x9A6\x3\x2\x2\x2"+ + "\x17E\x9B5\x3\x2\x2\x2\x180\x9F2\x3\x2\x2\x2\x182\x9F4\x3\x2\x2\x2\x184"+ + "\xA0A\x3\x2\x2\x2\x186\xA16\x3\x2\x2\x2\x188\xA18\x3\x2\x2\x2\x18A\xA1A"+ + "\x3\x2\x2\x2\x18C\xA1C\x3\x2\x2\x2\x18E\xA2A\x3\x2\x2\x2\x190\xA40\x3"+ + "\x2\x2\x2\x192\xA42\x3\x2\x2\x2\x194\xA44\x3\x2\x2\x2\x196\xA46\x3\x2"+ + "\x2\x2\x198\xA4A\x3\x2\x2\x2\x19A\xA4C\x3\x2\x2\x2\x19C\xA4E\x3\x2\x2"+ + "\x2\x19E\xA5B\x3\x2\x2\x2\x1A0\xA67\x3\x2\x2\x2\x1A2\xA6D\x3\x2\x2\x2"+ + "\x1A4\xA6F\x3\x2\x2\x2\x1A6\xA75\x3\x2\x2\x2\x1A8\xA7C\x3\x2\x2\x2\x1AA"+ + "\xA7F\x3\x2\x2\x2\x1AC\xA89\x3\x2\x2\x2\x1AE\xA8D\x3\x2\x2\x2\x1B0\xACB"+ + "\x3\x2\x2\x2\x1B2\xACD\x3\x2\x2\x2\x1B4\xACF\x3\x2\x2\x2\x1B6\xAD7\x3"+ + "\x2\x2\x2\x1B8\x1B9\x5\x4\x3\x2\x1B9\x1BA\a\x2\x2\x3\x1BA\x3\x3\x2\x2"+ + "\x2\x1BB\x1BC\x5\x1A0\xD1\x2\x1BC\x1BE\x5\f\a\x2\x1BD\x1BF\x5\x6\x4\x2"+ + "\x1BE\x1BD\x3\x2\x2\x2\x1BE\x1BF\x3\x2\x2\x2\x1BF\x1C0\x3\x2\x2\x2\x1C0"+ + "\x1C2\x5\f\a\x2\x1C1\x1C3\x5\b\x5\x2\x1C2\x1C1\x3\x2\x2\x2\x1C2\x1C3\x3"+ + "\x2\x2\x2\x1C3\x1C4\x3\x2\x2\x2\x1C4\x1C5\x5\f\a\x2\x1C5\x1C6\x5\x14\v"+ + "\x2\x1C6\x1C7\x5\f\a\x2\x1C7\x1C8\x5\x1A\xE\x2\x1C8\x1CA\x5\f\a\x2\x1C9"+ + "\x1CB\x5\x1B6\xDC\x2\x1CA\x1C9\x3\x2\x2\x2\x1CA\x1CB\x3\x2\x2\x2\x1CB"+ + "\x5\x3\x2\x2\x2\x1CC\x1CD\a\xC9\x2\x2\x1CD\x1CE\x5\x1B6\xDC\x2\x1CE\x1D0"+ + "\x5\x16A\xB6\x2\x1CF\x1D1\x5\x1B6\xDC\x2\x1D0\x1CF\x3\x2\x2\x2\x1D0\x1D1"+ + "\x3\x2\x2\x2\x1D1\x1D3\x3\x2\x2\x2\x1D2\x1D4\a\x44\x2\x2\x1D3\x1D2\x3"+ + "\x2\x2\x2\x1D3\x1D4\x3\x2\x2\x2\x1D4\x1D5\x3\x2\x2\x2\x1D5\x1D6\x5\x1A0"+ + "\xD1\x2\x1D6\a\x3\x2\x2\x2\x1D7\x1DF\a<\x2\x2\x1D8\x1D9\x5\x1B6\xDC\x2"+ + "\x1D9\x1DA\a\xEC\x2\x2\x1DA\x1DB\x5\x1B6\xDC\x2\x1DB\x1DD\x5\x14C\xA7"+ + "\x2\x1DC\x1DE\x5\x1B6\xDC\x2\x1DD\x1DC\x3\x2\x2\x2\x1DD\x1DE\x3\x2\x2"+ + "\x2\x1DE\x1E0\x3\x2\x2\x2\x1DF\x1D8\x3\x2\x2\x2\x1DF\x1E0\x3\x2\x2\x2"+ + "\x1E0\x1E1\x3\x2\x2\x2\x1E1\x1E3\x5\x1A0\xD1\x2\x1E2\x1E4\x5\n\x6\x2\x1E3"+ + "\x1E2\x3\x2\x2\x2\x1E4\x1E5\x3\x2\x2\x2\x1E5\x1E3\x3\x2\x2\x2\x1E5\x1E6"+ + "\x3\x2\x2\x2\x1E6\x1E7\x3\x2\x2\x2\x1E7\x1E8\a\x66\x2\x2\x1E8\x1E9\x5"+ + "\x1A0\xD1\x2\x1E9\t\x3\x2\x2\x2\x1EA\x1EE\x5\x14C\xA7\x2\x1EB\x1ED\x5"+ + "\x1B6\xDC\x2\x1EC\x1EB\x3\x2\x2\x2\x1ED\x1F0\x3\x2\x2\x2\x1EE\x1EC\x3"+ + "\x2\x2\x2\x1EE\x1EF\x3\x2\x2\x2\x1EF\x1F1\x3\x2\x2\x2\x1F0\x1EE\x3\x2"+ + "\x2\x2\x1F1\x1F5\a\xD4\x2\x2\x1F2\x1F4\x5\x1B6\xDC\x2\x1F3\x1F2\x3\x2"+ + "\x2\x2\x1F4\x1F7\x3\x2\x2\x2\x1F5\x1F3\x3\x2\x2\x2\x1F5\x1F6\x3\x2\x2"+ + "\x2\x1F6\x1F8\x3\x2\x2\x2\x1F7\x1F5\x3\x2\x2\x2\x1F8\x1FB\x5\x172\xBA"+ + "\x2\x1F9\x1FA\a,\x2\x2\x1FA\x1FC\x5\x16A\xB6\x2\x1FB\x1F9\x3\x2\x2\x2"+ + "\x1FB\x1FC\x3\x2\x2\x2\x1FC\x1FD\x3\x2\x2\x2\x1FD\x1FE\x5\x1A0\xD1\x2"+ + "\x1FE\v\x3\x2\x2\x2\x1FF\x200\x5\xE\b\x2\x200\x201\x5\x1A0\xD1\x2\x201"+ + "\x203\x3\x2\x2\x2\x202\x1FF\x3\x2\x2\x2\x203\x206\x3\x2\x2\x2\x204\x202"+ + "\x3\x2\x2\x2\x204\x205\x3\x2\x2\x2\x205\r\x3\x2\x2\x2\x206\x204\x3\x2"+ + "\x2\x2\x207\x208\a\x39\x2\x2\x208\x209\x5\x1B6\xDC\x2\x209\x20B\x5\x10"+ + "\t\x2\x20A\x20C\x5\x1B6\xDC\x2\x20B\x20A\x3\x2\x2\x2\x20B\x20C\x3\x2\x2"+ + "\x2\x20C\x20D\x3\x2\x2\x2\x20D\x20F\a\xD4\x2\x2\x20E\x210\x5\x1B6\xDC"+ + "\x2\x20F\x20E\x3\x2\x2\x2\x20F\x210\x3\x2\x2\x2\x210\x211\x3\x2\x2\x2"+ + "\x211\x21C\x5\x12\n\x2\x212\x214\x5\x1B6\xDC\x2\x213\x212\x3\x2\x2\x2"+ + "\x213\x214\x3\x2\x2\x2\x214\x215\x3\x2\x2\x2\x215\x217\a+\x2\x2\x216\x218"+ + "\x5\x1B6\xDC\x2\x217\x216\x3\x2\x2\x2\x217\x218\x3\x2\x2\x2\x218\x219"+ + "\x3\x2\x2\x2\x219\x21B\x5\x12\n\x2\x21A\x213\x3\x2\x2\x2\x21B\x21E\x3"+ + "\x2\x2\x2\x21C\x21A\x3\x2\x2\x2\x21C\x21D\x3\x2\x2\x2\x21D\xF\x3\x2\x2"+ + "\x2\x21E\x21C\x3\x2\x2\x2\x21F\x220\x5\x17E\xC0\x2\x220\x11\x3\x2\x2\x2"+ + "\x221\x222\x5\x172\xBA\x2\x222\x13\x3\x2\x2\x2\x223\x224\x5\x18\r\x2\x224"+ + "\x225\x5\x1A0\xD1\x2\x225\x227\x3\x2\x2\x2\x226\x223\x3\x2\x2\x2\x227"+ + "\x22A\x3\x2\x2\x2\x228\x226\x3\x2\x2\x2\x228\x229\x3\x2\x2\x2\x229\x15"+ + "\x3\x2\x2\x2\x22A\x228\x3\x2\x2\x2\x22B\x22C\a\x9A\x2\x2\x22C\x22D\x5"+ + "\x1B6\xDC\x2\x22D\x22E\x5\x16A\xB6\x2\x22E\x236\x3\x2\x2\x2\x22F\x230"+ + "\a\x9C\x2\x2\x230\x231\x5\x1B6\xDC\x2\x231\x232\t\x2\x2\x2\x232\x236\x3"+ + "\x2\x2\x2\x233\x236\a\x9B\x2\x2\x234\x236\a\x9D\x2\x2\x235\x22B\x3\x2"+ + "\x2\x2\x235\x22F\x3\x2\x2\x2\x235\x233\x3\x2\x2\x2\x235\x234\x3\x2\x2"+ + "\x2\x236\x17\x3\x2\x2\x2\x237\x239\x5\x1B6\xDC\x2\x238\x237\x3\x2\x2\x2"+ + "\x238\x239\x3\x2\x2\x2\x239\x245\x3\x2\x2\x2\x23A\x246\x5\xE\b\x2\x23B"+ + "\x246\x5\x8CG\x2\x23C\x246\x5\x94K\x2\x23D\x246\x5\xAAV\x2\x23E\x246\x5"+ + "\xB4[\x2\x23F\x246\x5\x88\x45\x2\x240\x246\x5\xD8m\x2\x241\x246\x5\x134"+ + "\x9B\x2\x242\x246\x5\x16\f\x2\x243\x246\x5\x118\x8D\x2\x244\x246\x5\x11A"+ + "\x8E\x2\x245\x23A\x3\x2\x2\x2\x245\x23B\x3\x2\x2\x2\x245\x23C\x3\x2\x2"+ + "\x2\x245\x23D\x3\x2\x2\x2\x245\x23E\x3\x2\x2\x2\x245\x23F\x3\x2\x2\x2"+ + "\x245\x240\x3\x2\x2\x2\x245\x241\x3\x2\x2\x2\x245\x242\x3\x2\x2\x2\x245"+ + "\x243\x3\x2\x2\x2\x245\x244\x3\x2\x2\x2\x246\x19\x3\x2\x2\x2\x247\x249"+ + "\x5\x1B6\xDC\x2\x248\x247\x3\x2\x2\x2\x248\x249\x3\x2\x2\x2\x249\x24F"+ + "\x3\x2\x2\x2\x24A\x24B\x5\x1C\xF\x2\x24B\x24C\x5\x1A0\xD1\x2\x24C\x24E"+ + "\x3\x2\x2\x2\x24D\x24A\x3\x2\x2\x2\x24E\x251\x3\x2\x2\x2\x24F\x24D\x3"+ + "\x2\x2\x2\x24F\x250\x3\x2\x2\x2\x250\x1B\x3\x2\x2\x2\x251\x24F\x3\x2\x2"+ + "\x2\x252\x258\x5\xBC_\x2\x253\x258\x5\xE4s\x2\x254\x258\x5\xE6t\x2\x255"+ + "\x258\x5\xE8u\x2\x256\x258\x5\x114\x8B\x2\x257\x252\x3\x2\x2\x2\x257\x253"+ + "\x3\x2\x2\x2\x257\x254\x3\x2\x2\x2\x257\x255\x3\x2\x2\x2\x257\x256\x3"+ + "\x2\x2\x2\x258\x1D\x3\x2\x2\x2\x259\x25A\x5 \x11\x2\x25A\x25B\x5\x1A0"+ + "\xD1\x2\x25B\x25D\x3\x2\x2\x2\x25C\x259\x3\x2\x2\x2\x25D\x260\x3\x2\x2"+ + "\x2\x25E\x25C\x3\x2\x2\x2\x25E\x25F\x3\x2\x2\x2\x25F\x1F\x3\x2\x2\x2\x260"+ + "\x25E\x3\x2\x2\x2\x261\x287\x5\x164\xB3\x2\x262\x287\x5\"\x12\x2\x263"+ + "\x287\x5\xE\b\x2\x264\x287\x5\x88\x45\x2\x265\x287\x5\xA8U\x2\x266\x287"+ + "\x5\xAEX\x2\x267\x287\x5\xB0Y\x2\x268\x287\x5\xB2Z\x2\x269\x287\x5\xB6"+ + "\\\x2\x26A\x287\x5\xB8]\x2\x26B\x287\x5\xBA^\x2\x26C\x287\x5\xC0\x61\x2"+ + "\x26D\x287\x5\xC2\x62\x2\x26E\x287\x5\xC4\x63\x2\x26F\x287\x5\xCA\x66"+ + "\x2\x270\x287\x5\xD8m\x2\x271\x287\x5\xDAn\x2\x272\x287\x5\xDCo\x2\x273"+ + "\x287\x5\xDEp\x2\x274\x287\x5\xE0q\x2\x275\x287\x5\xE2r\x2\x276\x287\x5"+ + "\xEAv\x2\x277\x287\x5\xF0y\x2\x278\x287\x5\xFA~\x2\x279\x287\x5\xFC\x7F"+ + "\x2\x27A\x287\x5\xFE\x80\x2\x27B\x287\x5\x104\x83\x2\x27C\x287\x5\x112"+ + "\x8A\x2\x27D\x287\x5\x100\x81\x2\x27E\x287\x5\x134\x9B\x2\x27F\x287\x5"+ + "\x13A\x9E\x2\x280\x287\x5\x13C\x9F\x2\x281\x287\x5\x13E\xA0\x2\x282\x287"+ + "\x5\x140\xA1\x2\x283\x287\x5\x142\xA2\x2\x284\x287\x5\xF8}\x2\x285\x287"+ + "\x5\x102\x82\x2\x286\x261\x3\x2\x2\x2\x286\x262\x3\x2\x2\x2\x286\x263"+ + "\x3\x2\x2\x2\x286\x264\x3\x2\x2\x2\x286\x265\x3\x2\x2\x2\x286\x266\x3"+ + "\x2\x2\x2\x286\x267\x3\x2\x2\x2\x286\x268\x3\x2\x2\x2\x286\x269\x3\x2"+ + "\x2\x2\x286\x26A\x3\x2\x2\x2\x286\x26B\x3\x2\x2\x2\x286\x26C\x3\x2\x2"+ + "\x2\x286\x26D\x3\x2\x2\x2\x286\x26E\x3\x2\x2\x2\x286\x26F\x3\x2\x2\x2"+ + "\x286\x270\x3\x2\x2\x2\x286\x271\x3\x2\x2\x2\x286\x272\x3\x2\x2\x2\x286"+ + "\x273\x3\x2\x2\x2\x286\x274\x3\x2\x2\x2\x286\x275\x3\x2\x2\x2\x286\x276"+ + "\x3\x2\x2\x2\x286\x277\x3\x2\x2\x2\x286\x278\x3\x2\x2\x2\x286\x279\x3"+ + "\x2\x2\x2\x286\x27A\x3\x2\x2\x2\x286\x27B\x3\x2\x2\x2\x286\x27C\x3\x2"+ + "\x2\x2\x286\x27D\x3\x2\x2\x2\x286\x27E\x3\x2\x2\x2\x286\x27F\x3\x2\x2"+ + "\x2\x286\x280\x3\x2\x2\x2\x286\x281\x3\x2\x2\x2\x286\x282\x3\x2\x2\x2"+ + "\x286\x283\x3\x2\x2\x2\x286\x284\x3\x2\x2\x2\x286\x285\x3\x2\x2\x2\x287"+ + "!\x3\x2\x2\x2\x288\x297\x5$\x13\x2\x289\x297\x5> \x2\x28A\x297\x5<\x1F"+ + "\x2\x28B\x297\x5\x42\"\x2\x28C\x297\x5\x46$\x2\x28D\x297\x5N(\x2\x28E"+ + "\x297\x5P)\x2\x28F\x297\x5T+\x2\x290\x297\x5X-\x2\x291\x297\x5`\x31\x2"+ + "\x292\x297\x5v<\x2\x293\x297\x5x=\x2\x294\x297\x5~@\x2\x295\x297\x5\x84"+ + "\x43\x2\x296\x288\x3\x2\x2\x2\x296\x289\x3\x2\x2\x2\x296\x28A\x3\x2\x2"+ + "\x2\x296\x28B\x3\x2\x2\x2\x296\x28C\x3\x2\x2\x2\x296\x28D\x3\x2\x2\x2"+ + "\x296\x28E\x3\x2\x2\x2\x296\x28F\x3\x2\x2\x2\x296\x290\x3\x2\x2\x2\x296"+ + "\x291\x3\x2\x2\x2\x296\x292\x3\x2\x2\x2\x296\x293\x3\x2\x2\x2\x296\x294"+ + "\x3\x2\x2\x2\x296\x295\x3\x2\x2\x2\x297#\x3\x2\x2\x2\x298\x299\a\x98\x2"+ + "\x2\x299\x29A\x5\x1B6\xDC\x2\x29A\x29E\x5&\x14\x2\x29B\x29C\x5\x1B6\xDC"+ + "\x2\x29C\x29D\x5(\x15\x2\x29D\x29F\x3\x2\x2\x2\x29E\x29B\x3\x2\x2\x2\x29E"+ + "\x29F\x3\x2\x2\x2\x29F\x2A3\x3\x2\x2\x2\x2A0\x2A1\x5\x1B6\xDC\x2\x2A1"+ + "\x2A2\x5,\x17\x2\x2A2\x2A4\x3\x2\x2\x2\x2A3\x2A0\x3\x2\x2\x2\x2A3\x2A4"+ + "\x3\x2\x2\x2\x2A4\x2A8\x3\x2\x2\x2\x2A5\x2A6\x5\x1B6\xDC\x2\x2A6\x2A7"+ + "\x5\x30\x19\x2\x2A7\x2A9\x3\x2\x2\x2\x2A8\x2A5\x3\x2\x2\x2\x2A8\x2A9\x3"+ + "\x2\x2\x2\x2A9\x2AA\x3\x2\x2\x2\x2AA\x2AB\x5\x1B6\xDC\x2\x2AB\x2AC\a;"+ + "\x2\x2\x2AC\x2AD\x5\x1B6\xDC\x2\x2AD\x2B1\x5\x36\x1C\x2\x2AE\x2AF\x5\x1B6"+ + "\xDC\x2\x2AF\x2B0\x5\x32\x1A\x2\x2B0\x2B2\x3\x2\x2\x2\x2B1\x2AE\x3\x2"+ + "\x2\x2\x2B1\x2B2\x3\x2\x2\x2\x2B2%\x3\x2\x2\x2\x2B3\x2B4\x5\x172\xBA\x2"+ + "\x2B4\'\x3\x2\x2\x2\x2B5\x2B6\as\x2\x2\x2B6\x2B7\x5\x1B6\xDC\x2\x2B7\x2B8"+ + "\x5*\x16\x2\x2B8)\x3\x2\x2\x2\x2B9\x2BA\t\x3\x2\x2\x2BA+\x3\x2\x2\x2\x2BB"+ + "\x2BC\a\x35\x2\x2\x2BC\x2BD\x5\x1B6\xDC\x2\x2BD\x2BE\x5.\x18\x2\x2BE-"+ + "\x3\x2\x2\x2\x2BF\x2C0\t\x4\x2\x2\x2C0/\x3\x2\x2\x2\x2C1\x2C2\t\x5\x2"+ + "\x2\x2C2\x31\x3\x2\x2\x2\x2C3\x2C5\a\x1F\x2\x2\x2C4\x2C6\x5\x1B6\xDC\x2"+ + "\x2C5\x2C4\x3\x2\x2\x2\x2C5\x2C6\x3\x2\x2\x2\x2C6\x2C7\x3\x2\x2\x2\x2C7"+ + "\x2C9\a\xD4\x2\x2\x2C8\x2CA\x5\x1B6\xDC\x2\x2C9\x2C8\x3\x2\x2\x2\x2C9"+ + "\x2CA\x3\x2\x2\x2\x2CA\x2CB\x3\x2\x2\x2\x2CB\x2CC\x5\x34\x1B\x2\x2CC\x33"+ + "\x3\x2\x2\x2\x2CD\x2CE\x5\x172\xBA\x2\x2CE\x35\x3\x2\x2\x2\x2CF\x2D2\x5"+ + "\x38\x1D\x2\x2D0\x2D2\x5:\x1E\x2\x2D1\x2CF\x3\x2\x2\x2\x2D1\x2D0\x3\x2"+ + "\x2\x2\x2D2\x37\x3\x2\x2\x2\x2D3\x2D4\a\x30\x2\x2\x2D4\x2D5\x5\x172\xBA"+ + "\x2\x2D5\x39\x3\x2\x2\x2\x2D6\x2D7\x5\x172\xBA\x2\x2D7;\x3\x2\x2\x2\x2D8"+ + "\x2DC\a\x45\x2\x2\x2D9\x2DA\x5\x1B6\xDC\x2\x2DA\x2DB\x5@!\x2\x2DB\x2DD"+ + "\x3\x2\x2\x2\x2DC\x2D9\x3\x2\x2\x2\x2DC\x2DD\x3\x2\x2\x2\x2DD=\x3\x2\x2"+ + "\x2\x2DE\x2DF\a\xB0\x2\x2\x2DF?\x3\x2\x2\x2\x2E0\x2EB\x5\x36\x1C\x2\x2E1"+ + "\x2E3\x5\x1B6\xDC\x2\x2E2\x2E1\x3\x2\x2\x2\x2E2\x2E3\x3\x2\x2\x2\x2E3"+ + "\x2E4\x3\x2\x2\x2\x2E4\x2E6\a+\x2\x2\x2E5\x2E7\x5\x1B6\xDC\x2\x2E6\x2E5"+ + "\x3\x2\x2\x2\x2E6\x2E7\x3\x2\x2\x2\x2E7\x2E8\x3\x2\x2\x2\x2E8\x2EA\x5"+ + "\x36\x1C\x2\x2E9\x2E2\x3\x2\x2\x2\x2EA\x2ED\x3\x2\x2\x2\x2EB\x2E9\x3\x2"+ + "\x2\x2\x2EB\x2EC\x3\x2\x2\x2\x2EC\x41\x3\x2\x2\x2\x2ED\x2EB\x3\x2\x2\x2"+ + "\x2EE\x2EF\a\xB4\x2\x2\x2EF\x2F0\x5\x1B6\xDC\x2\x2F0\x2F2\x5\x36\x1C\x2"+ + "\x2F1\x2F3\x5\x1B6\xDC\x2\x2F2\x2F1\x3\x2\x2\x2\x2F2\x2F3\x3\x2\x2\x2"+ + "\x2F3\x2F4\x3\x2\x2\x2\x2F4\x2F6\a+\x2\x2\x2F5\x2F7\x5\x1B6\xDC\x2\x2F6"+ + "\x2F5\x3\x2\x2\x2\x2F6\x2F7\x3\x2\x2\x2\x2F7\x2F8\x3\x2\x2\x2\x2F8\x2F9"+ + "\x5\x44#\x2\x2F9\x43\x3\x2\x2\x2\x2FA\x2FB\x5\x172\xBA\x2\x2FB\x45\x3"+ + "\x2\x2\x2\x2FC\x2FD\a\x80\x2\x2\x2FD\x2FE\x5\x1B6\xDC\x2\x2FE\x307\x5"+ + "\x36\x1C\x2\x2FF\x301\x5\x1B6\xDC\x2\x300\x2FF\x3\x2\x2\x2\x300\x301\x3"+ + "\x2\x2\x2\x301\x302\x3\x2\x2\x2\x302\x304\a+\x2\x2\x303\x305\x5\x1B6\xDC"+ + "\x2\x304\x303\x3\x2\x2\x2\x304\x305\x3\x2\x2\x2\x305\x306\x3\x2\x2\x2"+ + "\x306\x308\x5H%\x2\x307\x300\x3\x2\x2\x2\x307\x308\x3\x2\x2\x2\x308G\x3"+ + "\x2\x2\x2\x309\x314\x5J&\x2\x30A\x30B\x5J&\x2\x30B\x30C\x5\x1B6\xDC\x2"+ + "\x30C\x30E\x3\x2\x2\x2\x30D\x30A\x3\x2\x2\x2\x30D\x30E\x3\x2\x2\x2\x30E"+ + "\x30F\x3\x2\x2\x2\x30F\x310\a\xC2\x2\x2\x310\x311\x5\x1B6\xDC\x2\x311"+ + "\x312\x5L\'\x2\x312\x314\x3\x2\x2\x2\x313\x309\x3\x2\x2\x2\x313\x30D\x3"+ + "\x2\x2\x2\x314I\x3\x2\x2\x2\x315\x316\x5\x172\xBA\x2\x316K\x3\x2\x2\x2"+ + "\x317\x318\x5\x172\xBA\x2\x318M\x3\x2\x2\x2\x319\x31A\a\xC6\x2\x2\x31A"+ + "\x31B\x5\x1B6\xDC\x2\x31B\x324\x5\x36\x1C\x2\x31C\x31E\x5\x1B6\xDC\x2"+ + "\x31D\x31C\x3\x2\x2\x2\x31D\x31E\x3\x2\x2\x2\x31E\x31F\x3\x2\x2\x2\x31F"+ + "\x321\a+\x2\x2\x320\x322\x5\x1B6\xDC\x2\x321\x320\x3\x2\x2\x2\x321\x322"+ + "\x3\x2\x2\x2\x322\x323\x3\x2\x2\x2\x323\x325\x5H%\x2\x324\x31D\x3\x2\x2"+ + "\x2\x324\x325\x3\x2\x2\x2\x325O\x3\x2\x2\x2\x326\x327\a\x86\x2\x2\x327"+ + "\x328\x5\x1B6\xDC\x2\x328\x32A\x5\x38\x1D\x2\x329\x32B\x5\x1B6\xDC\x2"+ + "\x32A\x329\x3\x2\x2\x2\x32A\x32B\x3\x2\x2\x2\x32B\x32C\x3\x2\x2\x2\x32C"+ + "\x32E\a+\x2\x2\x32D\x32F\x5\x1B6\xDC\x2\x32E\x32D\x3\x2\x2\x2\x32E\x32F"+ + "\x3\x2\x2\x2\x32F\x330\x3\x2\x2\x2\x330\x331\x5R*\x2\x331Q\x3\x2\x2\x2"+ + "\x332\x333\x5\x172\xBA\x2\x333S\x3\x2\x2\x2\x334\x335\a\xCC\x2\x2\x335"+ + "\x336\x5\x1B6\xDC\x2\x336\x338\x5\x38\x1D\x2\x337\x339\x5\x1B6\xDC\x2"+ + "\x338\x337\x3\x2\x2\x2\x338\x339\x3\x2\x2\x2\x339\x33A\x3\x2\x2\x2\x33A"+ + "\x33C\a+\x2\x2\x33B\x33D\x5\x1B6\xDC\x2\x33C\x33B\x3\x2\x2\x2\x33C\x33D"+ + "\x3\x2\x2\x2\x33D\x33E\x3\x2\x2\x2\x33E\x33F\x5V,\x2\x33FU\x3\x2\x2\x2"+ + "\x340\x341\x5\x172\xBA\x2\x341W\x3\x2\x2\x2\x342\x346\x5Z.\x2\x343\x344"+ + "\x5\x1B6\xDC\x2\x344\x345\x5\x62\x32\x2\x345\x347\x3\x2\x2\x2\x346\x343"+ + "\x3\x2\x2\x2\x346\x347\x3\x2\x2\x2\x347Y\x3\x2\x2\x2\x348\x34A\x5\\/\x2"+ + "\x349\x34B\x5\x1B6\xDC\x2\x34A\x349\x3\x2\x2\x2\x34A\x34B\x3\x2\x2\x2"+ + "\x34B\x34C\x3\x2\x2\x2\x34C\x34E\a/\x2\x2\x34D\x34F\x5\x1B6\xDC\x2\x34E"+ + "\x34D\x3\x2\x2\x2\x34E\x34F\x3\x2\x2\x2\x34F\x350\x3\x2\x2\x2\x350\x351"+ + "\x5^\x30\x2\x351[\x3\x2\x2\x2\x352\x353\a\x18\x2\x2\x353]\x3\x2\x2\x2"+ + "\x354\x355\a\xA2\x2\x2\x355_\x3\x2\x2\x2\x356\x357\a\xA2\x2\x2\x357\x358"+ + "\x5\x1B6\xDC\x2\x358\x35A\x5\x38\x1D\x2\x359\x35B\x5\x1B6\xDC\x2\x35A"+ + "\x359\x3\x2\x2\x2\x35A\x35B\x3\x2\x2\x2\x35B\x35C\x3\x2\x2\x2\x35C\x361"+ + "\a+\x2\x2\x35D\x35F\x5\x1B6\xDC\x2\x35E\x35D\x3\x2\x2\x2\x35E\x35F\x3"+ + "\x2\x2\x2\x35F\x360\x3\x2\x2\x2\x360\x362\x5\x62\x32\x2\x361\x35E\x3\x2"+ + "\x2\x2\x361\x362\x3\x2\x2\x2\x362\x61\x3\x2\x2\x2\x363\x36A\x5\x64\x33"+ + "\x2\x364\x366\x5\x1B6\xDC\x2\x365\x364\x3\x2\x2\x2\x365\x366\x3\x2\x2"+ + "\x2\x366\x367\x3\x2\x2\x2\x367\x369\x5\x64\x33\x2\x368\x365\x3\x2\x2\x2"+ + "\x369\x36C\x3\x2\x2\x2\x36A\x368\x3\x2\x2\x2\x36A\x36B\x3\x2\x2\x2\x36B"+ + "\x63\x3\x2\x2\x2\x36C\x36A\x3\x2\x2\x2\x36D\x376\x5\x66\x34\x2\x36E\x376"+ + "\x5h\x35\x2\x36F\x371\x5\x66\x34\x2\x370\x372\x5\x1B6\xDC\x2\x371\x370"+ + "\x3\x2\x2\x2\x371\x372\x3\x2\x2\x2\x372\x373\x3\x2\x2\x2\x373\x374\x5"+ + "h\x35\x2\x374\x376\x3\x2\x2\x2\x375\x36D\x3\x2\x2\x2\x375\x36E\x3\x2\x2"+ + "\x2\x375\x36F\x3\x2\x2\x2\x376\x65\x3\x2\x2\x2\x377\x37B\x5l\x37\x2\x378"+ + "\x37B\x5p\x39\x2\x379\x37B\x5j\x36\x2\x37A\x377\x3\x2\x2\x2\x37A\x378"+ + "\x3\x2\x2\x2\x37A\x379\x3\x2\x2\x2\x37Bg\x3\x2\x2\x2\x37C\x37D\t\x6\x2"+ + "\x2\x37Di\x3\x2\x2\x2\x37E\x37F\x5\x172\xBA\x2\x37Fk\x3\x2\x2\x2\x380"+ + "\x382\a\xB9\x2\x2\x381\x383\x5\x1B6\xDC\x2\x382\x381\x3\x2\x2\x2\x382"+ + "\x383\x3\x2\x2\x2\x383\x384\x3\x2\x2\x2\x384\x386\a\xD8\x2\x2\x385\x387"+ + "\x5\x1B6\xDC\x2\x386\x385\x3\x2\x2\x2\x386\x387\x3\x2\x2\x2\x387\x388"+ + "\x3\x2\x2\x2\x388\x38A\x5n\x38\x2\x389\x38B\x5\x1B6\xDC\x2\x38A\x389\x3"+ + "\x2\x2\x2\x38A\x38B\x3\x2\x2\x2\x38B\x38C\x3\x2\x2\x2\x38C\x38D\a\xDF"+ + "\x2\x2\x38Dm\x3\x2\x2\x2\x38E\x38F\x5\x172\xBA\x2\x38Fo\x3\x2\x2\x2\x390"+ + "\x395\a\xBF\x2\x2\x391\x393\x5\x1B6\xDC\x2\x392\x391\x3\x2\x2\x2\x392"+ + "\x393\x3\x2\x2\x2\x393\x394\x3\x2\x2\x2\x394\x396\x5r:\x2\x395\x392\x3"+ + "\x2\x2\x2\x395\x396\x3\x2\x2\x2\x396q\x3\x2\x2\x2\x397\x399\a\xD8\x2\x2"+ + "\x398\x39A\x5\x1B6\xDC\x2\x399\x398\x3\x2\x2\x2\x399\x39A\x3\x2\x2\x2"+ + "\x39A\x39B\x3\x2\x2\x2\x39B\x39D\x5t;\x2\x39C\x39E\x5\x1B6\xDC\x2\x39D"+ + "\x39C\x3\x2\x2\x2\x39D\x39E\x3\x2\x2\x2\x39E\x39F\x3\x2\x2\x2\x39F\x3A0"+ + "\a\xDF\x2\x2\x3A0s\x3\x2\x2\x2\x3A1\x3A2\x5\x172\xBA\x2\x3A2u\x3\x2\x2"+ + "\x2\x3A3\x3A4\a\xCF\x2\x2\x3A4\x3A5\x5\x1B6\xDC\x2\x3A5\x3A7\x5\x38\x1D"+ + "\x2\x3A6\x3A8\x5\x1B6\xDC\x2\x3A7\x3A6\x3\x2\x2\x2\x3A7\x3A8\x3\x2\x2"+ + "\x2\x3A8\x3A9\x3\x2\x2\x2\x3A9\x3AE\a+\x2\x2\x3AA\x3AC\x5\x1B6\xDC\x2"+ + "\x3AB\x3AA\x3\x2\x2\x2\x3AB\x3AC\x3\x2\x2\x2\x3AC\x3AD\x3\x2\x2\x2\x3AD"+ + "\x3AF\x5\x62\x32\x2\x3AE\x3AB\x3\x2\x2\x2\x3AE\x3AF\x3\x2\x2\x2\x3AFw"+ + "\x3\x2\x2\x2\x3B0\x3B1\a}\x2\x2\x3B1\x3B2\x5\x1B6\xDC\x2\x3B2\x3B4\x5"+ + "\x38\x1D\x2\x3B3\x3B5\x5\x1B6\xDC\x2\x3B4\x3B3\x3\x2\x2\x2\x3B4\x3B5\x3"+ + "\x2\x2\x2\x3B5\x3B6\x3\x2\x2\x2\x3B6\x3B8\a+\x2\x2\x3B7\x3B9\x5\x1B6\xDC"+ + "\x2\x3B8\x3B7\x3\x2\x2\x2\x3B8\x3B9\x3\x2\x2\x2\x3B9\x3BA\x3\x2\x2\x2"+ + "\x3BA\x3BB\x5z>\x2\x3BBy\x3\x2\x2\x2\x3BC\x3C7\x5|?\x2\x3BD\x3BF\x5\x1B6"+ + "\xDC\x2\x3BE\x3BD\x3\x2\x2\x2\x3BE\x3BF\x3\x2\x2\x2\x3BF\x3C0\x3\x2\x2"+ + "\x2\x3C0\x3C2\a+\x2\x2\x3C1\x3C3\x5\x1B6\xDC\x2\x3C2\x3C1\x3\x2\x2\x2"+ + "\x3C2\x3C3\x3\x2\x2\x2\x3C3\x3C4\x3\x2\x2\x2\x3C4\x3C6\x5|?\x2\x3C5\x3BE"+ + "\x3\x2\x2\x2\x3C6\x3C9\x3\x2\x2\x2\x3C7\x3C5\x3\x2\x2\x2\x3C7\x3C8\x3"+ + "\x2\x2\x2\x3C8{\x3\x2\x2\x2\x3C9\x3C7\x3\x2\x2\x2\x3CA\x3CB\x5\x172\xBA"+ + "\x2\x3CB}\x3\x2\x2\x2\x3CC\x3CD\a\xA9\x2\x2\x3CD\x3CE\x5\x1B6\xDC\x2\x3CE"+ + "\x3D0\x5\x36\x1C\x2\x3CF\x3D1\x5\x1B6\xDC\x2\x3D0\x3CF\x3\x2\x2\x2\x3D0"+ + "\x3D1\x3\x2\x2\x2\x3D1\x3D2\x3\x2\x2\x2\x3D2\x3D4\a+\x2\x2\x3D3\x3D5\x5"+ + "\x1B6\xDC\x2\x3D4\x3D3\x3\x2\x2\x2\x3D4\x3D5\x3\x2\x2\x2\x3D5\x3D7\x3"+ + "\x2\x2\x2\x3D6\x3D8\x5\x80\x41\x2\x3D7\x3D6\x3\x2\x2\x2\x3D7\x3D8\x3\x2"+ + "\x2\x2\x3D8\x3DA\x3\x2\x2\x2\x3D9\x3DB\x5\x1B6\xDC\x2\x3DA\x3D9\x3\x2"+ + "\x2\x2\x3DA\x3DB\x3\x2\x2\x2\x3DB\x3DC\x3\x2\x2\x2\x3DC\x3DE\a+\x2\x2"+ + "\x3DD\x3DF\x5\x1B6\xDC\x2\x3DE\x3DD\x3\x2\x2\x2\x3DE\x3DF\x3\x2\x2\x2"+ + "\x3DF\x3E0\x3\x2\x2\x2\x3E0\x3E1\x5\x82\x42\x2\x3E1\x7F\x3\x2\x2\x2\x3E2"+ + "\x3E3\x5\x172\xBA\x2\x3E3\x81\x3\x2\x2\x2\x3E4\x3E5\x5\x172\xBA\x2\x3E5"+ + "\x83\x3\x2\x2\x2\x3E6\x3E7\au\x2\x2\x3E7\x3E8\x5\x1B6\xDC\x2\x3E8\x3EA"+ + "\x5\x36\x1C\x2\x3E9\x3EB\x5\x1B6\xDC\x2\x3EA\x3E9\x3\x2\x2\x2\x3EA\x3EB"+ + "\x3\x2\x2\x2\x3EB\x3EC\x3\x2\x2\x2\x3EC\x3EE\a+\x2\x2\x3ED\x3EF\x5\x1B6"+ + "\xDC\x2\x3EE\x3ED\x3\x2\x2\x2\x3EE\x3EF\x3\x2\x2\x2\x3EF\x3F1\x3\x2\x2"+ + "\x2\x3F0\x3F2\x5\x80\x41\x2\x3F1\x3F0\x3\x2\x2\x2\x3F1\x3F2\x3\x2\x2\x2"+ + "\x3F2\x3F4\x3\x2\x2\x2\x3F3\x3F5\x5\x1B6\xDC\x2\x3F4\x3F3\x3\x2\x2\x2"+ + "\x3F4\x3F5\x3\x2\x2\x2\x3F5\x3F6\x3\x2\x2\x2\x3F6\x3F8\a+\x2\x2\x3F7\x3F9"+ + "\x5\x1B6\xDC\x2\x3F8\x3F7\x3\x2\x2\x2\x3F8\x3F9\x3\x2\x2\x2\x3F9\x3FA"+ + "\x3\x2\x2\x2\x3FA\x3FB\x5\x86\x44\x2\x3FB\x85\x3\x2\x2\x2\x3FC\x3FD\x5"+ + "\x172\xBA\x2\x3FD\x87\x3\x2\x2\x2\x3FE\x3FF\x5\x170\xB9\x2\x3FF\x400\x5"+ + "\x1B6\xDC\x2\x400\x402\x3\x2\x2\x2\x401\x3FE\x3\x2\x2\x2\x401\x402\x3"+ + "\x2\x2\x2\x402\x403\x3\x2\x2\x2\x403\x404\a\x46\x2\x2\x404\x405\x5\x1B6"+ + "\xDC\x2\x405\x410\x5\x8A\x46\x2\x406\x408\x5\x1B6\xDC\x2\x407\x406\x3"+ + "\x2\x2\x2\x407\x408\x3\x2\x2\x2\x408\x409\x3\x2\x2\x2\x409\x40B\a+\x2"+ + "\x2\x40A\x40C\x5\x1B6\xDC\x2\x40B\x40A\x3\x2\x2\x2\x40B\x40C\x3\x2\x2"+ + "\x2\x40C\x40D\x3\x2\x2\x2\x40D\x40F\x5\x8A\x46\x2\x40E\x407\x3\x2\x2\x2"+ + "\x40F\x412\x3\x2\x2\x2\x410\x40E\x3\x2\x2\x2\x410\x411\x3\x2\x2\x2\x411"+ + "\x89\x3\x2\x2\x2\x412\x410\x3\x2\x2\x2\x413\x417\x5\x14E\xA8\x2\x414\x415"+ + "\x5\x1B6\xDC\x2\x415\x416\x5\x15A\xAE\x2\x416\x418\x3\x2\x2\x2\x417\x414"+ + "\x3\x2\x2\x2\x417\x418\x3\x2\x2\x2\x418\x41A\x3\x2\x2\x2\x419\x41B\x5"+ + "\x1B6\xDC\x2\x41A\x419\x3\x2\x2\x2\x41A\x41B\x3\x2\x2\x2\x41B\x41C\x3"+ + "\x2\x2\x2\x41C\x41E\a\xD4\x2\x2\x41D\x41F\x5\x1B6\xDC\x2\x41E\x41D\x3"+ + "\x2\x2\x2\x41E\x41F\x3\x2\x2\x2\x41F\x420\x3\x2\x2\x2\x420\x421\x5\x172"+ + "\xBA\x2\x421\x8B\x3\x2\x2\x2\x422\x423\x5\x170\xB9\x2\x423\x424\x5\x1B6"+ + "\xDC\x2\x424\x426\x3\x2\x2\x2\x425\x422\x3\x2\x2\x2\x425\x426\x3\x2\x2"+ + "\x2\x426\x427\x3\x2\x2\x2\x427\x428\aI\x2\x2\x428\x42B\x5\x1B6\xDC\x2"+ + "\x429\x42A\a\xA7\x2\x2\x42A\x42C\x5\x1B6\xDC\x2\x42B\x429\x3\x2\x2\x2"+ + "\x42B\x42C\x3\x2\x2\x2\x42C\x42D\x3\x2\x2\x2\x42D\x42E\t\a\x2\x2\x42E"+ + "\x42F\x5\x1B6\xDC\x2\x42F\x430\x5\x14E\xA8\x2\x430\x431\x5\x1B6\xDC\x2"+ + "\x431\x432\a\x84\x2\x2\x432\x433\x5\x1B6\xDC\x2\x433\x439\a\xE2\x2\x2"+ + "\x434\x435\x5\x1B6\xDC\x2\x435\x436\a\x37\x2\x2\x436\x437\x5\x1B6\xDC"+ + "\x2\x437\x438\a\xE2\x2\x2\x438\x43A\x3\x2\x2\x2\x439\x434\x3\x2\x2\x2"+ + "\x439\x43A\x3\x2\x2\x2\x43A\x43F\x3\x2\x2\x2\x43B\x43D\x5\x1B6\xDC\x2"+ + "\x43C\x43B\x3\x2\x2\x2\x43C\x43D\x3\x2\x2\x2\x43D\x43E\x3\x2\x2\x2\x43E"+ + "\x440\x5\x8EH\x2\x43F\x43C\x3\x2\x2\x2\x43F\x440\x3\x2\x2\x2\x440\x444"+ + "\x3\x2\x2\x2\x441\x442\x5\x1B6\xDC\x2\x442\x443\x5\x15A\xAE\x2\x443\x445"+ + "\x3\x2\x2\x2\x444\x441\x3\x2\x2\x2\x444\x445\x3\x2\x2\x2\x445\x8D\x3\x2"+ + "\x2\x2\x446\x458\a\xD8\x2\x2\x447\x449\x5\x1B6\xDC\x2\x448\x447\x3\x2"+ + "\x2\x2\x448\x449\x3\x2\x2\x2\x449\x44A\x3\x2\x2\x2\x44A\x455\x5\x90I\x2"+ + "\x44B\x44D\x5\x1B6\xDC\x2\x44C\x44B\x3\x2\x2\x2\x44C\x44D\x3\x2\x2\x2"+ + "\x44D\x44E\x3\x2\x2\x2\x44E\x450\a+\x2\x2\x44F\x451\x5\x1B6\xDC\x2\x450"+ + "\x44F\x3\x2\x2\x2\x450\x451\x3\x2\x2\x2\x451\x452\x3\x2\x2\x2\x452\x454"+ + "\x5\x90I\x2\x453\x44C\x3\x2\x2\x2\x454\x457\x3\x2\x2\x2\x455\x453\x3\x2"+ + "\x2\x2\x455\x456\x3\x2\x2\x2\x456\x459\x3\x2\x2\x2\x457\x455\x3\x2\x2"+ + "\x2\x458\x448\x3\x2\x2\x2\x458\x459\x3\x2\x2\x2\x459\x45B\x3\x2\x2\x2"+ + "\x45A\x45C\x5\x1B6\xDC\x2\x45B\x45A\x3\x2\x2\x2\x45B\x45C\x3\x2\x2\x2"+ + "\x45C\x45D\x3\x2\x2\x2\x45D\x45E\a\xDF\x2\x2\x45E\x8F\x3\x2\x2\x2\x45F"+ + "\x460\a\x99\x2\x2\x460\x462\x5\x1B6\xDC\x2\x461\x45F\x3\x2\x2\x2\x461"+ + "\x462\x3\x2\x2\x2\x462\x465\x3\x2\x2\x2\x463\x464\t\b\x2\x2\x464\x466"+ + "\x5\x1B6\xDC\x2\x465\x463\x3\x2\x2\x2\x465\x466\x3\x2\x2\x2\x466\x469"+ + "\x3\x2\x2\x2\x467\x468\a\xA0\x2\x2\x468\x46A\x5\x1B6\xDC\x2\x469\x467"+ + "\x3\x2\x2\x2\x469\x46A\x3\x2\x2\x2\x46A\x46B\x3\x2\x2\x2\x46B\x474\x5"+ + "\x14C\xA7\x2\x46C\x46E\x5\x1B6\xDC\x2\x46D\x46C\x3\x2\x2\x2\x46D\x46E"+ + "\x3\x2\x2\x2\x46E\x46F\x3\x2\x2\x2\x46F\x471\a\xD8\x2\x2\x470\x472\x5"+ + "\x1B6\xDC\x2\x471\x470\x3\x2\x2\x2\x471\x472\x3\x2\x2\x2\x472\x473\x3"+ + "\x2\x2\x2\x473\x475\a\xDF\x2\x2\x474\x46D\x3\x2\x2\x2\x474\x475\x3\x2"+ + "\x2\x2\x475\x47A\x3\x2\x2\x2\x476\x478\x5\x1B6\xDC\x2\x477\x476\x3\x2"+ + "\x2\x2\x477\x478\x3\x2\x2\x2\x478\x479\x3\x2\x2\x2\x479\x47B\x5\x15A\xAE"+ + "\x2\x47A\x477\x3\x2\x2\x2\x47A\x47B\x3\x2\x2\x2\x47B\x480\x3\x2\x2\x2"+ + "\x47C\x47E\x5\x1B6\xDC\x2\x47D\x47C\x3\x2\x2\x2\x47D\x47E\x3\x2\x2\x2"+ + "\x47E\x47F\x3\x2\x2\x2\x47F\x481\x5\x92J\x2\x480\x47D\x3\x2\x2\x2\x480"+ + "\x481\x3\x2\x2\x2\x481\x91\x3\x2\x2\x2\x482\x484\a\xD4\x2\x2\x483\x485"+ + "\x5\x1B6\xDC\x2\x484\x483\x3\x2\x2\x2\x484\x485\x3\x2\x2\x2\x485\x486"+ + "\x3\x2\x2\x2\x486\x487\x5\x172\xBA\x2\x487\x93\x3\x2\x2\x2\x488\x489\x5"+ + "\x96L\x2\x489\x48A\x5\x1B6\xDC\x2\x48A\x495\x5\x98M\x2\x48B\x48D\x5\x1B6"+ + "\xDC\x2\x48C\x48B\x3\x2\x2\x2\x48C\x48D\x3\x2\x2\x2\x48D\x48E\x3\x2\x2"+ + "\x2\x48E\x490\a+\x2\x2\x48F\x491\x5\x1B6\xDC\x2\x490\x48F\x3\x2\x2\x2"+ + "\x490\x491\x3\x2\x2\x2\x491\x492\x3\x2\x2\x2\x492\x494\x5\x98M\x2\x493"+ + "\x48C\x3\x2\x2\x2\x494\x497\x3\x2\x2\x2\x495\x493\x3\x2\x2\x2\x495\x496"+ + "\x3\x2\x2\x2\x496\x95\x3\x2\x2\x2\x497\x495\x3\x2\x2\x2\x498\x499\t\t"+ + "\x2\x2\x499\x97\x3\x2\x2\x2\x49A\x49E\x5\x9AN\x2\x49B\x49E\x5\x9CO\x2"+ + "\x49C\x49E\x5\xA2R\x2\x49D\x49A\x3\x2\x2\x2\x49D\x49B\x3\x2\x2\x2\x49D"+ + "\x49C\x3\x2\x2\x2\x49E\x99\x3\x2\x2\x2\x49F\x4A0\x5\x14C\xA7\x2\x4A0\x9B"+ + "\x3\x2\x2\x2\x4A1\x4A3\x5\x9EP\x2\x4A2\x4A4\x5\x1B6\xDC\x2\x4A3\x4A2\x3"+ + "\x2\x2\x2\x4A3\x4A4\x3\x2\x2\x2\x4A4\x4A5\x3\x2\x2\x2\x4A5\x4A7\a\xDA"+ + "\x2\x2\x4A6\x4A8\x5\x1B6\xDC\x2\x4A7\x4A6\x3\x2\x2\x2\x4A7\x4A8\x3\x2"+ + "\x2\x2\x4A8\x4A9\x3\x2\x2\x2\x4A9\x4AA\x5\xA0Q\x2\x4AA\x9D\x3\x2\x2\x2"+ + "\x4AB\x4AC\x6P\x2\x2\x4AC\x4AD\x5\x14C\xA7\x2\x4AD\x9F\x3\x2\x2\x2\x4AE"+ + "\x4AF\x6Q\x3\x2\x4AF\x4B0\x5\x14C\xA7\x2\x4B0\xA1\x3\x2\x2\x2\x4B1\x4B3"+ + "\x5\xA4S\x2\x4B2\x4B4\x5\x1B6\xDC\x2\x4B3\x4B2\x3\x2\x2\x2\x4B3\x4B4\x3"+ + "\x2\x2\x2\x4B4\x4B5\x3\x2\x2\x2\x4B5\x4B7\a\xDA\x2\x2\x4B6\x4B8\x5\x1B6"+ + "\xDC\x2\x4B7\x4B6\x3\x2\x2\x2\x4B7\x4B8\x3\x2\x2\x2\x4B8\x4B9\x3\x2\x2"+ + "\x2\x4B9\x4BA\x5\xA6T\x2\x4BA\xA3\x3\x2\x2\x2\x4BB\x4BC\x5\x14C\xA7\x2"+ + "\x4BC\xA5\x3\x2\x2\x2\x4BD\x4BE\x5\x14C\xA7\x2\x4BE\xA7\x3\x2\x2\x2\x4BF"+ + "\x4C0\aX\x2\x2\x4C0\x4C1\x5\x1A0\xD1\x2\x4C1\x4C2\x5\x1E\x10\x2\x4C2\x4C3"+ + "\a\x82\x2\x2\x4C3\x4D7\x3\x2\x2\x2\x4C4\x4C5\aX\x2\x2\x4C5\x4C6\x5\x1B6"+ + "\xDC\x2\x4C6\x4C7\t\n\x2\x2\x4C7\x4C8\x5\x1B6\xDC\x2\x4C8\x4C9\x5\x172"+ + "\xBA\x2\x4C9\x4CA\x5\x1A0\xD1\x2\x4CA\x4CB\x5\x1E\x10\x2\x4CB\x4CC\a\x82"+ + "\x2\x2\x4CC\x4D7\x3\x2\x2\x2\x4CD\x4CE\aX\x2\x2\x4CE\x4CF\x5\x1A0\xD1"+ + "\x2\x4CF\x4D0\x5\x1E\x10\x2\x4D0\x4D1\a\x82\x2\x2\x4D1\x4D2\x5\x1B6\xDC"+ + "\x2\x4D2\x4D3\t\n\x2\x2\x4D3\x4D4\x5\x1B6\xDC\x2\x4D4\x4D5\x5\x172\xBA"+ + "\x2\x4D5\x4D7\x3\x2\x2\x2\x4D6\x4BF\x3\x2\x2\x2\x4D6\x4C4\x3\x2\x2\x2"+ + "\x4D6\x4CD\x3\x2\x2\x2\x4D7\xA9\x3\x2\x2\x2\x4D8\x4D9\x5\x170\xB9\x2\x4D9"+ + "\x4DA\x5\x1B6\xDC\x2\x4DA\x4DC\x3\x2\x2\x2\x4DB\x4D8\x3\x2\x2\x2\x4DB"+ + "\x4DC\x3\x2\x2\x2\x4DC\x4DD\x3\x2\x2\x2\x4DD\x4DE\ag\x2\x2\x4DE\x4DF\x5"+ + "\x1B6\xDC\x2\x4DF\x4E0\x5\x14E\xA8\x2\x4E0\x4E4\x5\x1A0\xD1\x2\x4E1\x4E3"+ + "\x5\xACW\x2\x4E2\x4E1\x3\x2\x2\x2\x4E3\x4E6\x3\x2\x2\x2\x4E4\x4E2\x3\x2"+ + "\x2\x2\x4E4\x4E5\x3\x2\x2\x2\x4E5\x4E7\x3\x2\x2\x2\x4E6\x4E4\x3\x2\x2"+ + "\x2\x4E7\x4E8\a^\x2\x2\x4E8\xAB\x3\x2\x2\x2\x4E9\x4F2\x5\x14E\xA8\x2\x4EA"+ + "\x4EC\x5\x1B6\xDC\x2\x4EB\x4EA\x3\x2\x2\x2\x4EB\x4EC\x3\x2\x2\x2\x4EC"+ + "\x4ED\x3\x2\x2\x2\x4ED\x4EF\a\xD4\x2\x2\x4EE\x4F0\x5\x1B6\xDC\x2\x4EF"+ + "\x4EE\x3\x2\x2\x2\x4EF\x4F0\x3\x2\x2\x2\x4F0\x4F1\x3\x2\x2\x2\x4F1\x4F3"+ + "\x5\x172\xBA\x2\x4F2\x4EB\x3\x2\x2\x2\x4F2\x4F3\x3\x2\x2\x2\x4F3\x4F4"+ + "\x3\x2\x2\x2\x4F4\x4F5\x5\x1A0\xD1\x2\x4F5\xAD\x3\x2\x2\x2\x4F6\x4F7\a"+ + "\x66\x2\x2\x4F7\xAF\x3\x2\x2\x2\x4F8\x4F9\ai\x2\x2\x4F9\x4FA\x5\x1B6\xDC"+ + "\x2\x4FA\x505\x5\x172\xBA\x2\x4FB\x4FD\x5\x1B6\xDC\x2\x4FC\x4FB\x3\x2"+ + "\x2\x2\x4FC\x4FD\x3\x2\x2\x2\x4FD\x4FE\x3\x2\x2\x2\x4FE\x500\a+\x2\x2"+ + "\x4FF\x501\x5\x1B6\xDC\x2\x500\x4FF\x3\x2\x2\x2\x500\x501\x3\x2\x2\x2"+ + "\x501\x502\x3\x2\x2\x2\x502\x504\x5\x172\xBA\x2\x503\x4FC\x3\x2\x2\x2"+ + "\x504\x507\x3\x2\x2\x2\x505\x503\x3\x2\x2\x2\x505\x506\x3\x2\x2\x2\x506"+ + "\xB1\x3\x2\x2\x2\x507\x505\x3\x2\x2\x2\x508\x509\aj\x2\x2\x509\x50A\x5"+ + "\x1B6\xDC\x2\x50A\x50B\x5\x172\xBA\x2\x50B\xB3\x3\x2\x2\x2\x50C\x50D\x5"+ + "\x170\xB9\x2\x50D\x50E\x5\x1B6\xDC\x2\x50E\x510\x3\x2\x2\x2\x50F\x50C"+ + "\x3\x2\x2\x2\x50F\x510\x3\x2\x2\x2\x510\x511\x3\x2\x2\x2\x511\x512\ak"+ + "\x2\x2\x512\x513\x5\x1B6\xDC\x2\x513\x515\x5\x14E\xA8\x2\x514\x516\x5"+ + "\x1B6\xDC\x2\x515\x514\x3\x2\x2\x2\x515\x516\x3\x2\x2\x2\x516\x517\x3"+ + "\x2\x2\x2\x517\x518\x5\x8EH\x2\x518\xB5\x3\x2\x2\x2\x519\x51A\t\v\x2\x2"+ + "\x51A\xB7\x3\x2\x2\x2\x51B\x51C\as\x2\x2\x51C\x51D\x5\x1B6\xDC\x2\x51D"+ + "\x51E\aZ\x2\x2\x51E\x51F\x5\x1B6\xDC\x2\x51F\x520\x5\x172\xBA\x2\x520"+ + "\x521\x5\x1B6\xDC\x2\x521\x522\a|\x2\x2\x522\x523\x5\x1B6\xDC\x2\x523"+ + "\x524\x5\x172\xBA\x2\x524\x525\x5\x1A0\xD1\x2\x525\x526\x5\x1E\x10\x2"+ + "\x526\x52A\a\x8F\x2\x2\x527\x528\x5\x1B6\xDC\x2\x528\x529\x5\x172\xBA"+ + "\x2\x529\x52B\x3\x2\x2\x2\x52A\x527\x3\x2\x2\x2\x52A\x52B\x3\x2\x2\x2"+ + "\x52B\xB9\x3\x2\x2\x2\x52C\x52D\as\x2\x2\x52D\x52E\x5\x1B6\xDC\x2\x52E"+ + "\x52F\x5\x172\xBA\x2\x52F\x530\x5\x1B6\xDC\x2\x530\x531\a\xC2\x2\x2\x531"+ + "\x532\x5\x1B6\xDC\x2\x532\x538\x5\x172\xBA\x2\x533\x534\x5\x1B6\xDC\x2"+ + "\x534\x535\a\xBB\x2\x2\x535\x536\x5\x1B6\xDC\x2\x536\x537\x5\x172\xBA"+ + "\x2\x537\x539\x3\x2\x2\x2\x538\x533\x3\x2\x2\x2\x538\x539\x3\x2\x2\x2"+ + "\x539\x53A\x3\x2\x2\x2\x53A\x53B\x5\x1A0\xD1\x2\x53B\x53C\x5\x1E\x10\x2"+ + "\x53C\x540\a\x8F\x2\x2\x53D\x53E\x5\x1B6\xDC\x2\x53E\x53F\x5\x172\xBA"+ + "\x2\x53F\x541\x3\x2\x2\x2\x540\x53D\x3\x2\x2\x2\x540\x541\x3\x2\x2\x2"+ + "\x541\xBB\x3\x2\x2\x2\x542\x543\x5\x170\xB9\x2\x543\x544\x5\x1B6\xDC\x2"+ + "\x544\x546\x3\x2\x2\x2\x545\x542\x3\x2\x2\x2\x545\x546\x3\x2\x2\x2\x546"+ + "\x549\x3\x2\x2\x2\x547\x548\a\xBA\x2\x2\x548\x54A\x5\x1B6\xDC\x2\x549"+ + "\x547\x3\x2\x2\x2\x549\x54A\x3\x2\x2\x2\x54A\x54B\x3\x2\x2\x2\x54B\x54D"+ + "\at\x2\x2\x54C\x54E\x5\x1B6\xDC\x2\x54D\x54C\x3\x2\x2\x2\x54D\x54E\x3"+ + "\x2\x2\x2\x54E\x54F\x3\x2\x2\x2\x54F\x554\x5\xBE`\x2\x550\x552\x5\x1B6"+ + "\xDC\x2\x551\x550\x3\x2\x2\x2\x551\x552\x3\x2\x2\x2\x552\x553\x3\x2\x2"+ + "\x2\x553\x555\x5\x8EH\x2\x554\x551\x3\x2\x2\x2\x554\x555\x3\x2\x2\x2\x555"+ + "\x55A\x3\x2\x2\x2\x556\x558\x5\x1B6\xDC\x2\x557\x556\x3\x2\x2\x2\x557"+ + "\x558\x3\x2\x2\x2\x558\x559\x3\x2\x2\x2\x559\x55B\x5\x15A\xAE\x2\x55A"+ + "\x557\x3\x2\x2\x2\x55A\x55B\x3\x2\x2\x2\x55B\x55C\x3\x2\x2\x2\x55C\x55D"+ + "\x5\x1A0\xD1\x2\x55D\x55E\x5\x1E\x10\x2\x55E\x55F\a_\x2\x2\x55F\xBD\x3"+ + "\x2\x2\x2\x560\x561\x5\x14E\xA8\x2\x561\xBF\x3\x2\x2\x2\x562\x563\aw\x2"+ + "\x2\x563\x564\x5\x1B6\xDC\x2\x564\x565\x5\x172\xBA\x2\x565\xC1\x3\x2\x2"+ + "\x2\x566\x567\ax\x2\x2\x567\x568\x5\x1B6\xDC\x2\x568\x569\x5\x172\xBA"+ + "\x2\x569\xC3\x3\x2\x2\x2\x56A\x56B\ay\x2\x2\x56B\x56C\x5\x1B6\xDC\x2\x56C"+ + "\x56D\x5\xD6l\x2\x56D\x56E\x5\x1B6\xDC\x2\x56E\x56F\a\xC1\x2\x2\x56F\x570"+ + "\x5\x1A0\xD1\x2\x570\x574\x5\x1E\x10\x2\x571\x573\x5\xC6\x64\x2\x572\x571"+ + "\x3\x2\x2\x2\x573\x576\x3\x2\x2\x2\x574\x572\x3\x2\x2\x2\x574\x575\x3"+ + "\x2\x2\x2\x575\x578\x3\x2\x2\x2\x576\x574\x3\x2\x2\x2\x577\x579\x5\xC8"+ + "\x65\x2\x578\x577\x3\x2\x2\x2\x578\x579\x3\x2\x2\x2\x579\x57A\x3\x2\x2"+ + "\x2\x57A\x57B\a`\x2\x2\x57B\xC5\x3\x2\x2\x2\x57C\x57D\a\\\x2\x2\x57D\x57E"+ + "\x5\x1B6\xDC\x2\x57E\x57F\x5\xD6l\x2\x57F\x580\x5\x1B6\xDC\x2\x580\x581"+ + "\a\xC1\x2\x2\x581\x582\x5\x1A0\xD1\x2\x582\x583\x5\x1E\x10\x2\x583\x58F"+ + "\x3\x2\x2\x2\x584\x585\a\\\x2\x2\x585\x586\x5\x1B6\xDC\x2\x586\x587\x5"+ + "\xD6l\x2\x587\x588\x5\x1B6\xDC\x2\x588\x58A\a\xC1\x2\x2\x589\x58B\x5\x1B6"+ + "\xDC\x2\x58A\x589\x3\x2\x2\x2\x58A\x58B\x3\x2\x2\x2\x58B\x58C\x3\x2\x2"+ + "\x2\x58C\x58D\x5\x1E\x10\x2\x58D\x58F\x3\x2\x2\x2\x58E\x57C\x3\x2\x2\x2"+ + "\x58E\x584\x3\x2\x2\x2\x58F\xC7\x3\x2\x2\x2\x590\x591\a[\x2\x2\x591\x592"+ + "\x5\x1A0\xD1\x2\x592\x593\x5\x1E\x10\x2\x593\xC9\x3\x2\x2\x2\x594\x597"+ + "\x5\xCCg\x2\x595\x597\x5\xCEh\x2\x596\x594\x3\x2\x2\x2\x596\x595\x3\x2"+ + "\x2\x2\x597\xCB\x3\x2\x2\x2\x598\x59A\ay\x2\x2\x599\x59B\x5\x1B6\xDC\x2"+ + "\x59A\x599\x3\x2\x2\x2\x59A\x59B\x3\x2\x2\x2\x59B\x59C\x3\x2\x2\x2\x59C"+ + "\x59E\x5\xD6l\x2\x59D\x59F\x5\x1B6\xDC\x2\x59E\x59D\x3\x2\x2\x2\x59E\x59F"+ + "\x3\x2\x2\x2\x59F\x5A0\x3\x2\x2\x2\x5A0\x5A2\a\xC1\x2\x2\x5A1\x5A3\x5"+ + "\x1B6\xDC\x2\x5A2\x5A1\x3\x2\x2\x2\x5A2\x5A3\x3\x2\x2\x2\x5A3\x5A4\x3"+ + "\x2\x2\x2\x5A4\x5A8\x5\xD2j\x2\x5A5\x5A6\x5\x1B6\xDC\x2\x5A6\x5A7\x5\xD0"+ + "i\x2\x5A7\x5A9\x3\x2\x2\x2\x5A8\x5A5\x3\x2\x2\x2\x5A8\x5A9\x3\x2\x2\x2"+ + "\x5A9\xCD\x3\x2\x2\x2\x5AA\x5AC\ay\x2\x2\x5AB\x5AD\x5\x1B6\xDC\x2\x5AC"+ + "\x5AB\x3\x2\x2\x2\x5AC\x5AD\x3\x2\x2\x2\x5AD\x5AE\x3\x2\x2\x2\x5AE\x5B0"+ + "\x5\xD6l\x2\x5AF\x5B1\x5\x1B6\xDC\x2\x5B0\x5AF\x3\x2\x2\x2\x5B0\x5B1\x3"+ + "\x2\x2\x2\x5B1\x5B2\x3\x2\x2\x2\x5B2\x5B3\a\xC1\x2\x2\x5B3\x5B5\x5\x1A0"+ + "\xD1\x2\x5B4\x5B6\x5\x1B6\xDC\x2\x5B5\x5B4\x3\x2\x2\x2\x5B5\x5B6\x3\x2"+ + "\x2\x2\x5B6\x5B7\x3\x2\x2\x2\x5B7\x5B8\x5\xD0i\x2\x5B8\xCF\x3\x2\x2\x2"+ + "\x5B9\x5BB\a[\x2\x2\x5BA\x5BC\x5\x1B6\xDC\x2\x5BB\x5BA\x3\x2\x2\x2\x5BB"+ + "\x5BC\x3\x2\x2\x2\x5BC\x5BE\x3\x2\x2\x2\x5BD\x5BF\x5\xD2j\x2\x5BE\x5BD"+ + "\x3\x2\x2\x2\x5BE\x5BF\x3\x2\x2\x2\x5BF\xD1\x3\x2\x2\x2\x5C0\x5CD\x5\x168"+ + "\xB5\x2\x5C1\x5C3\x5\x1B6\xDC\x2\x5C2\x5C1\x3\x2\x2\x2\x5C2\x5C3\x3\x2"+ + "\x2\x2\x5C3\x5C4\x3\x2\x2\x2\x5C4\x5C6\a,\x2\x2\x5C5\x5C7\x5\x1B6\xDC"+ + "\x2\x5C6\x5C5\x3\x2\x2\x2\x5C6\x5C7\x3\x2\x2\x2\x5C7\x5C9\x3\x2\x2\x2"+ + "\x5C8\x5CA\x5\xD4k\x2\x5C9\x5C8\x3\x2\x2\x2\x5C9\x5CA\x3\x2\x2\x2\x5CA"+ + "\x5CC\x3\x2\x2\x2\x5CB\x5C2\x3\x2\x2\x2\x5CC\x5CF\x3\x2\x2\x2\x5CD\x5CB"+ + "\x3\x2\x2\x2\x5CD\x5CE\x3\x2\x2\x2\x5CE\x5E7\x3\x2\x2\x2\x5CF\x5CD\x3"+ + "\x2\x2\x2\x5D0\x5D2\a,\x2\x2\x5D1\x5D3\x5\x1B6\xDC\x2\x5D2\x5D1\x3\x2"+ + "\x2\x2\x5D2\x5D3\x3\x2\x2\x2\x5D3\x5D5\x3\x2\x2\x2\x5D4\x5D0\x3\x2\x2"+ + "\x2\x5D4\x5D5\x3\x2\x2\x2\x5D5\x5D6\x3\x2\x2\x2\x5D6\x5E3\x5\xD4k\x2\x5D7"+ + "\x5D9\x5\x1B6\xDC\x2\x5D8\x5D7\x3\x2\x2\x2\x5D8\x5D9\x3\x2\x2\x2\x5D9"+ + "\x5DA\x3\x2\x2\x2\x5DA\x5DC\a,\x2\x2\x5DB\x5DD\x5\x1B6\xDC\x2\x5DC\x5DB"+ + "\x3\x2\x2\x2\x5DC\x5DD\x3\x2\x2\x2\x5DD\x5DF\x3\x2\x2\x2\x5DE\x5E0\x5"+ + "\xD4k\x2\x5DF\x5DE\x3\x2\x2\x2\x5DF\x5E0\x3\x2\x2\x2\x5E0\x5E2\x3\x2\x2"+ + "\x2\x5E1\x5D8\x3\x2\x2\x2\x5E2\x5E5\x3\x2\x2\x2\x5E3\x5E1\x3\x2\x2\x2"+ + "\x5E3\x5E4\x3\x2\x2\x2\x5E4\x5E7\x3\x2\x2\x2\x5E5\x5E3\x3\x2\x2\x2\x5E6"+ + "\x5C0\x3\x2\x2\x2\x5E6\x5D4\x3\x2\x2\x2\x5E7\xD3\x3\x2\x2\x2\x5E8\x5E9"+ + "\x5 \x11\x2\x5E9\xD5\x3\x2\x2\x2\x5EA\x5EB\x5\x172\xBA\x2\x5EB\xD7\x3"+ + "\x2\x2\x2\x5EC\x5ED\a{\x2\x2\x5ED\x5EE\x5\x1B6\xDC\x2\x5EE\x5EF\x5\x172"+ + "\xBA\x2\x5EF\xD9\x3\x2\x2\x2\x5F0\x5F1\a\x83\x2\x2\x5F1\x5F3\x5\x1B6\xDC"+ + "\x2\x5F2\x5F0\x3\x2\x2\x2\x5F2\x5F3\x3\x2\x2\x2\x5F3\x5F4\x3\x2\x2\x2"+ + "\x5F4\x5F6\x5\x17E\xC0\x2\x5F5\x5F7\x5\x1B6\xDC\x2\x5F6\x5F5\x3\x2\x2"+ + "\x2\x5F6\x5F7\x3\x2\x2\x2\x5F7\x5F8\x3\x2\x2\x2\x5F8\x5FA\a\xD4\x2\x2"+ + "\x5F9\x5FB\x5\x1B6\xDC\x2\x5FA\x5F9\x3\x2\x2\x2\x5FA\x5FB\x3\x2\x2\x2"+ + "\x5FB\x5FC\x3\x2\x2\x2\x5FC\x5FD\x5\x172\xBA\x2\x5FD\xDB\x3\x2\x2\x2\x5FE"+ + "\x5FF\a\x8A\x2\x2\x5FF\x600\x5\x1B6\xDC\x2\x600\x602\x5\x172\xBA\x2\x601"+ + "\x603\x5\x1B6\xDC\x2\x602\x601\x3\x2\x2\x2\x602\x603\x3\x2\x2\x2\x603"+ + "\x604\x3\x2\x2\x2\x604\x606\a\xD4\x2\x2\x605\x607\x5\x1B6\xDC\x2\x606"+ + "\x605\x3\x2\x2\x2\x606\x607\x3\x2\x2\x2\x607\x608\x3\x2\x2\x2\x608\x609"+ + "\x5\x172\xBA\x2\x609\xDD\x3\x2\x2\x2\x60A\x60B\t\f\x2\x2\x60B\x614\x5"+ + "\x1B6\xDC\x2\x60C\x60D\ax\x2\x2\x60D\x60E\x5\x1B6\xDC\x2\x60E\x60F\x5"+ + "\x172\xBA\x2\x60F\x615\x3\x2\x2\x2\x610\x611\a\xB1\x2\x2\x611\x612\x5"+ + "\x1B6\xDC\x2\x612\x613\a\x8F\x2\x2\x613\x615\x3\x2\x2\x2\x614\x60C\x3"+ + "\x2\x2\x2\x614\x610\x3\x2\x2\x2\x615\xDF\x3\x2\x2\x2\x616\x617\a\x95\x2"+ + "\x2\x617\x618\x5\x1B6\xDC\x2\x618\x619\x5\x172\xBA\x2\x619\x61A\x5\x1B6"+ + "\xDC\x2\x61A\x61B\ax\x2\x2\x61B\x61C\x5\x1B6\xDC\x2\x61C\x627\x5\x172"+ + "\xBA\x2\x61D\x61F\x5\x1B6\xDC\x2\x61E\x61D\x3\x2\x2\x2\x61E\x61F\x3\x2"+ + "\x2\x2\x61F\x620\x3\x2\x2\x2\x620\x622\a+\x2\x2\x621\x623\x5\x1B6\xDC"+ + "\x2\x622\x621\x3\x2\x2\x2\x622\x623\x3\x2\x2\x2\x623\x624\x3\x2\x2\x2"+ + "\x624\x626\x5\x172\xBA\x2\x625\x61E\x3\x2\x2\x2\x626\x629\x3\x2\x2\x2"+ + "\x627\x625\x3\x2\x2\x2\x627\x628\x3\x2\x2\x2\x628\xE1\x3\x2\x2\x2\x629"+ + "\x627\x3\x2\x2\x2\x62A\x62B\a\x95\x2\x2\x62B\x62C\x5\x1B6\xDC\x2\x62C"+ + "\x62D\x5\x172\xBA\x2\x62D\x62E\x5\x1B6\xDC\x2\x62E\x62F\aw\x2\x2\x62F"+ + "\x630\x5\x1B6\xDC\x2\x630\x63B\x5\x172\xBA\x2\x631\x633\x5\x1B6\xDC\x2"+ + "\x632\x631\x3\x2\x2\x2\x632\x633\x3\x2\x2\x2\x633\x634\x3\x2\x2\x2\x634"+ + "\x636\a+\x2\x2\x635\x637\x5\x1B6\xDC\x2\x636\x635\x3\x2\x2\x2\x636\x637"+ + "\x3\x2\x2\x2\x637\x638\x3\x2\x2\x2\x638\x63A\x5\x172\xBA\x2\x639\x632"+ + "\x3\x2\x2\x2\x63A\x63D\x3\x2\x2\x2\x63B\x639\x3\x2\x2\x2\x63B\x63C\x3"+ + "\x2\x2\x2\x63C\xE3\x3\x2\x2\x2\x63D\x63B\x3\x2\x2\x2\x63E\x63F\x5\x170"+ + "\xB9\x2\x63F\x640\x5\x1B6\xDC\x2\x640\x642\x3\x2\x2\x2\x641\x63E\x3\x2"+ + "\x2\x2\x641\x642\x3\x2\x2\x2\x642\x645\x3\x2\x2\x2\x643\x644\a\xBA\x2"+ + "\x2\x644\x646\x5\x1B6\xDC\x2\x645\x643\x3\x2\x2\x2\x645\x646\x3\x2\x2"+ + "\x2\x646\x647\x3\x2\x2\x2\x647\x648\a\xA4\x2\x2\x648\x649\x5\x1B6\xDC"+ + "\x2\x649\x64E\x5\xBE`\x2\x64A\x64C\x5\x1B6\xDC\x2\x64B\x64A\x3\x2\x2\x2"+ + "\x64B\x64C\x3\x2\x2\x2\x64C\x64D\x3\x2\x2\x2\x64D\x64F\x5\x8EH\x2\x64E"+ + "\x64B\x3\x2\x2\x2\x64E\x64F\x3\x2\x2\x2\x64F\x653\x3\x2\x2\x2\x650\x651"+ + "\x5\x1B6\xDC\x2\x651\x652\x5\x15A\xAE\x2\x652\x654\x3\x2\x2\x2\x653\x650"+ + "\x3\x2\x2\x2\x653\x654\x3\x2\x2\x2\x654\x655\x3\x2\x2\x2\x655\x656\x5"+ + "\x1A0\xD1\x2\x656\x657\x5\x1E\x10\x2\x657\x658\a\x61\x2\x2\x658\xE5\x3"+ + "\x2\x2\x2\x659\x65A\x5\x170\xB9\x2\x65A\x65B\x5\x1B6\xDC\x2\x65B\x65D"+ + "\x3\x2\x2\x2\x65C\x659\x3\x2\x2\x2\x65C\x65D\x3\x2\x2\x2\x65D\x660\x3"+ + "\x2\x2\x2\x65E\x65F\a\xBA\x2\x2\x65F\x661\x5\x1B6\xDC\x2\x660\x65E\x3"+ + "\x2\x2\x2\x660\x661\x3\x2\x2\x2\x661\x662\x3\x2\x2\x2\x662\x663\a\xA6"+ + "\x2\x2\x663\x664\x5\x1B6\xDC\x2\x664\x669\x5\x116\x8C\x2\x665\x667\x5"+ + "\x1B6\xDC\x2\x666\x665\x3\x2\x2\x2\x666\x667\x3\x2\x2\x2\x667\x668\x3"+ + "\x2\x2\x2\x668\x66A\x5\x8EH\x2\x669\x666\x3\x2\x2\x2\x669\x66A\x3\x2\x2"+ + "\x2\x66A\x66B\x3\x2\x2\x2\x66B\x66C\x5\x1A0\xD1\x2\x66C\x66D\x5\x1E\x10"+ + "\x2\x66D\x66E\a\x61\x2\x2\x66E\xE7\x3\x2\x2\x2\x66F\x670\x5\x170\xB9\x2"+ + "\x670\x671\x5\x1B6\xDC\x2\x671\x673\x3\x2\x2\x2\x672\x66F\x3\x2\x2\x2"+ + "\x672\x673\x3\x2\x2\x2\x673\x676\x3\x2\x2\x2\x674\x675\a\xBA\x2\x2\x675"+ + "\x677\x5\x1B6\xDC\x2\x676\x674\x3\x2\x2\x2\x676\x677\x3\x2\x2\x2\x677"+ + "\x678\x3\x2\x2\x2\x678\x679\a\xA5\x2\x2\x679\x67A\x5\x1B6\xDC\x2\x67A"+ + "\x67F\x5\x116\x8C\x2\x67B\x67D\x5\x1B6\xDC\x2\x67C\x67B\x3\x2\x2\x2\x67C"+ + "\x67D\x3\x2\x2\x2\x67D\x67E\x3\x2\x2\x2\x67E\x680\x5\x8EH\x2\x67F\x67C"+ + "\x3\x2\x2\x2\x67F\x680\x3\x2\x2\x2\x680\x681\x3\x2\x2\x2\x681\x682\x5"+ + "\x1A0\xD1\x2\x682\x683\x5\x1E\x10\x2\x683\x684\a\x61\x2\x2\x684\xE9\x3"+ + "\x2\x2\x2\x685\x686\a\xAB\x2\x2\x686\x687\x5\x1B6\xDC\x2\x687\x696\x5"+ + "\x14E\xA8\x2\x688\x68A\x5\x1B6\xDC\x2\x689\x688\x3\x2\x2\x2\x689\x68A"+ + "\x3\x2\x2\x2\x68A\x68B\x3\x2\x2\x2\x68B\x68D\a\xD8\x2\x2\x68C\x68E\x5"+ + "\x1B6\xDC\x2\x68D\x68C\x3\x2\x2\x2\x68D\x68E\x3\x2\x2\x2\x68E\x690\x3"+ + "\x2\x2\x2\x68F\x691\x5\xECw\x2\x690\x68F\x3\x2\x2\x2\x690\x691\x3\x2\x2"+ + "\x2\x691\x693\x3\x2\x2\x2\x692\x694\x5\x1B6\xDC\x2\x693\x692\x3\x2\x2"+ + "\x2\x693\x694\x3\x2\x2\x2\x694\x695\x3\x2\x2\x2\x695\x697\a\xDF\x2\x2"+ + "\x696\x689\x3\x2\x2\x2\x696\x697\x3\x2\x2\x2\x697\xEB\x3\x2\x2\x2\x698"+ + "\x6A3\x5\xEEx\x2\x699\x69B\x5\x1B6\xDC\x2\x69A\x699\x3\x2\x2\x2\x69A\x69B"+ + "\x3\x2\x2\x2\x69B\x69C\x3\x2\x2\x2\x69C\x69E\a+\x2\x2\x69D\x69F\x5\x1B6"+ + "\xDC\x2\x69E\x69D\x3\x2\x2\x2\x69E\x69F\x3\x2\x2\x2\x69F\x6A0\x3\x2\x2"+ + "\x2\x6A0\x6A2\x5\xEEx\x2\x6A1\x69A\x3\x2\x2\x2\x6A2\x6A5\x3\x2\x2\x2\x6A3"+ + "\x6A1\x3\x2\x2\x2\x6A3\x6A4\x3\x2\x2\x2\x6A4\xED\x3\x2\x2\x2\x6A5\x6A3"+ + "\x3\x2\x2\x2\x6A6\x6A7\x5\x172\xBA\x2\x6A7\xEF\x3\x2\x2\x2\x6A8\x6A9\a"+ + "\xAE\x2\x2\x6A9\x6AC\x5\x1B6\xDC\x2\x6AA\x6AB\a\xA1\x2\x2\x6AB\x6AD\x5"+ + "\x1B6\xDC\x2\x6AC\x6AA\x3\x2\x2\x2\x6AC\x6AD\x3\x2\x2\x2\x6AD\x6AE\x3"+ + "\x2\x2\x2\x6AE\x6AF\x5\xF2z\x2\x6AF\xF1\x3\x2\x2\x2\x6B0\x6BB\x5\xF4{"+ + "\x2\x6B1\x6B3\x5\x1B6\xDC\x2\x6B2\x6B1\x3\x2\x2\x2\x6B2\x6B3\x3\x2\x2"+ + "\x2\x6B3\x6B4\x3\x2\x2\x2\x6B4\x6B6\a+\x2\x2\x6B5\x6B7\x5\x1B6\xDC\x2"+ + "\x6B6\x6B5\x3\x2\x2\x2\x6B6\x6B7\x3\x2\x2\x2\x6B7\x6B8\x3\x2\x2\x2\x6B8"+ + "\x6BA\x5\xF4{\x2\x6B9\x6B2\x3\x2\x2\x2\x6BA\x6BD\x3\x2\x2\x2\x6BB\x6B9"+ + "\x3\x2\x2\x2\x6BB\x6BC\x3\x2\x2\x2\x6BC\xF3\x3\x2\x2\x2\x6BD\x6BB\x3\x2"+ + "\x2\x2\x6BE\x6C2\x5\x172\xBA\x2\x6BF\x6C0\x5\x1B6\xDC\x2\x6C0\x6C1\x5"+ + "\x15A\xAE\x2\x6C1\x6C3\x3\x2\x2\x2\x6C2\x6BF\x3\x2\x2\x2\x6C2\x6C3\x3"+ + "\x2\x2\x2\x6C3\xF5\x3\x2\x2\x2\x6C4\x6C5\x5\x172\xBA\x2\x6C5\xF7\x3\x2"+ + "\x2\x2\x6C6\x6C7\a\x42\x2\x2\x6C7\x6C8\x5\x1B6\xDC\x2\x6C8\x6C9\x5\x172"+ + "\xBA\x2\x6C9\x6D1\x3\x2\x2\x2\x6CA\x6CE\x5\x172\xBA\x2\x6CB\x6CC\x5\x1B6"+ + "\xDC\x2\x6CC\x6CD\x5\x182\xC2\x2\x6CD\x6CF\x3\x2\x2\x2\x6CE\x6CB\x3\x2"+ + "\x2\x2\x6CE\x6CF\x3\x2\x2\x2\x6CF\x6D1\x3\x2\x2\x2\x6D0\x6C6\x3\x2\x2"+ + "\x2\x6D0\x6CA\x3\x2\x2\x2\x6D1\xF9\x3\x2\x2\x2\x6D2\x6D8\a\xB1\x2\x2\x6D3"+ + "\x6D6\x5\x1B6\xDC\x2\x6D4\x6D7\a\x8F\x2\x2\x6D5\x6D7\x5\x172\xBA\x2\x6D6"+ + "\x6D4\x3\x2\x2\x2\x6D6\x6D5\x3\x2\x2\x2\x6D7\x6D9\x3\x2\x2\x2\x6D8\x6D3"+ + "\x3\x2\x2\x2\x6D8\x6D9\x3\x2\x2\x2\x6D9\xFB\x3\x2\x2\x2\x6DA\x6DB\a\xB2"+ + "\x2\x2\x6DB\xFD\x3\x2\x2\x2\x6DC\x6DD\a\xB3\x2\x2\x6DD\x6DE\x5\x1B6\xDC"+ + "\x2\x6DE\x6E0\x5\x172\xBA\x2\x6DF\x6E1\x5\x1B6\xDC\x2\x6E0\x6DF\x3\x2"+ + "\x2\x2\x6E0\x6E1\x3\x2\x2\x2\x6E1\x6E2\x3\x2\x2\x2\x6E2\x6E4\a\xD4\x2"+ + "\x2\x6E3\x6E5\x5\x1B6\xDC\x2\x6E4\x6E3\x3\x2\x2\x2\x6E4\x6E5\x3\x2\x2"+ + "\x2\x6E5\x6E6\x3\x2\x2\x2\x6E6\x6E7\x5\x172\xBA\x2\x6E7\xFF\x3\x2\x2\x2"+ + "\x6E8\x6E9\a\xBC\x2\x2\x6E9\x101\x3\x2\x2\x2\x6EA\x6EB\a\x8E\x2\x2\x6EB"+ + "\x6EC\x5\x1B6\xDC\x2\x6EC\x6ED\x5\x172\xBA\x2\x6ED\x6EE\x5\x1B6\xDC\x2"+ + "\x6EE\x6EF\a;\x2\x2\x6EF\x6F0\x5\x1B6\xDC\x2\x6F0\x6F1\x5\x172\xBA\x2"+ + "\x6F1\x103\x3\x2\x2\x2\x6F2\x6F4\a\xB5\x2\x2\x6F3\x6F5\x5\x1B6\xDC\x2"+ + "\x6F4\x6F3\x3\x2\x2\x2\x6F4\x6F5\x3\x2\x2\x2\x6F5\x6F6\x3\x2\x2\x2\x6F6"+ + "\x6F8\a\x43\x2\x2\x6F7\x6F9\x5\x1B6\xDC\x2\x6F8\x6F7\x3\x2\x2\x2\x6F8"+ + "\x6F9\x3\x2\x2\x2\x6F9\x6FA\x3\x2\x2\x2\x6FA\x6FB\x5\x106\x84\x2\x6FB"+ + "\x6FF\x5\x1A0\xD1\x2\x6FC\x6FE\x5\x108\x85\x2\x6FD\x6FC\x3\x2\x2\x2\x6FE"+ + "\x701\x3\x2\x2\x2\x6FF\x6FD\x3\x2\x2\x2\x6FF\x700\x3\x2\x2\x2\x700\x703"+ + "\x3\x2\x2\x2\x701\x6FF\x3\x2\x2\x2\x702\x704\x5\x10A\x86\x2\x703\x702"+ + "\x3\x2\x2\x2\x703\x704\x3\x2\x2\x2\x704\x705\x3\x2\x2\x2\x705\x706\a\x62"+ + "\x2\x2\x706\x105\x3\x2\x2\x2\x707\x708\x5\x172\xBA\x2\x708\x107\x3\x2"+ + "\x2\x2\x709\x70A\a\x43\x2\x2\x70A\x70B\x5\x1B6\xDC\x2\x70B\x716\x5\x10C"+ + "\x87\x2\x70C\x70E\x5\x1B6\xDC\x2\x70D\x70C\x3\x2\x2\x2\x70D\x70E\x3\x2"+ + "\x2\x2\x70E\x70F\x3\x2\x2\x2\x70F\x711\a+\x2\x2\x710\x712\x5\x1B6\xDC"+ + "\x2\x711\x710\x3\x2\x2\x2\x711\x712\x3\x2\x2\x2\x712\x713\x3\x2\x2\x2"+ + "\x713\x715\x5\x10C\x87\x2\x714\x70D\x3\x2\x2\x2\x715\x718\x3\x2\x2\x2"+ + "\x716\x714\x3\x2\x2\x2\x716\x717\x3\x2\x2\x2\x717\x719\x3\x2\x2\x2\x718"+ + "\x716\x3\x2\x2\x2\x719\x71A\x5\x1A0\xD1\x2\x71A\x71B\x5\x1E\x10\x2\x71B"+ + "\x109\x3\x2\x2\x2\x71C\x71E\a\x43\x2\x2\x71D\x71F\x5\x1B6\xDC\x2\x71E"+ + "\x71D\x3\x2\x2\x2\x71E\x71F\x3\x2\x2\x2\x71F\x720\x3\x2\x2\x2\x720\x721"+ + "\a[\x2\x2\x721\x722\x5\x1A0\xD1\x2\x722\x723\x5\x1E\x10\x2\x723\x10B\x3"+ + "\x2\x2\x2\x724\x726\a~\x2\x2\x725\x727\x5\x1B6\xDC\x2\x726\x725\x3\x2"+ + "\x2\x2\x726\x727\x3\x2\x2\x2\x727\x729\x3\x2\x2\x2\x728\x724\x3\x2\x2"+ + "\x2\x728\x729\x3\x2\x2\x2\x729\x72A\x3\x2\x2\x2\x72A\x72C\x5\x15E\xB0"+ + "\x2\x72B\x72D\x5\x1B6\xDC\x2\x72C\x72B\x3\x2\x2\x2\x72C\x72D\x3\x2\x2"+ + "\x2\x72D\x72E\x3\x2\x2\x2\x72E\x72F\x5\x172\xBA\x2\x72F\x738\x3\x2\x2"+ + "\x2\x730\x731\x5\x10E\x88\x2\x731\x732\x5\x1B6\xDC\x2\x732\x733\a\xC2"+ + "\x2\x2\x733\x734\x5\x1B6\xDC\x2\x734\x735\x5\x110\x89\x2\x735\x738\x3"+ + "\x2\x2\x2\x736\x738\x5\x172\xBA\x2\x737\x728\x3\x2\x2\x2\x737\x730\x3"+ + "\x2\x2\x2\x737\x736\x3\x2\x2\x2\x738\x10D\x3\x2\x2\x2\x739\x73A\x5\x172"+ + "\xBA\x2\x73A\x10F\x3\x2\x2\x2\x73B\x73C\x5\x172\xBA\x2\x73C\x111\x3\x2"+ + "\x2\x2\x73D\x73E\a\xB6\x2\x2\x73E\x73F\x5\x1B6\xDC\x2\x73F\x741\x5\x17E"+ + "\xC0\x2\x740\x742\x5\x1B6\xDC\x2\x741\x740\x3\x2\x2\x2\x741\x742\x3\x2"+ + "\x2\x2\x742\x743\x3\x2\x2\x2\x743\x745\a\xD4\x2\x2\x744\x746\x5\x1B6\xDC"+ + "\x2\x745\x744\x3\x2\x2\x2\x745\x746\x3\x2\x2\x2\x746\x747\x3\x2\x2\x2"+ + "\x747\x748\x5\x172\xBA\x2\x748\x113\x3\x2\x2\x2\x749\x74A\x5\x170\xB9"+ + "\x2\x74A\x74B\x5\x1B6\xDC\x2\x74B\x74D\x3\x2\x2\x2\x74C\x749\x3\x2\x2"+ + "\x2\x74C\x74D\x3\x2\x2\x2\x74D\x750\x3\x2\x2\x2\x74E\x74F\a\xBA\x2\x2"+ + "\x74F\x751\x5\x1B6\xDC\x2\x750\x74E\x3\x2\x2\x2\x750\x751\x3\x2\x2\x2"+ + "\x751\x752\x3\x2\x2\x2\x752\x754\a\xBE\x2\x2\x753\x755\x5\x1B6\xDC\x2"+ + "\x754\x753\x3\x2\x2\x2\x754\x755\x3\x2\x2\x2\x755\x756\x3\x2\x2\x2\x756"+ + "\x75B\x5\x116\x8C\x2\x757\x759\x5\x1B6\xDC\x2\x758\x757\x3\x2\x2\x2\x758"+ + "\x759\x3\x2\x2\x2\x759\x75A\x3\x2\x2\x2\x75A\x75C\x5\x8EH\x2\x75B\x758"+ + "\x3\x2\x2\x2\x75B\x75C\x3\x2\x2\x2\x75C\x75D\x3\x2\x2\x2\x75D\x75E\x5"+ + "\x1A0\xD1\x2\x75E\x75F\x5\x1E\x10\x2\x75F\x760\a\x63\x2\x2\x760\x115\x3"+ + "\x2\x2\x2\x761\x762\x5\x14E\xA8\x2\x762\x117\x3\x2\x2\x2\x763\x764\t\r"+ + "\x2\x2\x764\x766\x5\x1B6\xDC\x2\x765\x763\x3\x2\x2\x2\x765\x766\x3\x2"+ + "\x2\x2\x766\x767\x3\x2\x2\x2\x767\x768\x5\x11C\x8F\x2\x768\x119\x3\x2"+ + "\x2\x2\x769\x76A\a\xA3\x2\x2\x76A\x76B\x5\x1B6\xDC\x2\x76B\x76C\x5\x11C"+ + "\x8F\x2\x76C\x11B\x3\x2\x2\x2\x76D\x76E\a\xC4\x2\x2\x76E\x76F\x5\x1B6"+ + "\xDC\x2\x76F\x770\x5\x150\xA9\x2\x770\x771\x5\x1A0\xD1\x2\x771\x772\x5"+ + "\x11E\x90\x2\x772\x773\x5\x1A0\xD1\x2\x773\x774\a\x64\x2\x2\x774\x11D"+ + "\x3\x2\x2\x2\x775\x77B\x5\x120\x91\x2\x776\x777\x5\x1A0\xD1\x2\x777\x778"+ + "\x5\x120\x91\x2\x778\x77A\x3\x2\x2\x2\x779\x776\x3\x2\x2\x2\x77A\x77D"+ + "\x3\x2\x2\x2\x77B\x779\x3\x2\x2\x2\x77B\x77C\x3\x2\x2\x2\x77C\x11F\x3"+ + "\x2\x2\x2\x77D\x77B\x3\x2\x2\x2\x77E\x781\x5\x124\x93\x2\x77F\x781\x5"+ + "\x122\x92\x2\x780\x77E\x3\x2\x2\x2\x780\x77F\x3\x2\x2\x2\x781\x121\x3"+ + "\x2\x2\x2\x782\x784\x5\x150\xA9\x2\x783\x785\x5\x1B6\xDC\x2\x784\x783"+ + "\x3\x2\x2\x2\x784\x785\x3\x2\x2\x2\x785\x786\x3\x2\x2\x2\x786\x787\x5"+ + "\x126\x94\x2\x787\x123\x3\x2\x2\x2\x788\x789\x5\x14C\xA7\x2\x789\x78A"+ + "\x5\x1B6\xDC\x2\x78A\x78B\x5\x15A\xAE\x2\x78B\x125\x3\x2\x2\x2\x78C\x78D"+ + "\x5\x128\x95\x2\x78D\x78E\x5\x1B6\xDC\x2\x78E\x790\x3\x2\x2\x2\x78F\x78C"+ + "\x3\x2\x2\x2\x78F\x790\x3\x2\x2\x2\x790\x791\x3\x2\x2\x2\x791\x792\x5"+ + "\x15A\xAE\x2\x792\x127\x3\x2\x2\x2\x793\x795\a\xD8\x2\x2\x794\x796\x5"+ + "\x1B6\xDC\x2\x795\x794\x3\x2\x2\x2\x795\x796\x3\x2\x2\x2\x796\x798\x3"+ + "\x2\x2\x2\x797\x799\x5\x12A\x96\x2\x798\x797\x3\x2\x2\x2\x798\x799\x3"+ + "\x2\x2\x2\x799\x79B\x3\x2\x2\x2\x79A\x79C\x5\x1B6\xDC\x2\x79B\x79A\x3"+ + "\x2\x2\x2\x79B\x79C\x3\x2\x2\x2\x79C\x79D\x3\x2\x2\x2\x79D\x79E\a\xDF"+ + "\x2\x2\x79E\x129\x3\x2\x2\x2\x79F\x7AA\x5\x12C\x97\x2\x7A0\x7A2\x5\x1B6"+ + "\xDC\x2\x7A1\x7A0\x3\x2\x2\x2\x7A1\x7A2\x3\x2\x2\x2\x7A2\x7A3\x3\x2\x2"+ + "\x2\x7A3\x7A5\a+\x2\x2\x7A4\x7A6\x5\x1B6\xDC\x2\x7A5\x7A4\x3\x2\x2\x2"+ + "\x7A5\x7A6\x3\x2\x2\x2\x7A6\x7A7\x3\x2\x2\x2\x7A7\x7A9\x5\x12C\x97\x2"+ + "\x7A8\x7A1\x3\x2\x2\x2\x7A9\x7AC\x3\x2\x2\x2\x7AA\x7A8\x3\x2\x2\x2\x7AA"+ + "\x7AB\x3\x2\x2\x2\x7AB\x12B\x3\x2\x2\x2\x7AC\x7AA\x3\x2\x2\x2\x7AD\x7AF"+ + "\x5\x12E\x98\x2\x7AE\x7B0\x5\x1B6\xDC\x2\x7AF\x7AE\x3\x2\x2\x2\x7AF\x7B0"+ + "\x3\x2\x2\x2\x7B0\x7B2\x3\x2\x2\x2\x7B1\x7AD\x3\x2\x2\x2\x7B1\x7B2\x3"+ + "\x2\x2\x2\x7B2\x7B3\x3\x2\x2\x2\x7B3\x7B4\x5\x130\x99\x2\x7B4\x12D\x3"+ + "\x2\x2\x2\x7B5\x7B7\x5\x132\x9A\x2\x7B6\x7B8\x5\x1B6\xDC\x2\x7B7\x7B6"+ + "\x3\x2\x2\x2\x7B7\x7B8\x3\x2\x2\x2\x7B8\x7B9\x3\x2\x2\x2\x7B9\x7BA\a\xC2"+ + "\x2\x2\x7BA\x12F\x3\x2\x2\x2\x7BB\x7BC\x5\x132\x9A\x2\x7BC\x131\x3\x2"+ + "\x2\x2\x7BD\x7BE\x5\x172\xBA\x2\x7BE\x133\x3\x2\x2\x2\x7BF\x7C3\aW\x2"+ + "\x2\x7C0\x7C3\a\xBA\x2\x2\x7C1\x7C3\x5\x170\xB9\x2\x7C2\x7BF\x3\x2\x2"+ + "\x2\x7C2\x7C0\x3\x2\x2\x2\x7C2\x7C1\x3\x2\x2\x2\x7C3\x7C4\x3\x2\x2\x2"+ + "\x7C4\x7C7\x5\x1B6\xDC\x2\x7C5\x7C6\a\xCE\x2\x2\x7C6\x7C8\x5\x1B6\xDC"+ + "\x2\x7C7\x7C5\x3\x2\x2\x2\x7C7\x7C8\x3\x2\x2\x2\x7C8\x7C9\x3\x2\x2\x2"+ + "\x7C9\x7CA\x5\x136\x9C\x2\x7CA\x135\x3\x2\x2\x2\x7CB\x7D6\x5\x138\x9D"+ + "\x2\x7CC\x7CE\x5\x1B6\xDC\x2\x7CD\x7CC\x3\x2\x2\x2\x7CD\x7CE\x3\x2\x2"+ + "\x2\x7CE\x7CF\x3\x2\x2\x2\x7CF\x7D1\a+\x2\x2\x7D0\x7D2\x5\x1B6\xDC\x2"+ + "\x7D1\x7D0\x3\x2\x2\x2\x7D1\x7D2\x3\x2\x2\x2\x7D2\x7D3\x3\x2\x2\x2\x7D3"+ + "\x7D5\x5\x138\x9D\x2\x7D4\x7CD\x3\x2\x2\x2\x7D5\x7D8\x3\x2\x2\x2\x7D6"+ + "\x7D4\x3\x2\x2\x2\x7D6\x7D7\x3\x2\x2\x2\x7D7\x137\x3\x2\x2\x2\x7D8\x7D6"+ + "\x3\x2\x2\x2\x7D9\x7EB\x5\x14E\xA8\x2\x7DA\x7DC\x5\x1B6\xDC\x2\x7DB\x7DA"+ + "\x3\x2\x2\x2\x7DB\x7DC\x3\x2\x2\x2\x7DC\x7DD\x3\x2\x2\x2\x7DD\x7DF\a\xD8"+ + "\x2\x2\x7DE\x7E0\x5\x1B6\xDC\x2\x7DF\x7DE\x3\x2\x2\x2\x7DF\x7E0\x3\x2"+ + "\x2\x2\x7E0\x7E5\x3\x2\x2\x2\x7E1\x7E3\x5\x148\xA5\x2\x7E2\x7E4\x5\x1B6"+ + "\xDC\x2\x7E3\x7E2\x3\x2\x2\x2\x7E3\x7E4\x3\x2\x2\x2\x7E4\x7E6\x3\x2\x2"+ + "\x2\x7E5\x7E1\x3\x2\x2\x2\x7E5\x7E6\x3\x2\x2\x2\x7E6\x7E7\x3\x2\x2\x2"+ + "\x7E7\x7E9\a\xDF\x2\x2\x7E8\x7EA\x5\x1B6\xDC\x2\x7E9\x7E8\x3\x2\x2\x2"+ + "\x7E9\x7EA\x3\x2\x2\x2\x7EA\x7EC\x3\x2\x2\x2\x7EB\x7DB\x3\x2\x2\x2\x7EB"+ + "\x7EC\x3\x2\x2\x2\x7EC\x7F0\x3\x2\x2\x2\x7ED\x7EE\x5\x1B6\xDC\x2\x7EE"+ + "\x7EF\x5\x15A\xAE\x2\x7EF\x7F1\x3\x2\x2\x2\x7F0\x7ED\x3\x2\x2\x2\x7F0"+ + "\x7F1\x3\x2\x2\x2\x7F1\x139\x3\x2\x2\x2\x7F2\x7F3\a\xCB\x2\x2\x7F3\x7F4"+ + "\x5\x1B6\xDC\x2\x7F4\x7F5\x5\x172\xBA\x2\x7F5\x7F6\x5\x1A0\xD1\x2\x7F6"+ + "\x7F7\x5\x1E\x10\x2\x7F7\x7F8\a\xCA\x2\x2\x7F8\x13B\x3\x2\x2\x2\x7F9\x7FA"+ + "\a\xCD\x2\x2\x7FA\x7FB\x5\x1B6\xDC\x2\x7FB\x7FC\x5\x172\xBA\x2\x7FC\x7FD"+ + "\x5\x1A0\xD1\x2\x7FD\x7FE\x5\x1E\x10\x2\x7FE\x7FF\a\x65\x2\x2\x7FF\x13D"+ + "\x3\x2\x2\x2\x800\x801\x5\x172\xBA\x2\x801\x806\x5\x1B6\xDC\x2\x802\x804"+ + "\a\xBB\x2\x2\x803\x805\x5\x1B6\xDC\x2\x804\x803\x3\x2\x2\x2\x804\x805"+ + "\x3\x2\x2\x2\x805\x807\x3\x2\x2\x2\x806\x802\x3\x2\x2\x2\x806\x807\x3"+ + "\x2\x2\x2\x807\x808\x3\x2\x2\x2\x808\x809\x5\x144\xA3\x2\x809\x80E\a\xDA"+ + "\x2\x2\x80A\x80C\a\xBB\x2\x2\x80B\x80D\x5\x1B6\xDC\x2\x80C\x80B\x3\x2"+ + "\x2\x2\x80C\x80D\x3\x2\x2\x2\x80D\x80F\x3\x2\x2\x2\x80E\x80A\x3\x2\x2"+ + "\x2\x80E\x80F\x3\x2\x2\x2\x80F\x810\x3\x2\x2\x2\x810\x812\x5\x144\xA3"+ + "\x2\x811\x813\x5\x1B6\xDC\x2\x812\x811\x3\x2\x2\x2\x812\x813\x3\x2\x2"+ + "\x2\x813\x819\x3\x2\x2\x2\x814\x816\a+\x2\x2\x815\x817\x5\x1B6\xDC\x2"+ + "\x816\x815\x3\x2\x2\x2\x816\x817\x3\x2\x2\x2\x817\x818\x3\x2\x2\x2\x818"+ + "\x81A\x5\x172\xBA\x2\x819\x814\x3\x2\x2\x2\x819\x81A\x3\x2\x2\x2\x81A"+ + "\x81C\x3\x2\x2\x2\x81B\x81D\x5\x1B6\xDC\x2\x81C\x81B\x3\x2\x2\x2\x81C"+ + "\x81D\x3\x2\x2\x2\x81D\x823\x3\x2\x2\x2\x81E\x820\a+\x2\x2\x81F\x821\x5"+ + "\x1B6\xDC\x2\x820\x81F\x3\x2\x2\x2\x820\x821\x3\x2\x2\x2\x821\x822\x3"+ + "\x2\x2\x2\x822\x824\x5\x146\xA4\x2\x823\x81E\x3\x2\x2\x2\x823\x824\x3"+ + "\x2\x2\x2\x824\x13F\x3\x2\x2\x2\x825\x827\x5\x172\xBA\x2\x826\x828\x5"+ + "\x1B6\xDC\x2\x827\x826\x3\x2\x2\x2\x827\x828\x3\x2\x2\x2\x828\x829\x3"+ + "\x2\x2\x2\x829\x82B\a/\x2\x2\x82A\x82C\x5\x1B6\xDC\x2\x82B\x82A\x3\x2"+ + "\x2\x2\x82B\x82C\x3\x2\x2\x2\x82C\x82E\x3\x2\x2\x2\x82D\x825\x3\x2\x2"+ + "\x2\x82D\x82E\x3\x2\x2\x2\x82E\x82F\x3\x2\x2\x2\x82F\x830\a\xF\x2\x2\x830"+ + "\x835\x5\x1B6\xDC\x2\x831\x833\a\xBB\x2\x2\x832\x834\x5\x1B6\xDC\x2\x833"+ + "\x832\x3\x2\x2\x2\x833\x834\x3\x2\x2\x2\x834\x836\x3\x2\x2\x2\x835\x831"+ + "\x3\x2\x2\x2\x835\x836\x3\x2\x2\x2\x836\x837\x3\x2\x2\x2\x837\x840\x5"+ + "\x144\xA3\x2\x838\x83A\x5\x1B6\xDC\x2\x839\x838\x3\x2\x2\x2\x839\x83A"+ + "\x3\x2\x2\x2\x83A\x83B\x3\x2\x2\x2\x83B\x83D\a+\x2\x2\x83C\x83E\x5\x1B6"+ + "\xDC\x2\x83D\x83C\x3\x2\x2\x2\x83D\x83E\x3\x2\x2\x2\x83E\x83F\x3\x2\x2"+ + "\x2\x83F\x841\x5\x172\xBA\x2\x840\x839\x3\x2\x2\x2\x841\x842\x3\x2\x2"+ + "\x2\x842\x840\x3\x2\x2\x2\x842\x843\x3\x2\x2\x2\x843\x141\x3\x2\x2\x2"+ + "\x844\x846\x5\x172\xBA\x2\x845\x847\x5\x1B6\xDC\x2\x846\x845\x3\x2\x2"+ + "\x2\x846\x847\x3\x2\x2\x2\x847\x848\x3\x2\x2\x2\x848\x84A\a/\x2\x2\x849"+ + "\x84B\x5\x1B6\xDC\x2\x84A\x849\x3\x2\x2\x2\x84A\x84B\x3\x2\x2\x2\x84B"+ + "\x84D\x3\x2\x2\x2\x84C\x844\x3\x2\x2\x2\x84C\x84D\x3\x2\x2\x2\x84D\x84E"+ + "\x3\x2\x2\x2\x84E\x84F\a(\x2\x2\x84F\x850\x5\x1B6\xDC\x2\x850\x852\x5"+ + "\x144\xA3\x2\x851\x853\x5\x1B6\xDC\x2\x852\x851\x3\x2\x2\x2\x852\x853"+ + "\x3\x2\x2\x2\x853\x854\x3\x2\x2\x2\x854\x856\a\xDA\x2\x2\x855\x857\x5"+ + "\x1B6\xDC\x2\x856\x855\x3\x2\x2\x2\x856\x857\x3\x2\x2\x2\x857\x858\x3"+ + "\x2\x2\x2\x858\x859\x5\x144\xA3\x2\x859\x143\x3\x2\x2\x2\x85A\x85C\a\xD8"+ + "\x2\x2\x85B\x85D\x5\x1B6\xDC\x2\x85C\x85B\x3\x2\x2\x2\x85C\x85D\x3\x2"+ + "\x2\x2\x85D\x85E\x3\x2\x2\x2\x85E\x860\x5\x172\xBA\x2\x85F\x861\x5\x1B6"+ + "\xDC\x2\x860\x85F\x3\x2\x2\x2\x860\x861\x3\x2\x2\x2\x861\x862\x3\x2\x2"+ + "\x2\x862\x864\a+\x2\x2\x863\x865\x5\x1B6\xDC\x2\x864\x863\x3\x2\x2\x2"+ + "\x864\x865\x3\x2\x2\x2\x865\x866\x3\x2\x2\x2\x866\x868\x5\x172\xBA\x2"+ + "\x867\x869\x5\x1B6\xDC\x2\x868\x867\x3\x2\x2\x2\x868\x869\x3\x2\x2\x2"+ + "\x869\x86A\x3\x2\x2\x2\x86A\x86B\a\xDF\x2\x2\x86B\x145\x3\x2\x2\x2\x86C"+ + "\x86D\t\xE\x2\x2\x86D\x147\x3\x2\x2\x2\x86E\x879\x5\x14A\xA6\x2\x86F\x871"+ + "\x5\x1B6\xDC\x2\x870\x86F\x3\x2\x2\x2\x870\x871\x3\x2\x2\x2\x871\x872"+ + "\x3\x2\x2\x2\x872\x874\a+\x2\x2\x873\x875\x5\x1B6\xDC\x2\x874\x873\x3"+ + "\x2\x2\x2\x874\x875\x3\x2\x2\x2\x875\x876\x3\x2\x2\x2\x876\x878\x5\x14A"+ + "\xA6\x2\x877\x870\x3\x2\x2\x2\x878\x87B\x3\x2\x2\x2\x879\x877\x3\x2\x2"+ + "\x2\x879\x87A\x3\x2\x2\x2\x87A\x149\x3\x2\x2\x2\x87B\x879\x3\x2\x2\x2"+ + "\x87C\x87D\x5\x172\xBA\x2\x87D\x87E\x5\x1B6\xDC\x2\x87E\x87F\a\xC2\x2"+ + "\x2\x87F\x880\x5\x1B6\xDC\x2\x880\x882\x3\x2\x2\x2\x881\x87C\x3\x2\x2"+ + "\x2\x881\x882\x3\x2\x2\x2\x882\x883\x3\x2\x2\x2\x883\x884\x5\x172\xBA"+ + "\x2\x884\x14B\x3\x2\x2\x2\x885\x889\x5\x14E\xA8\x2\x886\x889\x5\x19C\xCF"+ + "\x2\x887\x889\x5\x19A\xCE\x2\x888\x885\x3\x2\x2\x2\x888\x886\x3\x2\x2"+ + "\x2\x888\x887\x3\x2\x2\x2\x889\x14D\x3\x2\x2\x2\x88A\x88D\x5\x150\xA9"+ + "\x2\x88B\x88D\x5\x152\xAA\x2\x88C\x88A\x3\x2\x2\x2\x88C\x88B\x3\x2\x2"+ + "\x2\x88D\x14F\x3\x2\x2\x2\x88E\x88F\x5\x154\xAB\x2\x88F\x151\x3\x2\x2"+ + "\x2\x890\x891\x5\x154\xAB\x2\x891\x892\x5\x16E\xB8\x2\x892\x153\x3\x2"+ + "\x2\x2\x893\x898\a\xED\x2\x2\x894\x898\x5\x198\xCD\x2\x895\x898\x5\x156"+ + "\xAC\x2\x896\x898\a\a\x2\x2\x897\x893\x3\x2\x2\x2\x897\x894\x3\x2\x2\x2"+ + "\x897\x895\x3\x2\x2\x2\x897\x896\x3\x2\x2\x2\x898\x155\x3\x2\x2\x2\x899"+ + "\x89D\a\xE0\x2\x2\x89A\x89C\x5\x158\xAD\x2\x89B\x89A\x3\x2\x2\x2\x89C"+ + "\x89F\x3\x2\x2\x2\x89D\x89B\x3\x2\x2\x2\x89D\x89E\x3\x2\x2\x2\x89E\x8A0"+ + "\x3\x2\x2\x2\x89F\x89D\x3\x2\x2\x2\x8A0\x8A1\a\xE1\x2\x2\x8A1\x157\x3"+ + "\x2\x2\x2\x8A2\x8A5\n\xF\x2\x2\x8A3\x8A5\x5\x156\xAC\x2\x8A4\x8A2\x3\x2"+ + "\x2\x2\x8A4\x8A3\x3\x2\x2\x2\x8A5\x159\x3\x2\x2\x2\x8A6\x8A8\a;\x2\x2"+ + "\x8A7\x8A9\x5\x1B6\xDC\x2\x8A8\x8A7\x3\x2\x2\x2\x8A8\x8A9\x3\x2\x2\x2"+ + "\x8A9\x8AC\x3\x2\x2\x2\x8AA\x8AB\a\x90\x2\x2\x8AB\x8AD\x5\x1B6\xDC\x2"+ + "\x8AC\x8AA\x3\x2\x2\x2\x8AC\x8AD\x3\x2\x2\x2\x8AD\x8AE\x3\x2\x2\x2\x8AE"+ + "\x8B3\x5\x16C\xB7\x2\x8AF\x8B1\x5\x1B6\xDC\x2\x8B0\x8AF\x3\x2\x2\x2\x8B0"+ + "\x8B1\x3\x2\x2\x2\x8B1\x8B2\x3\x2\x2\x2\x8B2\x8B4\x5\x162\xB2\x2\x8B3"+ + "\x8B0\x3\x2\x2\x2\x8B3\x8B4\x3\x2\x2\x2\x8B4\x15B\x3\x2\x2\x2\x8B5\x8B6"+ + "\t\x10\x2\x2\x8B6\x15D\x3\x2\x2\x2\x8B7\x8B8\t\x11\x2\x2\x8B8\x15F\x3"+ + "\x2\x2\x2\x8B9\x8D1\x5\x174\xBB\x2\x8BA\x8D1\x5\x17E\xC0\x2\x8BB\x8D1"+ + "\x5\x180\xC1\x2\x8BC\x8BE\a\xD8\x2\x2\x8BD\x8BF\x5\x1B6\xDC\x2\x8BE\x8BD"+ + "\x3\x2\x2\x2\x8BE\x8BF\x3\x2\x2\x2\x8BF\x8C0\x3\x2\x2\x2\x8C0\x8C2\x5"+ + "\x160\xB1\x2\x8C1\x8C3\x5\x1B6\xDC\x2\x8C2\x8C1\x3\x2\x2\x2\x8C2\x8C3"+ + "\x3\x2\x2\x2\x8C3\x8C4\x3\x2\x2\x2\x8C4\x8C5\a\xDF\x2\x2\x8C5\x8D1\x3"+ + "\x2\x2\x2\x8C6\x8C7\a\xC5\x2\x2\x8C7\x8C8\x5\x1B6\xDC\x2\x8C8\x8C9\x5"+ + "\x160\xB1\x2\x8C9\x8D1\x3\x2\x2\x2\x8CA\x8CB\a\x90\x2\x2\x8CB\x8CC\x5"+ + "\x1B6\xDC\x2\x8CC\x8CD\x5\x160\xB1\x2\x8CD\x8D1\x3\x2\x2\x2\x8CE\x8CF"+ + "\a\x30\x2\x2\x8CF\x8D1\x5\x172\xBA\x2\x8D0\x8B9\x3\x2\x2\x2\x8D0\x8BA"+ + "\x3\x2\x2\x2\x8D0\x8BB\x3\x2\x2\x2\x8D0\x8BC\x3\x2\x2\x2\x8D0\x8C6\x3"+ + "\x2\x2\x2\x8D0\x8CA\x3\x2\x2\x2\x8D0\x8CE\x3\x2\x2\x2\x8D1\x161\x3\x2"+ + "\x2\x2\x8D2\x8D4\a\xDB\x2\x2\x8D3\x8D5\x5\x1B6\xDC\x2\x8D4\x8D3\x3\x2"+ + "\x2\x2\x8D4\x8D5\x3\x2\x2\x2\x8D5\x8D8\x3\x2\x2\x2\x8D6\x8D9\x5\x16A\xB6"+ + "\x2\x8D7\x8D9\x5\x154\xAB\x2\x8D8\x8D6\x3\x2\x2\x2\x8D8\x8D7\x3\x2\x2"+ + "\x2\x8D9\x163\x3\x2\x2\x2\x8DA\x8DD\x5\x166\xB4\x2\x8DB\x8DD\x5\x168\xB5"+ + "\x2\x8DC\x8DA\x3\x2\x2\x2\x8DC\x8DB\x3\x2\x2\x2\x8DD\x165\x3\x2\x2\x2"+ + "\x8DE\x8E0\x5\x14C\xA7\x2\x8DF\x8E1\x5\x1B6\xDC\x2\x8E0\x8DF\x3\x2\x2"+ + "\x2\x8E0\x8E1\x3\x2\x2\x2\x8E1\x8E2\x3\x2\x2\x2\x8E2\x8E3\a,\x2\x2\x8E3"+ + "\x167\x3\x2\x2\x2\x8E4\x8E6\x5\x16A\xB6\x2\x8E5\x8E7\x5\x1B6\xDC\x2\x8E6"+ + "\x8E5\x3\x2\x2\x2\x8E6\x8E7\x3\x2\x2\x2\x8E7\x8E9\x3\x2\x2\x2\x8E8\x8EA"+ + "\a,\x2\x2\x8E9\x8E8\x3\x2\x2\x2\x8E9\x8EA\x3\x2\x2\x2\x8EA\x169\x3\x2"+ + "\x2\x2\x8EB\x8EC\t\x12\x2\x2\x8EC\x16B\x3\x2\x2\x2\x8ED\x8F0\x5\x15C\xAF"+ + "\x2\x8EE\x8F0\x5\x160\xB1\x2\x8EF\x8ED\x3\x2\x2\x2\x8EF\x8EE\x3\x2\x2"+ + "\x2\x8F0\x8F9\x3\x2\x2\x2\x8F1\x8F3\x5\x1B6\xDC\x2\x8F2\x8F1\x3\x2\x2"+ + "\x2\x8F2\x8F3\x3\x2\x2\x2\x8F3\x8F4\x3\x2\x2\x2\x8F4\x8F6\a\xD8\x2\x2"+ + "\x8F5\x8F7\x5\x1B6\xDC\x2\x8F6\x8F5\x3\x2\x2\x2\x8F6\x8F7\x3\x2\x2\x2"+ + "\x8F7\x8F8\x3\x2\x2\x2\x8F8\x8FA\a\xDF\x2\x2\x8F9\x8F2\x3\x2\x2\x2\x8F9"+ + "\x8FA\x3\x2\x2\x2\x8FA\x16D\x3\x2\x2\x2\x8FB\x8FC\t\x13\x2\x2\x8FC\x16F"+ + "\x3\x2\x2\x2\x8FD\x8FE\t\x14\x2\x2\x8FE\x171\x3\x2\x2\x2\x8FF\x900\b\xBA"+ + "\x1\x2\x900\x901\a\xC5\x2\x2\x901\x902\x5\x1B6\xDC\x2\x902\x903\x5\x172"+ + "\xBA\x13\x903\x922\x3\x2\x2\x2\x904\x905\a\x90\x2\x2\x905\x906\x5\x1B6"+ + "\xDC\x2\x906\x907\x5\x172\xBA\x12\x907\x922\x3\x2\x2\x2\x908\x90A\a\xDA"+ + "\x2\x2\x909\x90B\x5\x1B6\xDC\x2\x90A\x909\x3\x2\x2\x2\x90A\x90B\x3\x2"+ + "\x2\x2\x90B\x90C\x3\x2\x2\x2\x90C\x922\x5\x172\xBA\x10\x90D\x90F\a\x91"+ + "\x2\x2\x90E\x910\x5\x1B6\xDC\x2\x90F\x90E\x3\x2\x2\x2\x90F\x910\x3\x2"+ + "\x2\x2\x910\x911\x3\x2\x2\x2\x911\x922\x5\x172\xBA\t\x912\x913\a\x30\x2"+ + "\x2\x913\x922\x5\x172\xBA\x3\x914\x922\x5\x174\xBB\x2\x915\x922\x5\x17E"+ + "\xC0\x2\x916\x922\x5\x180\xC1\x2\x917\x919\a\xD8\x2\x2\x918\x91A\x5\x1B6"+ + "\xDC\x2\x919\x918\x3\x2\x2\x2\x919\x91A\x3\x2\x2\x2\x91A\x91B\x3\x2\x2"+ + "\x2\x91B\x91D\x5\x172\xBA\x2\x91C\x91E\x5\x1B6\xDC\x2\x91D\x91C\x3\x2"+ + "\x2\x2\x91D\x91E\x3\x2\x2\x2\x91E\x91F\x3\x2\x2\x2\x91F\x920\a\xDF\x2"+ + "\x2\x920\x922\x3\x2\x2\x2\x921\x8FF\x3\x2\x2\x2\x921\x904\x3\x2\x2\x2"+ + "\x921\x908\x3\x2\x2\x2\x921\x90D\x3\x2\x2\x2\x921\x912\x3\x2\x2\x2\x921"+ + "\x914\x3\x2\x2\x2\x921\x915\x3\x2\x2\x2\x921\x916\x3\x2\x2\x2\x921\x917"+ + "\x3\x2\x2\x2\x922\x991\x3\x2\x2\x2\x923\x925\f\x11\x2\x2\x924\x926\x5"+ + "\x1B6\xDC\x2\x925\x924\x3\x2\x2\x2\x925\x926\x3\x2\x2\x2\x926\x927\x3"+ + "\x2\x2\x2\x927\x929\a\xDE\x2\x2\x928\x92A\x5\x1B6\xDC\x2\x929\x928\x3"+ + "\x2\x2\x2\x929\x92A\x3\x2\x2\x2\x92A\x92B\x3\x2\x2\x2\x92B\x990\x5\x172"+ + "\xBA\x12\x92C\x92E\f\xF\x2\x2\x92D\x92F\x5\x1B6\xDC\x2\x92E\x92D\x3\x2"+ + "\x2\x2\x92E\x92F\x3\x2\x2\x2\x92F\x930\x3\x2\x2\x2\x930\x932\t\x15\x2"+ + "\x2\x931\x933\x5\x1B6\xDC\x2\x932\x931\x3\x2\x2\x2\x932\x933\x3\x2\x2"+ + "\x2\x933\x934\x3\x2\x2\x2\x934\x990\x5\x172\xBA\x10\x935\x937\f\xE\x2"+ + "\x2\x936\x938\x5\x1B6\xDC\x2\x937\x936\x3\x2\x2\x2\x937\x938\x3\x2\x2"+ + "\x2\x938\x939\x3\x2\x2\x2\x939\x93B\a\xD3\x2\x2\x93A\x93C\x5\x1B6\xDC"+ + "\x2\x93B\x93A\x3\x2\x2\x2\x93B\x93C\x3\x2\x2\x2\x93C\x93D\x3\x2\x2\x2"+ + "\x93D\x990\x5\x172\xBA\xF\x93E\x940\f\r\x2\x2\x93F\x941\x5\x1B6\xDC\x2"+ + "\x940\x93F\x3\x2\x2\x2\x940\x941\x3\x2\x2\x2\x941\x942\x3\x2\x2\x2\x942"+ + "\x944\a\x8D\x2\x2\x943\x945\x5\x1B6\xDC\x2\x944\x943\x3\x2\x2\x2\x944"+ + "\x945\x3\x2\x2\x2\x945\x946\x3\x2\x2\x2\x946\x990\x5\x172\xBA\xE\x947"+ + "\x949\f\f\x2\x2\x948\x94A\x5\x1B6\xDC\x2\x949\x948\x3\x2\x2\x2\x949\x94A"+ + "\x3\x2\x2\x2\x94A\x94B\x3\x2\x2\x2\x94B\x94D\t\x16\x2\x2\x94C\x94E\x5"+ + "\x1B6\xDC\x2\x94D\x94C\x3\x2\x2\x2\x94D\x94E\x3\x2\x2\x2\x94E\x94F\x3"+ + "\x2\x2\x2\x94F\x990\x5\x172\xBA\r\x950\x952\f\v\x2\x2\x951\x953\x5\x1B6"+ + "\xDC\x2\x952\x951\x3\x2\x2\x2\x952\x953\x3\x2\x2\x2\x953\x954\x3\x2\x2"+ + "\x2\x954\x956\a\x34\x2\x2\x955\x957\x5\x1B6\xDC\x2\x956\x955\x3\x2\x2"+ + "\x2\x956\x957\x3\x2\x2\x2\x957\x958\x3\x2\x2\x2\x958\x990\x5\x172\xBA"+ + "\f\x959\x95B\f\n\x2\x2\x95A\x95C\x5\x1B6\xDC\x2\x95B\x95A\x3\x2\x2\x2"+ + "\x95B\x95C\x3\x2\x2\x2\x95C\x95D\x3\x2\x2\x2\x95D\x95F\t\x11\x2\x2\x95E"+ + "\x960\x5\x1B6\xDC\x2\x95F\x95E\x3\x2\x2\x2\x95F\x960\x3\x2\x2\x2\x960"+ + "\x961\x3\x2\x2\x2\x961\x990\x5\x172\xBA\v\x962\x964\f\b\x2\x2\x963\x965"+ + "\x5\x1B6\xDC\x2\x964\x963\x3\x2\x2\x2\x964\x965\x3\x2\x2\x2\x965\x966"+ + "\x3\x2\x2\x2\x966\x968\a\x38\x2\x2\x967\x969\x5\x1B6\xDC\x2\x968\x967"+ + "\x3\x2\x2\x2\x968\x969\x3\x2\x2\x2\x969\x96A\x3\x2\x2\x2\x96A\x990\x5"+ + "\x172\xBA\t\x96B\x96D\f\a\x2\x2\x96C\x96E\x5\x1B6\xDC\x2\x96D\x96C\x3"+ + "\x2\x2\x2\x96D\x96E\x3\x2\x2\x2\x96E\x96F\x3\x2\x2\x2\x96F\x971\a\x9E"+ + "\x2\x2\x970\x972\x5\x1B6\xDC\x2\x971\x970\x3\x2\x2\x2\x971\x972\x3\x2"+ + "\x2\x2\x972\x973\x3\x2\x2\x2\x973\x990\x5\x172\xBA\b\x974\x976\f\x6\x2"+ + "\x2\x975\x977\x5\x1B6\xDC\x2\x976\x975\x3\x2\x2\x2\x976\x977\x3\x2\x2"+ + "\x2\x977\x978\x3\x2\x2\x2\x978\x97A\a\xD0\x2\x2\x979\x97B\x5\x1B6\xDC"+ + "\x2\x97A\x979\x3\x2\x2\x2\x97A\x97B\x3\x2\x2\x2\x97B\x97C\x3\x2\x2\x2"+ + "\x97C\x990\x5\x172\xBA\a\x97D\x97F\f\x5\x2\x2\x97E\x980\x5\x1B6\xDC\x2"+ + "\x97F\x97E\x3\x2\x2\x2\x97F\x980\x3\x2\x2\x2\x980\x981\x3\x2\x2\x2\x981"+ + "\x983\ah\x2\x2\x982\x984\x5\x1B6\xDC\x2\x983\x982\x3\x2\x2\x2\x983\x984"+ + "\x3\x2\x2\x2\x984\x985\x3\x2\x2\x2\x985\x990\x5\x172\xBA\x6\x986\x988"+ + "\f\x4\x2\x2\x987\x989\x5\x1B6\xDC\x2\x988\x987\x3\x2\x2\x2\x988\x989\x3"+ + "\x2\x2\x2\x989\x98A\x3\x2\x2\x2\x98A\x98C\az\x2\x2\x98B\x98D\x5\x1B6\xDC"+ + "\x2\x98C\x98B\x3\x2\x2\x2\x98C\x98D\x3\x2\x2\x2\x98D\x98E\x3\x2\x2\x2"+ + "\x98E\x990\x5\x172\xBA\x5\x98F\x923\x3\x2\x2\x2\x98F\x92C\x3\x2\x2\x2"+ + "\x98F\x935\x3\x2\x2\x2\x98F\x93E\x3\x2\x2\x2\x98F\x947\x3\x2\x2\x2\x98F"+ + "\x950\x3\x2\x2\x2\x98F\x959\x3\x2\x2\x2\x98F\x962\x3\x2\x2\x2\x98F\x96B"+ + "\x3\x2\x2\x2\x98F\x974\x3\x2\x2\x2\x98F\x97D\x3\x2\x2\x2\x98F\x986\x3"+ + "\x2\x2\x2\x990\x993\x3\x2\x2\x2\x991\x98F\x3\x2\x2\x2\x991\x992\x3\x2"+ + "\x2\x2\x992\x173\x3\x2\x2\x2\x993\x991\x3\x2\x2\x2\x994\x99C\x5\x16A\xB6"+ + "\x2\x995\x99C\a\xE7\x2\x2\x996\x99C\a\xE2\x2\x2\x997\x999\x5\x176\xBC"+ + "\x2\x998\x99A\x5\x16E\xB8\x2\x999\x998\x3\x2\x2\x2\x999\x99A\x3\x2\x2"+ + "\x2\x99A\x99C\x3\x2\x2\x2\x99B\x994\x3\x2\x2\x2\x99B\x995\x3\x2\x2\x2"+ + "\x99B\x996\x3\x2\x2\x2\x99B\x997\x3\x2\x2\x2\x99C\x175\x3\x2\x2\x2\x99D"+ + "\x9A1\x5\x178\xBD\x2\x99E\x9A1\x5\x17A\xBE\x2\x99F\x9A1\x5\x17C\xBF\x2"+ + "\x9A0\x99D\x3\x2\x2\x2\x9A0\x99E\x3\x2\x2\x2\x9A0\x99F\x3\x2\x2\x2\x9A1"+ + "\x177\x3\x2\x2\x2\x9A2\x9A3\t\x17\x2\x2\x9A3\x179\x3\x2\x2\x2\x9A4\x9A5"+ + "\a\x92\x2\x2\x9A5\x17B\x3\x2\x2\x2\x9A6\x9A7\t\x18\x2\x2\x9A7\x17D\x3"+ + "\x2\x2\x2\x9A8\x9A9\b\xC0\x1\x2\x9A9\x9B6\a\x8B\x2\x2\x9AA\x9B6\x5\x14E"+ + "\xA8\x2\x9AB\x9AD\a/\x2\x2\x9AC\x9AE\x5\x1B4\xDB\x2\x9AD\x9AC\x3\x2\x2"+ + "\x2\x9AD\x9AE\x3\x2\x2\x2\x9AE\x9AF\x3\x2\x2\x2\x9AF\x9B6\x5\x14C\xA7"+ + "\x2\x9B0\x9B2\a.\x2\x2\x9B1\x9B3\x5\x1B4\xDB\x2\x9B2\x9B1\x3\x2\x2\x2"+ + "\x9B2\x9B3\x3\x2\x2\x2\x9B3\x9B4\x3\x2\x2\x2\x9B4\x9B6\x5\x14C\xA7\x2"+ + "\x9B5\x9A8\x3\x2\x2\x2\x9B5\x9AA\x3\x2\x2\x2\x9B5\x9AB\x3\x2\x2\x2\x9B5"+ + "\x9B0\x3\x2\x2\x2\x9B6\x9DA\x3\x2\x2\x2\x9B7\x9B9\f\t\x2\x2\x9B8\x9BA"+ + "\x5\x1B6\xDC\x2\x9B9\x9B8\x3\x2\x2\x2\x9B9\x9BA\x3\x2\x2\x2\x9BA\x9BB"+ + "\x3\x2\x2\x2\x9BB\x9BD\a\xD8\x2\x2\x9BC\x9BE\x5\x1B6\xDC\x2\x9BD\x9BC"+ + "\x3\x2\x2\x2\x9BD\x9BE\x3\x2\x2\x2\x9BE\x9C0\x3\x2\x2\x2\x9BF\x9C1\x5"+ + "\x182\xC2\x2\x9C0\x9BF\x3\x2\x2\x2\x9C0\x9C1\x3\x2\x2\x2\x9C1\x9C3\x3"+ + "\x2\x2\x2\x9C2\x9C4\x5\x1B6\xDC\x2\x9C3\x9C2\x3\x2\x2\x2\x9C3\x9C4\x3"+ + "\x2\x2\x2\x9C4\x9C5\x3\x2\x2\x2\x9C5\x9D9\a\xDF\x2\x2\x9C6\x9C8\f\b\x2"+ + "\x2\x9C7\x9C9\x5\x1B4\xDB\x2\x9C8\x9C7\x3\x2\x2\x2\x9C8\x9C9\x3\x2\x2"+ + "\x2\x9C9\x9CA\x3\x2\x2\x2\x9CA\x9CC\a/\x2\x2\x9CB\x9CD\x5\x1B4\xDB\x2"+ + "\x9CC\x9CB\x3\x2\x2\x2\x9CC\x9CD\x3\x2\x2\x2\x9CD\x9CE\x3\x2\x2\x2\x9CE"+ + "\x9D9\x5\x14C\xA7\x2\x9CF\x9D1\f\a\x2\x2\x9D0\x9D2\x5\x1B4\xDB\x2\x9D1"+ + "\x9D0\x3\x2\x2\x2\x9D1\x9D2\x3\x2\x2\x2\x9D2\x9D3\x3\x2\x2\x2\x9D3\x9D5"+ + "\a.\x2\x2\x9D4\x9D6\x5\x1B4\xDB\x2\x9D5\x9D4\x3\x2\x2\x2\x9D5\x9D6\x3"+ + "\x2\x2\x2\x9D6\x9D7\x3\x2\x2\x2\x9D7\x9D9\x5\x14C\xA7\x2\x9D8\x9B7\x3"+ + "\x2\x2\x2\x9D8\x9C6\x3\x2\x2\x2\x9D8\x9CF\x3\x2\x2\x2\x9D9\x9DC\x3\x2"+ + "\x2\x2\x9DA\x9D8\x3\x2\x2\x2\x9DA\x9DB\x3\x2\x2\x2\x9DB\x17F\x3\x2\x2"+ + "\x2\x9DC\x9DA\x3\x2\x2\x2\x9DD\x9F3\x5\x15C\xAF\x2\x9DE\x9E0\a\xE0\x2"+ + "\x2\x9DF\x9E1\x5\x1B6\xDC\x2\x9E0\x9DF\x3\x2\x2\x2\x9E0\x9E1\x3\x2\x2"+ + "\x2\x9E1\x9E2\x3\x2\x2\x2\x9E2\x9E4\x5\x15C\xAF\x2\x9E3\x9E5\x5\x1B6\xDC"+ + "\x2\x9E4\x9E3\x3\x2\x2\x2\x9E4\x9E5\x3\x2\x2\x2\x9E5\x9E6\x3\x2\x2\x2"+ + "\x9E6\x9E7\a\xE1\x2\x2\x9E7\x9F3\x3\x2\x2\x2\x9E8\x9F3\a\x94\x2\x2\x9E9"+ + "\x9EB\a\xE0\x2\x2\x9EA\x9EC\x5\x1B6\xDC\x2\x9EB\x9EA\x3\x2\x2\x2\x9EB"+ + "\x9EC\x3\x2\x2\x2\x9EC\x9ED\x3\x2\x2\x2\x9ED\x9EF\a\x94\x2\x2\x9EE\x9F0"+ + "\x5\x1B6\xDC\x2\x9EF\x9EE\x3\x2\x2\x2\x9EF\x9F0\x3\x2\x2\x2\x9F0\x9F1"+ + "\x3\x2\x2\x2\x9F1\x9F3\a\xE1\x2\x2\x9F2\x9DD\x3\x2\x2\x2\x9F2\x9DE\x3"+ + "\x2\x2\x2\x9F2\x9E8\x3\x2\x2\x2\x9F2\x9E9\x3\x2\x2\x2\x9F3\x181\x3\x2"+ + "\x2\x2\x9F4\x9F5\x5\x184\xC3\x2\x9F5\x183\x3\x2\x2\x2\x9F6\x9F8\x5\x186"+ + "\xC4\x2\x9F7\x9F9\x5\x1B6\xDC\x2\x9F8\x9F7\x3\x2\x2\x2\x9F8\x9F9\x3\x2"+ + "\x2\x2\x9F9\x9FB\x3\x2\x2\x2\x9FA\x9F6\x3\x2\x2\x2\x9FB\x9FE\x3\x2\x2"+ + "\x2\x9FC\x9FA\x3\x2\x2\x2\x9FC\x9FD\x3\x2\x2\x2\x9FD\x9FF\x3\x2\x2\x2"+ + "\x9FE\x9FC\x3\x2\x2\x2\x9FF\xA0B\x5\x18A\xC6\x2\xA00\xA02\x5\x186\xC4"+ + "\x2\xA01\xA03\x5\x1B6\xDC\x2\xA02\xA01\x3\x2\x2\x2\xA02\xA03\x3\x2\x2"+ + "\x2\xA03\xA05\x3\x2\x2\x2\xA04\xA00\x3\x2\x2\x2\xA05\xA08\x3\x2\x2\x2"+ + "\xA06\xA04\x3\x2\x2\x2\xA06\xA07\x3\x2\x2\x2\xA07\xA09\x3\x2\x2\x2\xA08"+ + "\xA06\x3\x2\x2\x2\xA09\xA0B\x5\x18C\xC7\x2\xA0A\x9FC\x3\x2\x2\x2\xA0A"+ + "\xA06\x3\x2\x2\x2\xA0B\x185\x3\x2\x2\x2\xA0C\xA0E\x5\x188\xC5\x2\xA0D"+ + "\xA0F\x5\x1B6\xDC\x2\xA0E\xA0D\x3\x2\x2\x2\xA0E\xA0F\x3\x2\x2\x2\xA0F"+ + "\xA10\x3\x2\x2\x2\xA10\xA11\a+\x2\x2\xA11\xA17\x3\x2\x2\x2\xA12\xA14\x5"+ + "\x1B6\xDC\x2\xA13\xA12\x3\x2\x2\x2\xA13\xA14\x3\x2\x2\x2\xA14\xA15\x3"+ + "\x2\x2\x2\xA15\xA17\a+\x2\x2\xA16\xA0C\x3\x2\x2\x2\xA16\xA13\x3\x2\x2"+ + "\x2\xA17\x187\x3\x2\x2\x2\xA18\xA19\x5\x190\xC9\x2\xA19\x189\x3\x2\x2"+ + "\x2\xA1A\xA1B\x5\x190\xC9\x2\xA1B\x18B\x3\x2\x2\x2\xA1C\xA27\x5\x18E\xC8"+ + "\x2\xA1D\xA1F\x5\x1B6\xDC\x2\xA1E\xA1D\x3\x2\x2\x2\xA1E\xA1F\x3\x2\x2"+ + "\x2\xA1F\xA20\x3\x2\x2\x2\xA20\xA22\a+\x2\x2\xA21\xA23\x5\x1B6\xDC\x2"+ + "\xA22\xA21\x3\x2\x2\x2\xA22\xA23\x3\x2\x2\x2\xA23\xA24\x3\x2\x2\x2\xA24"+ + "\xA26\x5\x18E\xC8\x2\xA25\xA1E\x3\x2\x2\x2\xA26\xA29\x3\x2\x2\x2\xA27"+ + "\xA25\x3\x2\x2\x2\xA27\xA28\x3\x2\x2\x2\xA28\x18D\x3\x2\x2\x2\xA29\xA27"+ + "\x3\x2\x2\x2\xA2A\xA2C\x5\x14C\xA7\x2\xA2B\xA2D\x5\x1B6\xDC\x2\xA2C\xA2B"+ + "\x3\x2\x2\x2\xA2C\xA2D\x3\x2\x2\x2\xA2D\xA2E\x3\x2\x2\x2\xA2E\xA30\a\xD1"+ + "\x2\x2\xA2F\xA31\x5\x1B6\xDC\x2\xA30\xA2F\x3\x2\x2\x2\xA30\xA31\x3\x2"+ + "\x2\x2\xA31\xA32\x3\x2\x2\x2\xA32\xA33\x5\x190\xC9\x2\xA33\x18F\x3\x2"+ + "\x2\x2\xA34\xA35\a?\x2\x2\xA35\xA37\x5\x1B6\xDC\x2\xA36\xA34\x3\x2\x2"+ + "\x2\xA36\xA37\x3\x2\x2\x2\xA37\xA38\x3\x2\x2\x2\xA38\xA41\x5\x172\xBA"+ + "\x2\xA39\xA41\x5\x196\xCC\x2\xA3A\xA3B\x5\x192\xCA\x2\xA3B\xA3C\x5\x1B6"+ + "\xDC\x2\xA3C\xA3D\a\xC2\x2\x2\xA3D\xA3E\x5\x1B6\xDC\x2\xA3E\xA3F\x5\x194"+ + "\xCB\x2\xA3F\xA41\x3\x2\x2\x2\xA40\xA36\x3\x2\x2\x2\xA40\xA39\x3\x2\x2"+ + "\x2\xA40\xA3A\x3\x2\x2\x2\xA41\x191\x3\x2\x2\x2\xA42\xA43\x5\x172\xBA"+ + "\x2\xA43\x193\x3\x2\x2\x2\xA44\xA45\x5\x172\xBA\x2\xA45\x195\x3\x2\x2"+ + "\x2\xA46\xA47\a\x36\x2\x2\xA47\xA48\x5\x1B6\xDC\x2\xA48\xA49\x5\x172\xBA"+ + "\x2\xA49\x197\x3\x2\x2\x2\xA4A\xA4B\t\x19\x2\x2\xA4B\x199\x3\x2\x2\x2"+ + "\xA4C\xA4D\a;\x2\x2\xA4D\x19B\x3\x2\x2\x2\xA4E\xA4F\t\x1A\x2\x2\xA4F\x19D"+ + "\x3\x2\x2\x2\xA50\xA52\x5\x1B6\xDC\x2\xA51\xA50\x3\x2\x2\x2\xA51\xA52"+ + "\x3\x2\x2\x2\xA52\xA53\x3\x2\x2\x2\xA53\xA55\a\xE8\x2\x2\xA54\xA56\x5"+ + "\x1B6\xDC\x2\xA55\xA54\x3\x2\x2\x2\xA55\xA56\x3\x2\x2\x2\xA56\xA5C\x3"+ + "\x2\x2\x2\xA57\xA59\x5\x1B6\xDC\x2\xA58\xA57\x3\x2\x2\x2\xA58\xA59\x3"+ + "\x2\x2\x2\xA59\xA5A\x3\x2\x2\x2\xA5A\xA5C\x5\x1A2\xD2\x2\xA5B\xA51\x3"+ + "\x2\x2\x2\xA5B\xA58\x3\x2\x2\x2\xA5C\x19F\x3\x2\x2\x2\xA5D\xA66\x5\x19E"+ + "\xD0\x2\xA5E\xA60\x5\x1B6\xDC\x2\xA5F\xA5E\x3\x2\x2\x2\xA5F\xA60\x3\x2"+ + "\x2\x2\xA60\xA61\x3\x2\x2\x2\xA61\xA63\a,\x2\x2\xA62\xA64\x5\x1B6\xDC"+ + "\x2\xA63\xA62\x3\x2\x2\x2\xA63\xA64\x3\x2\x2\x2\xA64\xA66\x3\x2\x2\x2"+ + "\xA65\xA5D\x3\x2\x2\x2\xA65\xA5F\x3\x2\x2\x2\xA66\xA69\x3\x2\x2\x2\xA67"+ + "\xA65\x3\x2\x2\x2\xA67\xA68\x3\x2\x2\x2\xA68\x1A1\x3\x2\x2\x2\xA69\xA67"+ + "\x3\x2\x2\x2\xA6A\xA6E\x5\x1AA\xD6\x2\xA6B\xA6E\x5\x1A6\xD4\x2\xA6C\xA6E"+ + "\x5\x1A4\xD3\x2\xA6D\xA6A\x3\x2\x2\x2\xA6D\xA6B\x3\x2\x2\x2\xA6D\xA6C"+ + "\x3\x2\x2\x2\xA6E\x1A3\x3\x2\x2\x2\xA6F\xA71\a\xAF\x2\x2\xA70\xA72\x5"+ + "\x1B6\xDC\x2\xA71\xA70\x3\x2\x2\x2\xA71\xA72\x3\x2\x2\x2\xA72\xA73\x3"+ + "\x2\x2\x2\xA73\xA74\x5\x1A8\xD5\x2\xA74\x1A5\x3\x2\x2\x2\xA75\xA76\a\xE9"+ + "\x2\x2\xA76\xA77\x5\x1A8\xD5\x2\xA77\x1A7\x3\x2\x2\x2\xA78\xA7B\a\xEE"+ + "\x2\x2\xA79\xA7B\n\x1B\x2\x2\xA7A\xA78\x3\x2\x2\x2\xA7A\xA79\x3\x2\x2"+ + "\x2\xA7B\xA7E\x3\x2\x2\x2\xA7C\xA7A\x3\x2\x2\x2\xA7C\xA7D\x3\x2\x2\x2"+ + "\xA7D\x1A9\x3\x2\x2\x2\xA7E\xA7C\x3\x2\x2\x2\xA7F\xA85\a\xE9\x2\x2\xA80"+ + "\xA81\a\x31\x2\x2\xA81\xA83\x5\x1AC\xD7\x2\xA82\xA84\x5\x1B6\xDC\x2\xA83"+ + "\xA82\x3\x2\x2\x2\xA83\xA84\x3\x2\x2\x2\xA84\xA86\x3\x2\x2\x2\xA85\xA80"+ + "\x3\x2\x2\x2\xA86\xA87\x3\x2\x2\x2\xA87\xA85\x3\x2\x2\x2\xA87\xA88\x3"+ + "\x2\x2\x2\xA88\x1AB\x3\x2\x2\x2\xA89\xA8B\x5\x1AE\xD8\x2\xA8A\xA8C\x5"+ + "\x1B0\xD9\x2\xA8B\xA8A\x3\x2\x2\x2\xA8B\xA8C\x3\x2\x2\x2\xA8C\x1AD\x3"+ + "\x2\x2\x2\xA8D\xA8E\x5\x14C\xA7\x2\xA8E\x1AF\x3\x2\x2\x2\xA8F\xA90\x5"+ + "\x1B6\xDC\x2\xA90\xA91\x5\x1B2\xDA\x2\xA91\xACC\x3\x2\x2\x2\xA92\xA93"+ + "\x5\x1B6\xDC\x2\xA93\xA9C\x5\x1B2\xDA\x2\xA94\xA96\x5\x1B6\xDC\x2\xA95"+ + "\xA94\x3\x2\x2\x2\xA95\xA96\x3\x2\x2\x2\xA96\xA97\x3\x2\x2\x2\xA97\xA99"+ + "\a+\x2\x2\xA98\xA9A\x5\x1B6\xDC\x2\xA99\xA98\x3\x2\x2\x2\xA99\xA9A\x3"+ + "\x2\x2\x2\xA9A\xA9B\x3\x2\x2\x2\xA9B\xA9D\x5\x1B2\xDA\x2\xA9C\xA95\x3"+ + "\x2\x2\x2\xA9D\xA9E\x3\x2\x2\x2\xA9E\xA9C\x3\x2\x2\x2\xA9E\xA9F\x3\x2"+ + "\x2\x2\xA9F\xACC\x3\x2\x2\x2\xAA0\xAA2\x5\x1B6\xDC\x2\xAA1\xAA0\x3\x2"+ + "\x2\x2\xAA1\xAA2\x3\x2\x2\x2\xAA2\xAA3\x3\x2\x2\x2\xAA3\xAA5\a\xD8\x2"+ + "\x2\xAA4\xAA6\x5\x1B6\xDC\x2\xAA5\xAA4\x3\x2\x2\x2\xAA5\xAA6\x3\x2\x2"+ + "\x2\xAA6\xAA7\x3\x2\x2\x2\xAA7\xACC\a\xDF\x2\x2\xAA8\xAAA\x5\x1B6\xDC"+ + "\x2\xAA9\xAA8\x3\x2\x2\x2\xAA9\xAAA\x3\x2\x2\x2\xAAA\xAAB\x3\x2\x2\x2"+ + "\xAAB\xAAD\a\xD8\x2\x2\xAAC\xAAE\x5\x1B6\xDC\x2\xAAD\xAAC\x3\x2\x2\x2"+ + "\xAAD\xAAE\x3\x2\x2\x2\xAAE\xAAF\x3\x2\x2\x2\xAAF\xAB1\x5\x1B2\xDA\x2"+ + "\xAB0\xAB2\x5\x1B6\xDC\x2\xAB1\xAB0\x3\x2\x2\x2\xAB1\xAB2\x3\x2\x2\x2"+ + "\xAB2\xAB3\x3\x2\x2\x2\xAB3\xAB4\a\xDF\x2\x2\xAB4\xACC\x3\x2\x2\x2\xAB5"+ + "\xAB7\x5\x1B6\xDC\x2\xAB6\xAB5\x3\x2\x2\x2\xAB6\xAB7\x3\x2\x2\x2\xAB7"+ + "\xAB8\x3\x2\x2\x2\xAB8\xAB9\a\xD8\x2\x2\xAB9\xAC2\x5\x1B2\xDA\x2\xABA"+ + "\xABC\x5\x1B6\xDC\x2\xABB\xABA\x3\x2\x2\x2\xABB\xABC\x3\x2\x2\x2\xABC"+ + "\xABD\x3\x2\x2\x2\xABD\xABF\a+\x2\x2\xABE\xAC0\x5\x1B6\xDC\x2\xABF\xABE"+ + "\x3\x2\x2\x2\xABF\xAC0\x3\x2\x2\x2\xAC0\xAC1\x3\x2\x2\x2\xAC1\xAC3\x5"+ + "\x1B2\xDA\x2\xAC2\xABB\x3\x2\x2\x2\xAC3\xAC4\x3\x2\x2\x2\xAC4\xAC2\x3"+ + "\x2\x2\x2\xAC4\xAC5\x3\x2\x2\x2\xAC5\xAC7\x3\x2\x2\x2\xAC6\xAC8\x5\x1B6"+ + "\xDC\x2\xAC7\xAC6\x3\x2\x2\x2\xAC7\xAC8\x3\x2\x2\x2\xAC8\xAC9\x3\x2\x2"+ + "\x2\xAC9\xACA\a\xDF\x2\x2\xACA\xACC\x3\x2\x2\x2\xACB\xA8F\x3\x2\x2\x2"+ + "\xACB\xA92\x3\x2\x2\x2\xACB\xAA1\x3\x2\x2\x2\xACB\xAA9\x3\x2\x2\x2\xACB"+ + "\xAB6\x3\x2\x2\x2\xACC\x1B1\x3\x2\x2\x2\xACD\xACE\x5\x172\xBA\x2\xACE"+ + "\x1B3\x3\x2\x2\x2\xACF\xAD3\a\xEE\x2\x2\xAD0\xAD2\a\xEB\x2\x2\xAD1\xAD0"+ + "\x3\x2\x2\x2\xAD2\xAD5\x3\x2\x2\x2\xAD3\xAD1\x3\x2\x2\x2\xAD3\xAD4\x3"+ + "\x2\x2\x2\xAD4\x1B5\x3\x2\x2\x2\xAD5\xAD3\x3\x2\x2\x2\xAD6\xAD8\t\x1C"+ + "\x2\x2\xAD7\xAD6\x3\x2\x2\x2\xAD8\xAD9\x3\x2\x2\x2\xAD9\xAD7\x3\x2\x2"+ + "\x2\xAD9\xADA\x3\x2\x2\x2\xADA\x1B7\x3\x2\x2\x2\x19E\x1BE\x1C2\x1CA\x1D0"+ "\x1D3\x1DD\x1DF\x1E5\x1EE\x1F5\x1FB\x204\x20B\x20F\x213\x217\x21C\x228"+ "\x235\x238\x245\x248\x24F\x257\x25E\x286\x296\x29E\x2A3\x2A8\x2B1\x2C5"+ "\x2C9\x2D1\x2DC\x2E2\x2E6\x2EB\x2F2\x2F6\x300\x304\x307\x30D\x313\x31D"+ @@ -20902,16 +20916,16 @@ private bool upperCaseA_sempred(UpperCaseAContext _localctx, int predIndex) { "\x79B\x7A1\x7A5\x7AA\x7AF\x7B1\x7B7\x7C2\x7C7\x7CD\x7D1\x7D6\x7DB\x7DF"+ "\x7E3\x7E5\x7E9\x7EB\x7F0\x804\x806\x80C\x80E\x812\x816\x819\x81C\x820"+ "\x823\x827\x82B\x82D\x833\x835\x839\x83D\x842\x846\x84A\x84C\x852\x856"+ - "\x85C\x860\x864\x868\x870\x874\x879\x881\x888\x88C\x896\x89C\x8A3\x8A7"+ - "\x8AB\x8AF\x8B2\x8BD\x8C1\x8CF\x8D3\x8D7\x8DB\x8DF\x8E5\x8E8\x8EE\x8F1"+ - "\x8F5\x8F8\x909\x90E\x918\x91C\x920\x924\x928\x92D\x931\x936\x93A\x93F"+ - "\x943\x948\x94C\x951\x955\x95A\x95E\x963\x967\x96C\x970\x975\x979\x97E"+ - "\x982\x987\x98B\x98E\x990\x998\x99A\x99F\x9AC\x9B1\x9B4\x9B8\x9BC\x9BF"+ - "\x9C2\x9C7\x9CB\x9D0\x9D4\x9D7\x9D9\x9DF\x9E3\x9EA\x9EE\x9F1\x9F7\x9FB"+ - "\xA01\xA05\xA09\xA0D\xA12\xA15\xA1D\xA21\xA26\xA2B\xA2F\xA35\xA3F\xA50"+ - "\xA54\xA57\xA5A\xA5E\xA62\xA64\xA66\xA6C\xA70\xA79\xA7B\xA82\xA86\xA8A"+ - "\xA94\xA98\xA9D\xAA0\xAA4\xAA8\xAAC\xAB0\xAB5\xABA\xABE\xAC3\xAC6\xACA"+ - "\xAD2\xAD8"; + "\x85C\x860\x864\x868\x870\x874\x879\x881\x888\x88C\x897\x89D\x8A4\x8A8"+ + "\x8AC\x8B0\x8B3\x8BE\x8C2\x8D0\x8D4\x8D8\x8DC\x8E0\x8E6\x8E9\x8EF\x8F2"+ + "\x8F6\x8F9\x90A\x90F\x919\x91D\x921\x925\x929\x92E\x932\x937\x93B\x940"+ + "\x944\x949\x94D\x952\x956\x95B\x95F\x964\x968\x96D\x971\x976\x97A\x97F"+ + "\x983\x988\x98C\x98F\x991\x999\x99B\x9A0\x9AD\x9B2\x9B5\x9B9\x9BD\x9C0"+ + "\x9C3\x9C8\x9CC\x9D1\x9D5\x9D8\x9DA\x9E0\x9E4\x9EB\x9EF\x9F2\x9F8\x9FC"+ + "\xA02\xA06\xA0A\xA0E\xA13\xA16\xA1E\xA22\xA27\xA2C\xA30\xA36\xA40\xA51"+ + "\xA55\xA58\xA5B\xA5F\xA63\xA65\xA67\xA6D\xA71\xA7A\xA7C\xA83\xA87\xA8B"+ + "\xA95\xA99\xA9E\xAA1\xAA5\xAA9\xAAD\xAB1\xAB6\xABB\xABF\xAC4\xAC7\xACB"+ + "\xAD3\xAD9"; public static readonly ATN _ATN = new ATNDeserializer().Deserialize(_serializedATN.ToCharArray()); } diff --git a/Rubberduck.Parsing/Grammar/VBAParser.g4 b/Rubberduck.Parsing/Grammar/VBAParser.g4 index 9c1c37faa2..0fbde616eb 100644 --- a/Rubberduck.Parsing/Grammar/VBAParser.g4 +++ b/Rubberduck.Parsing/Grammar/VBAParser.g4 @@ -525,7 +525,7 @@ unrestrictedIdentifier : identifier | statementKeyword | markerKeyword; identifier : untypedIdentifier | typedIdentifier; untypedIdentifier : identifierValue; typedIdentifier : identifierValue typeHint; -identifierValue : IDENTIFIER | keyword | foreignName; +identifierValue : IDENTIFIER | keyword | foreignName | BF; foreignName : L_SQUARE_BRACKET foreignIdentifier* R_SQUARE_BRACKET; foreignIdentifier : ~(L_SQUARE_BRACKET | R_SQUARE_BRACKET) | foreignName; diff --git a/Rubberduck.Parsing/Grammar/VBAParserBaseListener.cs b/Rubberduck.Parsing/Grammar/VBAParserBaseListener.cs index 168ea8a87c..7c144d4a73 100644 --- a/Rubberduck.Parsing/Grammar/VBAParserBaseListener.cs +++ b/Rubberduck.Parsing/Grammar/VBAParserBaseListener.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -// Generated from C:\Work\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 +// Generated from C:\Dev\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 // Unreachable code detected #pragma warning disable 0162 diff --git a/Rubberduck.Parsing/Grammar/VBAParserBaseVisitor.cs b/Rubberduck.Parsing/Grammar/VBAParserBaseVisitor.cs index 15c58da921..edf86d5823 100644 --- a/Rubberduck.Parsing/Grammar/VBAParserBaseVisitor.cs +++ b/Rubberduck.Parsing/Grammar/VBAParserBaseVisitor.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -// Generated from C:\Work\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 +// Generated from C:\Dev\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 // Unreachable code detected #pragma warning disable 0162 diff --git a/Rubberduck.Parsing/Grammar/VBAParserListener.cs b/Rubberduck.Parsing/Grammar/VBAParserListener.cs index fa97d82666..9489714147 100644 --- a/Rubberduck.Parsing/Grammar/VBAParserListener.cs +++ b/Rubberduck.Parsing/Grammar/VBAParserListener.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -// Generated from C:\Work\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 +// Generated from C:\Dev\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 // Unreachable code detected #pragma warning disable 0162 diff --git a/Rubberduck.Parsing/Grammar/VBAParserVisitor.cs b/Rubberduck.Parsing/Grammar/VBAParserVisitor.cs index f67380aeac..0c2912e460 100644 --- a/Rubberduck.Parsing/Grammar/VBAParserVisitor.cs +++ b/Rubberduck.Parsing/Grammar/VBAParserVisitor.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -// Generated from C:\Work\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 +// Generated from C:\Dev\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3 // Unreachable code detected #pragma warning disable 0162 diff --git a/Rubberduck.Parsing/Rubberduck.Parsing.csproj b/Rubberduck.Parsing/Rubberduck.Parsing.csproj index 3be2ce65d8..1c48487d15 100644 --- a/Rubberduck.Parsing/Rubberduck.Parsing.csproj +++ b/Rubberduck.Parsing/Rubberduck.Parsing.csproj @@ -305,11 +305,11 @@ - + MSBuild:Compile Rubberduck.Parsing.Grammar Always - + MSBuild:Compile diff --git a/RubberduckTests/Grammar/ResolverTests.cs b/RubberduckTests/Grammar/ResolverTests.cs index 63808f45b8..e241ce4228 100644 --- a/RubberduckTests/Grammar/ResolverTests.cs +++ b/RubberduckTests/Grammar/ResolverTests.cs @@ -2422,5 +2422,67 @@ End Sub Assert.IsTrue(declaration.References.ElementAt(0).IsAssignment); } + + //https://github.com/rubberduck-vba/Rubberduck/issues/2478 + [TestMethod] + public void VariableNamedBfResolvesAsAVariable() + { + // arrange + var code = @" +Public Sub Test() + Dim bf As Integer + Debug.Print bf +End Sub +"; + // act + var state = Resolve(code); + + // assert + var declaration = state.AllUserDeclarations.SingleOrDefault(item => + item.DeclarationType == DeclarationType.Variable && item.IdentifierName == "bf"); + + Assert.IsNotNull(declaration); + } + + //https://github.com/rubberduck-vba/Rubberduck/issues/2478 + [TestMethod] + public void ProcedureNamedBfResolvesAsAProcedure() + { + // arrange + var code = @" +Public Sub Bf() + Debug.Print ""I'm cool with that"" +End Sub +"; + // act + var state = Resolve(code); + + // assert + var declaration = state.AllUserDeclarations.SingleOrDefault(item => + item.DeclarationType == DeclarationType.Procedure && item.IdentifierName == "Bf"); + + Assert.IsNotNull(declaration); + } + + //https://github.com/rubberduck-vba/Rubberduck/issues/2478 + [TestMethod] + public void TypeNamedBfResolvesAsAType() + { + // arrange + var code = @" +Private Type Bf + b As Long + f As Long +End Type +"; + // act + var state = Resolve(code); + + // assert + var declaration = state.AllUserDeclarations.SingleOrDefault(item => + item.DeclarationType == DeclarationType.UserDefinedType && item.IdentifierName == "Bf"); + + Assert.IsNotNull(declaration); + } } } From 83cce666a6228a803f1de3bf4c1a2a95386f8b9a Mon Sep 17 00:00:00 2001 From: comintern Date: Thu, 12 Jan 2017 20:53:04 -0600 Subject: [PATCH 03/18] Add Hungarian notation inspection, whitelist quickfix. --- .../HungarianNotationInspection.cs | 24 +- .../AddIdentifierToWhiteListQuickFix.cs | 37 +++ .../Resources/InspectionsUI.Designer.cs | 22 +- .../Inspections/Resources/InspectionsUI.resx | 6 +- .../HungarianNotationInspectionResult.cs | 42 --- ...t.cs => IdentifierNameInspectionResult.cs} | 11 +- .../UseMeaningfulNameInspection.cs | 2 +- RetailCoder.VBE/Rubberduck.csproj | 4 +- .../Inspections/GeneralInspectionTests.cs | 4 +- .../HungarianNotationInspectionTests.cs | 245 ++++++++++++++++++ .../UseMeaningfulNameInspectionTests.cs | 5 +- RubberduckTests/RubberduckTests.csproj | 1 + 12 files changed, 331 insertions(+), 72 deletions(-) create mode 100644 RetailCoder.VBE/Inspections/QuickFixes/AddIdentifierToWhiteListQuickFix.cs delete mode 100644 RetailCoder.VBE/Inspections/Results/HungarianNotationInspectionResult.cs rename RetailCoder.VBE/Inspections/Results/{UseMeaningfulNameInspectionResult.cs => IdentifierNameInspectionResult.cs} (54%) create mode 100644 RubberduckTests/Inspections/HungarianNotationInspectionTests.cs diff --git a/RetailCoder.VBE/Inspections/HungarianNotationInspection.cs b/RetailCoder.VBE/Inspections/HungarianNotationInspection.cs index 8d69db5c0c..7be5f8194c 100644 --- a/RetailCoder.VBE/Inspections/HungarianNotationInspection.cs +++ b/RetailCoder.VBE/Inspections/HungarianNotationInspection.cs @@ -9,6 +9,9 @@ using Rubberduck.Inspections.Results; using Rubberduck.Parsing.Symbols; using Rubberduck.Parsing.VBA; +using Rubberduck.Settings; +using Rubberduck.SettingsProvider; +using Rubberduck.UI; namespace Rubberduck.Inspections { @@ -95,9 +98,14 @@ public sealed class HungarianNotationInspection : InspectionBase #endregion - public HungarianNotationInspection(RubberduckParserState state, CodeInspectionSeverity defaultSeverity = CodeInspectionSeverity.Suggestion) - : base(state, defaultSeverity) + private readonly IMessageBox _messageBox; + private readonly IPersistanceService _settings; + + public HungarianNotationInspection(IMessageBox messageBox, RubberduckParserState state, IPersistanceService settings) + : base(state, CodeInspectionSeverity.Suggestion) { + _messageBox = messageBox; + _settings = settings; } public override string Description @@ -112,11 +120,15 @@ public override CodeInspectionType InspectionType public override IEnumerable GetInspectionResults() { + var settings = _settings.Load(new CodeInspectionSettings()) ?? new CodeInspectionSettings(); + var whitelistedNames = settings.WhitelistedIdentifiers.Select(s => s.Identifier).ToList(); + var hungarians = UserDeclarations - .Where(declaration => TargetDeclarationTypes.Contains(declaration.DeclarationType) && - HungarianIdentifierRegex.IsMatch(declaration.IdentifierName)) - .Select(issue => new HungarianNotationInspectionResult(this, issue)) - .ToList(); + .Where(declaration => !whitelistedNames.Contains(declaration.IdentifierName) && + TargetDeclarationTypes.Contains(declaration.DeclarationType) && + HungarianIdentifierRegex.IsMatch(declaration.IdentifierName)) + .Select(issue => new IdentifierNameInspectionResult(this, issue, State, _messageBox, _settings)) + .ToList(); return hungarians; } } diff --git a/RetailCoder.VBE/Inspections/QuickFixes/AddIdentifierToWhiteListQuickFix.cs b/RetailCoder.VBE/Inspections/QuickFixes/AddIdentifierToWhiteListQuickFix.cs new file mode 100644 index 0000000000..8bdbc9b6e0 --- /dev/null +++ b/RetailCoder.VBE/Inspections/QuickFixes/AddIdentifierToWhiteListQuickFix.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Antlr4.Runtime; +using Rubberduck.Inspections.Abstract; +using Rubberduck.Inspections.Resources; +using Rubberduck.Parsing.Symbols; +using Rubberduck.Settings; +using Rubberduck.SettingsProvider; +using Rubberduck.VBEditor; + +namespace Rubberduck.Inspections.QuickFixes +{ + public class AddIdentifierToWhiteListQuickFix : QuickFixBase + { + private readonly IPersistanceService _settings; + private readonly Declaration _target; + + public AddIdentifierToWhiteListQuickFix(ParserRuleContext context, QualifiedSelection selection, Declaration target, IPersistanceService settings) + : base(context, selection, InspectionsUI.WhiteListIdentifierQuickFix) + { + _settings = settings; + _target = target; + } + + public override void Fix() + { + var inspectionSettings = _settings.Load(new CodeInspectionSettings()) ?? new CodeInspectionSettings(); + var whitelist = inspectionSettings.WhitelistedIdentifiers; + inspectionSettings.WhitelistedIdentifiers = + whitelist.Concat(new[] { new WhitelistedIdentifierSetting(_target.IdentifierName) }).ToArray(); + _settings.Save(inspectionSettings); + } + } +} diff --git a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs index b9cdab2903..730ce46b56 100644 --- a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs +++ b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs @@ -315,9 +315,9 @@ public static string HungarianNotationInspectionName { /// /// Looks up a localized string similar to Consider renaming {0} '{1}'. /// - public static string HungarianNotationInspectionResultFormat { + public static string IdentifierNameInspectionResultFormat { get { - return ResourceManager.GetString("HungarianNotationInspectionResultFormat", resourceCulture); + return ResourceManager.GetString("IdentifierNameInspectionResultFormat", resourceCulture); } } @@ -1420,15 +1420,6 @@ public static string UseMeaningfulNameInspectionName { } } - /// - /// Looks up a localized string similar to Consider renaming {0} '{1}'. - /// - public static string UseMeaningfulNameInspectionResultFormat { - get { - return ResourceManager.GetString("UseMeaningfulNameInspectionResultFormat", resourceCulture); - } - } - /// /// Looks up a localized string similar to A variable is declared, but never assigned a value/reference. If Rubberduck is correct, the variable could probably be safely removed.. /// @@ -1501,6 +1492,15 @@ public static string VariableTypeNotDeclaredInspectionResultFormat { } } + /// + /// Looks up a localized string similar to Add to whitelist. + /// + public static string WhiteListIdentifierQuickFix { + get { + return ResourceManager.GetString("WhiteListIdentifierQuickFix", resourceCulture); + } + } + /// /// Looks up a localized string similar to A property that exposes a mutator but no accessor is a design smell and makes a confusing API. Consider exposing a getter, or converting the mutator to a method.. /// diff --git a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx index 77e55b2df2..586ba61d22 100644 --- a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx +++ b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx @@ -317,7 +317,7 @@ If the parameter can be null, ignore this inspection result; passing a null valu Implement as function and update usages. - + Consider renaming {0} '{1}' @@ -612,7 +612,7 @@ If the parameter can be null, ignore this inspection result; passing a null valu Variable uses Hungarian notation. - - Consider renaming {0} '{1}' + + Add to whitelist \ No newline at end of file diff --git a/RetailCoder.VBE/Inspections/Results/HungarianNotationInspectionResult.cs b/RetailCoder.VBE/Inspections/Results/HungarianNotationInspectionResult.cs deleted file mode 100644 index 59888c8247..0000000000 --- a/RetailCoder.VBE/Inspections/Results/HungarianNotationInspectionResult.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using Antlr4.Runtime; -using Rubberduck.Common; -using Rubberduck.Inspections.Abstract; -using Rubberduck.Inspections.QuickFixes; -using Rubberduck.Inspections.Resources; -using Rubberduck.Parsing.Symbols; -using Rubberduck.UI; -using Rubberduck.VBEditor; - -namespace Rubberduck.Inspections.Results -{ - public sealed class HungarianNotationInspectionResult : InspectionResultBase - { - private readonly IEnumerable _quickFixes; - - public HungarianNotationInspectionResult(IInspection inspection, Declaration target) - : base(inspection, target) - { - _quickFixes = new QuickFixBase[] - { - new IgnoreOnceQuickFix(Context, QualifiedSelection, Inspection.AnnotationName), - }; - } - - public override string Description - { - get - { - return - string.Format(InspectionsUI.HungarianNotationInspectionResultFormat, - RubberduckUI.ResourceManager.GetString("DeclarationType_" + Target.DeclarationType, - UI.Settings.Settings.Culture), Target.IdentifierName).Captialize(); - } - } - - public override NavigateCodeEventArgs GetNavigationArgs() - { - return new NavigateCodeEventArgs(Target); - } - } -} diff --git a/RetailCoder.VBE/Inspections/Results/UseMeaningfulNameInspectionResult.cs b/RetailCoder.VBE/Inspections/Results/IdentifierNameInspectionResult.cs similarity index 54% rename from RetailCoder.VBE/Inspections/Results/UseMeaningfulNameInspectionResult.cs rename to RetailCoder.VBE/Inspections/Results/IdentifierNameInspectionResult.cs index f01782fbd9..1988060398 100644 --- a/RetailCoder.VBE/Inspections/Results/UseMeaningfulNameInspectionResult.cs +++ b/RetailCoder.VBE/Inspections/Results/IdentifierNameInspectionResult.cs @@ -5,21 +5,24 @@ using Rubberduck.Inspections.Resources; using Rubberduck.Parsing.Symbols; using Rubberduck.Parsing.VBA; +using Rubberduck.Settings; +using Rubberduck.SettingsProvider; using Rubberduck.UI; namespace Rubberduck.Inspections.Results { - public class UseMeaningfulNameInspectionResult : InspectionResultBase + public class IdentifierNameInspectionResult : InspectionResultBase { private readonly IEnumerable _quickFixes; - public UseMeaningfulNameInspectionResult(IInspection inspection, Declaration target, RubberduckParserState parserState, IMessageBox messageBox) + public IdentifierNameInspectionResult(IInspection inspection, Declaration target, RubberduckParserState parserState, IMessageBox messageBox, IPersistanceService settings) : base(inspection, target) { _quickFixes = new QuickFixBase[] { new RenameDeclarationQuickFix(target.Context, target.QualifiedSelection, target, parserState, messageBox), - new IgnoreOnceQuickFix(Context, QualifiedSelection, Inspection.AnnotationName), + new IgnoreOnceQuickFix(Context, target.QualifiedSelection, Inspection.AnnotationName), + new AddIdentifierToWhiteListQuickFix(Context, target.QualifiedSelection, target, settings) }; } @@ -27,7 +30,7 @@ public UseMeaningfulNameInspectionResult(IInspection inspection, Declaration tar public override string Description { - get { return string.Format(InspectionsUI.UseMeaningfulNameInspectionResultFormat, RubberduckUI.ResourceManager.GetString("DeclarationType_" + Target.DeclarationType, UI.Settings.Settings.Culture), Target.IdentifierName).Captialize(); } + get { return string.Format(InspectionsUI.IdentifierNameInspectionResultFormat, RubberduckUI.ResourceManager.GetString("DeclarationType_" + Target.DeclarationType, UI.Settings.Settings.Culture), Target.IdentifierName).Captialize(); } } public override NavigateCodeEventArgs GetNavigationArgs() diff --git a/RetailCoder.VBE/Inspections/UseMeaningfulNameInspection.cs b/RetailCoder.VBE/Inspections/UseMeaningfulNameInspection.cs index 81f6fa664c..44f9357a82 100644 --- a/RetailCoder.VBE/Inspections/UseMeaningfulNameInspection.cs +++ b/RetailCoder.VBE/Inspections/UseMeaningfulNameInspection.cs @@ -39,7 +39,7 @@ public override IEnumerable GetInspectionResults() char.IsDigit(declaration.IdentifierName.Last()) || !declaration.IdentifierName.Any(c => "aeiouy".Any(a => string.Compare(a.ToString(), c.ToString(), StringComparison.OrdinalIgnoreCase) == 0)))) - .Select(issue => new UseMeaningfulNameInspectionResult(this, issue, State, _messageBox)) + .Select(issue => new IdentifierNameInspectionResult(this, issue, State, _messageBox, _settings)) .ToList(); return issues; diff --git a/RetailCoder.VBE/Rubberduck.csproj b/RetailCoder.VBE/Rubberduck.csproj index 32c4ac817f..9bed8ab93f 100644 --- a/RetailCoder.VBE/Rubberduck.csproj +++ b/RetailCoder.VBE/Rubberduck.csproj @@ -367,13 +367,13 @@ + True True InspectionsUI.resx - @@ -544,7 +544,7 @@ - + diff --git a/RubberduckTests/Inspections/GeneralInspectionTests.cs b/RubberduckTests/Inspections/GeneralInspectionTests.cs index a5744f1daa..c75186a1a3 100644 --- a/RubberduckTests/Inspections/GeneralInspectionTests.cs +++ b/RubberduckTests/Inspections/GeneralInspectionTests.cs @@ -60,7 +60,9 @@ public void InspectionResultFormatStringsExist() typeof(ConstantNotUsedInspection).Name, typeof(ParameterNotUsedInspection).Name, typeof(ProcedureNotUsedInspection).Name, - typeof(VariableNotUsedInspection).Name + typeof(VariableNotUsedInspection).Name, + typeof(UseMeaningfulNameInspection).Name, + typeof(HungarianNotationInspection).Name }; var inspections = typeof(InspectionBase).Assembly.GetTypes() diff --git a/RubberduckTests/Inspections/HungarianNotationInspectionTests.cs b/RubberduckTests/Inspections/HungarianNotationInspectionTests.cs new file mode 100644 index 0000000000..84d120deb5 --- /dev/null +++ b/RubberduckTests/Inspections/HungarianNotationInspectionTests.cs @@ -0,0 +1,245 @@ +using System.Linq; +using System.Threading; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using Rubberduck.Inspections; +using Rubberduck.Parsing.VBA; +using Rubberduck.VBEditor.Application; +using Rubberduck.VBEditor.Events; +using Rubberduck.VBEditor.SafeComWrappers; +using RubberduckTests.Mocks; + +namespace RubberduckTests.Inspections +{ + [TestClass] + public class HungarianNotationInspectionTests + { + [TestMethod] + [TestCategory("Inspections")] + public void HungarianNotation_ReturnsResult_VariableWithThreeLetterPrefix() + { + const string inputCode = +@"Sub Hungarian() + Dim strFoo As String +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new HungarianNotationInspection(null, parser.State, UseMeaningfulNameInspectionTests.GetInspectionSettings().Object); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void HungarianNotation_ReturnsResult_VariableWithOneLetterPrefix() + { + const string inputCode = +@"Sub Hungarian() + Dim oFoo As Object +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new HungarianNotationInspection(null, parser.State, UseMeaningfulNameInspectionTests.GetInspectionSettings().Object); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void HungarianNotation_ReturnsResult_ForClass() + { + const string inputCode = +@"Sub Test() + Debug.Print ""Ez egy objektum"" +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("clsMagyar", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new HungarianNotationInspection(null, parser.State, UseMeaningfulNameInspectionTests.GetInspectionSettings().Object); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void HungarianNotation_DoesNotReturnsResult_AllLowerCase() + { + const string inputCode = +@"Sub NoHungarianHere() + Dim strong As Variant +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new HungarianNotationInspection(null, parser.State, UseMeaningfulNameInspectionTests.GetInspectionSettings().Object); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void HungarianNotation_DoesNotReturnsResult_UpperCaseFirstLetter() + { + const string inputCode = +@"Option Explicit"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("Stripper", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new HungarianNotationInspection(null, parser.State, UseMeaningfulNameInspectionTests.GetInspectionSettings().Object); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void HungarianNotation_DoesNotReturnsResult_ThreeLetterVariable() + { + const string inputCode = +@"Sub InExcelSomewhere() + Dim col As Long +End Sub"; + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new HungarianNotationInspection(null, parser.State, UseMeaningfulNameInspectionTests.GetInspectionSettings().Object); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void HungarianNotation_DoesNotReturnResult_WhenIgnored() + { + const string inputCode = +@"Sub MagyarRendbenVan() + '@Ignore HungarianNotation + Dim strFoo As Variant +End Sub"; + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new UseMeaningfulNameInspection(null, parser.State, UseMeaningfulNameInspectionTests.GetInspectionSettings().Object); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void HungarianNotation_DoesNotReturnResult_WhenWhitelisted() + { + const string inputCode = +@"Sub Feherlista() + Dim oRange As Object +End Sub"; + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new UseMeaningfulNameInspection(null, parser.State, UseMeaningfulNameInspectionTests.GetInspectionSettings().Object); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + } +} diff --git a/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs b/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs index 729f2141bc..d056d84208 100644 --- a/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs +++ b/RubberduckTests/Inspections/UseMeaningfulNameInspectionTests.cs @@ -296,13 +296,14 @@ public void InspectionName() Assert.AreEqual(inspectionName, inspection.Name); } - private Mock> GetInspectionSettings() + internal static Mock> GetInspectionSettings() { var settings = new Mock>(); settings.Setup(s => s.Load(It.IsAny())) .Returns(new CodeInspectionSettings(null, new[] { - new WhitelistedIdentifierSetting("sss") + new WhitelistedIdentifierSetting("sss"), + new WhitelistedIdentifierSetting("oRange") }, true)); return settings; diff --git a/RubberduckTests/RubberduckTests.csproj b/RubberduckTests/RubberduckTests.csproj index 2dc2c781c6..ddb94302d7 100644 --- a/RubberduckTests/RubberduckTests.csproj +++ b/RubberduckTests/RubberduckTests.csproj @@ -89,6 +89,7 @@ + From c31507946a85ca9af0427ae8ec898e005cc427c2 Mon Sep 17 00:00:00 2001 From: comintern Date: Thu, 12 Jan 2017 21:02:48 -0600 Subject: [PATCH 04/18] Fix missed identifier name changes. --- RetailCoder.VBE/Inspections/Resources/InspectionsUI.de.resx | 2 +- RetailCoder.VBE/Inspections/Resources/InspectionsUI.fr.resx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.de.resx b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.de.resx index 2e169d28a1..d30a840417 100644 --- a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.de.resx +++ b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.de.resx @@ -317,7 +317,7 @@ Falls der Parameter 'null' sein kann, bitte dieses Auftreten ignorieren. 'null' Implementiere als Funktion und passe die Aufrufe an - + Übelege die Umbenennung {0} '{1}' diff --git a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.fr.resx b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.fr.resx index 14de829bee..b0f047333c 100644 --- a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.fr.resx +++ b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.fr.resx @@ -313,7 +313,7 @@ Implémenter comme une fonction, et mettre à jour les appels - + Considérez renommer {0} '{1}' From edc0acb695324b10b6e89cb339849105a0a80abb Mon Sep 17 00:00:00 2001 From: comintern Date: Fri, 13 Jan 2017 19:46:14 -0600 Subject: [PATCH 05/18] Add IsExtensible member to declarations, restrict to interfaces (per MIDL spec). --- Rubberduck.Parsing/ComReflection/ComCoClass.cs | 5 +++++ Rubberduck.Parsing/ComReflection/ComInterface.cs | 6 +++++- Rubberduck.Parsing/ComReflection/ComType.cs | 7 ++----- Rubberduck.Parsing/Symbols/ClassModuleDeclaration.cs | 8 +++++++- Rubberduck.Parsing/Symbols/SerializableDeclaration.cs | 9 ++++++++- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Rubberduck.Parsing/ComReflection/ComCoClass.cs b/Rubberduck.Parsing/ComReflection/ComCoClass.cs index 7bb7e99444..a056ac854d 100644 --- a/Rubberduck.Parsing/ComReflection/ComCoClass.cs +++ b/Rubberduck.Parsing/ComReflection/ComCoClass.cs @@ -15,6 +15,11 @@ public class ComCoClass : ComType, IComTypeWithMembers private readonly Dictionary _interfaces = new Dictionary(); private readonly List _events = new List(); + public bool IsExtensible + { + get { return _interfaces.Keys.Any(i => i.IsExtensible); } + } + public ComInterface DefaultInterface { get; private set; } public IEnumerable EventInterfaces diff --git a/Rubberduck.Parsing/ComReflection/ComInterface.cs b/Rubberduck.Parsing/ComReflection/ComInterface.cs index 46ff32a177..3352343c0c 100644 --- a/Rubberduck.Parsing/ComReflection/ComInterface.cs +++ b/Rubberduck.Parsing/ComReflection/ComInterface.cs @@ -7,6 +7,7 @@ using TYPEATTR = System.Runtime.InteropServices.ComTypes.TYPEATTR; using FUNCDESC = System.Runtime.InteropServices.ComTypes.FUNCDESC; using CALLCONV = System.Runtime.InteropServices.ComTypes.CALLCONV; +using TYPEFLAGS = System.Runtime.InteropServices.ComTypes.TYPEFLAGS; namespace Rubberduck.Parsing.ComReflection { @@ -14,7 +15,9 @@ namespace Rubberduck.Parsing.ComReflection public class ComInterface : ComType, IComTypeWithMembers { private readonly List _inherited = new List(); - private readonly List _members = new List(); + private readonly List _members = new List(); + + public bool IsExtensible { get; private set; } public IEnumerable InheritedInterfaces { @@ -41,6 +44,7 @@ public ComInterface(ITypeLib typeLib, ITypeInfo info, TYPEATTR attrib, int index private void GetImplementedInterfaces(ITypeInfo info, TYPEATTR typeAttr) { + IsExtensible = !typeAttr.wTypeFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FNONEXTENSIBLE); for (var implIndex = 0; implIndex < typeAttr.cImplTypes; implIndex++) { int href; diff --git a/Rubberduck.Parsing/ComReflection/ComType.cs b/Rubberduck.Parsing/ComReflection/ComType.cs index c953e90af6..1ab3b5804e 100644 --- a/Rubberduck.Parsing/ComReflection/ComType.cs +++ b/Rubberduck.Parsing/ComReflection/ComType.cs @@ -9,8 +9,7 @@ public interface IComType : IComBase bool IsAppObject { get; } bool IsPreDeclared { get; } bool IsHidden { get; } - bool IsRestricted { get; } - bool IsExtensible { get; } + bool IsRestricted { get; } } public interface IComTypeWithMembers : IComType @@ -30,7 +29,6 @@ public abstract class ComType : ComBase, IComType public bool IsPreDeclared { get; private set; } public bool IsHidden { get; private set; } public bool IsRestricted { get; private set; } - public bool IsExtensible { get; private set; } protected ComType(ITypeInfo info, TYPEATTR attrib) : base(info) @@ -51,8 +49,7 @@ private void SetFlagsFromTypeAttr(TYPEATTR attrib) IsAppObject = attrib.wTypeFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FAPPOBJECT); IsPreDeclared = attrib.wTypeFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FPREDECLID); IsHidden = attrib.wTypeFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FHIDDEN); - IsRestricted = attrib.wTypeFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FRESTRICTED); - IsExtensible = !attrib.wTypeFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FNONEXTENSIBLE); + IsRestricted = attrib.wTypeFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FRESTRICTED); } } } diff --git a/Rubberduck.Parsing/Symbols/ClassModuleDeclaration.cs b/Rubberduck.Parsing/Symbols/ClassModuleDeclaration.cs index c837ec0dc3..8aada50512 100644 --- a/Rubberduck.Parsing/Symbols/ClassModuleDeclaration.cs +++ b/Rubberduck.Parsing/Symbols/ClassModuleDeclaration.cs @@ -77,6 +77,7 @@ public ClassModuleDeclaration(ComCoClass coClass, Declaration parent, QualifiedM .ToList(); _supertypes = new HashSet(); _subtypes = new HashSet(); + IsExtensible = coClass.IsExtensible; } public ClassModuleDeclaration(ComInterface intrface, Declaration parent, QualifiedModuleName module, @@ -87,7 +88,10 @@ public ClassModuleDeclaration(ComInterface intrface, Declaration parent, Qualifi intrface.Name, true, new List(), - attributes) { } + attributes) + { + IsExtensible = intrface.IsExtensible; + } public static IEnumerable GetSupertypes(Declaration type) { @@ -105,6 +109,8 @@ public static bool HasDefaultMember(Declaration type) return classModule != null && classModule.DefaultMember != null; } + public bool IsExtensible { get; set; } + private bool? _isExposed; /// /// Gets an attribute value indicating whether a class is exposed to other projects. diff --git a/Rubberduck.Parsing/Symbols/SerializableDeclaration.cs b/Rubberduck.Parsing/Symbols/SerializableDeclaration.cs index a6143d8a63..cf496d64d4 100644 --- a/Rubberduck.Parsing/Symbols/SerializableDeclaration.cs +++ b/Rubberduck.Parsing/Symbols/SerializableDeclaration.cs @@ -176,6 +176,12 @@ public SerializableDeclaration(Declaration declaration) IsByRefParam = param.IsByRef; IsParamArray = param.IsParamArray; } + + var canExtend = declaration as ClassModuleDeclaration; + if (canExtend != null) + { + IsExtensible = canExtend.IsExtensible; + } } public List Attributes { get; set; } @@ -197,6 +203,7 @@ public SerializableDeclaration(Declaration declaration) public bool IsBuiltIn { get; set; } public bool IsSelfAssigned { get; set; } public bool IsWithEvents { get; set; } + public bool IsExtensible { get; set; } public Accessibility Accessibility { get; set; } public DeclarationType DeclarationType { get; set; } @@ -218,7 +225,7 @@ public Declaration Unwrap(Declaration parent) case DeclarationType.Project: return new ProjectDeclaration(QualifiedMemberName, IdentifierName, true); case DeclarationType.ClassModule: - return new ClassModuleDeclaration(QualifiedMemberName, parent, IdentifierName, true, annotations, attributes); + return new ClassModuleDeclaration(QualifiedMemberName, parent, IdentifierName, true, annotations, attributes) { IsExtensible = IsExtensible }; case DeclarationType.ProceduralModule: return new ProceduralModuleDeclaration(QualifiedMemberName, parent, IdentifierName, true, annotations, attributes); case DeclarationType.Procedure: From 5573eb867243ab27420a5d029e6fe3ea23232a55 Mon Sep 17 00:00:00 2001 From: comintern Date: Fri, 13 Jan 2017 19:49:49 -0600 Subject: [PATCH 06/18] Remove unused Declaration.MemberCalls and Declaration.AddMemberCall members. --- Rubberduck.Parsing/Symbols/Declaration.cs | 25 +---------------------- 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/Rubberduck.Parsing/Symbols/Declaration.cs b/Rubberduck.Parsing/Symbols/Declaration.cs index 0207c30505..a998396ac1 100644 --- a/Rubberduck.Parsing/Symbols/Declaration.cs +++ b/Rubberduck.Parsing/Symbols/Declaration.cs @@ -318,7 +318,7 @@ public IEnumerable References { get { - return _references.Union(_memberCalls); + return _references; } set { @@ -326,19 +326,6 @@ public IEnumerable References } } - private ConcurrentBag _memberCalls = new ConcurrentBag(); - public IEnumerable MemberCalls - { - get - { - return _memberCalls.ToList(); - } - set - { - _memberCalls = new ConcurrentBag(value); - } - } - private readonly IEnumerable _annotations; public IEnumerable Annotations { get { return _annotations ?? new List(); } } @@ -406,16 +393,6 @@ public void AddReference( annotations)); } - public void AddMemberCall(IdentifierReference reference) - { - if (reference == null || reference.Declaration == null || reference.Declaration.Context == reference.Context) - { - return; - } - - _memberCalls.Add(reference); - } - private readonly Selection _selection; /// /// Gets a Selection representing the position of the declaration in the code module. From 36eb021f414a9594d00577bbb4151d7661dcce95 Mon Sep 17 00:00:00 2001 From: comintern Date: Sat, 14 Jan 2017 18:14:51 -0600 Subject: [PATCH 07/18] Added MemberNotOnInterfaceInspection. --- .../MemberNotOnInterfaceInspection.cs | 96 +++++++++++++++++++ .../Resources/InspectionsUI.Designer.cs | 27 ++++++ .../Inspections/Resources/InspectionsUI.resx | 10 ++ .../MemberNotOnInterfaceInspectionResult.cs | 32 +++++++ RetailCoder.VBE/Rubberduck.csproj | 2 + 5 files changed, 167 insertions(+) create mode 100644 RetailCoder.VBE/Inspections/MemberNotOnInterfaceInspection.cs create mode 100644 RetailCoder.VBE/Inspections/Results/MemberNotOnInterfaceInspectionResult.cs diff --git a/RetailCoder.VBE/Inspections/MemberNotOnInterfaceInspection.cs b/RetailCoder.VBE/Inspections/MemberNotOnInterfaceInspection.cs new file mode 100644 index 0000000000..2a1113ff84 --- /dev/null +++ b/RetailCoder.VBE/Inspections/MemberNotOnInterfaceInspection.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Antlr4.Runtime; +using Rubberduck.Inspections.Abstract; +using Rubberduck.Inspections.Resources; +using Rubberduck.Inspections.Results; +using Rubberduck.Parsing; +using Rubberduck.Parsing.Grammar; +using Rubberduck.Parsing.Symbols; +using Rubberduck.Parsing.VBA; +using Rubberduck.VBEditor; + +namespace Rubberduck.Inspections +{ + public sealed class MemberNotOnInterfaceInspection : InspectionBase + { + private static readonly List InterestingTypes = new List + { + typeof(VBAParser.MemberAccessExprContext), + typeof(VBAParser.WithMemberAccessExprContext), + typeof(VBAParser.DictionaryAccessExprContext), + typeof(VBAParser.WithDictionaryAccessExprContext) + }; + + public MemberNotOnInterfaceInspection(RubberduckParserState state, CodeInspectionSeverity defaultSeverity = CodeInspectionSeverity.Warning) + : base(state, defaultSeverity) + { + } + + public override string Meta { get { return InspectionsUI.MemberNotOnInterfaceInspectionMeta; } } + public override string Description { get { return InspectionsUI.MemberNotOnInterfaceInspectionName; } } + public override CodeInspectionType InspectionType { get { return CodeInspectionType.CodeQualityIssues; } } + + public override IEnumerable GetInspectionResults() + { + var targets = Declarations.Where(decl => decl.AsTypeDeclaration != null && + decl.AsTypeDeclaration.DeclarationType == DeclarationType.ClassModule && + ((ClassModuleDeclaration)decl.AsTypeDeclaration).IsExtensible && + decl.References.Any(usage => InterestingTypes.Contains(usage.Context.Parent.GetType()))) + .ToList(); + + var issues = new List(); + //Unfortunately finding implemented members is fairly expensive, so group by the return type. + foreach (var access in targets.GroupBy(t => t.AsTypeDeclaration)) + { + var typeDeclaration = access.Key; + var typeMembers = + new HashSet(BuiltInDeclarations.Where(d => d.ParentDeclaration != null && d.ParentDeclaration.Equals(typeDeclaration)) + .Select(d => d.IdentifierName) + .Distinct()); + foreach (var references in access.Select(usage => usage.References.Where(r => InterestingTypes.Contains(r.Context.Parent.GetType())))) + { + foreach (var reference in references.Where(r => !r.IsInspectionDisabled(Name))) + { + var identifier = reference.Context.Parent.GetChild(reference.Context.Parent.ChildCount - 1); + if (!typeMembers.Contains(identifier.GetText())) + { + var pseudoDeclaration = CreatePseudoDeclaration((ParserRuleContext)identifier, reference); + if (pseudoDeclaration.Annotations.Any()) + { + continue; + } + issues.Add(new MemberNotOnInterfaceInspectionResult(this, pseudoDeclaration, (ParserRuleContext)identifier, typeDeclaration)); + } + } + } + } + return issues; + } + + //Builds a throw-away Declaration for the indentifiers found by the inspection. These aren't (and shouldn't be) created by the parser. + //Used to pass to the InspectionResult to make it selectable. + private static Declaration CreatePseudoDeclaration(ParserRuleContext context, IdentifierReference reference) + { + return new Declaration( + new QualifiedMemberName(reference.QualifiedModuleName, context.GetText()), + null, + null, + string.Empty, + string.Empty, + false, + false, + Accessibility.Implicit, + DeclarationType.Variable, + context, + context.GetSelection(), + false, + null, + true, + null, + null, + true); + } + } +} diff --git a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs index 730ce46b56..b01d3eac29 100644 --- a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs +++ b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.Designer.cs @@ -591,6 +591,33 @@ public static string MakeSingleLineParameterQuickFix { } } + /// + /// Looks up a localized string similar to A member access is being used that is not declared on the object's interface. This is most likely an error. If the member access is using the object's extensible interface, consider using a non-extensible equivalent to allow compile time checks that will avoid the possibility of a run-time error 438.. + /// + public static string MemberNotOnInterfaceInspectionMeta { + get { + return ResourceManager.GetString("MemberNotOnInterfaceInspectionMeta", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Member does not exist on interface. + /// + public static string MemberNotOnInterfaceInspectionName { + get { + return ResourceManager.GetString("MemberNotOnInterfaceInspectionName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Member '{0}' is not declared on the interface for type '{1}'.. + /// + public static string MemberNotOnInterfaceInspectionResultFormat { + get { + return ResourceManager.GetString("MemberNotOnInterfaceInspectionResultFormat", resourceCulture); + } + } + /// /// Looks up a localized string similar to An annotation parameter is missing or incorrectly specified. The correct syntax is : '@Annotation([parameter])\nExample: '@Folder("Parent.Child"). /// diff --git a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx index 586ba61d22..8b0881af61 100644 --- a/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx +++ b/RetailCoder.VBE/Inspections/Resources/InspectionsUI.resx @@ -615,4 +615,14 @@ If the parameter can be null, ignore this inspection result; passing a null valu Add to whitelist + + A member access is being used that is not declared on the object's interface. This is most likely an error. If the member access is using the object's extensible interface, consider using a non-extensible equivalent to allow compile time checks that will avoid the possibility of a run-time error 438. + + + Member does not exist on interface + + + Member '{0}' is not declared on the interface for type '{1}'. + {0} Member used, {1} type being accessed. + \ No newline at end of file diff --git a/RetailCoder.VBE/Inspections/Results/MemberNotOnInterfaceInspectionResult.cs b/RetailCoder.VBE/Inspections/Results/MemberNotOnInterfaceInspectionResult.cs new file mode 100644 index 0000000000..32239bfa3a --- /dev/null +++ b/RetailCoder.VBE/Inspections/Results/MemberNotOnInterfaceInspectionResult.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using Antlr4.Runtime; +using Rubberduck.Inspections.Abstract; +using Rubberduck.Inspections.QuickFixes; +using Rubberduck.Inspections.Resources; +using Rubberduck.Parsing.Symbols; + +namespace Rubberduck.Inspections.Results +{ + public class MemberNotOnInterfaceInspectionResult : InspectionResultBase + { + private readonly ParserRuleContext _member; + private readonly Declaration _asTypeDeclaration; + + public MemberNotOnInterfaceInspectionResult(IInspection inspection, Declaration target, ParserRuleContext member, Declaration asTypeDeclaration) + : base(inspection, target) + { + _member = member; + _asTypeDeclaration = asTypeDeclaration; + } + + public override IEnumerable QuickFixes + { + get { return new List { new IgnoreOnceQuickFix(_member, QualifiedSelection, Inspection.AnnotationName) }; } + } + + public override string Description + { + get { return string.Format(InspectionsUI.MemberNotOnInterfaceInspectionResultFormat, _member.GetText(), _asTypeDeclaration.IdentifierName); } + } + } +} diff --git a/RetailCoder.VBE/Rubberduck.csproj b/RetailCoder.VBE/Rubberduck.csproj index 9bed8ab93f..351131c95c 100644 --- a/RetailCoder.VBE/Rubberduck.csproj +++ b/RetailCoder.VBE/Rubberduck.csproj @@ -367,6 +367,7 @@ + True @@ -381,6 +382,7 @@ + From f5c67332f94dc0776d968dba99d11fcd2e09a27c Mon Sep 17 00:00:00 2001 From: comintern Date: Sat, 14 Jan 2017 20:06:02 -0600 Subject: [PATCH 08/18] Change GetInspectionResults to Linq expression, correct annotation name. --- .../MemberNotOnInterfaceInspection.cs | 41 +++++++------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/RetailCoder.VBE/Inspections/MemberNotOnInterfaceInspection.cs b/RetailCoder.VBE/Inspections/MemberNotOnInterfaceInspection.cs index 2a1113ff84..133df614c7 100644 --- a/RetailCoder.VBE/Inspections/MemberNotOnInterfaceInspection.cs +++ b/RetailCoder.VBE/Inspections/MemberNotOnInterfaceInspection.cs @@ -39,34 +39,21 @@ public override IEnumerable GetInspectionResults() ((ClassModuleDeclaration)decl.AsTypeDeclaration).IsExtensible && decl.References.Any(usage => InterestingTypes.Contains(usage.Context.Parent.GetType()))) .ToList(); - - var issues = new List(); + //Unfortunately finding implemented members is fairly expensive, so group by the return type. - foreach (var access in targets.GroupBy(t => t.AsTypeDeclaration)) - { - var typeDeclaration = access.Key; - var typeMembers = - new HashSet(BuiltInDeclarations.Where(d => d.ParentDeclaration != null && d.ParentDeclaration.Equals(typeDeclaration)) - .Select(d => d.IdentifierName) - .Distinct()); - foreach (var references in access.Select(usage => usage.References.Where(r => InterestingTypes.Contains(r.Context.Parent.GetType())))) - { - foreach (var reference in references.Where(r => !r.IsInspectionDisabled(Name))) - { - var identifier = reference.Context.Parent.GetChild(reference.Context.Parent.ChildCount - 1); - if (!typeMembers.Contains(identifier.GetText())) - { - var pseudoDeclaration = CreatePseudoDeclaration((ParserRuleContext)identifier, reference); - if (pseudoDeclaration.Annotations.Any()) - { - continue; - } - issues.Add(new MemberNotOnInterfaceInspectionResult(this, pseudoDeclaration, (ParserRuleContext)identifier, typeDeclaration)); - } - } - } - } - return issues; + return (from access in targets.GroupBy(t => t.AsTypeDeclaration) + let typeDeclaration = access.Key + let typeMembers = new HashSet(BuiltInDeclarations.Where(d => d.ParentDeclaration != null && d.ParentDeclaration.Equals(typeDeclaration)) + .Select(d => d.IdentifierName) + .Distinct()) + from references in access.Select(usage => usage.References.Where(r => InterestingTypes.Contains(r.Context.Parent.GetType()))) + from reference in references.Where(r => !r.IsInspectionDisabled(AnnotationName)) + let identifier = reference.Context.Parent.GetChild(reference.Context.Parent.ChildCount - 1) + where !typeMembers.Contains(identifier.GetText()) + let pseudoDeclaration = CreatePseudoDeclaration((ParserRuleContext) identifier, reference) + where !pseudoDeclaration.Annotations.Any() + select new MemberNotOnInterfaceInspectionResult(this, pseudoDeclaration, (ParserRuleContext) identifier, typeDeclaration)) + .Cast().ToList(); } //Builds a throw-away Declaration for the indentifiers found by the inspection. These aren't (and shouldn't be) created by the parser. From b71b08e4d55f215ad3c37f878e6e01070448b537 Mon Sep 17 00:00:00 2001 From: comintern Date: Sat, 14 Jan 2017 20:08:15 -0600 Subject: [PATCH 09/18] Add stub for MemberNotOnInterfaceInspectionTests (WIP). --- .../MemberNotOnInterfaceInspectionTests.cs | 174 ++++++++++++++++++ RubberduckTests/RubberduckTests.csproj | 1 + 2 files changed, 175 insertions(+) create mode 100644 RubberduckTests/Inspections/MemberNotOnInterfaceInspectionTests.cs diff --git a/RubberduckTests/Inspections/MemberNotOnInterfaceInspectionTests.cs b/RubberduckTests/Inspections/MemberNotOnInterfaceInspectionTests.cs new file mode 100644 index 0000000000..bafb0f8699 --- /dev/null +++ b/RubberduckTests/Inspections/MemberNotOnInterfaceInspectionTests.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using Rubberduck.API; +using Rubberduck.Inspections; +using Rubberduck.Parsing.Symbols; +using Rubberduck.Parsing.VBA; +using Rubberduck.VBEditor; +using Rubberduck.VBEditor.Application; +using Rubberduck.VBEditor.Events; +using Rubberduck.VBEditor.SafeComWrappers; +using RubberduckTests.Mocks; +using Accessibility = Rubberduck.Parsing.Symbols.Accessibility; +using ParserState = Rubberduck.Parsing.VBA.ParserState; + +namespace RubberduckTests.Inspections +{ + [TestClass] + public class MemberNotOnInterfaceInspectionTests + { + private static void AddTestBuiltInLibrary(RubberduckParserState state) + { + var projectName = new QualifiedModuleName("TestLib", string.Empty, "TestLib"); + var library = new ProjectDeclaration(projectName.QualifyMemberName("TestLib"), "TestLib", true); + state.AddDeclaration(library); + + var attributes = new Attributes(); + attributes.AddPredeclaredIdTypeAttribute(); + attributes.AddGlobalClassAttribute(); + + var extensible = new ClassModuleDeclaration(projectName.QualifyMemberName("Extensible"), + library, + "Extensible", + true, + null, + attributes, + true) { IsExtensible = true }; + state.AddDeclaration(extensible); + + var nonExtensible = new ClassModuleDeclaration(projectName.QualifyMemberName("NonExtensible"), + library, + "NonExtensible", + true, + null, + attributes, + true); + state.AddDeclaration(nonExtensible); + + var member = new SubroutineDeclaration(extensible.QualifiedName.QualifiedModuleName.QualifyMemberName("ExtensibleMember"), + extensible, + extensible, + string.Empty, + Accessibility.Global, + null, + Selection.Home, + true, + null, + new Attributes()); + state.AddDeclaration(member); + state.CoClasses.TryAdd(new List { member.IdentifierName }, extensible); + + member = new SubroutineDeclaration(nonExtensible.QualifiedName.QualifiedModuleName.QualifyMemberName("NonExtensibleMember"), + nonExtensible, + nonExtensible, + string.Empty, + Accessibility.Global, + null, + Selection.Home, + true, + null, + new Attributes()); + state.AddDeclaration(member); + state.CoClasses.TryAdd(new List { member.IdentifierName }, nonExtensible); + } + +// [TestMethod] +// [TestCategory("Inspections")] +// public void MemberNotOnInterface_ReturnsResult_GlobalReference() +// { +// const string inputCode = +//@"Sub MemberTest() +// Extensible.Foo +//End Sub"; + +// //Arrange +// var builder = new MockVbeBuilder(); +// var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) +// .AddComponent("Codez", ComponentType.StandardModule, inputCode) +// .Build(); +// var vbe = builder.AddProject(project).Build(); + +// var mockHost = new Mock(); +// mockHost.SetupAllProperties(); +// var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + +// AddTestBuiltInLibrary(parser.State); + +// parser.Parse(new CancellationTokenSource()); +// if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + +// var inspection = new MemberNotOnInterfaceInspection(parser.State); +// var inspectionResults = inspection.GetInspectionResults(); + +// Assert.AreEqual(1, inspectionResults.Count()); +// } + +// [TestMethod] +// [TestCategory("Inspections")] +// public void MemberNotOnInterface_DoesNotReturnResult_DeclaredMember() +// { +// const string inputCode = +//@"Sub MemberTest() +// Extensible.ExtensibleMember +//End Sub"; + +// //Arrange +// var builder = new MockVbeBuilder(); +// var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) +// .AddComponent("Codez", ComponentType.StandardModule, inputCode) +// .Build(); +// var vbe = builder.AddProject(project).Build(); + +// var mockHost = new Mock(); +// mockHost.SetupAllProperties(); +// var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + +// parser.Parse(new CancellationTokenSource()); +// if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + +// AddTestBuiltInLibrary(parser.State); + +// var inspection = new MemberNotOnInterfaceInspection(parser.State); +// var inspectionResults = inspection.GetInspectionResults(); + +// Assert.IsFalse(inspectionResults.Any()); +// } + +// [TestMethod] +// [TestCategory("Inspections")] +// public void MemberNotOnInterface_DoesNotReturnResult_NonExtensible() +// { +// const string inputCode = +//@"Sub MemberTest() +// NonExtensible.Foo +//End Sub"; + +// //Arrange +// var builder = new MockVbeBuilder(); +// var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) +// .AddComponent("Codez", ComponentType.StandardModule, inputCode) +// .Build(); +// var vbe = builder.AddProject(project).Build(); + +// var mockHost = new Mock(); +// mockHost.SetupAllProperties(); +// var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + +// parser.Parse(new CancellationTokenSource()); +// if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + +// AddTestBuiltInLibrary(parser.State); + +// var inspection = new MemberNotOnInterfaceInspection(parser.State); +// var inspectionResults = inspection.GetInspectionResults(); + +// Assert.IsFalse(inspectionResults.Any()); +// } + } +} diff --git a/RubberduckTests/RubberduckTests.csproj b/RubberduckTests/RubberduckTests.csproj index ddb94302d7..7c68cdc008 100644 --- a/RubberduckTests/RubberduckTests.csproj +++ b/RubberduckTests/RubberduckTests.csproj @@ -90,6 +90,7 @@ + From 6d6c9a470917612260651722da7a7d108a37d120 Mon Sep 17 00:00:00 2001 From: comintern Date: Sat, 14 Jan 2017 22:43:01 -0600 Subject: [PATCH 10/18] Add annotations to undeclared variables, add tests. Closes #2525 --- .../Symbols/DeclarationFinder.cs | 10 +- .../UndeclaredVariableInspectionTests.cs | 142 ++++++++++++++++++ RubberduckTests/RubberduckTests.csproj | 1 + 3 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 RubberduckTests/Inspections/UndeclaredVariableInspectionTests.cs diff --git a/Rubberduck.Parsing/Symbols/DeclarationFinder.cs b/Rubberduck.Parsing/Symbols/DeclarationFinder.cs index 8e2ffb5ee0..85bdd0977f 100644 --- a/Rubberduck.Parsing/Symbols/DeclarationFinder.cs +++ b/Rubberduck.Parsing/Symbols/DeclarationFinder.cs @@ -13,6 +13,7 @@ public class DeclarationFinder private readonly IDictionary _comments; private readonly IDictionary _annotations; private readonly IDictionary> _undeclared; + private readonly AnnotationService _annotationService; private readonly IReadOnlyList _declarations; private readonly IDictionary _declarationsByName; @@ -35,6 +36,7 @@ public DeclarationFinder( .ToDictionary(grouping => grouping.Key.IdentifierName, grouping => grouping.ToArray()); _undeclared = new Dictionary>(); + _annotationService = new AnnotationService(this); } public IEnumerable Undeclared @@ -294,7 +296,13 @@ public Declaration FindMemberEnclosingProcedure(Declaration enclosingProcedure, public Declaration OnUndeclaredVariable(Declaration enclosingProcedure, string identifierName, ParserRuleContext context) { - var undeclaredLocal = new Declaration(new QualifiedMemberName(enclosingProcedure.QualifiedName.QualifiedModuleName, identifierName), enclosingProcedure, enclosingProcedure, "Variant", string.Empty, false, false, Accessibility.Implicit, DeclarationType.Variable, context, context.GetSelection(), false, null, false, null, null, true); + var annotations = _annotationService.FindAnnotations(enclosingProcedure.QualifiedName.QualifiedModuleName, context.Start.Line); + var undeclaredLocal = + new Declaration( + new QualifiedMemberName(enclosingProcedure.QualifiedName.QualifiedModuleName, identifierName), + enclosingProcedure, enclosingProcedure, "Variant", string.Empty, false, false, + Accessibility.Implicit, DeclarationType.Variable, context, context.GetSelection(), false, null, + false, annotations, null, true); var hasUndeclared = _undeclared.ContainsKey(enclosingProcedure.QualifiedName); if (hasUndeclared) diff --git a/RubberduckTests/Inspections/UndeclaredVariableInspectionTests.cs b/RubberduckTests/Inspections/UndeclaredVariableInspectionTests.cs new file mode 100644 index 0000000000..ee0de45fda --- /dev/null +++ b/RubberduckTests/Inspections/UndeclaredVariableInspectionTests.cs @@ -0,0 +1,142 @@ +using System.Linq; +using System.Threading; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using Rubberduck.Inspections; +using Rubberduck.Parsing.VBA; +using Rubberduck.VBEditor.Application; +using Rubberduck.VBEditor.Events; +using Rubberduck.VBEditor.SafeComWrappers; +using RubberduckTests.Mocks; + +namespace RubberduckTests.Inspections +{ + [TestClass] + public class UndeclaredVariableInspectionTests + { + [TestMethod] + [TestCategory("Inspections")] + public void UndeclaredVariable_ReturnsResult() + { + const string inputCode = +@"Sub Test() + a = 42 + Debug.Print a +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new UndeclaredVariableInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void UndeclaredVariable_ReturnsNoResultIfDeclaredLocally() + { + const string inputCode = +@"Sub Test() + Dim a As Long + a = 42 + Debug.Print a +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new UndeclaredVariableInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + + [TestMethod] + [TestCategory("Inspections")] + public void UndeclaredVariable_ReturnsNoResultIfDeclaredModuleScope() + { + const string inputCode = +@"Private a As Long + +Sub Test() + a = 42 + Debug.Print a +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new UndeclaredVariableInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + + //https://github.com/rubberduck-vba/Rubberduck/issues/2525 + [TestMethod] + [TestCategory("Inspections")] + public void UndeclaredVariable_ReturnsNoResultIfAnnotated() + { + const string inputCode = +@"Sub Test() + '@Ignore UndeclaredVariable + a = 42 + Debug.Print a +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("MyClass", ComponentType.ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new UndeclaredVariableInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + } +} diff --git a/RubberduckTests/RubberduckTests.csproj b/RubberduckTests/RubberduckTests.csproj index 7c68cdc008..4120864e47 100644 --- a/RubberduckTests/RubberduckTests.csproj +++ b/RubberduckTests/RubberduckTests.csproj @@ -91,6 +91,7 @@ + From 874651194008f7fbf1ec87c353d28859d9fd3083 Mon Sep 17 00:00:00 2001 From: comintern Date: Sun, 15 Jan 2017 00:20:15 -0600 Subject: [PATCH 11/18] Traverse declarationList once in FindBuiltInEventHandlers instead of three times. --- .../Common/DeclarationExtensions.cs | 37 +++++++++---------- .../Inspections/ProcedureNotUsedInspection.cs | 4 +- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/RetailCoder.VBE/Common/DeclarationExtensions.cs b/RetailCoder.VBE/Common/DeclarationExtensions.cs index 1679026e0d..c45331ca3b 100644 --- a/RetailCoder.VBE/Common/DeclarationExtensions.cs +++ b/RetailCoder.VBE/Common/DeclarationExtensions.cs @@ -292,25 +292,24 @@ public static IEnumerable FindBuiltInEventHandlers(this IEnumerable : new[] { e.ParentDeclaration.IdentifierName + "_" + e.IdentifierName }; }); - // class module built-in events - var classModuleHandlers = declarationList.Where(item => - item.DeclarationType == DeclarationType.Procedure && - item.ParentDeclaration.DeclarationType == DeclarationType.ClassModule && - (item.IdentifierName.Equals("Class_Initialize", StringComparison.InvariantCultureIgnoreCase) - || item.IdentifierName.Equals("Class_Terminate", StringComparison.InvariantCultureIgnoreCase))); - - // standard module built-in handlers: - var stdModuleHandlers = declarationList.Where(item => - item.DeclarationType == DeclarationType.Procedure && - item.ParentDeclaration.DeclarationType == DeclarationType.ProceduralModule && - (item.IdentifierName.Equals("auto_open", StringComparison.InvariantCultureIgnoreCase) - || item.IdentifierName.Equals("auto_close", StringComparison.InvariantCultureIgnoreCase))); - - var handlers = declarationList.Where(declaration => !declaration.IsBuiltIn - && declaration.DeclarationType == DeclarationType.Procedure - && handlerNames.Contains(declaration.IdentifierName)).ToList(); - - handlers.AddRange(classModuleHandlers.Concat(stdModuleHandlers)); + + var handlers = declarationList.Where(item => + // class module built-in events + (item.DeclarationType == DeclarationType.Procedure && + item.ParentDeclaration.DeclarationType == DeclarationType.ClassModule && ( + item.IdentifierName.Equals("Class_Initialize", StringComparison.InvariantCultureIgnoreCase) || + item.IdentifierName.Equals("Class_Terminate", StringComparison.InvariantCultureIgnoreCase))) || + // standard module built-in handlers: + (item.DeclarationType == DeclarationType.Procedure && + item.ParentDeclaration.DeclarationType == DeclarationType.ProceduralModule && ( + item.IdentifierName.Equals("auto_open", StringComparison.InvariantCultureIgnoreCase) || + item.IdentifierName.Equals("auto_close", StringComparison.InvariantCultureIgnoreCase))) || + // user handlers: + (!item.IsBuiltIn && + item.DeclarationType == DeclarationType.Procedure && + handlerNames.Contains(item.IdentifierName)) + ).ToList(); + return handlers; } diff --git a/RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs b/RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs index 9b9502ed69..1cf489ce3a 100644 --- a/RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs +++ b/RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs @@ -29,7 +29,7 @@ public ProcedureNotUsedInspection(RubberduckParserState state) "Workbook_", "Document_", "Application_", - "Session_", + "Session_" }; public override IEnumerable GetInspectionResults() @@ -43,7 +43,7 @@ public override IEnumerable GetInspectionResults() .SelectMany(control => declarations.FindEventHandlers(control)).ToList(); var withEventFields = declarations.Where(item => item.DeclarationType == DeclarationType.Variable && item.IsWithEvents); - handlers.AddRange(withEventFields.SelectMany(field => declarations.FindEventProcedures(field))); + handlers.AddRange(withEventFields.SelectMany(declarations.FindEventProcedures)); var forms = declarations.Where(item => item.DeclarationType == DeclarationType.ClassModule && item.QualifiedName.QualifiedModuleName.Component.Type == ComponentType.UserForm) From 9bb68d03bfa986526d1a10a5c3871f3b9e287557 Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Sun, 15 Jan 2017 01:28:09 -0500 Subject: [PATCH 12/18] can't rename built-in targets anymore --- RetailCoder.VBE/Refactorings/Rename/RenameRefactoring.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RetailCoder.VBE/Refactorings/Rename/RenameRefactoring.cs b/RetailCoder.VBE/Refactorings/Rename/RenameRefactoring.cs index d7b5456cb1..a7c5d94d12 100644 --- a/RetailCoder.VBE/Refactorings/Rename/RenameRefactoring.cs +++ b/RetailCoder.VBE/Refactorings/Rename/RenameRefactoring.cs @@ -70,6 +70,8 @@ public void Refactor(QualifiedSelection target) public void Refactor(Declaration target) { + if (target.IsBuiltIn) { return; } + var presenter = _factory.Create(); _model = presenter.Show(target); From 8ab4b85555f863d35f9725a5b75d98cce1c83f20 Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Sun, 15 Jan 2017 01:34:07 -0500 Subject: [PATCH 13/18] prevent execute with builtin target --- .../UI/Command/Refactorings/CodePaneRefactorRenameCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RetailCoder.VBE/UI/Command/Refactorings/CodePaneRefactorRenameCommand.cs b/RetailCoder.VBE/UI/Command/Refactorings/CodePaneRefactorRenameCommand.cs index c39cffbdfb..f0807aec7d 100644 --- a/RetailCoder.VBE/UI/Command/Refactorings/CodePaneRefactorRenameCommand.cs +++ b/RetailCoder.VBE/UI/Command/Refactorings/CodePaneRefactorRenameCommand.cs @@ -51,7 +51,7 @@ protected override void ExecuteImpl(object parameter) target = _state.FindSelectedDeclaration(Vbe.ActiveCodePane); } - if (target == null) + if (target == null || target.IsBuiltIn) { return; } From 7cbf02018deec079840d8ebdb8cbc98b574a8a7f Mon Sep 17 00:00:00 2001 From: comintern Date: Sun, 15 Jan 2017 00:57:50 -0600 Subject: [PATCH 14/18] Fix the fix for #2239 - now only supresses results in Excel. --- RetailCoder.VBE/Common/DeclarationExtensions.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/RetailCoder.VBE/Common/DeclarationExtensions.cs b/RetailCoder.VBE/Common/DeclarationExtensions.cs index c45331ca3b..554747c04d 100644 --- a/RetailCoder.VBE/Common/DeclarationExtensions.cs +++ b/RetailCoder.VBE/Common/DeclarationExtensions.cs @@ -11,6 +11,7 @@ using Rubberduck.Properties; using Rubberduck.UI; using Rubberduck.VBEditor; +using Rubberduck.VBEditor.Extensions; using Rubberduck.VBEditor.SafeComWrappers; // ReSharper disable LocalizableElement @@ -292,15 +293,19 @@ public static IEnumerable FindBuiltInEventHandlers(this IEnumerable : new[] { e.ParentDeclaration.IdentifierName + "_" + e.IdentifierName }; }); - + var user = declarationList.FirstOrDefault(decl => !decl.IsBuiltIn); + var host = user != null ? user.Project.VBE.HostApplication() : null ; + var handlers = declarationList.Where(item => // class module built-in events (item.DeclarationType == DeclarationType.Procedure && item.ParentDeclaration.DeclarationType == DeclarationType.ClassModule && ( item.IdentifierName.Equals("Class_Initialize", StringComparison.InvariantCultureIgnoreCase) || item.IdentifierName.Equals("Class_Terminate", StringComparison.InvariantCultureIgnoreCase))) || - // standard module built-in handlers: - (item.DeclarationType == DeclarationType.Procedure && + // standard module built-in handlers (Excel specific): + (host != null && + host.ApplicationName.Equals("Excel", StringComparison.InvariantCultureIgnoreCase) && + item.DeclarationType == DeclarationType.Procedure && item.ParentDeclaration.DeclarationType == DeclarationType.ProceduralModule && ( item.IdentifierName.Equals("auto_open", StringComparison.InvariantCultureIgnoreCase) || item.IdentifierName.Equals("auto_close", StringComparison.InvariantCultureIgnoreCase))) || From f0b8687be9884c5d73ac5137c8524f5c6be718ce Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Sun, 15 Jan 2017 03:26:56 -0500 Subject: [PATCH 15/18] handle/ignore TYPEKIND.TKIND_UNION --- Rubberduck.Parsing/ComReflection/ComProject.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Rubberduck.Parsing/ComReflection/ComProject.cs b/Rubberduck.Parsing/ComReflection/ComProject.cs index 240341363d..4de1a26efe 100644 --- a/Rubberduck.Parsing/ComReflection/ComProject.cs +++ b/Rubberduck.Parsing/ComReflection/ComProject.cs @@ -14,8 +14,8 @@ namespace Rubberduck.Parsing.ComReflection [DebuggerDisplay("{Name}")] public class ComProject : ComBase { - public static ConcurrentDictionary KnownTypes = new ConcurrentDictionary(); - public static ConcurrentDictionary KnownEnumerations = new ConcurrentDictionary(); + public static readonly ConcurrentDictionary KnownTypes = new ConcurrentDictionary(); + public static readonly ConcurrentDictionary KnownEnumerations = new ConcurrentDictionary(); public string Path { get; set; } public long MajorVersion { get; private set; } @@ -120,7 +120,9 @@ private void LoadModules(ITypeLib typeLibrary) if (type != null) KnownTypes.TryAdd(typeAttributes.guid, coclass); break; case TYPEKIND.TKIND_ALIAS: - //The current handling of this is wrong - these don't have to be classes or interfaces. In the VBE module for example, + case TYPEKIND.TKIND_UNION: + + //The current handling of this is wrong - these don't have to be classes or interfaces. In the VBE module for example, //"LongPtr" is defined as an alias to "Long" (at least on a 32 bit system) - RD is currently treating is like a class. //Unclear if these can *also* define alternative names for interfaces as well, but all the ones I've seen have been basically //a C typedef. So... this needs work. Don't make any assumptions about these elsewhere in the code until this is nailed down. From 6edab41532eceab9c9bb2ec5d09c17c0885fca55 Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Sun, 15 Jan 2017 03:33:47 -0500 Subject: [PATCH 16/18] disable menu item when command can't execute --- .../Command/MenuItems/CodePaneRefactorRenameCommandMenuItem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RetailCoder.VBE/UI/Command/MenuItems/CodePaneRefactorRenameCommandMenuItem.cs b/RetailCoder.VBE/UI/Command/MenuItems/CodePaneRefactorRenameCommandMenuItem.cs index 8a3e9e897d..5ce2aeef43 100644 --- a/RetailCoder.VBE/UI/Command/MenuItems/CodePaneRefactorRenameCommandMenuItem.cs +++ b/RetailCoder.VBE/UI/Command/MenuItems/CodePaneRefactorRenameCommandMenuItem.cs @@ -15,7 +15,7 @@ public CodePaneRefactorRenameCommandMenuItem(CommandBase command) public override bool EvaluateCanExecute(RubberduckParserState state) { - return state != null && state.Status == ParserState.Ready; + return state != null && state.Status == ParserState.Ready && Command.CanExecute(null); } } } From 63125294e013e4ea4f6ec9167333ce070032b717 Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Sun, 15 Jan 2017 04:05:35 -0500 Subject: [PATCH 17/18] moved references count to its own commandbar button + command --- RetailCoder.VBE/App.cs | 6 ++-- RetailCoder.VBE/Root/RubberduckModule.cs | 1 + RetailCoder.VBE/Rubberduck.csproj | 1 + .../CommandBars/IContextFormatter.cs | 2 +- .../ReferenceCounterLabelMenuItem.cs | 33 +++++++++++++++++++ .../CommandBars/RubberduckCommandBar.cs | 16 +++++---- 6 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 RetailCoder.VBE/UI/Command/MenuItems/CommandBars/ReferenceCounterLabelMenuItem.cs diff --git a/RetailCoder.VBE/App.cs b/RetailCoder.VBE/App.cs index e856401ed8..b0727aba9f 100644 --- a/RetailCoder.VBE/App.cs +++ b/RetailCoder.VBE/App.cs @@ -1,9 +1,7 @@ using System.Collections.Generic; using System.IO; -using System.Reflection; using Infralution.Localization.Wpf; using NLog; -using NLog.Fluent; using Rubberduck.Common; using Rubberduck.Parsing; using Rubberduck.Parsing.Symbols; @@ -13,6 +11,7 @@ using Rubberduck.UI.Command.MenuItems; using System; using System.Globalization; +using System.Linq; using System.Windows.Forms; using Rubberduck.UI.Command.MenuItems.CommandBars; using Rubberduck.VBEditor.SafeComWrappers.Abstract; @@ -87,8 +86,9 @@ private void RefreshSelection() if (!pane.IsWrappingNullReference) { selectedDeclaration = _parser.State.FindSelectedDeclaration(pane); + var refCount = selectedDeclaration == null ? 0 : selectedDeclaration.References.Count(); var caption = _stateBar.GetContextSelectionCaption(_vbe.ActiveCodePane, selectedDeclaration); - _stateBar.SetContextSelectionCaption(caption); + _stateBar.SetContextSelectionCaption(caption, refCount); } var currentStatus = _parser.State.Status; diff --git a/RetailCoder.VBE/Root/RubberduckModule.cs b/RetailCoder.VBE/Root/RubberduckModule.cs index 827d18ece8..ccd5845e29 100644 --- a/RetailCoder.VBE/Root/RubberduckModule.cs +++ b/RetailCoder.VBE/Root/RubberduckModule.cs @@ -414,6 +414,7 @@ private IEnumerable GetRubberduckCommandBarItems() KernelInstance.Get(), KernelInstance.Get(), KernelInstance.Get(), + KernelInstance.Get(), #if DEBUG KernelInstance.Get() #endif diff --git a/RetailCoder.VBE/Rubberduck.csproj b/RetailCoder.VBE/Rubberduck.csproj index 351131c95c..8fa3d706bb 100644 --- a/RetailCoder.VBE/Rubberduck.csproj +++ b/RetailCoder.VBE/Rubberduck.csproj @@ -488,6 +488,7 @@ + diff --git a/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/IContextFormatter.cs b/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/IContextFormatter.cs index d2eb203891..9ead1c59b7 100644 --- a/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/IContextFormatter.cs +++ b/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/IContextFormatter.cs @@ -97,7 +97,7 @@ private string Format(Declaration declaration) formattedDeclaration = string.Format("{0}{1}.{2} {3}", withEvents, moduleName, declaration.IdentifierName, typeName); } - return string.Format("{0} | {1} {2}", formattedDeclaration.Trim(), declaration.References.Count(), RubberduckUI.ContextReferences); + return formattedDeclaration.Trim(); } } } \ No newline at end of file diff --git a/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/ReferenceCounterLabelMenuItem.cs b/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/ReferenceCounterLabelMenuItem.cs new file mode 100644 index 0000000000..6082811341 --- /dev/null +++ b/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/ReferenceCounterLabelMenuItem.cs @@ -0,0 +1,33 @@ +using System; +using Rubberduck.Parsing.VBA; + +namespace Rubberduck.UI.Command.MenuItems.CommandBars +{ + public class ReferenceCounterLabelMenuItem : CommandMenuItemBase + { + public ReferenceCounterLabelMenuItem(FindAllReferencesCommand command) + : base(command) + { + _caption = string.Empty; + } + + private string _caption; + private int _count; + + public void SetCaption(int referenceCount) + { + _count = referenceCount; + _caption = string.Format("{0} {1}", referenceCount, RubberduckUI.ContextReferences); + } + + public override bool EvaluateCanExecute(RubberduckParserState state) + { + return _count > 0; + } + + public override Func Caption { get { return () => _caption; } } + public override string Key { get { return string.Empty; } } + public override bool BeginGroup { get { return true; } } + public override int DisplayOrder { get { return (int)RubberduckCommandBarItemDisplayOrder.ContextRefCount; } } + } +} \ No newline at end of file diff --git a/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/RubberduckCommandBar.cs b/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/RubberduckCommandBar.cs index 95acec3590..75930a4234 100644 --- a/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/RubberduckCommandBar.cs +++ b/RetailCoder.VBE/UI/Command/MenuItems/CommandBars/RubberduckCommandBar.cs @@ -48,15 +48,18 @@ public string GetContextSelectionCaption(ICodePane activeCodePane, Declaration d return _formatter.Format(activeCodePane, declaration); } - public void SetContextSelectionCaption(string caption) + public void SetContextSelectionCaption(string caption, int contextReferenceCount) { - var child = FindChildByTag(typeof(ContextSelectionLabelMenuItem).FullName) as ContextSelectionLabelMenuItem; - if (child == null) { return; } + var contextLabel = FindChildByTag(typeof(ContextSelectionLabelMenuItem).FullName) as ContextSelectionLabelMenuItem; + if (contextLabel == null) { return; } + + var contextReferences = FindChildByTag(typeof(ReferenceCounterLabelMenuItem).FullName) as ReferenceCounterLabelMenuItem; + if (contextReferences == null) { return; } UiDispatcher.Invoke(() => { - child.SetCaption(caption); - //child.SetToolTip(?); + contextLabel.SetCaption(caption); + contextReferences.SetCaption(contextReferenceCount); }); Localize(); } @@ -74,6 +77,7 @@ public enum RubberduckCommandBarItemDisplayOrder { RequestReparse, ShowErrors, - ContextStatus + ContextStatus, + ContextRefCount, } } \ No newline at end of file From f4ba97dbe3818cc1ebed0edc161540e3ac47835f Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Sun, 15 Jan 2017 04:19:06 -0500 Subject: [PATCH 18/18] fixed implicit active sheet/book inspections (again) --- .../ImplicitActiveSheetReferenceInspection.cs | 2 +- .../ImplicitActiveWorkbookReferenceInspection.cs | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/RetailCoder.VBE/Inspections/ImplicitActiveSheetReferenceInspection.cs b/RetailCoder.VBE/Inspections/ImplicitActiveSheetReferenceInspection.cs index 8a74b73fe8..9a05c8f6f9 100644 --- a/RetailCoder.VBE/Inspections/ImplicitActiveSheetReferenceInspection.cs +++ b/RetailCoder.VBE/Inspections/ImplicitActiveSheetReferenceInspection.cs @@ -28,7 +28,7 @@ public override IEnumerable GetInspectionResults() var matches = BuiltInDeclarations.Where(item => item.ProjectName == "Excel" && Targets.Contains(item.IdentifierName) && - item.ParentDeclaration.ComponentName == "_Global" && + (item.ParentDeclaration.ComponentName == "_Global" || item.ParentDeclaration.ComponentName == "Global") && item.AsTypeName == "Range").ToList(); var issues = matches.Where(item => item.References.Any()) diff --git a/RetailCoder.VBE/Inspections/ImplicitActiveWorkbookReferenceInspection.cs b/RetailCoder.VBE/Inspections/ImplicitActiveWorkbookReferenceInspection.cs index 8033f8a0ac..61cc70a44a 100644 --- a/RetailCoder.VBE/Inspections/ImplicitActiveWorkbookReferenceInspection.cs +++ b/RetailCoder.VBE/Inspections/ImplicitActiveWorkbookReferenceInspection.cs @@ -26,7 +26,9 @@ public ImplicitActiveWorkbookReferenceInspection(RubberduckParserState state) private static readonly string[] ParentScopes = { "_Global", + "Global", "_Application", + "Application", "Sheets", //"Worksheets", }; @@ -37,11 +39,10 @@ public override IEnumerable GetInspectionResults() .Where(item => item.ProjectName == "Excel" && ParentScopes.Contains(item.ComponentName) && item.References.Any(r => Targets.Contains(r.IdentifierName))) .SelectMany(declaration => declaration.References.Distinct()) - .Where(item => Targets.Contains(item.IdentifierName)) .ToList(); - - return issues.Select(issue => - new ImplicitActiveWorkbookReferenceInspectionResult(this, issue)); + + var filtered = issues.Where(item => Targets.Contains(item.IdentifierName)); + return filtered.Select(issue => new ImplicitActiveWorkbookReferenceInspectionResult(this, issue)); } } }