From f9560de10d67f49105759fdd10e7476465dc70b9 Mon Sep 17 00:00:00 2001
From: jespergravgaard
Date: Thu, 26 Mar 2020 09:13:48 +0100
Subject: [PATCH] Standard C array syntax implemented char x[8]. The KickC
syntax char[8] x is still supported, but will be removed. Closes #162
---
.../dk/camelot64/kickc/parser/KickCLexer.java | 1100 ++++-----
.../dk/camelot64/kickc/parser/KickCParser.g4 | 9 +-
.../camelot64/kickc/parser/KickCParser.java | 2133 +++++++++--------
.../camelot64/kickc/parser/KickCParser.tokens | 247 +-
.../kickc/parser/KickCParserBaseListener.java | 24 +
.../kickc/parser/KickCParserBaseVisitor.java | 14 +
.../kickc/parser/KickCParserListener.java | 24 +
.../kickc/parser/KickCParserVisitor.java | 14 +
.../Pass0GenerateStatementSequence.java | 34 +-
src/test/kc/arrays-init.kc | 6 +-
src/test/kc/examples/3d/3d.kc | 100 +-
src/test/kc/examples/3d/perspective.kc | 18 +-
.../kc/examples/bresenham/bitmap-bresenham.kc | 4 +-
.../kc/examples/chargen/chargen-analysis.kc | 2 +-
.../kc/examples/fastmultiply/fastmultiply8.kc | 6 +-
src/test/kc/examples/fire/fire.kc | 4 +-
src/test/kc/examples/fire/sid.kc | 2 +-
src/test/kc/examples/font-2x2/font-2x2.kc | 2 +-
src/test/kc/examples/kernalload/kernalload.kc | 2 +-
src/test/kc/examples/linking/linking.kc | 2 +-
.../multiplexer/simple-multiplexer.kc | 2 +-
src/test/kc/examples/nmisamples/nmisamples.kc | 2 +-
src/test/kc/examples/plasma/plasma-unroll.kc | 8 +-
src/test/kc/examples/plasma/plasma.kc | 8 +-
.../kc/examples/rasterbars/raster-bars.kc | 2 +-
src/test/kc/examples/rotate/rotate.kc | 14 +-
src/test/kc/examples/scroll/scroll.kc | 2 +-
.../kc/examples/sinsprites/sinus-sprites.kc | 14 +-
src/test/kc/examples/zpcode/zpcode.kc | 2 +-
src/test/ref/examples/3d/3d.asm | 8 +-
src/test/ref/examples/3d/3d.log | 16 +-
src/test/ref/examples/3d/perspective.asm | 4 +-
src/test/ref/examples/3d/perspective.log | 4 +-
.../ref/examples/chargen/chargen-analysis.asm | 6 +-
.../ref/examples/chargen/chargen-analysis.log | 6 +-
src/test/ref/examples/fire/fire.asm | 2 +-
src/test/ref/examples/fire/fire.log | 2 +-
37 files changed, 2053 insertions(+), 1796 deletions(-)
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java
index 440aa026e..d90dde762 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java
@@ -27,24 +27,24 @@ public class KickCLexer extends Lexer {
GREATER_THAN_EQUAL=32, GREATER_THAN=33, LOGIC_AND=34, LOGIC_OR=35, ASSIGN=36,
ASSIGN_COMPOUND=37, IMPORT=38, TYPEDEF=39, PRAGMA=40, RESERVE=41, PC=42,
TARGET=43, LINK=44, CPU=45, CODESEG=46, DATASEG=47, ENCODING=48, CONST=49,
- EXTERN=50, EXPORT=51, ALIGN=52, INLINE=53, VOLATILE=54, INTERRUPT=55,
- REGISTER=56, ADDRESS=57, ADDRESS_ZEROPAGE=58, ADDRESS_MAINMEM=59, FORM_SSA=60,
- FORM_MA=61, CALLING=62, CALLINGCONVENTION=63, VARMODEL=64, IF=65, ELSE=66,
- WHILE=67, DO=68, FOR=69, SWITCH=70, RETURN=71, BREAK=72, CONTINUE=73,
- ASM=74, DEFAULT=75, CASE=76, STRUCT=77, ENUM=78, SIZEOF=79, TYPEID=80,
- KICKASM=81, RESOURCE=82, USES=83, CLOBBERS=84, BYTES=85, CYCLES=86, LOGIC_NOT=87,
- SIGNEDNESS=88, SIMPLETYPE=89, BOOLEAN=90, KICKASM_BODY=91, STRING=92,
- CHAR=93, NUMBER=94, NUMFLOAT=95, BINFLOAT=96, DECFLOAT=97, HEXFLOAT=98,
- NUMINT=99, BININTEGER=100, DECINTEGER=101, HEXINTEGER=102, NAME=103, WS=104,
- COMMENT_LINE=105, COMMENT_BLOCK=106, ASM_BYTE=107, ASM_MNEMONIC=108, ASM_IMM=109,
- ASM_COLON=110, ASM_COMMA=111, ASM_PAR_BEGIN=112, ASM_PAR_END=113, ASM_BRACKET_BEGIN=114,
- ASM_BRACKET_END=115, ASM_DOT=116, ASM_SHIFT_LEFT=117, ASM_SHIFT_RIGHT=118,
- ASM_PLUS=119, ASM_MINUS=120, ASM_LESS_THAN=121, ASM_GREATER_THAN=122,
- ASM_MULTIPLY=123, ASM_DIVIDE=124, ASM_CURLY_BEGIN=125, ASM_CURLY_END=126,
- ASM_NUMBER=127, ASM_NUMFLOAT=128, ASM_BINFLOAT=129, ASM_DECFLOAT=130,
- ASM_HEXFLOAT=131, ASM_NUMINT=132, ASM_BININTEGER=133, ASM_DECINTEGER=134,
- ASM_HEXINTEGER=135, ASM_CHAR=136, ASM_MULTI_REL=137, ASM_MULTI_NAME=138,
- ASM_NAME=139, ASM_WS=140, ASM_COMMENT_LINE=141, ASM_COMMENT_BLOCK=142;
+ EXTERN=50, EXPORT=51, ALIGN=52, INLINE=53, VOLATILE=54, STATIC=55, INTERRUPT=56,
+ REGISTER=57, ADDRESS=58, ADDRESS_ZEROPAGE=59, ADDRESS_MAINMEM=60, FORM_SSA=61,
+ FORM_MA=62, CALLING=63, CALLINGCONVENTION=64, VARMODEL=65, IF=66, ELSE=67,
+ WHILE=68, DO=69, FOR=70, SWITCH=71, RETURN=72, BREAK=73, CONTINUE=74,
+ ASM=75, DEFAULT=76, CASE=77, STRUCT=78, ENUM=79, SIZEOF=80, TYPEID=81,
+ KICKASM=82, RESOURCE=83, USES=84, CLOBBERS=85, BYTES=86, CYCLES=87, LOGIC_NOT=88,
+ SIGNEDNESS=89, SIMPLETYPE=90, BOOLEAN=91, KICKASM_BODY=92, STRING=93,
+ CHAR=94, NUMBER=95, NUMFLOAT=96, BINFLOAT=97, DECFLOAT=98, HEXFLOAT=99,
+ NUMINT=100, BININTEGER=101, DECINTEGER=102, HEXINTEGER=103, NAME=104,
+ WS=105, COMMENT_LINE=106, COMMENT_BLOCK=107, ASM_BYTE=108, ASM_MNEMONIC=109,
+ ASM_IMM=110, ASM_COLON=111, ASM_COMMA=112, ASM_PAR_BEGIN=113, ASM_PAR_END=114,
+ ASM_BRACKET_BEGIN=115, ASM_BRACKET_END=116, ASM_DOT=117, ASM_SHIFT_LEFT=118,
+ ASM_SHIFT_RIGHT=119, ASM_PLUS=120, ASM_MINUS=121, ASM_LESS_THAN=122, ASM_GREATER_THAN=123,
+ ASM_MULTIPLY=124, ASM_DIVIDE=125, ASM_CURLY_BEGIN=126, ASM_CURLY_END=127,
+ ASM_NUMBER=128, ASM_NUMFLOAT=129, ASM_BINFLOAT=130, ASM_DECFLOAT=131,
+ ASM_HEXFLOAT=132, ASM_NUMINT=133, ASM_BININTEGER=134, ASM_DECINTEGER=135,
+ ASM_HEXINTEGER=136, ASM_CHAR=137, ASM_MULTI_REL=138, ASM_MULTI_NAME=139,
+ ASM_NAME=140, ASM_WS=141, ASM_COMMENT_LINE=142, ASM_COMMENT_BLOCK=143;
public static final int
ASM_MODE=1;
public static String[] channelNames = {
@@ -65,7 +65,7 @@ public class KickCLexer extends Lexer {
"LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "IMPORT", "TYPEDEF",
"PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU", "CODESEG", "DATASEG",
"ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE",
- "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE", "ADDRESS_MAINMEM",
+ "STATIC", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE", "ADDRESS_MAINMEM",
"FORM_SSA", "FORM_MA", "CALLING", "CALLINGCONVENTION", "VARMODEL", "IF",
"ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE",
"ASM", "DEFAULT", "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID", "KICKASM",
@@ -95,13 +95,14 @@ public class KickCLexer extends Lexer {
null, "'&&'", "'||'", "'='", null, "'import'", "'typedef'", "'#pragma'",
"'reserve'", "'pc'", "'target'", "'link'", "'cpu'", "'code_seg'", "'data_seg'",
"'encoding'", "'const'", "'extern'", "'export'", "'align'", "'inline'",
- "'volatile'", "'interrupt'", "'register'", "'__address'", "'__zp'", "'__mem'",
- "'__ssa'", "'__ma'", "'calling'", null, "'var_model'", "'if'", "'else'",
- "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", "'continue'",
- "'asm'", "'default'", "'case'", "'struct'", "'enum'", "'sizeof'", "'typeid'",
- "'kickasm'", "'resource'", "'uses'", "'clobbers'", "'bytes'", "'cycles'",
- "'!'", null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, "'.byte'", null, "'#'"
+ "'volatile'", "'static'", "'interrupt'", "'register'", "'__address'",
+ "'__zp'", "'__mem'", "'__ssa'", "'__ma'", "'calling'", null, "'var_model'",
+ "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'",
+ "'break'", "'continue'", "'asm'", "'default'", "'case'", "'struct'",
+ "'enum'", "'sizeof'", "'typeid'", "'kickasm'", "'resource'", "'uses'",
+ "'clobbers'", "'bytes'", "'cycles'", "'!'", null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, "'.byte'", null, "'#'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -115,7 +116,7 @@ public class KickCLexer extends Lexer {
"GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND",
"IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU",
"CODESEG", "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN",
- "INLINE", "VOLATILE", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE",
+ "INLINE", "VOLATILE", "STATIC", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE",
"ADDRESS_MAINMEM", "FORM_SSA", "FORM_MA", "CALLING", "CALLINGCONVENTION",
"VARMODEL", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK",
"CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID",
@@ -215,19 +216,19 @@ public class KickCLexer extends Lexer {
case 36:
IMPORT_action((RuleContext)_localctx, actionIndex);
break;
- case 72:
+ case 73:
ASM_action((RuleContext)_localctx, actionIndex);
break;
- case 90:
+ case 91:
STRING_action((RuleContext)_localctx, actionIndex);
break;
- case 104:
+ case 105:
NAME_action((RuleContext)_localctx, actionIndex);
break;
- case 128:
+ case 129:
ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex);
break;
- case 129:
+ case 130:
ASM_CURLY_END_action((RuleContext)_localctx, actionIndex);
break;
}
@@ -283,7 +284,7 @@ public class KickCLexer extends Lexer {
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0090\u059d\b\1\b"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0091\u05a6\b\1\b"+
"\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n"+
"\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21"+
"\4\22\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30"+
@@ -302,521 +303,524 @@ public class KickCLexer extends Lexer {
"\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d"+
"\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092"+
"\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096"+
- "\4\u0097\t\u0097\4\u0098\t\u0098\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3"+
- "\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\r\3\r"+
- "\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24"+
- "\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32"+
- "\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37"+
- "\3\37\3\37\3 \3 \3 \3!\3!\3\"\3\"\3\"\3#\3#\3#\3$\3$\3%\3%\3%\3%\3%\3"+
- "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u019c\n%\3&\3&\3"+
- "&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3("+
- "\3(\3(\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,"+
- "\3,\3,\3-\3-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/"+
- "\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3"+
- "\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3"+
- "\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3"+
- "\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3"+
- "\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\38\39\39\39\39\3"+
- "9\39\39\39\39\39\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3"+
- "=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3?\3?\3?\3"+
- "?\3?\3?\3?\3?\3?\3?\3?\3?\3?\5?\u0266\n?\3@\3@\3@\3@\3@\3@\3@\3@\3@\3"+
- "@\3A\3A\3A\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3E\3E\3E\3E\3F\3"+
- "F\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3"+
- "I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3"+
- "L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3O\3O\3P\3P\3P\3"+
- "P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3R\3R\3R\3R\3S\3S\3"+
- "S\3S\3S\3T\3T\3T\3T\3T\3T\3T\3T\3T\3U\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3"+
- "V\3V\3W\3W\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\5X\u030d\nX\3Y\3"+
- "Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3"+
- "Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\5Y\u0334\nY\3Z\3Z\3Z\3Z\3Z\3Z\3"+
- "Z\3Z\3Z\5Z\u033f\nZ\3[\3[\3[\3[\7[\u0345\n[\f[\16[\u0348\13[\3[\3[\3["+
- "\3\\\3\\\3\\\3\\\7\\\u0351\n\\\f\\\16\\\u0354\13\\\3\\\3\\\5\\\u0358\n"+
- "\\\3\\\3\\\5\\\u035c\n\\\5\\\u035e\n\\\3\\\5\\\u0361\n\\\3\\\3\\\3]\3"+
- "]\3]\3]\5]\u0369\n]\3]\3]\3^\3^\5^\u036f\n^\3_\3_\3_\5_\u0374\n_\3`\3"+
- "`\3`\3`\3`\5`\u037b\n`\3`\7`\u037e\n`\f`\16`\u0381\13`\3`\3`\6`\u0385"+
- "\n`\r`\16`\u0386\3a\7a\u038a\na\fa\16a\u038d\13a\3a\3a\6a\u0391\na\ra"+
- "\16a\u0392\3b\3b\3b\3b\3b\5b\u039a\nb\3b\7b\u039d\nb\fb\16b\u03a0\13b"+
- "\3b\3b\6b\u03a4\nb\rb\16b\u03a5\3c\3c\3c\5c\u03ab\nc\3c\3c\3c\5c\u03b0"+
- "\nc\3d\3d\3d\6d\u03b5\nd\rd\16d\u03b6\3d\3d\6d\u03bb\nd\rd\16d\u03bc\5"+
- "d\u03bf\nd\3e\6e\u03c2\ne\re\16e\u03c3\3f\3f\3f\3f\3f\5f\u03cb\nf\3f\6"+
- "f\u03ce\nf\rf\16f\u03cf\3g\3g\3h\3h\3i\3i\3j\3j\7j\u03da\nj\fj\16j\u03dd"+
- "\13j\3j\3j\3k\3k\3l\3l\3m\6m\u03e6\nm\rm\16m\u03e7\3m\3m\3n\3n\3n\3n\7"+
- "n\u03f0\nn\fn\16n\u03f3\13n\3n\3n\3o\3o\3o\3o\7o\u03fb\no\fo\16o\u03fe"+
- "\13o\3o\3o\3o\3o\3o\3p\3p\3p\3p\3p\3p\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+
- "q\3q\3q\3q\3q\5q\u04e9\nq\3r\3r\3s\3s\3t\3t\3u\3u\3v\3v\3w\3w\3x\3x\3"+
- "y\3y\3z\3z\3z\3{\3{\3{\3|\3|\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080\3"+
- "\u0081\3\u0081\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084"+
- "\3\u0084\5\u0084\u0515\n\u0084\3\u0085\3\u0085\3\u0085\5\u0085\u051a\n"+
- "\u0085\3\u0086\3\u0086\7\u0086\u051e\n\u0086\f\u0086\16\u0086\u0521\13"+
- "\u0086\3\u0086\3\u0086\6\u0086\u0525\n\u0086\r\u0086\16\u0086\u0526\3"+
- "\u0087\7\u0087\u052a\n\u0087\f\u0087\16\u0087\u052d\13\u0087\3\u0087\3"+
- "\u0087\6\u0087\u0531\n\u0087\r\u0087\16\u0087\u0532\3\u0088\3\u0088\7"+
- "\u0088\u0537\n\u0088\f\u0088\16\u0088\u053a\13\u0088\3\u0088\3\u0088\6"+
- "\u0088\u053e\n\u0088\r\u0088\16\u0088\u053f\3\u0089\3\u0089\3\u0089\5"+
- "\u0089\u0545\n\u0089\3\u008a\3\u008a\6\u008a\u0549\n\u008a\r\u008a\16"+
- "\u008a\u054a\3\u008b\6\u008b\u054e\n\u008b\r\u008b\16\u008b\u054f\3\u008c"+
- "\3\u008c\6\u008c\u0554\n\u008c\r\u008c\16\u008c\u0555\3\u008d\3\u008d"+
- "\3\u008e\3\u008e\3\u008f\3\u008f\3\u0090\3\u0090\3\u0090\3\u0090\5\u0090"+
- "\u0562\n\u0090\3\u0090\3\u0090\3\u0091\3\u0091\6\u0091\u0568\n\u0091\r"+
- "\u0091\16\u0091\u0569\3\u0092\3\u0092\7\u0092\u056e\n\u0092\f\u0092\16"+
- "\u0092\u0571\13\u0092\3\u0093\3\u0093\7\u0093\u0575\n\u0093\f\u0093\16"+
- "\u0093\u0578\13\u0093\3\u0094\3\u0094\3\u0095\3\u0095\3\u0096\6\u0096"+
- "\u057f\n\u0096\r\u0096\16\u0096\u0580\3\u0096\3\u0096\3\u0097\3\u0097"+
- "\3\u0097\3\u0097\7\u0097\u0589\n\u0097\f\u0097\16\u0097\u058c\13\u0097"+
- "\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098\3\u0098\7\u0098\u0594\n\u0098"+
- "\f\u0098\16\u0098\u0597\13\u0098\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098"+
- "\5\u0346\u03fc\u0595\2\u0099\4\4\6\5\b\6\n\7\f\b\16\t\20\n\22\13\24\f"+
- "\26\r\30\16\32\17\34\20\36\21 \22\"\23$\24&\25(\26*\27,\30.\31\60\32\62"+
- "\33\64\34\66\358\36:\37< >!@\"B#D$F%H&J\'L(N)P*R+T,V-X.Z/\\\60^\61`\62"+
- "b\63d\64f\65h\66j\67l8n9p:r;tz?|@~A\u0080B\u0082C\u0084D\u0086E\u0088"+
- "F\u008aG\u008cH\u008eI\u0090J\u0092K\u0094L\u0096M\u0098N\u009aO\u009c"+
- "P\u009eQ\u00a0R\u00a2S\u00a4T\u00a6U\u00a8V\u00aaW\u00acX\u00aeY\u00b0"+
- "Z\u00b2[\u00b4\\\u00b6]\u00b8^\u00ba_\u00bc`\u00bea\u00c0b\u00c2c\u00c4"+
- "d\u00c6e\u00c8f\u00cag\u00cch\u00ce\2\u00d0\2\u00d2\2\u00d4i\u00d6\2\u00d8"+
- "\2\u00daj\u00dck\u00del\u00e0m\u00e2n\u00e4o\u00e6p\u00e8q\u00ear\u00ec"+
- "s\u00eet\u00f0u\u00f2v\u00f4w\u00f6x\u00f8y\u00faz\u00fc{\u00fe|\u0100"+
- "}\u0102~\u0104\177\u0106\u0080\u0108\u0081\u010a\u0082\u010c\u0083\u010e"+
- "\u0084\u0110\u0085\u0112\u0086\u0114\u0087\u0116\u0088\u0118\u0089\u011a"+
- "\2\u011c\2\u011e\2\u0120\u008a\u0122\u008b\u0124\u008c\u0126\u008d\u0128"+
- "\2\u012a\2\u012c\u008e\u012e\u008f\u0130\u0090\4\2\3\23\3\2$$\3\2||\4"+
- "\2rruu\4\2ooww\7\2$$))hhpptt\3\2))\4\2uuww\7\2dfkknnuuyy\4\2DDdd\3\2\62"+
- "\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\6\2\13\f\17\17\"\"\u00a2"+
- "\u00a2\4\2\f\f\17\17\4\2--//\2\u0627\2\4\3\2\2\2\2\6\3\2\2\2\2\b\3\2\2"+
- "\2\2\n\3\2\2\2\2\f\3\2\2\2\2\16\3\2\2\2\2\20\3\2\2\2\2\22\3\2\2\2\2\24"+
- "\3\2\2\2\2\26\3\2\2\2\2\30\3\2\2\2\2\32\3\2\2\2\2\34\3\2\2\2\2\36\3\2"+
- "\2\2\2 \3\2\2\2\2\"\3\2\2\2\2$\3\2\2\2\2&\3\2\2\2\2(\3\2\2\2\2*\3\2\2"+
- "\2\2,\3\2\2\2\2.\3\2\2\2\2\60\3\2\2\2\2\62\3\2\2\2\2\64\3\2\2\2\2\66\3"+
- "\2\2\2\28\3\2\2\2\2:\3\2\2\2\2<\3\2\2\2\2>\3\2\2\2\2@\3\2\2\2\2B\3\2\2"+
- "\2\2D\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2\2J\3\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2"+
- "P\3\2\2\2\2R\3\2\2\2\2T\3\2\2\2\2V\3\2\2\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3"+
- "\2\2\2\2^\3\2\2\2\2`\3\2\2\2\2b\3\2\2\2\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2"+
- "\2\2j\3\2\2\2\2l\3\2\2\2\2n\3\2\2\2\2p\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2"+
- "v\3\2\2\2\2x\3\2\2\2\2z\3\2\2\2\2|\3\2\2\2\2~\3\2\2\2\2\u0080\3\2\2\2"+
- "\2\u0082\3\2\2\2\2\u0084\3\2\2\2\2\u0086\3\2\2\2\2\u0088\3\2\2\2\2\u008a"+
- "\3\2\2\2\2\u008c\3\2\2\2\2\u008e\3\2\2\2\2\u0090\3\2\2\2\2\u0092\3\2\2"+
- "\2\2\u0094\3\2\2\2\2\u0096\3\2\2\2\2\u0098\3\2\2\2\2\u009a\3\2\2\2\2\u009c"+
- "\3\2\2\2\2\u009e\3\2\2\2\2\u00a0\3\2\2\2\2\u00a2\3\2\2\2\2\u00a4\3\2\2"+
- "\2\2\u00a6\3\2\2\2\2\u00a8\3\2\2\2\2\u00aa\3\2\2\2\2\u00ac\3\2\2\2\2\u00ae"+
- "\3\2\2\2\2\u00b0\3\2\2\2\2\u00b2\3\2\2\2\2\u00b4\3\2\2\2\2\u00b6\3\2\2"+
- "\2\2\u00b8\3\2\2\2\2\u00ba\3\2\2\2\2\u00bc\3\2\2\2\2\u00be\3\2\2\2\2\u00c0"+
- "\3\2\2\2\2\u00c2\3\2\2\2\2\u00c4\3\2\2\2\2\u00c6\3\2\2\2\2\u00c8\3\2\2"+
- "\2\2\u00ca\3\2\2\2\2\u00cc\3\2\2\2\2\u00d4\3\2\2\2\2\u00da\3\2\2\2\2\u00dc"+
- "\3\2\2\2\2\u00de\3\2\2\2\3\u00e0\3\2\2\2\3\u00e2\3\2\2\2\3\u00e4\3\2\2"+
- "\2\3\u00e6\3\2\2\2\3\u00e8\3\2\2\2\3\u00ea\3\2\2\2\3\u00ec\3\2\2\2\3\u00ee"+
- "\3\2\2\2\3\u00f0\3\2\2\2\3\u00f2\3\2\2\2\3\u00f4\3\2\2\2\3\u00f6\3\2\2"+
- "\2\3\u00f8\3\2\2\2\3\u00fa\3\2\2\2\3\u00fc\3\2\2\2\3\u00fe\3\2\2\2\3\u0100"+
- "\3\2\2\2\3\u0102\3\2\2\2\3\u0104\3\2\2\2\3\u0106\3\2\2\2\3\u0108\3\2\2"+
- "\2\3\u010a\3\2\2\2\3\u010c\3\2\2\2\3\u010e\3\2\2\2\3\u0110\3\2\2\2\3\u0112"+
- "\3\2\2\2\3\u0114\3\2\2\2\3\u0116\3\2\2\2\3\u0118\3\2\2\2\3\u0120\3\2\2"+
- "\2\3\u0122\3\2\2\2\3\u0124\3\2\2\2\3\u0126\3\2\2\2\3\u012c\3\2\2\2\3\u012e"+
- "\3\2\2\2\3\u0130\3\2\2\2\4\u0132\3\2\2\2\6\u0135\3\2\2\2\b\u0137\3\2\2"+
- "\2\n\u0139\3\2\2\2\f\u013b\3\2\2\2\16\u013d\3\2\2\2\20\u013f\3\2\2\2\22"+
- "\u0141\3\2\2\2\24\u0143\3\2\2\2\26\u0145\3\2\2\2\30\u0148\3\2\2\2\32\u014a"+
- "\3\2\2\2\34\u014c\3\2\2\2\36\u014f\3\2\2\2 \u0151\3\2\2\2\"\u0153\3\2"+
- "\2\2$\u0155\3\2\2\2&\u0157\3\2\2\2(\u0159\3\2\2\2*\u015c\3\2\2\2,\u015f"+
- "\3\2\2\2.\u0161\3\2\2\2\60\u0163\3\2\2\2\62\u0165\3\2\2\2\64\u0167\3\2"+
- "\2\2\66\u016a\3\2\2\28\u016d\3\2\2\2:\u0170\3\2\2\2<\u0173\3\2\2\2>\u0175"+
- "\3\2\2\2@\u0178\3\2\2\2B\u017b\3\2\2\2D\u017d\3\2\2\2F\u0180\3\2\2\2H"+
- "\u0183\3\2\2\2J\u019b\3\2\2\2L\u019d\3\2\2\2N\u01a6\3\2\2\2P\u01ae\3\2"+
- "\2\2R\u01b6\3\2\2\2T\u01be\3\2\2\2V\u01c1\3\2\2\2X\u01c8\3\2\2\2Z\u01cd"+
- "\3\2\2\2\\\u01d1\3\2\2\2^\u01da\3\2\2\2`\u01e3\3\2\2\2b\u01ec\3\2\2\2"+
- "d\u01f2\3\2\2\2f\u01f9\3\2\2\2h\u0200\3\2\2\2j\u0206\3\2\2\2l\u020d\3"+
- "\2\2\2n\u0216\3\2\2\2p\u0220\3\2\2\2r\u0229\3\2\2\2t\u0233\3\2\2\2v\u0238"+
- "\3\2\2\2x\u023e\3\2\2\2z\u0244\3\2\2\2|\u0249\3\2\2\2~\u0265\3\2\2\2\u0080"+
- "\u0267\3\2\2\2\u0082\u0271\3\2\2\2\u0084\u0274\3\2\2\2\u0086\u0279\3\2"+
- "\2\2\u0088\u027f\3\2\2\2\u008a\u0282\3\2\2\2\u008c\u0286\3\2\2\2\u008e"+
- "\u028d\3\2\2\2\u0090\u0294\3\2\2\2\u0092\u029a\3\2\2\2\u0094\u02a3\3\2"+
- "\2\2\u0096\u02a9\3\2\2\2\u0098\u02b1\3\2\2\2\u009a\u02b6\3\2\2\2\u009c"+
- "\u02bd\3\2\2\2\u009e\u02c2\3\2\2\2\u00a0\u02c9\3\2\2\2\u00a2\u02d0\3\2"+
- "\2\2\u00a4\u02d8\3\2\2\2\u00a6\u02e1\3\2\2\2\u00a8\u02e6\3\2\2\2\u00aa"+
- "\u02ef\3\2\2\2\u00ac\u02f5\3\2\2\2\u00ae\u02fc\3\2\2\2\u00b0\u030c\3\2"+
- "\2\2\u00b2\u0333\3\2\2\2\u00b4\u033e\3\2\2\2\u00b6\u0340\3\2\2\2\u00b8"+
- "\u034c\3\2\2\2\u00ba\u0364\3\2\2\2\u00bc\u036e\3\2\2\2\u00be\u0373\3\2"+
- "\2\2\u00c0\u037a\3\2\2\2\u00c2\u038b\3\2\2\2\u00c4\u0399\3\2\2\2\u00c6"+
- "\u03aa\3\2\2\2\u00c8\u03be\3\2\2\2\u00ca\u03c1\3\2\2\2\u00cc\u03ca\3\2"+
- "\2\2\u00ce\u03d1\3\2\2\2\u00d0\u03d3\3\2\2\2\u00d2\u03d5\3\2\2\2\u00d4"+
- "\u03d7\3\2\2\2\u00d6\u03e0\3\2\2\2\u00d8\u03e2\3\2\2\2\u00da\u03e5\3\2"+
- "\2\2\u00dc\u03eb\3\2\2\2\u00de\u03f6\3\2\2\2\u00e0\u0404\3\2\2\2\u00e2"+
- "\u04e8\3\2\2\2\u00e4\u04ea\3\2\2\2\u00e6\u04ec\3\2\2\2\u00e8\u04ee\3\2"+
- "\2\2\u00ea\u04f0\3\2\2\2\u00ec\u04f2\3\2\2\2\u00ee\u04f4\3\2\2\2\u00f0"+
- "\u04f6\3\2\2\2\u00f2\u04f8\3\2\2\2\u00f4\u04fa\3\2\2\2\u00f6\u04fd\3\2"+
- "\2\2\u00f8\u0500\3\2\2\2\u00fa\u0502\3\2\2\2\u00fc\u0504\3\2\2\2\u00fe"+
- "\u0506\3\2\2\2\u0100\u0508\3\2\2\2\u0102\u050a\3\2\2\2\u0104\u050c\3\2"+
- "\2\2\u0106\u050f\3\2\2\2\u0108\u0514\3\2\2\2\u010a\u0519\3\2\2\2\u010c"+
- "\u051b\3\2\2\2\u010e\u052b\3\2\2\2\u0110\u0534\3\2\2\2\u0112\u0544\3\2"+
- "\2\2\u0114\u0546\3\2\2\2\u0116\u054d\3\2\2\2\u0118\u0551\3\2\2\2\u011a"+
- "\u0557\3\2\2\2\u011c\u0559\3\2\2\2\u011e\u055b\3\2\2\2\u0120\u055d\3\2"+
- "\2\2\u0122\u0565\3\2\2\2\u0124\u056b\3\2\2\2\u0126\u0572\3\2\2\2\u0128"+
- "\u0579\3\2\2\2\u012a\u057b\3\2\2\2\u012c\u057e\3\2\2\2\u012e\u0584\3\2"+
- "\2\2\u0130\u058f\3\2\2\2\u0132\u0133\7}\2\2\u0133\u0134\b\2\2\2\u0134"+
- "\5\3\2\2\2\u0135\u0136\7\177\2\2\u0136\7\3\2\2\2\u0137\u0138\7]\2\2\u0138"+
- "\t\3\2\2\2\u0139\u013a\7_\2\2\u013a\13\3\2\2\2\u013b\u013c\7*\2\2\u013c"+
- "\r\3\2\2\2\u013d\u013e\7+\2\2\u013e\17\3\2\2\2\u013f\u0140\7=\2\2\u0140"+
- "\21\3\2\2\2\u0141\u0142\7<\2\2\u0142\23\3\2\2\2\u0143\u0144\7.\2\2\u0144"+
- "\25\3\2\2\2\u0145\u0146\7\60\2\2\u0146\u0147\7\60\2\2\u0147\27\3\2\2\2"+
- "\u0148\u0149\7A\2\2\u0149\31\3\2\2\2\u014a\u014b\7\60\2\2\u014b\33\3\2"+
- "\2\2\u014c\u014d\7/\2\2\u014d\u014e\7@\2\2\u014e\35\3\2\2\2\u014f\u0150"+
- "\7-\2\2\u0150\37\3\2\2\2\u0151\u0152\7/\2\2\u0152!\3\2\2\2\u0153\u0154"+
- "\7,\2\2\u0154#\3\2\2\2\u0155\u0156\7\61\2\2\u0156%\3\2\2\2\u0157\u0158"+
- "\7\'\2\2\u0158\'\3\2\2\2\u0159\u015a\7-\2\2\u015a\u015b\7-\2\2\u015b)"+
- "\3\2\2\2\u015c\u015d\7/\2\2\u015d\u015e\7/\2\2\u015e+\3\2\2\2\u015f\u0160"+
- "\7(\2\2\u0160-\3\2\2\2\u0161\u0162\7\u0080\2\2\u0162/\3\2\2\2\u0163\u0164"+
- "\7`\2\2\u0164\61\3\2\2\2\u0165\u0166\7~\2\2\u0166\63\3\2\2\2\u0167\u0168"+
- "\7>\2\2\u0168\u0169\7>\2\2\u0169\65\3\2\2\2\u016a\u016b\7@\2\2\u016b\u016c"+
- "\7@\2\2\u016c\67\3\2\2\2\u016d\u016e\7?\2\2\u016e\u016f\7?\2\2\u016f9"+
- "\3\2\2\2\u0170\u0171\7#\2\2\u0171\u0172\7?\2\2\u0172;\3\2\2\2\u0173\u0174"+
- "\7>\2\2\u0174=\3\2\2\2\u0175\u0176\7>\2\2\u0176\u0177\7?\2\2\u0177?\3"+
- "\2\2\2\u0178\u0179\7@\2\2\u0179\u017a\7?\2\2\u017aA\3\2\2\2\u017b\u017c"+
- "\7@\2\2\u017cC\3\2\2\2\u017d\u017e\7(\2\2\u017e\u017f\7(\2\2\u017fE\3"+
- "\2\2\2\u0180\u0181\7~\2\2\u0181\u0182\7~\2\2\u0182G\3\2\2\2\u0183\u0184"+
- "\7?\2\2\u0184I\3\2\2\2\u0185\u0186\7-\2\2\u0186\u019c\7?\2\2\u0187\u0188"+
- "\7/\2\2\u0188\u019c\7?\2\2\u0189\u018a\7,\2\2\u018a\u019c\7?\2\2\u018b"+
- "\u018c\7\61\2\2\u018c\u019c\7?\2\2\u018d\u018e\7\'\2\2\u018e\u019c\7?"+
- "\2\2\u018f\u0190\7>\2\2\u0190\u0191\7>\2\2\u0191\u019c\7?\2\2\u0192\u0193"+
- "\7@\2\2\u0193\u0194\7@\2\2\u0194\u019c\7?\2\2\u0195\u0196\7(\2\2\u0196"+
- "\u019c\7?\2\2\u0197\u0198\7~\2\2\u0198\u019c\7?\2\2\u0199\u019a\7`\2\2"+
- "\u019a\u019c\7?\2\2\u019b\u0185\3\2\2\2\u019b\u0187\3\2\2\2\u019b\u0189"+
- "\3\2\2\2\u019b\u018b\3\2\2\2\u019b\u018d\3\2\2\2\u019b\u018f\3\2\2\2\u019b"+
- "\u0192\3\2\2\2\u019b\u0195\3\2\2\2\u019b\u0197\3\2\2\2\u019b\u0199\3\2"+
- "\2\2\u019cK\3\2\2\2\u019d\u019e\7k\2\2\u019e\u019f\7o\2\2\u019f\u01a0"+
- "\7r\2\2\u01a0\u01a1\7q\2\2\u01a1\u01a2\7t\2\2\u01a2\u01a3\7v\2\2\u01a3"+
- "\u01a4\3\2\2\2\u01a4\u01a5\b&\3\2\u01a5M\3\2\2\2\u01a6\u01a7\7v\2\2\u01a7"+
- "\u01a8\7{\2\2\u01a8\u01a9\7r\2\2\u01a9\u01aa\7g\2\2\u01aa\u01ab\7f\2\2"+
- "\u01ab\u01ac\7g\2\2\u01ac\u01ad\7h\2\2\u01adO\3\2\2\2\u01ae\u01af\7%\2"+
- "\2\u01af\u01b0\7r\2\2\u01b0\u01b1\7t\2\2\u01b1\u01b2\7c\2\2\u01b2\u01b3"+
- "\7i\2\2\u01b3\u01b4\7o\2\2\u01b4\u01b5\7c\2\2\u01b5Q\3\2\2\2\u01b6\u01b7"+
- "\7t\2\2\u01b7\u01b8\7g\2\2\u01b8\u01b9\7u\2\2\u01b9\u01ba\7g\2\2\u01ba"+
- "\u01bb\7t\2\2\u01bb\u01bc\7x\2\2\u01bc\u01bd\7g\2\2\u01bdS\3\2\2\2\u01be"+
- "\u01bf\7r\2\2\u01bf\u01c0\7e\2\2\u01c0U\3\2\2\2\u01c1\u01c2\7v\2\2\u01c2"+
- "\u01c3\7c\2\2\u01c3\u01c4\7t\2\2\u01c4\u01c5\7i\2\2\u01c5\u01c6\7g\2\2"+
- "\u01c6\u01c7\7v\2\2\u01c7W\3\2\2\2\u01c8\u01c9\7n\2\2\u01c9\u01ca\7k\2"+
- "\2\u01ca\u01cb\7p\2\2\u01cb\u01cc\7m\2\2\u01ccY\3\2\2\2\u01cd\u01ce\7"+
- "e\2\2\u01ce\u01cf\7r\2\2\u01cf\u01d0\7w\2\2\u01d0[\3\2\2\2\u01d1\u01d2"+
- "\7e\2\2\u01d2\u01d3\7q\2\2\u01d3\u01d4\7f\2\2\u01d4\u01d5\7g\2\2\u01d5"+
- "\u01d6\7a\2\2\u01d6\u01d7\7u\2\2\u01d7\u01d8\7g\2\2\u01d8\u01d9\7i\2\2"+
- "\u01d9]\3\2\2\2\u01da\u01db\7f\2\2\u01db\u01dc\7c\2\2\u01dc\u01dd\7v\2"+
- "\2\u01dd\u01de\7c\2\2\u01de\u01df\7a\2\2\u01df\u01e0\7u\2\2\u01e0\u01e1"+
- "\7g\2\2\u01e1\u01e2\7i\2\2\u01e2_\3\2\2\2\u01e3\u01e4\7g\2\2\u01e4\u01e5"+
- "\7p\2\2\u01e5\u01e6\7e\2\2\u01e6\u01e7\7q\2\2\u01e7\u01e8\7f\2\2\u01e8"+
- "\u01e9\7k\2\2\u01e9\u01ea\7p\2\2\u01ea\u01eb\7i\2\2\u01eba\3\2\2\2\u01ec"+
- "\u01ed\7e\2\2\u01ed\u01ee\7q\2\2\u01ee\u01ef\7p\2\2\u01ef\u01f0\7u\2\2"+
- "\u01f0\u01f1\7v\2\2\u01f1c\3\2\2\2\u01f2\u01f3\7g\2\2\u01f3\u01f4\7z\2"+
- "\2\u01f4\u01f5\7v\2\2\u01f5\u01f6\7g\2\2\u01f6\u01f7\7t\2\2\u01f7\u01f8"+
- "\7p\2\2\u01f8e\3\2\2\2\u01f9\u01fa\7g\2\2\u01fa\u01fb\7z\2\2\u01fb\u01fc"+
- "\7r\2\2\u01fc\u01fd\7q\2\2\u01fd\u01fe\7t\2\2\u01fe\u01ff\7v\2\2\u01ff"+
- "g\3\2\2\2\u0200\u0201\7c\2\2\u0201\u0202\7n\2\2\u0202\u0203\7k\2\2\u0203"+
- "\u0204\7i\2\2\u0204\u0205\7p\2\2\u0205i\3\2\2\2\u0206\u0207\7k\2\2\u0207"+
- "\u0208\7p\2\2\u0208\u0209\7n\2\2\u0209\u020a\7k\2\2\u020a\u020b\7p\2\2"+
- "\u020b\u020c\7g\2\2\u020ck\3\2\2\2\u020d\u020e\7x\2\2\u020e\u020f\7q\2"+
- "\2\u020f\u0210\7n\2\2\u0210\u0211\7c\2\2\u0211\u0212\7v\2\2\u0212\u0213"+
- "\7k\2\2\u0213\u0214\7n\2\2\u0214\u0215\7g\2\2\u0215m\3\2\2\2\u0216\u0217"+
- "\7k\2\2\u0217\u0218\7p\2\2\u0218\u0219\7v\2\2\u0219\u021a\7g\2\2\u021a"+
- "\u021b\7t\2\2\u021b\u021c\7t\2\2\u021c\u021d\7w\2\2\u021d\u021e\7r\2\2"+
- "\u021e\u021f\7v\2\2\u021fo\3\2\2\2\u0220\u0221\7t\2\2\u0221\u0222\7g\2"+
- "\2\u0222\u0223\7i\2\2\u0223\u0224\7k\2\2\u0224\u0225\7u\2\2\u0225\u0226"+
- "\7v\2\2\u0226\u0227\7g\2\2\u0227\u0228\7t\2\2\u0228q\3\2\2\2\u0229\u022a"+
- "\7a\2\2\u022a\u022b\7a\2\2\u022b\u022c\7c\2\2\u022c\u022d\7f\2\2\u022d"+
- "\u022e\7f\2\2\u022e\u022f\7t\2\2\u022f\u0230\7g\2\2\u0230\u0231\7u\2\2"+
- "\u0231\u0232\7u\2\2\u0232s\3\2\2\2\u0233\u0234\7a\2\2\u0234\u0235\7a\2"+
- "\2\u0235\u0236\7|\2\2\u0236\u0237\7r\2\2\u0237u\3\2\2\2\u0238\u0239\7"+
- "a\2\2\u0239\u023a\7a\2\2\u023a\u023b\7o\2\2\u023b\u023c\7g\2\2\u023c\u023d"+
- "\7o\2\2\u023dw\3\2\2\2\u023e\u023f\7a\2\2\u023f\u0240\7a\2\2\u0240\u0241"+
- "\7u\2\2\u0241\u0242\7u\2\2\u0242\u0243\7c\2\2\u0243y\3\2\2\2\u0244\u0245"+
- "\7a\2\2\u0245\u0246\7a\2\2\u0246\u0247\7o\2\2\u0247\u0248\7c\2\2\u0248"+
- "{\3\2\2\2\u0249\u024a\7e\2\2\u024a\u024b\7c\2\2\u024b\u024c\7n\2\2\u024c"+
- "\u024d\7n\2\2\u024d\u024e\7k\2\2\u024e\u024f\7p\2\2\u024f\u0250\7i\2\2"+
- "\u0250}\3\2\2\2\u0251\u0252\7a\2\2\u0252\u0253\7a\2\2\u0253\u0254\7u\2"+
- "\2\u0254\u0255\7v\2\2\u0255\u0256\7c\2\2\u0256\u0257\7e\2\2\u0257\u0258"+
- "\7m\2\2\u0258\u0259\7e\2\2\u0259\u025a\7c\2\2\u025a\u025b\7n\2\2\u025b"+
- "\u0266\7n\2\2\u025c\u025d\7a\2\2\u025d\u025e\7a\2\2\u025e\u025f\7r\2\2"+
- "\u025f\u0260\7j\2\2\u0260\u0261\7k\2\2\u0261\u0262\7e\2\2\u0262\u0263"+
- "\7c\2\2\u0263\u0264\7n\2\2\u0264\u0266\7n\2\2\u0265\u0251\3\2\2\2\u0265"+
- "\u025c\3\2\2\2\u0266\177\3\2\2\2\u0267\u0268\7x\2\2\u0268\u0269\7c\2\2"+
- "\u0269\u026a\7t\2\2\u026a\u026b\7a\2\2\u026b\u026c\7o\2\2\u026c\u026d"+
- "\7q\2\2\u026d\u026e\7f\2\2\u026e\u026f\7g\2\2\u026f\u0270\7n\2\2\u0270"+
- "\u0081\3\2\2\2\u0271\u0272\7k\2\2\u0272\u0273\7h\2\2\u0273\u0083\3\2\2"+
- "\2\u0274\u0275\7g\2\2\u0275\u0276\7n\2\2\u0276\u0277\7u\2\2\u0277\u0278"+
- "\7g\2\2\u0278\u0085\3\2\2\2\u0279\u027a\7y\2\2\u027a\u027b\7j\2\2\u027b"+
- "\u027c\7k\2\2\u027c\u027d\7n\2\2\u027d\u027e\7g\2\2\u027e\u0087\3\2\2"+
- "\2\u027f\u0280\7f\2\2\u0280\u0281\7q\2\2\u0281\u0089\3\2\2\2\u0282\u0283"+
- "\7h\2\2\u0283\u0284\7q\2\2\u0284\u0285\7t\2\2\u0285\u008b\3\2\2\2\u0286"+
- "\u0287\7u\2\2\u0287\u0288\7y\2\2\u0288\u0289\7k\2\2\u0289\u028a\7v\2\2"+
- "\u028a\u028b\7e\2\2\u028b\u028c\7j\2\2\u028c\u008d\3\2\2\2\u028d\u028e"+
- "\7t\2\2\u028e\u028f\7g\2\2\u028f\u0290\7v\2\2\u0290\u0291\7w\2\2\u0291"+
- "\u0292\7t\2\2\u0292\u0293\7p\2\2\u0293\u008f\3\2\2\2\u0294\u0295\7d\2"+
- "\2\u0295\u0296\7t\2\2\u0296\u0297\7g\2\2\u0297\u0298\7c\2\2\u0298\u0299"+
- "\7m\2\2\u0299\u0091\3\2\2\2\u029a\u029b\7e\2\2\u029b\u029c\7q\2\2\u029c"+
- "\u029d\7p\2\2\u029d\u029e\7v\2\2\u029e\u029f\7k\2\2\u029f\u02a0\7p\2\2"+
- "\u02a0\u02a1\7w\2\2\u02a1\u02a2\7g\2\2\u02a2\u0093\3\2\2\2\u02a3\u02a4"+
- "\7c\2\2\u02a4\u02a5\7u\2\2\u02a5\u02a6\7o\2\2\u02a6\u02a7\3\2\2\2\u02a7"+
- "\u02a8\bJ\4\2\u02a8\u0095\3\2\2\2\u02a9\u02aa\7f\2\2\u02aa\u02ab\7g\2"+
- "\2\u02ab\u02ac\7h\2\2\u02ac\u02ad\7c\2\2\u02ad\u02ae\7w\2\2\u02ae\u02af"+
- "\7n\2\2\u02af\u02b0\7v\2\2\u02b0\u0097\3\2\2\2\u02b1\u02b2\7e\2\2\u02b2"+
- "\u02b3\7c\2\2\u02b3\u02b4\7u\2\2\u02b4\u02b5\7g\2\2\u02b5\u0099\3\2\2"+
- "\2\u02b6\u02b7\7u\2\2\u02b7\u02b8\7v\2\2\u02b8\u02b9\7t\2\2\u02b9\u02ba"+
- "\7w\2\2\u02ba\u02bb\7e\2\2\u02bb\u02bc\7v\2\2\u02bc\u009b\3\2\2\2\u02bd"+
- "\u02be\7g\2\2\u02be\u02bf\7p\2\2\u02bf\u02c0\7w\2\2\u02c0\u02c1\7o\2\2"+
- "\u02c1\u009d\3\2\2\2\u02c2\u02c3\7u\2\2\u02c3\u02c4\7k\2\2\u02c4\u02c5"+
- "\7|\2\2\u02c5\u02c6\7g\2\2\u02c6\u02c7\7q\2\2\u02c7\u02c8\7h\2\2\u02c8"+
- "\u009f\3\2\2\2\u02c9\u02ca\7v\2\2\u02ca\u02cb\7{\2\2\u02cb\u02cc\7r\2"+
- "\2\u02cc\u02cd\7g\2\2\u02cd\u02ce\7k\2\2\u02ce\u02cf\7f\2\2\u02cf\u00a1"+
- "\3\2\2\2\u02d0\u02d1\7m\2\2\u02d1\u02d2\7k\2\2\u02d2\u02d3\7e\2\2\u02d3"+
- "\u02d4\7m\2\2\u02d4\u02d5\7c\2\2\u02d5\u02d6\7u\2\2\u02d6\u02d7\7o\2\2"+
- "\u02d7\u00a3\3\2\2\2\u02d8\u02d9\7t\2\2\u02d9\u02da\7g\2\2\u02da\u02db"+
- "\7u\2\2\u02db\u02dc\7q\2\2\u02dc\u02dd\7w\2\2\u02dd\u02de\7t\2\2\u02de"+
- "\u02df\7e\2\2\u02df\u02e0\7g\2\2\u02e0\u00a5\3\2\2\2\u02e1\u02e2\7w\2"+
- "\2\u02e2\u02e3\7u\2\2\u02e3\u02e4\7g\2\2\u02e4\u02e5\7u\2\2\u02e5\u00a7"+
- "\3\2\2\2\u02e6\u02e7\7e\2\2\u02e7\u02e8\7n\2\2\u02e8\u02e9\7q\2\2\u02e9"+
- "\u02ea\7d\2\2\u02ea\u02eb\7d\2\2\u02eb\u02ec\7g\2\2\u02ec\u02ed\7t\2\2"+
- "\u02ed\u02ee\7u\2\2\u02ee\u00a9\3\2\2\2\u02ef\u02f0\7d\2\2\u02f0\u02f1"+
- "\7{\2\2\u02f1\u02f2\7v\2\2\u02f2\u02f3\7g\2\2\u02f3\u02f4\7u\2\2\u02f4"+
- "\u00ab\3\2\2\2\u02f5\u02f6\7e\2\2\u02f6\u02f7\7{\2\2\u02f7\u02f8\7e\2"+
- "\2\u02f8\u02f9\7n\2\2\u02f9\u02fa\7g\2\2\u02fa\u02fb\7u\2\2\u02fb\u00ad"+
- "\3\2\2\2\u02fc\u02fd\7#\2\2\u02fd\u00af\3\2\2\2\u02fe\u02ff\7u\2\2\u02ff"+
- "\u0300\7k\2\2\u0300\u0301\7i\2\2\u0301\u0302\7p\2\2\u0302\u0303\7g\2\2"+
- "\u0303\u030d\7f\2\2\u0304\u0305\7w\2\2\u0305\u0306\7p\2\2\u0306\u0307"+
- "\7u\2\2\u0307\u0308\7k\2\2\u0308\u0309\7i\2\2\u0309\u030a\7p\2\2\u030a"+
- "\u030b\7g\2\2\u030b\u030d\7f\2\2\u030c\u02fe\3\2\2\2\u030c\u0304\3\2\2"+
- "\2\u030d\u00b1\3\2\2\2\u030e\u030f\7d\2\2\u030f\u0310\7{\2\2\u0310\u0311"+
- "\7v\2\2\u0311\u0334\7g\2\2\u0312\u0313\7y\2\2\u0313\u0314\7q\2\2\u0314"+
- "\u0315\7t\2\2\u0315\u0334\7f\2\2\u0316\u0317\7f\2\2\u0317\u0318\7y\2\2"+
- "\u0318\u0319\7q\2\2\u0319\u031a\7t\2\2\u031a\u0334\7f\2\2\u031b\u031c"+
- "\7d\2\2\u031c\u031d\7q\2\2\u031d\u031e\7q\2\2\u031e\u0334\7n\2\2\u031f"+
- "\u0320\7e\2\2\u0320\u0321\7j\2\2\u0321\u0322\7c\2\2\u0322\u0334\7t\2\2"+
- "\u0323\u0324\7u\2\2\u0324\u0325\7j\2\2\u0325\u0326\7q\2\2\u0326\u0327"+
- "\7t\2\2\u0327\u0334\7v\2\2\u0328\u0329\7k\2\2\u0329\u032a\7p\2\2\u032a"+
- "\u0334\7v\2\2\u032b\u032c\7n\2\2\u032c\u032d\7q\2\2\u032d\u032e\7p\2\2"+
- "\u032e\u0334\7i\2\2\u032f\u0330\7x\2\2\u0330\u0331\7q\2\2\u0331\u0332"+
- "\7k\2\2\u0332\u0334\7f\2\2\u0333\u030e\3\2\2\2\u0333\u0312\3\2\2\2\u0333"+
- "\u0316\3\2\2\2\u0333\u031b\3\2\2\2\u0333\u031f\3\2\2\2\u0333\u0323\3\2"+
- "\2\2\u0333\u0328\3\2\2\2\u0333\u032b\3\2\2\2\u0333\u032f\3\2\2\2\u0334"+
- "\u00b3\3\2\2\2\u0335\u0336\7v\2\2\u0336\u0337\7t\2\2\u0337\u0338\7w\2"+
- "\2\u0338\u033f\7g\2\2\u0339\u033a\7h\2\2\u033a\u033b\7c\2\2\u033b\u033c"+
- "\7n\2\2\u033c\u033d\7u\2\2\u033d\u033f\7g\2\2\u033e\u0335\3\2\2\2\u033e"+
- "\u0339\3\2\2\2\u033f\u00b5\3\2\2\2\u0340\u0341\7}\2\2\u0341\u0342\7}\2"+
- "\2\u0342\u0346\3\2\2\2\u0343\u0345\13\2\2\2\u0344\u0343\3\2\2\2\u0345"+
- "\u0348\3\2\2\2\u0346\u0347\3\2\2\2\u0346\u0344\3\2\2\2\u0347\u0349\3\2"+
- "\2\2\u0348\u0346\3\2\2\2\u0349\u034a\7\177\2\2\u034a\u034b\7\177\2\2\u034b"+
- "\u00b7\3\2\2\2\u034c\u0352\7$\2\2\u034d\u034e\7^\2\2\u034e\u0351\7$\2"+
- "\2\u034f\u0351\n\2\2\2\u0350\u034d\3\2\2\2\u0350\u034f\3\2\2\2\u0351\u0354"+
- "\3\2\2\2\u0352\u0350\3\2\2\2\u0352\u0353\3\2\2\2\u0353\u0355\3\2\2\2\u0354"+
- "\u0352\3\2\2\2\u0355\u0357\7$\2\2\u0356\u0358\t\3\2\2\u0357\u0356\3\2"+
- "\2\2\u0357\u0358\3\2\2\2\u0358\u035d\3\2\2\2\u0359\u035b\t\4\2\2\u035a"+
- "\u035c\t\5\2\2\u035b\u035a\3\2\2\2\u035b\u035c\3\2\2\2\u035c\u035e\3\2"+
- "\2\2\u035d\u0359\3\2\2\2\u035d\u035e\3\2\2\2\u035e\u0360\3\2\2\2\u035f"+
- "\u0361\t\3\2\2\u0360\u035f\3\2\2\2\u0360\u0361\3\2\2\2\u0361\u0362\3\2"+
- "\2\2\u0362\u0363\b\\\5\2\u0363\u00b9\3\2\2\2\u0364\u0368\7)\2\2\u0365"+
- "\u0366\7^\2\2\u0366\u0369\t\6\2\2\u0367\u0369\n\7\2\2\u0368\u0365\3\2"+
- "\2\2\u0368\u0367\3\2\2\2\u0369\u036a\3\2\2\2\u036a\u036b\7)\2\2\u036b"+
- "\u00bb\3\2\2\2\u036c\u036f\5\u00be_\2\u036d\u036f\5\u00c6c\2\u036e\u036c"+
- "\3\2\2\2\u036e\u036d\3\2\2\2\u036f\u00bd\3\2\2\2\u0370\u0374\5\u00c0`"+
- "\2\u0371\u0374\5\u00c2a\2\u0372\u0374\5\u00c4b\2\u0373\u0370\3\2\2\2\u0373"+
- "\u0371\3\2\2\2\u0373\u0372\3\2\2\2\u0374\u00bf\3\2\2\2\u0375\u037b\7\'"+
- "\2\2\u0376\u0377\7\62\2\2\u0377\u037b\7d\2\2\u0378\u0379\7\62\2\2\u0379"+
- "\u037b\7D\2\2\u037a\u0375\3\2\2\2\u037a\u0376\3\2\2\2\u037a\u0378\3\2"+
- "\2\2\u037b\u037f\3\2\2\2\u037c\u037e\5\u00ceg\2\u037d\u037c\3\2\2\2\u037e"+
- "\u0381\3\2\2\2\u037f\u037d\3\2\2\2\u037f\u0380\3\2\2\2\u0380\u0382\3\2"+
- "\2\2\u0381\u037f\3\2\2\2\u0382\u0384\7\60\2\2\u0383\u0385\5\u00ceg\2\u0384"+
- "\u0383\3\2\2\2\u0385\u0386\3\2\2\2\u0386\u0384\3\2\2\2\u0386\u0387\3\2"+
- "\2\2\u0387\u00c1\3\2\2\2\u0388\u038a\5\u00d0h\2\u0389\u0388\3\2\2\2\u038a"+
- "\u038d\3\2\2\2\u038b\u0389\3\2\2\2\u038b\u038c\3\2\2\2\u038c\u038e\3\2"+
- "\2\2\u038d\u038b\3\2\2\2\u038e\u0390\7\60\2\2\u038f\u0391\5\u00d0h\2\u0390"+
- "\u038f\3\2\2\2\u0391\u0392\3\2\2\2\u0392\u0390\3\2\2\2\u0392\u0393\3\2"+
- "\2\2\u0393\u00c3\3\2\2\2\u0394\u039a\7&\2\2\u0395\u0396\7\62\2\2\u0396"+
- "\u039a\7z\2\2\u0397\u0398\7\62\2\2\u0398\u039a\7Z\2\2\u0399\u0394\3\2"+
- "\2\2\u0399\u0395\3\2\2\2\u0399\u0397\3\2\2\2\u039a\u039e\3\2\2\2\u039b"+
- "\u039d\5\u00d2i\2\u039c\u039b\3\2\2\2\u039d\u03a0\3\2\2\2\u039e\u039c"+
- "\3\2\2\2\u039e\u039f\3\2\2\2\u039f\u03a1\3\2\2\2\u03a0\u039e\3\2\2\2\u03a1"+
- "\u03a3\7\60\2\2\u03a2\u03a4\5\u00d2i\2\u03a3\u03a2\3\2\2\2\u03a4\u03a5"+
- "\3\2\2\2\u03a5\u03a3\3\2\2\2\u03a5\u03a6\3\2\2\2\u03a6\u00c5\3\2\2\2\u03a7"+
- "\u03ab\5\u00cae\2\u03a8\u03ab\5\u00ccf\2\u03a9\u03ab\5\u00c8d\2\u03aa"+
- "\u03a7\3\2\2\2\u03aa\u03a8\3\2\2\2\u03aa\u03a9\3\2\2\2\u03ab\u03af\3\2"+
- "\2\2\u03ac\u03ad\t\b\2\2\u03ad\u03b0\t\t\2\2\u03ae\u03b0\7n\2\2\u03af"+
- "\u03ac\3\2\2\2\u03af\u03ae\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0\u00c7\3\2"+
- "\2\2\u03b1\u03b2\7\62\2\2\u03b2\u03b4\t\n\2\2\u03b3\u03b5\5\u00ceg\2\u03b4"+
- "\u03b3\3\2\2\2\u03b5\u03b6\3\2\2\2\u03b6\u03b4\3\2\2\2\u03b6\u03b7\3\2"+
- "\2\2\u03b7\u03bf\3\2\2\2\u03b8\u03ba\7\'\2\2\u03b9\u03bb\5\u00ceg\2\u03ba"+
- "\u03b9\3\2\2\2\u03bb\u03bc\3\2\2\2\u03bc\u03ba\3\2\2\2\u03bc\u03bd\3\2"+
- "\2\2\u03bd\u03bf\3\2\2\2\u03be\u03b1\3\2\2\2\u03be\u03b8\3\2\2\2\u03bf"+
- "\u00c9\3\2\2\2\u03c0\u03c2\5\u00d0h\2\u03c1\u03c0\3\2\2\2\u03c2\u03c3"+
- "\3\2\2\2\u03c3\u03c1\3\2\2\2\u03c3\u03c4\3\2\2\2\u03c4\u00cb\3\2\2\2\u03c5"+
- "\u03cb\7&\2\2\u03c6\u03c7\7\62\2\2\u03c7\u03cb\7z\2\2\u03c8\u03c9\7\62"+
- "\2\2\u03c9\u03cb\7Z\2\2\u03ca\u03c5\3\2\2\2\u03ca\u03c6\3\2\2\2\u03ca"+
- "\u03c8\3\2\2\2\u03cb\u03cd\3\2\2\2\u03cc\u03ce\5\u00d2i\2\u03cd\u03cc"+
- "\3\2\2\2\u03ce\u03cf\3\2\2\2\u03cf\u03cd\3\2\2\2\u03cf\u03d0\3\2\2\2\u03d0"+
- "\u00cd\3\2\2\2\u03d1\u03d2\t\13\2\2\u03d2\u00cf\3\2\2\2\u03d3\u03d4\t"+
- "\f\2\2\u03d4\u00d1\3\2\2\2\u03d5\u03d6\t\r\2\2\u03d6\u00d3\3\2\2\2\u03d7"+
- "\u03db\5\u00d6k\2\u03d8\u03da\5\u00d8l\2\u03d9\u03d8\3\2\2\2\u03da\u03dd"+
- "\3\2\2\2\u03db\u03d9\3\2\2\2\u03db\u03dc\3\2\2\2\u03dc\u03de\3\2\2\2\u03dd"+
- "\u03db\3\2\2\2\u03de\u03df\bj\6\2\u03df\u00d5\3\2\2\2\u03e0\u03e1\t\16"+
- "\2\2\u03e1\u00d7\3\2\2\2\u03e2\u03e3\t\17\2\2\u03e3\u00d9\3\2\2\2\u03e4"+
- "\u03e6\t\20\2\2\u03e5\u03e4\3\2\2\2\u03e6\u03e7\3\2\2\2\u03e7\u03e5\3"+
- "\2\2\2\u03e7\u03e8\3\2\2\2\u03e8\u03e9\3\2\2\2\u03e9\u03ea\bm\7\2\u03ea"+
- "\u00db\3\2\2\2\u03eb\u03ec\7\61\2\2\u03ec\u03ed\7\61\2\2\u03ed\u03f1\3"+
- "\2\2\2\u03ee\u03f0\n\21\2\2\u03ef\u03ee\3\2\2\2\u03f0\u03f3\3\2\2\2\u03f1"+
- "\u03ef\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f4\3\2\2\2\u03f3\u03f1\3\2"+
- "\2\2\u03f4\u03f5\bn\b\2\u03f5\u00dd\3\2\2\2\u03f6\u03f7\7\61\2\2\u03f7"+
- "\u03f8\7,\2\2\u03f8\u03fc\3\2\2\2\u03f9\u03fb\13\2\2\2\u03fa\u03f9\3\2"+
- "\2\2\u03fb\u03fe\3\2\2\2\u03fc\u03fd\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd"+
- "\u03ff\3\2\2\2\u03fe\u03fc\3\2\2\2\u03ff\u0400\7,\2\2\u0400\u0401\7\61"+
- "\2\2\u0401\u0402\3\2\2\2\u0402\u0403\bo\b\2\u0403\u00df\3\2\2\2\u0404"+
- "\u0405\7\60\2\2\u0405\u0406\7d\2\2\u0406\u0407\7{\2\2\u0407\u0408\7v\2"+
- "\2\u0408\u0409\7g\2\2\u0409\u00e1\3\2\2\2\u040a\u040b\7d\2\2\u040b\u040c"+
- "\7t\2\2\u040c\u04e9\7m\2\2\u040d\u040e\7q\2\2\u040e\u040f\7t\2\2\u040f"+
- "\u04e9\7c\2\2\u0410\u0411\7m\2\2\u0411\u0412\7k\2\2\u0412\u04e9\7n\2\2"+
- "\u0413\u0414\7u\2\2\u0414\u0415\7n\2\2\u0415\u04e9\7q\2\2\u0416\u0417"+
- "\7p\2\2\u0417\u0418\7q\2\2\u0418\u04e9\7r\2\2\u0419\u041a\7c\2\2\u041a"+
- "\u041b\7u\2\2\u041b\u04e9\7n\2\2\u041c\u041d\7r\2\2\u041d\u041e\7j\2\2"+
- "\u041e\u04e9\7r\2\2\u041f\u0420\7c\2\2\u0420\u0421\7p\2\2\u0421\u04e9"+
- "\7e\2\2\u0422\u0423\7d\2\2\u0423\u0424\7r\2\2\u0424\u04e9\7n\2\2\u0425"+
- "\u0426\7e\2\2\u0426\u0427\7n\2\2\u0427\u04e9\7e\2\2\u0428\u0429\7l\2\2"+
- "\u0429\u042a\7u\2\2\u042a\u04e9\7t\2\2\u042b\u042c\7c\2\2\u042c\u042d"+
- "\7p\2\2\u042d\u04e9\7f\2\2\u042e\u042f\7t\2\2\u042f\u0430\7n\2\2\u0430"+
- "\u04e9\7c\2\2\u0431\u0432\7d\2\2\u0432\u0433\7k\2\2\u0433\u04e9\7v\2\2"+
- "\u0434\u0435\7t\2\2\u0435\u0436\7q\2\2\u0436\u04e9\7n\2\2\u0437\u0438"+
- "\7r\2\2\u0438\u0439\7n\2\2\u0439\u04e9\7c\2\2\u043a\u043b\7r\2\2\u043b"+
- "\u043c\7n\2\2\u043c\u04e9\7r\2\2\u043d\u043e\7d\2\2\u043e\u043f\7o\2\2"+
- "\u043f\u04e9\7k\2\2\u0440\u0441\7u\2\2\u0441\u0442\7g\2\2\u0442\u04e9"+
- "\7e\2\2\u0443\u0444\7t\2\2\u0444\u0445\7v\2\2\u0445\u04e9\7k\2\2\u0446"+
- "\u0447\7g\2\2\u0447\u0448\7q\2\2\u0448\u04e9\7t\2\2\u0449\u044a\7u\2\2"+
- "\u044a\u044b\7t\2\2\u044b\u04e9\7g\2\2\u044c\u044d\7n\2\2\u044d\u044e"+
- "\7u\2\2\u044e\u04e9\7t\2\2\u044f\u0450\7r\2\2\u0450\u0451\7j\2\2\u0451"+
- "\u04e9\7c\2\2\u0452\u0453\7c\2\2\u0453\u0454\7n\2\2\u0454\u04e9\7t\2\2"+
- "\u0455\u0456\7l\2\2\u0456\u0457\7o\2\2\u0457\u04e9\7r\2\2\u0458\u0459"+
- "\7d\2\2\u0459\u045a\7x\2\2\u045a\u04e9\7e\2\2\u045b\u045c\7e\2\2\u045c"+
- "\u045d\7n\2\2\u045d\u04e9\7k\2\2\u045e\u045f\7t\2\2\u045f\u0460\7v\2\2"+
- "\u0460\u04e9\7u\2\2\u0461\u0462\7c\2\2\u0462\u0463\7f\2\2\u0463\u04e9"+
- "\7e\2\2\u0464\u0465\7t\2\2\u0465\u0466\7t\2\2\u0466\u04e9\7c\2\2\u0467"+
- "\u0468\7d\2\2\u0468\u0469\7x\2\2\u0469\u04e9\7u\2\2\u046a\u046b\7u\2\2"+
- "\u046b\u046c\7g\2\2\u046c\u04e9\7k\2\2\u046d\u046e\7u\2\2\u046e\u046f"+
- "\7c\2\2\u046f\u04e9\7z\2\2\u0470\u0471\7u\2\2\u0471\u0472\7v\2\2\u0472"+
- "\u04e9\7{\2\2\u0473\u0474\7u\2\2\u0474\u0475\7v\2\2\u0475\u04e9\7c\2\2"+
- "\u0476\u0477\7u\2\2\u0477\u0478\7v\2\2\u0478\u04e9\7z\2\2\u0479\u047a"+
- "\7f\2\2\u047a\u047b\7g\2\2\u047b\u04e9\7{\2\2\u047c\u047d\7v\2\2\u047d"+
- "\u047e\7z\2\2\u047e\u04e9\7c\2\2\u047f\u0480\7z\2\2\u0480\u0481\7c\2\2"+
- "\u0481\u04e9\7c\2\2\u0482\u0483\7d\2\2\u0483\u0484\7e\2\2\u0484\u04e9"+
- "\7e\2\2\u0485\u0486\7c\2\2\u0486\u0487\7j\2\2\u0487\u04e9\7z\2\2\u0488"+
- "\u0489\7v\2\2\u0489\u048a\7{\2\2\u048a\u04e9\7c\2\2\u048b\u048c\7v\2\2"+
- "\u048c\u048d\7z\2\2\u048d\u04e9\7u\2\2\u048e\u048f\7v\2\2\u048f\u0490"+
- "\7c\2\2\u0490\u04e9\7u\2\2\u0491\u0492\7u\2\2\u0492\u0493\7j\2\2\u0493"+
- "\u04e9\7{\2\2\u0494\u0495\7u\2\2\u0495\u0496\7j\2\2\u0496\u04e9\7z\2\2"+
- "\u0497\u0498\7n\2\2\u0498\u0499\7f\2\2\u0499\u04e9\7{\2\2\u049a\u049b"+
- "\7n\2\2\u049b\u049c\7f\2\2\u049c\u04e9\7c\2\2\u049d\u049e\7n\2\2\u049e"+
- "\u049f\7f\2\2\u049f\u04e9\7z\2\2\u04a0\u04a1\7n\2\2\u04a1\u04a2\7c\2\2"+
- "\u04a2\u04e9\7z\2\2\u04a3\u04a4\7v\2\2\u04a4\u04a5\7c\2\2\u04a5\u04e9"+
- "\7{\2\2\u04a6\u04a7\7v\2\2\u04a7\u04a8\7c\2\2\u04a8\u04e9\7z\2\2\u04a9"+
- "\u04aa\7d\2\2\u04aa\u04ab\7e\2\2\u04ab\u04e9\7u\2\2\u04ac\u04ad\7e\2\2"+
- "\u04ad\u04ae\7n\2\2\u04ae\u04e9\7x\2\2\u04af\u04b0\7v\2\2\u04b0\u04b1"+
- "\7u\2\2\u04b1\u04e9\7z\2\2\u04b2\u04b3\7n\2\2\u04b3\u04b4\7c\2\2\u04b4"+
- "\u04e9\7u\2\2\u04b5\u04b6\7e\2\2\u04b6\u04b7\7r\2\2\u04b7\u04e9\7{\2\2"+
- "\u04b8\u04b9\7e\2\2\u04b9\u04ba\7o\2\2\u04ba\u04e9\7r\2\2\u04bb\u04bc"+
- "\7e\2\2\u04bc\u04bd\7r\2\2\u04bd\u04e9\7z\2\2\u04be\u04bf\7f\2\2\u04bf"+
- "\u04c0\7e\2\2\u04c0\u04e9\7r\2\2\u04c1\u04c2\7f\2\2\u04c2\u04c3\7g\2\2"+
- "\u04c3\u04e9\7e\2\2\u04c4\u04c5\7k\2\2\u04c5\u04c6\7p\2\2\u04c6\u04e9"+
- "\7e\2\2\u04c7\u04c8\7c\2\2\u04c8\u04c9\7z\2\2\u04c9\u04e9\7u\2\2\u04ca"+
- "\u04cb\7d\2\2\u04cb\u04cc\7p\2\2\u04cc\u04e9\7g\2\2\u04cd\u04ce\7e\2\2"+
- "\u04ce\u04cf\7n\2\2\u04cf\u04e9\7f\2\2\u04d0\u04d1\7u\2\2\u04d1\u04d2"+
- "\7d\2\2\u04d2\u04e9\7e\2\2\u04d3\u04d4\7k\2\2\u04d4\u04d5\7u\2\2\u04d5"+
- "\u04e9\7e\2\2\u04d6\u04d7\7k\2\2\u04d7\u04d8\7p\2\2\u04d8\u04e9\7z\2\2"+
- "\u04d9\u04da\7d\2\2\u04da\u04db\7g\2\2\u04db\u04e9\7s\2\2\u04dc\u04dd"+
- "\7u\2\2\u04dd\u04de\7g\2\2\u04de\u04e9\7f\2\2\u04df\u04e0\7f\2\2\u04e0"+
- "\u04e1\7g\2\2\u04e1\u04e9\7z\2\2\u04e2\u04e3\7k\2\2\u04e3\u04e4\7p\2\2"+
- "\u04e4\u04e9\7{\2\2\u04e5\u04e6\7t\2\2\u04e6\u04e7\7q\2\2\u04e7\u04e9"+
- "\7t\2\2\u04e8\u040a\3\2\2\2\u04e8\u040d\3\2\2\2\u04e8\u0410\3\2\2\2\u04e8"+
- "\u0413\3\2\2\2\u04e8\u0416\3\2\2\2\u04e8\u0419\3\2\2\2\u04e8\u041c\3\2"+
- "\2\2\u04e8\u041f\3\2\2\2\u04e8\u0422\3\2\2\2\u04e8\u0425\3\2\2\2\u04e8"+
- "\u0428\3\2\2\2\u04e8\u042b\3\2\2\2\u04e8\u042e\3\2\2\2\u04e8\u0431\3\2"+
- "\2\2\u04e8\u0434\3\2\2\2\u04e8\u0437\3\2\2\2\u04e8\u043a\3\2\2\2\u04e8"+
- "\u043d\3\2\2\2\u04e8\u0440\3\2\2\2\u04e8\u0443\3\2\2\2\u04e8\u0446\3\2"+
- "\2\2\u04e8\u0449\3\2\2\2\u04e8\u044c\3\2\2\2\u04e8\u044f\3\2\2\2\u04e8"+
- "\u0452\3\2\2\2\u04e8\u0455\3\2\2\2\u04e8\u0458\3\2\2\2\u04e8\u045b\3\2"+
- "\2\2\u04e8\u045e\3\2\2\2\u04e8\u0461\3\2\2\2\u04e8\u0464\3\2\2\2\u04e8"+
- "\u0467\3\2\2\2\u04e8\u046a\3\2\2\2\u04e8\u046d\3\2\2\2\u04e8\u0470\3\2"+
- "\2\2\u04e8\u0473\3\2\2\2\u04e8\u0476\3\2\2\2\u04e8\u0479\3\2\2\2\u04e8"+
- "\u047c\3\2\2\2\u04e8\u047f\3\2\2\2\u04e8\u0482\3\2\2\2\u04e8\u0485\3\2"+
- "\2\2\u04e8\u0488\3\2\2\2\u04e8\u048b\3\2\2\2\u04e8\u048e\3\2\2\2\u04e8"+
- "\u0491\3\2\2\2\u04e8\u0494\3\2\2\2\u04e8\u0497\3\2\2\2\u04e8\u049a\3\2"+
- "\2\2\u04e8\u049d\3\2\2\2\u04e8\u04a0\3\2\2\2\u04e8\u04a3\3\2\2\2\u04e8"+
- "\u04a6\3\2\2\2\u04e8\u04a9\3\2\2\2\u04e8\u04ac\3\2\2\2\u04e8\u04af\3\2"+
- "\2\2\u04e8\u04b2\3\2\2\2\u04e8\u04b5\3\2\2\2\u04e8\u04b8\3\2\2\2\u04e8"+
- "\u04bb\3\2\2\2\u04e8\u04be\3\2\2\2\u04e8\u04c1\3\2\2\2\u04e8\u04c4\3\2"+
- "\2\2\u04e8\u04c7\3\2\2\2\u04e8\u04ca\3\2\2\2\u04e8\u04cd\3\2\2\2\u04e8"+
- "\u04d0\3\2\2\2\u04e8\u04d3\3\2\2\2\u04e8\u04d6\3\2\2\2\u04e8\u04d9\3\2"+
- "\2\2\u04e8\u04dc\3\2\2\2\u04e8\u04df\3\2\2\2\u04e8\u04e2\3\2\2\2\u04e8"+
- "\u04e5\3\2\2\2\u04e9\u00e3\3\2\2\2\u04ea\u04eb\7%\2\2\u04eb\u00e5\3\2"+
- "\2\2\u04ec\u04ed\7<\2\2\u04ed\u00e7\3\2\2\2\u04ee\u04ef\7.\2\2\u04ef\u00e9"+
- "\3\2\2\2\u04f0\u04f1\7*\2\2\u04f1\u00eb\3\2\2\2\u04f2\u04f3\7+\2\2\u04f3"+
- "\u00ed\3\2\2\2\u04f4\u04f5\7]\2\2\u04f5\u00ef\3\2\2\2\u04f6\u04f7\7_\2"+
- "\2\u04f7\u00f1\3\2\2\2\u04f8\u04f9\7\60\2\2\u04f9\u00f3\3\2\2\2\u04fa"+
- "\u04fb\7>\2\2\u04fb\u04fc\7>\2\2\u04fc\u00f5\3\2\2\2\u04fd\u04fe\7@\2"+
- "\2\u04fe\u04ff\7@\2\2\u04ff\u00f7\3\2\2\2\u0500\u0501\7-\2\2\u0501\u00f9"+
- "\3\2\2\2\u0502\u0503\7/\2\2\u0503\u00fb\3\2\2\2\u0504\u0505\7>\2\2\u0505"+
- "\u00fd\3\2\2\2\u0506\u0507\7@\2\2\u0507\u00ff\3\2\2\2\u0508\u0509\7,\2"+
- "\2\u0509\u0101\3\2\2\2\u050a\u050b\7\61\2\2\u050b\u0103\3\2\2\2\u050c"+
- "\u050d\7}\2\2\u050d\u050e\b\u0082\t\2\u050e\u0105\3\2\2\2\u050f\u0510"+
- "\7\177\2\2\u0510\u0511\b\u0083\n\2\u0511\u0107\3\2\2\2\u0512\u0515\5\u010a"+
- "\u0085\2\u0513\u0515\5\u0112\u0089\2\u0514\u0512\3\2\2\2\u0514\u0513\3"+
- "\2\2\2\u0515\u0109\3\2\2\2\u0516\u051a\5\u010c\u0086\2\u0517\u051a\5\u010e"+
- "\u0087\2\u0518\u051a\5\u0110\u0088\2\u0519\u0516\3\2\2\2\u0519\u0517\3"+
- "\2\2\2\u0519\u0518\3\2\2\2\u051a\u010b\3\2\2\2\u051b\u051f\7\'\2\2\u051c"+
- "\u051e\5\u011a\u008d\2\u051d\u051c\3\2\2\2\u051e\u0521\3\2\2\2\u051f\u051d"+
- "\3\2\2\2\u051f\u0520\3\2\2\2\u0520\u0522\3\2\2\2\u0521\u051f\3\2\2\2\u0522"+
- "\u0524\7\60\2\2\u0523\u0525\5\u011a\u008d\2\u0524\u0523\3\2\2\2\u0525"+
- "\u0526\3\2\2\2\u0526\u0524\3\2\2\2\u0526\u0527\3\2\2\2\u0527\u010d\3\2"+
- "\2\2\u0528\u052a\5\u011c\u008e\2\u0529\u0528\3\2\2\2\u052a\u052d\3\2\2"+
- "\2\u052b\u0529\3\2\2\2\u052b\u052c\3\2\2\2\u052c\u052e\3\2\2\2\u052d\u052b"+
- "\3\2\2\2\u052e\u0530\7\60\2\2\u052f\u0531\5\u011c\u008e\2\u0530\u052f"+
- "\3\2\2\2\u0531\u0532\3\2\2\2\u0532\u0530\3\2\2\2\u0532\u0533\3\2\2\2\u0533"+
- "\u010f\3\2\2\2\u0534\u0538\7&\2\2\u0535\u0537\5\u011e\u008f\2\u0536\u0535"+
- "\3\2\2\2\u0537\u053a\3\2\2\2\u0538\u0536\3\2\2\2\u0538\u0539\3\2\2\2\u0539"+
- "\u053b\3\2\2\2\u053a\u0538\3\2\2\2\u053b\u053d\7\60\2\2\u053c\u053e\5"+
- "\u011e\u008f\2\u053d\u053c\3\2\2\2\u053e\u053f\3\2\2\2\u053f\u053d\3\2"+
- "\2\2\u053f\u0540\3\2\2\2\u0540\u0111\3\2\2\2\u0541\u0545\5\u0116\u008b"+
- "\2\u0542\u0545\5\u0118\u008c\2\u0543\u0545\5\u0114\u008a\2\u0544\u0541"+
- "\3\2\2\2\u0544\u0542\3\2\2\2\u0544\u0543\3\2\2\2\u0545\u0113\3\2\2\2\u0546"+
- "\u0548\7\'\2\2\u0547\u0549\5\u011a\u008d\2\u0548\u0547\3\2\2\2\u0549\u054a"+
- "\3\2\2\2\u054a\u0548\3\2\2\2\u054a\u054b\3\2\2\2\u054b\u0115\3\2\2\2\u054c"+
- "\u054e\5\u011c\u008e\2\u054d\u054c\3\2\2\2\u054e\u054f\3\2\2\2\u054f\u054d"+
- "\3\2\2\2\u054f\u0550\3\2\2\2\u0550\u0117\3\2\2\2\u0551\u0553\7&\2\2\u0552"+
- "\u0554\5\u011e\u008f\2\u0553\u0552\3\2\2\2\u0554\u0555\3\2\2\2\u0555\u0553"+
- "\3\2\2\2\u0555\u0556\3\2\2\2\u0556\u0119\3\2\2\2\u0557\u0558\t\13\2\2"+
- "\u0558\u011b\3\2\2\2\u0559\u055a\t\f\2\2\u055a\u011d\3\2\2\2\u055b\u055c"+
- "\t\r\2\2\u055c\u011f\3\2\2\2\u055d\u0561\7)\2\2\u055e\u055f\7^\2\2\u055f"+
- "\u0562\t\6\2\2\u0560\u0562\n\7\2\2\u0561\u055e\3\2\2\2\u0561\u0560\3\2"+
- "\2\2\u0562\u0563\3\2\2\2\u0563\u0564\7)\2\2\u0564\u0121\3\2\2\2\u0565"+
- "\u0567\5\u0124\u0092\2\u0566\u0568\t\22\2\2\u0567\u0566\3\2\2\2\u0568"+
- "\u0569\3\2\2\2\u0569\u0567\3\2\2\2\u0569\u056a\3\2\2\2\u056a\u0123\3\2"+
- "\2\2\u056b\u056f\7#\2\2\u056c\u056e\5\u012a\u0095\2\u056d\u056c\3\2\2"+
- "\2\u056e\u0571\3\2\2\2\u056f\u056d\3\2\2\2\u056f\u0570\3\2\2\2\u0570\u0125"+
- "\3\2\2\2\u0571\u056f\3\2\2\2\u0572\u0576\5\u0128\u0094\2\u0573\u0575\5"+
- "\u012a\u0095\2\u0574\u0573\3\2\2\2\u0575\u0578\3\2\2\2\u0576\u0574\3\2"+
- "\2\2\u0576\u0577\3\2\2\2\u0577\u0127\3\2\2\2\u0578\u0576\3\2\2\2\u0579"+
- "\u057a\t\16\2\2\u057a\u0129\3\2\2\2\u057b\u057c\t\17\2\2\u057c\u012b\3"+
- "\2\2\2\u057d\u057f\t\20\2\2\u057e\u057d\3\2\2\2\u057f\u0580\3\2\2\2\u0580"+
- "\u057e\3\2\2\2\u0580\u0581\3\2\2\2\u0581\u0582\3\2\2\2\u0582\u0583\b\u0096"+
- "\7\2\u0583\u012d\3\2\2\2\u0584\u0585\7\61\2\2\u0585\u0586\7\61\2\2\u0586"+
- "\u058a\3\2\2\2\u0587\u0589\n\21\2\2\u0588\u0587\3\2\2\2\u0589\u058c\3"+
- "\2\2\2\u058a\u0588\3\2\2\2\u058a\u058b\3\2\2\2\u058b\u058d\3\2\2\2\u058c"+
- "\u058a\3\2\2\2\u058d\u058e\b\u0097\b\2\u058e\u012f\3\2\2\2\u058f\u0590"+
- "\7\61\2\2\u0590\u0591\7,\2\2\u0591\u0595\3\2\2\2\u0592\u0594\13\2\2\2"+
- "\u0593\u0592\3\2\2\2\u0594\u0597\3\2\2\2\u0595\u0596\3\2\2\2\u0595\u0593"+
- "\3\2\2\2\u0596\u0598\3\2\2\2\u0597\u0595\3\2\2\2\u0598\u0599\7,\2\2\u0599"+
- "\u059a\7\61\2\2\u059a\u059b\3\2\2\2\u059b\u059c\b\u0098\b\2\u059c\u0131"+
- "\3\2\2\2;\2\3\u019b\u0265\u030c\u0333\u033e\u0346\u0350\u0352\u0357\u035b"+
- "\u035d\u0360\u0368\u036e\u0373\u037a\u037f\u0386\u038b\u0392\u0399\u039e"+
- "\u03a5\u03aa\u03af\u03b6\u03bc\u03be\u03c3\u03ca\u03cf\u03db\u03e7\u03f1"+
- "\u03fc\u04e8\u0514\u0519\u051f\u0526\u052b\u0532\u0538\u053f\u0544\u054a"+
- "\u054f\u0555\u0561\u0569\u056f\u0576\u0580\u058a\u0595\13\3\2\2\3&\3\3"+
- "J\4\3\\\5\3j\6\2\3\2\2\4\2\3\u0082\7\3\u0083\b";
+ "\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\3\2\3\2\3\2\3\3\3\3\3"+
+ "\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13"+
+ "\3\f\3\f\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22"+
+ "\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30"+
+ "\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35"+
+ "\3\36\3\36\3\37\3\37\3\37\3 \3 \3 \3!\3!\3\"\3\"\3\"\3#\3#\3#\3$\3$\3"+
+ "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u019e"+
+ "\n%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3"+
+ "(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3+\3+\3+\3"+
+ "+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3"+
+ "/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3"+
+ "\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3"+
+ "\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3"+
+ "\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\38\38\39\39\39\39\39\3"+
+ "9\39\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3"+
+ "<\3<\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3?\3@\3@\3"+
+ "@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\5@\u026f\n@\3A\3"+
+ "A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3"+
+ "E\3E\3E\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3H\3I\3I\3"+
+ "I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3"+
+ "L\3L\3L\3L\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3"+
+ "P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3R\3R\3R\3S\3S\3S\3"+
+ "S\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3U\3U\3U\3U\3U\3U\3U\3U\3U\3V\3V\3V\3"+
+ "V\3V\3V\3W\3W\3W\3W\3W\3W\3W\3X\3X\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3"+
+ "Y\3Y\3Y\5Y\u0316\nY\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3"+
+ "Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\5Z\u033d"+
+ "\nZ\3[\3[\3[\3[\3[\3[\3[\3[\3[\5[\u0348\n[\3\\\3\\\3\\\3\\\7\\\u034e\n"+
+ "\\\f\\\16\\\u0351\13\\\3\\\3\\\3\\\3]\3]\3]\3]\7]\u035a\n]\f]\16]\u035d"+
+ "\13]\3]\3]\5]\u0361\n]\3]\3]\5]\u0365\n]\5]\u0367\n]\3]\5]\u036a\n]\3"+
+ "]\3]\3^\3^\3^\3^\5^\u0372\n^\3^\3^\3_\3_\5_\u0378\n_\3`\3`\3`\5`\u037d"+
+ "\n`\3a\3a\3a\3a\3a\5a\u0384\na\3a\7a\u0387\na\fa\16a\u038a\13a\3a\3a\6"+
+ "a\u038e\na\ra\16a\u038f\3b\7b\u0393\nb\fb\16b\u0396\13b\3b\3b\6b\u039a"+
+ "\nb\rb\16b\u039b\3c\3c\3c\3c\3c\5c\u03a3\nc\3c\7c\u03a6\nc\fc\16c\u03a9"+
+ "\13c\3c\3c\6c\u03ad\nc\rc\16c\u03ae\3d\3d\3d\5d\u03b4\nd\3d\3d\3d\5d\u03b9"+
+ "\nd\3e\3e\3e\6e\u03be\ne\re\16e\u03bf\3e\3e\6e\u03c4\ne\re\16e\u03c5\5"+
+ "e\u03c8\ne\3f\6f\u03cb\nf\rf\16f\u03cc\3g\3g\3g\3g\3g\5g\u03d4\ng\3g\6"+
+ "g\u03d7\ng\rg\16g\u03d8\3h\3h\3i\3i\3j\3j\3k\3k\7k\u03e3\nk\fk\16k\u03e6"+
+ "\13k\3k\3k\3l\3l\3m\3m\3n\6n\u03ef\nn\rn\16n\u03f0\3n\3n\3o\3o\3o\3o\7"+
+ "o\u03f9\no\fo\16o\u03fc\13o\3o\3o\3p\3p\3p\3p\7p\u0404\np\fp\16p\u0407"+
+ "\13p\3p\3p\3p\3p\3p\3q\3q\3q\3q\3q\3q\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+
+ "r\3r\3r\3r\3r\5r\u04f2\nr\3s\3s\3t\3t\3u\3u\3v\3v\3w\3w\3x\3x\3y\3y\3"+
+ "z\3z\3{\3{\3{\3|\3|\3|\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080\3\u0081"+
+ "\3\u0081\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084"+
+ "\3\u0085\3\u0085\5\u0085\u051e\n\u0085\3\u0086\3\u0086\3\u0086\5\u0086"+
+ "\u0523\n\u0086\3\u0087\3\u0087\7\u0087\u0527\n\u0087\f\u0087\16\u0087"+
+ "\u052a\13\u0087\3\u0087\3\u0087\6\u0087\u052e\n\u0087\r\u0087\16\u0087"+
+ "\u052f\3\u0088\7\u0088\u0533\n\u0088\f\u0088\16\u0088\u0536\13\u0088\3"+
+ "\u0088\3\u0088\6\u0088\u053a\n\u0088\r\u0088\16\u0088\u053b\3\u0089\3"+
+ "\u0089\7\u0089\u0540\n\u0089\f\u0089\16\u0089\u0543\13\u0089\3\u0089\3"+
+ "\u0089\6\u0089\u0547\n\u0089\r\u0089\16\u0089\u0548\3\u008a\3\u008a\3"+
+ "\u008a\5\u008a\u054e\n\u008a\3\u008b\3\u008b\6\u008b\u0552\n\u008b\r\u008b"+
+ "\16\u008b\u0553\3\u008c\6\u008c\u0557\n\u008c\r\u008c\16\u008c\u0558\3"+
+ "\u008d\3\u008d\6\u008d\u055d\n\u008d\r\u008d\16\u008d\u055e\3\u008e\3"+
+ "\u008e\3\u008f\3\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091\3\u0091"+
+ "\5\u0091\u056b\n\u0091\3\u0091\3\u0091\3\u0092\3\u0092\6\u0092\u0571\n"+
+ "\u0092\r\u0092\16\u0092\u0572\3\u0093\3\u0093\7\u0093\u0577\n\u0093\f"+
+ "\u0093\16\u0093\u057a\13\u0093\3\u0094\3\u0094\7\u0094\u057e\n\u0094\f"+
+ "\u0094\16\u0094\u0581\13\u0094\3\u0095\3\u0095\3\u0096\3\u0096\3\u0097"+
+ "\6\u0097\u0588\n\u0097\r\u0097\16\u0097\u0589\3\u0097\3\u0097\3\u0098"+
+ "\3\u0098\3\u0098\3\u0098\7\u0098\u0592\n\u0098\f\u0098\16\u0098\u0595"+
+ "\13\u0098\3\u0098\3\u0098\3\u0099\3\u0099\3\u0099\3\u0099\7\u0099\u059d"+
+ "\n\u0099\f\u0099\16\u0099\u05a0\13\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+
+ "\3\u0099\5\u034f\u0405\u059e\2\u009a\4\4\6\5\b\6\n\7\f\b\16\t\20\n\22"+
+ "\13\24\f\26\r\30\16\32\17\34\20\36\21 \22\"\23$\24&\25(\26*\27,\30.\31"+
+ "\60\32\62\33\64\34\66\358\36:\37< >!@\"B#D$F%H&J\'L(N)P*R+T,V-X.Z/\\\60"+
+ "^\61`\62b\63d\64f\65h\66j\67l8n9p:r;tz?|@~A\u0080B\u0082C\u0084D"+
+ "\u0086E\u0088F\u008aG\u008cH\u008eI\u0090J\u0092K\u0094L\u0096M\u0098"+
+ "N\u009aO\u009cP\u009eQ\u00a0R\u00a2S\u00a4T\u00a6U\u00a8V\u00aaW\u00ac"+
+ "X\u00aeY\u00b0Z\u00b2[\u00b4\\\u00b6]\u00b8^\u00ba_\u00bc`\u00bea\u00c0"+
+ "b\u00c2c\u00c4d\u00c6e\u00c8f\u00cag\u00cch\u00cei\u00d0\2\u00d2\2\u00d4"+
+ "\2\u00d6j\u00d8\2\u00da\2\u00dck\u00del\u00e0m\u00e2n\u00e4o\u00e6p\u00e8"+
+ "q\u00ear\u00ecs\u00eet\u00f0u\u00f2v\u00f4w\u00f6x\u00f8y\u00faz\u00fc"+
+ "{\u00fe|\u0100}\u0102~\u0104\177\u0106\u0080\u0108\u0081\u010a\u0082\u010c"+
+ "\u0083\u010e\u0084\u0110\u0085\u0112\u0086\u0114\u0087\u0116\u0088\u0118"+
+ "\u0089\u011a\u008a\u011c\2\u011e\2\u0120\2\u0122\u008b\u0124\u008c\u0126"+
+ "\u008d\u0128\u008e\u012a\2\u012c\2\u012e\u008f\u0130\u0090\u0132\u0091"+
+ "\4\2\3\23\3\2$$\3\2||\4\2rruu\4\2ooww\7\2$$))hhpptt\3\2))\4\2uuww\7\2"+
+ "dfkknnuuyy\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\"+
+ "aac|\6\2\13\f\17\17\"\"\u00a2\u00a2\4\2\f\f\17\17\4\2--//\2\u0630\2\4"+
+ "\3\2\2\2\2\6\3\2\2\2\2\b\3\2\2\2\2\n\3\2\2\2\2\f\3\2\2\2\2\16\3\2\2\2"+
+ "\2\20\3\2\2\2\2\22\3\2\2\2\2\24\3\2\2\2\2\26\3\2\2\2\2\30\3\2\2\2\2\32"+
+ "\3\2\2\2\2\34\3\2\2\2\2\36\3\2\2\2\2 \3\2\2\2\2\"\3\2\2\2\2$\3\2\2\2\2"+
+ "&\3\2\2\2\2(\3\2\2\2\2*\3\2\2\2\2,\3\2\2\2\2.\3\2\2\2\2\60\3\2\2\2\2\62"+
+ "\3\2\2\2\2\64\3\2\2\2\2\66\3\2\2\2\28\3\2\2\2\2:\3\2\2\2\2<\3\2\2\2\2"+
+ ">\3\2\2\2\2@\3\2\2\2\2B\3\2\2\2\2D\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2\2J\3"+
+ "\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2P\3\2\2\2\2R\3\2\2\2\2T\3\2\2\2\2V\3\2\2"+
+ "\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3\2\2\2\2^\3\2\2\2\2`\3\2\2\2\2b\3\2\2\2"+
+ "\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2\2\2j\3\2\2\2\2l\3\2\2\2\2n\3\2\2\2\2p"+
+ "\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2v\3\2\2\2\2x\3\2\2\2\2z\3\2\2\2\2|\3\2"+
+ "\2\2\2~\3\2\2\2\2\u0080\3\2\2\2\2\u0082\3\2\2\2\2\u0084\3\2\2\2\2\u0086"+
+ "\3\2\2\2\2\u0088\3\2\2\2\2\u008a\3\2\2\2\2\u008c\3\2\2\2\2\u008e\3\2\2"+
+ "\2\2\u0090\3\2\2\2\2\u0092\3\2\2\2\2\u0094\3\2\2\2\2\u0096\3\2\2\2\2\u0098"+
+ "\3\2\2\2\2\u009a\3\2\2\2\2\u009c\3\2\2\2\2\u009e\3\2\2\2\2\u00a0\3\2\2"+
+ "\2\2\u00a2\3\2\2\2\2\u00a4\3\2\2\2\2\u00a6\3\2\2\2\2\u00a8\3\2\2\2\2\u00aa"+
+ "\3\2\2\2\2\u00ac\3\2\2\2\2\u00ae\3\2\2\2\2\u00b0\3\2\2\2\2\u00b2\3\2\2"+
+ "\2\2\u00b4\3\2\2\2\2\u00b6\3\2\2\2\2\u00b8\3\2\2\2\2\u00ba\3\2\2\2\2\u00bc"+
+ "\3\2\2\2\2\u00be\3\2\2\2\2\u00c0\3\2\2\2\2\u00c2\3\2\2\2\2\u00c4\3\2\2"+
+ "\2\2\u00c6\3\2\2\2\2\u00c8\3\2\2\2\2\u00ca\3\2\2\2\2\u00cc\3\2\2\2\2\u00ce"+
+ "\3\2\2\2\2\u00d6\3\2\2\2\2\u00dc\3\2\2\2\2\u00de\3\2\2\2\2\u00e0\3\2\2"+
+ "\2\3\u00e2\3\2\2\2\3\u00e4\3\2\2\2\3\u00e6\3\2\2\2\3\u00e8\3\2\2\2\3\u00ea"+
+ "\3\2\2\2\3\u00ec\3\2\2\2\3\u00ee\3\2\2\2\3\u00f0\3\2\2\2\3\u00f2\3\2\2"+
+ "\2\3\u00f4\3\2\2\2\3\u00f6\3\2\2\2\3\u00f8\3\2\2\2\3\u00fa\3\2\2\2\3\u00fc"+
+ "\3\2\2\2\3\u00fe\3\2\2\2\3\u0100\3\2\2\2\3\u0102\3\2\2\2\3\u0104\3\2\2"+
+ "\2\3\u0106\3\2\2\2\3\u0108\3\2\2\2\3\u010a\3\2\2\2\3\u010c\3\2\2\2\3\u010e"+
+ "\3\2\2\2\3\u0110\3\2\2\2\3\u0112\3\2\2\2\3\u0114\3\2\2\2\3\u0116\3\2\2"+
+ "\2\3\u0118\3\2\2\2\3\u011a\3\2\2\2\3\u0122\3\2\2\2\3\u0124\3\2\2\2\3\u0126"+
+ "\3\2\2\2\3\u0128\3\2\2\2\3\u012e\3\2\2\2\3\u0130\3\2\2\2\3\u0132\3\2\2"+
+ "\2\4\u0134\3\2\2\2\6\u0137\3\2\2\2\b\u0139\3\2\2\2\n\u013b\3\2\2\2\f\u013d"+
+ "\3\2\2\2\16\u013f\3\2\2\2\20\u0141\3\2\2\2\22\u0143\3\2\2\2\24\u0145\3"+
+ "\2\2\2\26\u0147\3\2\2\2\30\u014a\3\2\2\2\32\u014c\3\2\2\2\34\u014e\3\2"+
+ "\2\2\36\u0151\3\2\2\2 \u0153\3\2\2\2\"\u0155\3\2\2\2$\u0157\3\2\2\2&\u0159"+
+ "\3\2\2\2(\u015b\3\2\2\2*\u015e\3\2\2\2,\u0161\3\2\2\2.\u0163\3\2\2\2\60"+
+ "\u0165\3\2\2\2\62\u0167\3\2\2\2\64\u0169\3\2\2\2\66\u016c\3\2\2\28\u016f"+
+ "\3\2\2\2:\u0172\3\2\2\2<\u0175\3\2\2\2>\u0177\3\2\2\2@\u017a\3\2\2\2B"+
+ "\u017d\3\2\2\2D\u017f\3\2\2\2F\u0182\3\2\2\2H\u0185\3\2\2\2J\u019d\3\2"+
+ "\2\2L\u019f\3\2\2\2N\u01a8\3\2\2\2P\u01b0\3\2\2\2R\u01b8\3\2\2\2T\u01c0"+
+ "\3\2\2\2V\u01c3\3\2\2\2X\u01ca\3\2\2\2Z\u01cf\3\2\2\2\\\u01d3\3\2\2\2"+
+ "^\u01dc\3\2\2\2`\u01e5\3\2\2\2b\u01ee\3\2\2\2d\u01f4\3\2\2\2f\u01fb\3"+
+ "\2\2\2h\u0202\3\2\2\2j\u0208\3\2\2\2l\u020f\3\2\2\2n\u0218\3\2\2\2p\u021f"+
+ "\3\2\2\2r\u0229\3\2\2\2t\u0232\3\2\2\2v\u023c\3\2\2\2x\u0241\3\2\2\2z"+
+ "\u0247\3\2\2\2|\u024d\3\2\2\2~\u0252\3\2\2\2\u0080\u026e\3\2\2\2\u0082"+
+ "\u0270\3\2\2\2\u0084\u027a\3\2\2\2\u0086\u027d\3\2\2\2\u0088\u0282\3\2"+
+ "\2\2\u008a\u0288\3\2\2\2\u008c\u028b\3\2\2\2\u008e\u028f\3\2\2\2\u0090"+
+ "\u0296\3\2\2\2\u0092\u029d\3\2\2\2\u0094\u02a3\3\2\2\2\u0096\u02ac\3\2"+
+ "\2\2\u0098\u02b2\3\2\2\2\u009a\u02ba\3\2\2\2\u009c\u02bf\3\2\2\2\u009e"+
+ "\u02c6\3\2\2\2\u00a0\u02cb\3\2\2\2\u00a2\u02d2\3\2\2\2\u00a4\u02d9\3\2"+
+ "\2\2\u00a6\u02e1\3\2\2\2\u00a8\u02ea\3\2\2\2\u00aa\u02ef\3\2\2\2\u00ac"+
+ "\u02f8\3\2\2\2\u00ae\u02fe\3\2\2\2\u00b0\u0305\3\2\2\2\u00b2\u0315\3\2"+
+ "\2\2\u00b4\u033c\3\2\2\2\u00b6\u0347\3\2\2\2\u00b8\u0349\3\2\2\2\u00ba"+
+ "\u0355\3\2\2\2\u00bc\u036d\3\2\2\2\u00be\u0377\3\2\2\2\u00c0\u037c\3\2"+
+ "\2\2\u00c2\u0383\3\2\2\2\u00c4\u0394\3\2\2\2\u00c6\u03a2\3\2\2\2\u00c8"+
+ "\u03b3\3\2\2\2\u00ca\u03c7\3\2\2\2\u00cc\u03ca\3\2\2\2\u00ce\u03d3\3\2"+
+ "\2\2\u00d0\u03da\3\2\2\2\u00d2\u03dc\3\2\2\2\u00d4\u03de\3\2\2\2\u00d6"+
+ "\u03e0\3\2\2\2\u00d8\u03e9\3\2\2\2\u00da\u03eb\3\2\2\2\u00dc\u03ee\3\2"+
+ "\2\2\u00de\u03f4\3\2\2\2\u00e0\u03ff\3\2\2\2\u00e2\u040d\3\2\2\2\u00e4"+
+ "\u04f1\3\2\2\2\u00e6\u04f3\3\2\2\2\u00e8\u04f5\3\2\2\2\u00ea\u04f7\3\2"+
+ "\2\2\u00ec\u04f9\3\2\2\2\u00ee\u04fb\3\2\2\2\u00f0\u04fd\3\2\2\2\u00f2"+
+ "\u04ff\3\2\2\2\u00f4\u0501\3\2\2\2\u00f6\u0503\3\2\2\2\u00f8\u0506\3\2"+
+ "\2\2\u00fa\u0509\3\2\2\2\u00fc\u050b\3\2\2\2\u00fe\u050d\3\2\2\2\u0100"+
+ "\u050f\3\2\2\2\u0102\u0511\3\2\2\2\u0104\u0513\3\2\2\2\u0106\u0515\3\2"+
+ "\2\2\u0108\u0518\3\2\2\2\u010a\u051d\3\2\2\2\u010c\u0522\3\2\2\2\u010e"+
+ "\u0524\3\2\2\2\u0110\u0534\3\2\2\2\u0112\u053d\3\2\2\2\u0114\u054d\3\2"+
+ "\2\2\u0116\u054f\3\2\2\2\u0118\u0556\3\2\2\2\u011a\u055a\3\2\2\2\u011c"+
+ "\u0560\3\2\2\2\u011e\u0562\3\2\2\2\u0120\u0564\3\2\2\2\u0122\u0566\3\2"+
+ "\2\2\u0124\u056e\3\2\2\2\u0126\u0574\3\2\2\2\u0128\u057b\3\2\2\2\u012a"+
+ "\u0582\3\2\2\2\u012c\u0584\3\2\2\2\u012e\u0587\3\2\2\2\u0130\u058d\3\2"+
+ "\2\2\u0132\u0598\3\2\2\2\u0134\u0135\7}\2\2\u0135\u0136\b\2\2\2\u0136"+
+ "\5\3\2\2\2\u0137\u0138\7\177\2\2\u0138\7\3\2\2\2\u0139\u013a\7]\2\2\u013a"+
+ "\t\3\2\2\2\u013b\u013c\7_\2\2\u013c\13\3\2\2\2\u013d\u013e\7*\2\2\u013e"+
+ "\r\3\2\2\2\u013f\u0140\7+\2\2\u0140\17\3\2\2\2\u0141\u0142\7=\2\2\u0142"+
+ "\21\3\2\2\2\u0143\u0144\7<\2\2\u0144\23\3\2\2\2\u0145\u0146\7.\2\2\u0146"+
+ "\25\3\2\2\2\u0147\u0148\7\60\2\2\u0148\u0149\7\60\2\2\u0149\27\3\2\2\2"+
+ "\u014a\u014b\7A\2\2\u014b\31\3\2\2\2\u014c\u014d\7\60\2\2\u014d\33\3\2"+
+ "\2\2\u014e\u014f\7/\2\2\u014f\u0150\7@\2\2\u0150\35\3\2\2\2\u0151\u0152"+
+ "\7-\2\2\u0152\37\3\2\2\2\u0153\u0154\7/\2\2\u0154!\3\2\2\2\u0155\u0156"+
+ "\7,\2\2\u0156#\3\2\2\2\u0157\u0158\7\61\2\2\u0158%\3\2\2\2\u0159\u015a"+
+ "\7\'\2\2\u015a\'\3\2\2\2\u015b\u015c\7-\2\2\u015c\u015d\7-\2\2\u015d)"+
+ "\3\2\2\2\u015e\u015f\7/\2\2\u015f\u0160\7/\2\2\u0160+\3\2\2\2\u0161\u0162"+
+ "\7(\2\2\u0162-\3\2\2\2\u0163\u0164\7\u0080\2\2\u0164/\3\2\2\2\u0165\u0166"+
+ "\7`\2\2\u0166\61\3\2\2\2\u0167\u0168\7~\2\2\u0168\63\3\2\2\2\u0169\u016a"+
+ "\7>\2\2\u016a\u016b\7>\2\2\u016b\65\3\2\2\2\u016c\u016d\7@\2\2\u016d\u016e"+
+ "\7@\2\2\u016e\67\3\2\2\2\u016f\u0170\7?\2\2\u0170\u0171\7?\2\2\u01719"+
+ "\3\2\2\2\u0172\u0173\7#\2\2\u0173\u0174\7?\2\2\u0174;\3\2\2\2\u0175\u0176"+
+ "\7>\2\2\u0176=\3\2\2\2\u0177\u0178\7>\2\2\u0178\u0179\7?\2\2\u0179?\3"+
+ "\2\2\2\u017a\u017b\7@\2\2\u017b\u017c\7?\2\2\u017cA\3\2\2\2\u017d\u017e"+
+ "\7@\2\2\u017eC\3\2\2\2\u017f\u0180\7(\2\2\u0180\u0181\7(\2\2\u0181E\3"+
+ "\2\2\2\u0182\u0183\7~\2\2\u0183\u0184\7~\2\2\u0184G\3\2\2\2\u0185\u0186"+
+ "\7?\2\2\u0186I\3\2\2\2\u0187\u0188\7-\2\2\u0188\u019e\7?\2\2\u0189\u018a"+
+ "\7/\2\2\u018a\u019e\7?\2\2\u018b\u018c\7,\2\2\u018c\u019e\7?\2\2\u018d"+
+ "\u018e\7\61\2\2\u018e\u019e\7?\2\2\u018f\u0190\7\'\2\2\u0190\u019e\7?"+
+ "\2\2\u0191\u0192\7>\2\2\u0192\u0193\7>\2\2\u0193\u019e\7?\2\2\u0194\u0195"+
+ "\7@\2\2\u0195\u0196\7@\2\2\u0196\u019e\7?\2\2\u0197\u0198\7(\2\2\u0198"+
+ "\u019e\7?\2\2\u0199\u019a\7~\2\2\u019a\u019e\7?\2\2\u019b\u019c\7`\2\2"+
+ "\u019c\u019e\7?\2\2\u019d\u0187\3\2\2\2\u019d\u0189\3\2\2\2\u019d\u018b"+
+ "\3\2\2\2\u019d\u018d\3\2\2\2\u019d\u018f\3\2\2\2\u019d\u0191\3\2\2\2\u019d"+
+ "\u0194\3\2\2\2\u019d\u0197\3\2\2\2\u019d\u0199\3\2\2\2\u019d\u019b\3\2"+
+ "\2\2\u019eK\3\2\2\2\u019f\u01a0\7k\2\2\u01a0\u01a1\7o\2\2\u01a1\u01a2"+
+ "\7r\2\2\u01a2\u01a3\7q\2\2\u01a3\u01a4\7t\2\2\u01a4\u01a5\7v\2\2\u01a5"+
+ "\u01a6\3\2\2\2\u01a6\u01a7\b&\3\2\u01a7M\3\2\2\2\u01a8\u01a9\7v\2\2\u01a9"+
+ "\u01aa\7{\2\2\u01aa\u01ab\7r\2\2\u01ab\u01ac\7g\2\2\u01ac\u01ad\7f\2\2"+
+ "\u01ad\u01ae\7g\2\2\u01ae\u01af\7h\2\2\u01afO\3\2\2\2\u01b0\u01b1\7%\2"+
+ "\2\u01b1\u01b2\7r\2\2\u01b2\u01b3\7t\2\2\u01b3\u01b4\7c\2\2\u01b4\u01b5"+
+ "\7i\2\2\u01b5\u01b6\7o\2\2\u01b6\u01b7\7c\2\2\u01b7Q\3\2\2\2\u01b8\u01b9"+
+ "\7t\2\2\u01b9\u01ba\7g\2\2\u01ba\u01bb\7u\2\2\u01bb\u01bc\7g\2\2\u01bc"+
+ "\u01bd\7t\2\2\u01bd\u01be\7x\2\2\u01be\u01bf\7g\2\2\u01bfS\3\2\2\2\u01c0"+
+ "\u01c1\7r\2\2\u01c1\u01c2\7e\2\2\u01c2U\3\2\2\2\u01c3\u01c4\7v\2\2\u01c4"+
+ "\u01c5\7c\2\2\u01c5\u01c6\7t\2\2\u01c6\u01c7\7i\2\2\u01c7\u01c8\7g\2\2"+
+ "\u01c8\u01c9\7v\2\2\u01c9W\3\2\2\2\u01ca\u01cb\7n\2\2\u01cb\u01cc\7k\2"+
+ "\2\u01cc\u01cd\7p\2\2\u01cd\u01ce\7m\2\2\u01ceY\3\2\2\2\u01cf\u01d0\7"+
+ "e\2\2\u01d0\u01d1\7r\2\2\u01d1\u01d2\7w\2\2\u01d2[\3\2\2\2\u01d3\u01d4"+
+ "\7e\2\2\u01d4\u01d5\7q\2\2\u01d5\u01d6\7f\2\2\u01d6\u01d7\7g\2\2\u01d7"+
+ "\u01d8\7a\2\2\u01d8\u01d9\7u\2\2\u01d9\u01da\7g\2\2\u01da\u01db\7i\2\2"+
+ "\u01db]\3\2\2\2\u01dc\u01dd\7f\2\2\u01dd\u01de\7c\2\2\u01de\u01df\7v\2"+
+ "\2\u01df\u01e0\7c\2\2\u01e0\u01e1\7a\2\2\u01e1\u01e2\7u\2\2\u01e2\u01e3"+
+ "\7g\2\2\u01e3\u01e4\7i\2\2\u01e4_\3\2\2\2\u01e5\u01e6\7g\2\2\u01e6\u01e7"+
+ "\7p\2\2\u01e7\u01e8\7e\2\2\u01e8\u01e9\7q\2\2\u01e9\u01ea\7f\2\2\u01ea"+
+ "\u01eb\7k\2\2\u01eb\u01ec\7p\2\2\u01ec\u01ed\7i\2\2\u01eda\3\2\2\2\u01ee"+
+ "\u01ef\7e\2\2\u01ef\u01f0\7q\2\2\u01f0\u01f1\7p\2\2\u01f1\u01f2\7u\2\2"+
+ "\u01f2\u01f3\7v\2\2\u01f3c\3\2\2\2\u01f4\u01f5\7g\2\2\u01f5\u01f6\7z\2"+
+ "\2\u01f6\u01f7\7v\2\2\u01f7\u01f8\7g\2\2\u01f8\u01f9\7t\2\2\u01f9\u01fa"+
+ "\7p\2\2\u01fae\3\2\2\2\u01fb\u01fc\7g\2\2\u01fc\u01fd\7z\2\2\u01fd\u01fe"+
+ "\7r\2\2\u01fe\u01ff\7q\2\2\u01ff\u0200\7t\2\2\u0200\u0201\7v\2\2\u0201"+
+ "g\3\2\2\2\u0202\u0203\7c\2\2\u0203\u0204\7n\2\2\u0204\u0205\7k\2\2\u0205"+
+ "\u0206\7i\2\2\u0206\u0207\7p\2\2\u0207i\3\2\2\2\u0208\u0209\7k\2\2\u0209"+
+ "\u020a\7p\2\2\u020a\u020b\7n\2\2\u020b\u020c\7k\2\2\u020c\u020d\7p\2\2"+
+ "\u020d\u020e\7g\2\2\u020ek\3\2\2\2\u020f\u0210\7x\2\2\u0210\u0211\7q\2"+
+ "\2\u0211\u0212\7n\2\2\u0212\u0213\7c\2\2\u0213\u0214\7v\2\2\u0214\u0215"+
+ "\7k\2\2\u0215\u0216\7n\2\2\u0216\u0217\7g\2\2\u0217m\3\2\2\2\u0218\u0219"+
+ "\7u\2\2\u0219\u021a\7v\2\2\u021a\u021b\7c\2\2\u021b\u021c\7v\2\2\u021c"+
+ "\u021d\7k\2\2\u021d\u021e\7e\2\2\u021eo\3\2\2\2\u021f\u0220\7k\2\2\u0220"+
+ "\u0221\7p\2\2\u0221\u0222\7v\2\2\u0222\u0223\7g\2\2\u0223\u0224\7t\2\2"+
+ "\u0224\u0225\7t\2\2\u0225\u0226\7w\2\2\u0226\u0227\7r\2\2\u0227\u0228"+
+ "\7v\2\2\u0228q\3\2\2\2\u0229\u022a\7t\2\2\u022a\u022b\7g\2\2\u022b\u022c"+
+ "\7i\2\2\u022c\u022d\7k\2\2\u022d\u022e\7u\2\2\u022e\u022f\7v\2\2\u022f"+
+ "\u0230\7g\2\2\u0230\u0231\7t\2\2\u0231s\3\2\2\2\u0232\u0233\7a\2\2\u0233"+
+ "\u0234\7a\2\2\u0234\u0235\7c\2\2\u0235\u0236\7f\2\2\u0236\u0237\7f\2\2"+
+ "\u0237\u0238\7t\2\2\u0238\u0239\7g\2\2\u0239\u023a\7u\2\2\u023a\u023b"+
+ "\7u\2\2\u023bu\3\2\2\2\u023c\u023d\7a\2\2\u023d\u023e\7a\2\2\u023e\u023f"+
+ "\7|\2\2\u023f\u0240\7r\2\2\u0240w\3\2\2\2\u0241\u0242\7a\2\2\u0242\u0243"+
+ "\7a\2\2\u0243\u0244\7o\2\2\u0244\u0245\7g\2\2\u0245\u0246\7o\2\2\u0246"+
+ "y\3\2\2\2\u0247\u0248\7a\2\2\u0248\u0249\7a\2\2\u0249\u024a\7u\2\2\u024a"+
+ "\u024b\7u\2\2\u024b\u024c\7c\2\2\u024c{\3\2\2\2\u024d\u024e\7a\2\2\u024e"+
+ "\u024f\7a\2\2\u024f\u0250\7o\2\2\u0250\u0251\7c\2\2\u0251}\3\2\2\2\u0252"+
+ "\u0253\7e\2\2\u0253\u0254\7c\2\2\u0254\u0255\7n\2\2\u0255\u0256\7n\2\2"+
+ "\u0256\u0257\7k\2\2\u0257\u0258\7p\2\2\u0258\u0259\7i\2\2\u0259\177\3"+
+ "\2\2\2\u025a\u025b\7a\2\2\u025b\u025c\7a\2\2\u025c\u025d\7u\2\2\u025d"+
+ "\u025e\7v\2\2\u025e\u025f\7c\2\2\u025f\u0260\7e\2\2\u0260\u0261\7m\2\2"+
+ "\u0261\u0262\7e\2\2\u0262\u0263\7c\2\2\u0263\u0264\7n\2\2\u0264\u026f"+
+ "\7n\2\2\u0265\u0266\7a\2\2\u0266\u0267\7a\2\2\u0267\u0268\7r\2\2\u0268"+
+ "\u0269\7j\2\2\u0269\u026a\7k\2\2\u026a\u026b\7e\2\2\u026b\u026c\7c\2\2"+
+ "\u026c\u026d\7n\2\2\u026d\u026f\7n\2\2\u026e\u025a\3\2\2\2\u026e\u0265"+
+ "\3\2\2\2\u026f\u0081\3\2\2\2\u0270\u0271\7x\2\2\u0271\u0272\7c\2\2\u0272"+
+ "\u0273\7t\2\2\u0273\u0274\7a\2\2\u0274\u0275\7o\2\2\u0275\u0276\7q\2\2"+
+ "\u0276\u0277\7f\2\2\u0277\u0278\7g\2\2\u0278\u0279\7n\2\2\u0279\u0083"+
+ "\3\2\2\2\u027a\u027b\7k\2\2\u027b\u027c\7h\2\2\u027c\u0085\3\2\2\2\u027d"+
+ "\u027e\7g\2\2\u027e\u027f\7n\2\2\u027f\u0280\7u\2\2\u0280\u0281\7g\2\2"+
+ "\u0281\u0087\3\2\2\2\u0282\u0283\7y\2\2\u0283\u0284\7j\2\2\u0284\u0285"+
+ "\7k\2\2\u0285\u0286\7n\2\2\u0286\u0287\7g\2\2\u0287\u0089\3\2\2\2\u0288"+
+ "\u0289\7f\2\2\u0289\u028a\7q\2\2\u028a\u008b\3\2\2\2\u028b\u028c\7h\2"+
+ "\2\u028c\u028d\7q\2\2\u028d\u028e\7t\2\2\u028e\u008d\3\2\2\2\u028f\u0290"+
+ "\7u\2\2\u0290\u0291\7y\2\2\u0291\u0292\7k\2\2\u0292\u0293\7v\2\2\u0293"+
+ "\u0294\7e\2\2\u0294\u0295\7j\2\2\u0295\u008f\3\2\2\2\u0296\u0297\7t\2"+
+ "\2\u0297\u0298\7g\2\2\u0298\u0299\7v\2\2\u0299\u029a\7w\2\2\u029a\u029b"+
+ "\7t\2\2\u029b\u029c\7p\2\2\u029c\u0091\3\2\2\2\u029d\u029e\7d\2\2\u029e"+
+ "\u029f\7t\2\2\u029f\u02a0\7g\2\2\u02a0\u02a1\7c\2\2\u02a1\u02a2\7m\2\2"+
+ "\u02a2\u0093\3\2\2\2\u02a3\u02a4\7e\2\2\u02a4\u02a5\7q\2\2\u02a5\u02a6"+
+ "\7p\2\2\u02a6\u02a7\7v\2\2\u02a7\u02a8\7k\2\2\u02a8\u02a9\7p\2\2\u02a9"+
+ "\u02aa\7w\2\2\u02aa\u02ab\7g\2\2\u02ab\u0095\3\2\2\2\u02ac\u02ad\7c\2"+
+ "\2\u02ad\u02ae\7u\2\2\u02ae\u02af\7o\2\2\u02af\u02b0\3\2\2\2\u02b0\u02b1"+
+ "\bK\4\2\u02b1\u0097\3\2\2\2\u02b2\u02b3\7f\2\2\u02b3\u02b4\7g\2\2\u02b4"+
+ "\u02b5\7h\2\2\u02b5\u02b6\7c\2\2\u02b6\u02b7\7w\2\2\u02b7\u02b8\7n\2\2"+
+ "\u02b8\u02b9\7v\2\2\u02b9\u0099\3\2\2\2\u02ba\u02bb\7e\2\2\u02bb\u02bc"+
+ "\7c\2\2\u02bc\u02bd\7u\2\2\u02bd\u02be\7g\2\2\u02be\u009b\3\2\2\2\u02bf"+
+ "\u02c0\7u\2\2\u02c0\u02c1\7v\2\2\u02c1\u02c2\7t\2\2\u02c2\u02c3\7w\2\2"+
+ "\u02c3\u02c4\7e\2\2\u02c4\u02c5\7v\2\2\u02c5\u009d\3\2\2\2\u02c6\u02c7"+
+ "\7g\2\2\u02c7\u02c8\7p\2\2\u02c8\u02c9\7w\2\2\u02c9\u02ca\7o\2\2\u02ca"+
+ "\u009f\3\2\2\2\u02cb\u02cc\7u\2\2\u02cc\u02cd\7k\2\2\u02cd\u02ce\7|\2"+
+ "\2\u02ce\u02cf\7g\2\2\u02cf\u02d0\7q\2\2\u02d0\u02d1\7h\2\2\u02d1\u00a1"+
+ "\3\2\2\2\u02d2\u02d3\7v\2\2\u02d3\u02d4\7{\2\2\u02d4\u02d5\7r\2\2\u02d5"+
+ "\u02d6\7g\2\2\u02d6\u02d7\7k\2\2\u02d7\u02d8\7f\2\2\u02d8\u00a3\3\2\2"+
+ "\2\u02d9\u02da\7m\2\2\u02da\u02db\7k\2\2\u02db\u02dc\7e\2\2\u02dc\u02dd"+
+ "\7m\2\2\u02dd\u02de\7c\2\2\u02de\u02df\7u\2\2\u02df\u02e0\7o\2\2\u02e0"+
+ "\u00a5\3\2\2\2\u02e1\u02e2\7t\2\2\u02e2\u02e3\7g\2\2\u02e3\u02e4\7u\2"+
+ "\2\u02e4\u02e5\7q\2\2\u02e5\u02e6\7w\2\2\u02e6\u02e7\7t\2\2\u02e7\u02e8"+
+ "\7e\2\2\u02e8\u02e9\7g\2\2\u02e9\u00a7\3\2\2\2\u02ea\u02eb\7w\2\2\u02eb"+
+ "\u02ec\7u\2\2\u02ec\u02ed\7g\2\2\u02ed\u02ee\7u\2\2\u02ee\u00a9\3\2\2"+
+ "\2\u02ef\u02f0\7e\2\2\u02f0\u02f1\7n\2\2\u02f1\u02f2\7q\2\2\u02f2\u02f3"+
+ "\7d\2\2\u02f3\u02f4\7d\2\2\u02f4\u02f5\7g\2\2\u02f5\u02f6\7t\2\2\u02f6"+
+ "\u02f7\7u\2\2\u02f7\u00ab\3\2\2\2\u02f8\u02f9\7d\2\2\u02f9\u02fa\7{\2"+
+ "\2\u02fa\u02fb\7v\2\2\u02fb\u02fc\7g\2\2\u02fc\u02fd\7u\2\2\u02fd\u00ad"+
+ "\3\2\2\2\u02fe\u02ff\7e\2\2\u02ff\u0300\7{\2\2\u0300\u0301\7e\2\2\u0301"+
+ "\u0302\7n\2\2\u0302\u0303\7g\2\2\u0303\u0304\7u\2\2\u0304\u00af\3\2\2"+
+ "\2\u0305\u0306\7#\2\2\u0306\u00b1\3\2\2\2\u0307\u0308\7u\2\2\u0308\u0309"+
+ "\7k\2\2\u0309\u030a\7i\2\2\u030a\u030b\7p\2\2\u030b\u030c\7g\2\2\u030c"+
+ "\u0316\7f\2\2\u030d\u030e\7w\2\2\u030e\u030f\7p\2\2\u030f\u0310\7u\2\2"+
+ "\u0310\u0311\7k\2\2\u0311\u0312\7i\2\2\u0312\u0313\7p\2\2\u0313\u0314"+
+ "\7g\2\2\u0314\u0316\7f\2\2\u0315\u0307\3\2\2\2\u0315\u030d\3\2\2\2\u0316"+
+ "\u00b3\3\2\2\2\u0317\u0318\7d\2\2\u0318\u0319\7{\2\2\u0319\u031a\7v\2"+
+ "\2\u031a\u033d\7g\2\2\u031b\u031c\7y\2\2\u031c\u031d\7q\2\2\u031d\u031e"+
+ "\7t\2\2\u031e\u033d\7f\2\2\u031f\u0320\7f\2\2\u0320\u0321\7y\2\2\u0321"+
+ "\u0322\7q\2\2\u0322\u0323\7t\2\2\u0323\u033d\7f\2\2\u0324\u0325\7d\2\2"+
+ "\u0325\u0326\7q\2\2\u0326\u0327\7q\2\2\u0327\u033d\7n\2\2\u0328\u0329"+
+ "\7e\2\2\u0329\u032a\7j\2\2\u032a\u032b\7c\2\2\u032b\u033d\7t\2\2\u032c"+
+ "\u032d\7u\2\2\u032d\u032e\7j\2\2\u032e\u032f\7q\2\2\u032f\u0330\7t\2\2"+
+ "\u0330\u033d\7v\2\2\u0331\u0332\7k\2\2\u0332\u0333\7p\2\2\u0333\u033d"+
+ "\7v\2\2\u0334\u0335\7n\2\2\u0335\u0336\7q\2\2\u0336\u0337\7p\2\2\u0337"+
+ "\u033d\7i\2\2\u0338\u0339\7x\2\2\u0339\u033a\7q\2\2\u033a\u033b\7k\2\2"+
+ "\u033b\u033d\7f\2\2\u033c\u0317\3\2\2\2\u033c\u031b\3\2\2\2\u033c\u031f"+
+ "\3\2\2\2\u033c\u0324\3\2\2\2\u033c\u0328\3\2\2\2\u033c\u032c\3\2\2\2\u033c"+
+ "\u0331\3\2\2\2\u033c\u0334\3\2\2\2\u033c\u0338\3\2\2\2\u033d\u00b5\3\2"+
+ "\2\2\u033e\u033f\7v\2\2\u033f\u0340\7t\2\2\u0340\u0341\7w\2\2\u0341\u0348"+
+ "\7g\2\2\u0342\u0343\7h\2\2\u0343\u0344\7c\2\2\u0344\u0345\7n\2\2\u0345"+
+ "\u0346\7u\2\2\u0346\u0348\7g\2\2\u0347\u033e\3\2\2\2\u0347\u0342\3\2\2"+
+ "\2\u0348\u00b7\3\2\2\2\u0349\u034a\7}\2\2\u034a\u034b\7}\2\2\u034b\u034f"+
+ "\3\2\2\2\u034c\u034e\13\2\2\2\u034d\u034c\3\2\2\2\u034e\u0351\3\2\2\2"+
+ "\u034f\u0350\3\2\2\2\u034f\u034d\3\2\2\2\u0350\u0352\3\2\2\2\u0351\u034f"+
+ "\3\2\2\2\u0352\u0353\7\177\2\2\u0353\u0354\7\177\2\2\u0354\u00b9\3\2\2"+
+ "\2\u0355\u035b\7$\2\2\u0356\u0357\7^\2\2\u0357\u035a\7$\2\2\u0358\u035a"+
+ "\n\2\2\2\u0359\u0356\3\2\2\2\u0359\u0358\3\2\2\2\u035a\u035d\3\2\2\2\u035b"+
+ "\u0359\3\2\2\2\u035b\u035c\3\2\2\2\u035c\u035e\3\2\2\2\u035d\u035b\3\2"+
+ "\2\2\u035e\u0360\7$\2\2\u035f\u0361\t\3\2\2\u0360\u035f\3\2\2\2\u0360"+
+ "\u0361\3\2\2\2\u0361\u0366\3\2\2\2\u0362\u0364\t\4\2\2\u0363\u0365\t\5"+
+ "\2\2\u0364\u0363\3\2\2\2\u0364\u0365\3\2\2\2\u0365\u0367\3\2\2\2\u0366"+
+ "\u0362\3\2\2\2\u0366\u0367\3\2\2\2\u0367\u0369\3\2\2\2\u0368\u036a\t\3"+
+ "\2\2\u0369\u0368\3\2\2\2\u0369\u036a\3\2\2\2\u036a\u036b\3\2\2\2\u036b"+
+ "\u036c\b]\5\2\u036c\u00bb\3\2\2\2\u036d\u0371\7)\2\2\u036e\u036f\7^\2"+
+ "\2\u036f\u0372\t\6\2\2\u0370\u0372\n\7\2\2\u0371\u036e\3\2\2\2\u0371\u0370"+
+ "\3\2\2\2\u0372\u0373\3\2\2\2\u0373\u0374\7)\2\2\u0374\u00bd\3\2\2\2\u0375"+
+ "\u0378\5\u00c0`\2\u0376\u0378\5\u00c8d\2\u0377\u0375\3\2\2\2\u0377\u0376"+
+ "\3\2\2\2\u0378\u00bf\3\2\2\2\u0379\u037d\5\u00c2a\2\u037a\u037d\5\u00c4"+
+ "b\2\u037b\u037d\5\u00c6c\2\u037c\u0379\3\2\2\2\u037c\u037a\3\2\2\2\u037c"+
+ "\u037b\3\2\2\2\u037d\u00c1\3\2\2\2\u037e\u0384\7\'\2\2\u037f\u0380\7\62"+
+ "\2\2\u0380\u0384\7d\2\2\u0381\u0382\7\62\2\2\u0382\u0384\7D\2\2\u0383"+
+ "\u037e\3\2\2\2\u0383\u037f\3\2\2\2\u0383\u0381\3\2\2\2\u0384\u0388\3\2"+
+ "\2\2\u0385\u0387\5\u00d0h\2\u0386\u0385\3\2\2\2\u0387\u038a\3\2\2\2\u0388"+
+ "\u0386\3\2\2\2\u0388\u0389\3\2\2\2\u0389\u038b\3\2\2\2\u038a\u0388\3\2"+
+ "\2\2\u038b\u038d\7\60\2\2\u038c\u038e\5\u00d0h\2\u038d\u038c\3\2\2\2\u038e"+
+ "\u038f\3\2\2\2\u038f\u038d\3\2\2\2\u038f\u0390\3\2\2\2\u0390\u00c3\3\2"+
+ "\2\2\u0391\u0393\5\u00d2i\2\u0392\u0391\3\2\2\2\u0393\u0396\3\2\2\2\u0394"+
+ "\u0392\3\2\2\2\u0394\u0395\3\2\2\2\u0395\u0397\3\2\2\2\u0396\u0394\3\2"+
+ "\2\2\u0397\u0399\7\60\2\2\u0398\u039a\5\u00d2i\2\u0399\u0398\3\2\2\2\u039a"+
+ "\u039b\3\2\2\2\u039b\u0399\3\2\2\2\u039b\u039c\3\2\2\2\u039c\u00c5\3\2"+
+ "\2\2\u039d\u03a3\7&\2\2\u039e\u039f\7\62\2\2\u039f\u03a3\7z\2\2\u03a0"+
+ "\u03a1\7\62\2\2\u03a1\u03a3\7Z\2\2\u03a2\u039d\3\2\2\2\u03a2\u039e\3\2"+
+ "\2\2\u03a2\u03a0\3\2\2\2\u03a3\u03a7\3\2\2\2\u03a4\u03a6\5\u00d4j\2\u03a5"+
+ "\u03a4\3\2\2\2\u03a6\u03a9\3\2\2\2\u03a7\u03a5\3\2\2\2\u03a7\u03a8\3\2"+
+ "\2\2\u03a8\u03aa\3\2\2\2\u03a9\u03a7\3\2\2\2\u03aa\u03ac\7\60\2\2\u03ab"+
+ "\u03ad\5\u00d4j\2\u03ac\u03ab\3\2\2\2\u03ad\u03ae\3\2\2\2\u03ae\u03ac"+
+ "\3\2\2\2\u03ae\u03af\3\2\2\2\u03af\u00c7\3\2\2\2\u03b0\u03b4\5\u00ccf"+
+ "\2\u03b1\u03b4\5\u00ceg\2\u03b2\u03b4\5\u00cae\2\u03b3\u03b0\3\2\2\2\u03b3"+
+ "\u03b1\3\2\2\2\u03b3\u03b2\3\2\2\2\u03b4\u03b8\3\2\2\2\u03b5\u03b6\t\b"+
+ "\2\2\u03b6\u03b9\t\t\2\2\u03b7\u03b9\7n\2\2\u03b8\u03b5\3\2\2\2\u03b8"+
+ "\u03b7\3\2\2\2\u03b8\u03b9\3\2\2\2\u03b9\u00c9\3\2\2\2\u03ba\u03bb\7\62"+
+ "\2\2\u03bb\u03bd\t\n\2\2\u03bc\u03be\5\u00d0h\2\u03bd\u03bc\3\2\2\2\u03be"+
+ "\u03bf\3\2\2\2\u03bf\u03bd\3\2\2\2\u03bf\u03c0\3\2\2\2\u03c0\u03c8\3\2"+
+ "\2\2\u03c1\u03c3\7\'\2\2\u03c2\u03c4\5\u00d0h\2\u03c3\u03c2\3\2\2\2\u03c4"+
+ "\u03c5\3\2\2\2\u03c5\u03c3\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u03c8\3\2"+
+ "\2\2\u03c7\u03ba\3\2\2\2\u03c7\u03c1\3\2\2\2\u03c8\u00cb\3\2\2\2\u03c9"+
+ "\u03cb\5\u00d2i\2\u03ca\u03c9\3\2\2\2\u03cb\u03cc\3\2\2\2\u03cc\u03ca"+
+ "\3\2\2\2\u03cc\u03cd\3\2\2\2\u03cd\u00cd\3\2\2\2\u03ce\u03d4\7&\2\2\u03cf"+
+ "\u03d0\7\62\2\2\u03d0\u03d4\7z\2\2\u03d1\u03d2\7\62\2\2\u03d2\u03d4\7"+
+ "Z\2\2\u03d3\u03ce\3\2\2\2\u03d3\u03cf\3\2\2\2\u03d3\u03d1\3\2\2\2\u03d4"+
+ "\u03d6\3\2\2\2\u03d5\u03d7\5\u00d4j\2\u03d6\u03d5\3\2\2\2\u03d7\u03d8"+
+ "\3\2\2\2\u03d8\u03d6\3\2\2\2\u03d8\u03d9\3\2\2\2\u03d9\u00cf\3\2\2\2\u03da"+
+ "\u03db\t\13\2\2\u03db\u00d1\3\2\2\2\u03dc\u03dd\t\f\2\2\u03dd\u00d3\3"+
+ "\2\2\2\u03de\u03df\t\r\2\2\u03df\u00d5\3\2\2\2\u03e0\u03e4\5\u00d8l\2"+
+ "\u03e1\u03e3\5\u00dam\2\u03e2\u03e1\3\2\2\2\u03e3\u03e6\3\2\2\2\u03e4"+
+ "\u03e2\3\2\2\2\u03e4\u03e5\3\2\2\2\u03e5\u03e7\3\2\2\2\u03e6\u03e4\3\2"+
+ "\2\2\u03e7\u03e8\bk\6\2\u03e8\u00d7\3\2\2\2\u03e9\u03ea\t\16\2\2\u03ea"+
+ "\u00d9\3\2\2\2\u03eb\u03ec\t\17\2\2\u03ec\u00db\3\2\2\2\u03ed\u03ef\t"+
+ "\20\2\2\u03ee\u03ed\3\2\2\2\u03ef\u03f0\3\2\2\2\u03f0\u03ee\3\2\2\2\u03f0"+
+ "\u03f1\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f3\bn\7\2\u03f3\u00dd\3\2"+
+ "\2\2\u03f4\u03f5\7\61\2\2\u03f5\u03f6\7\61\2\2\u03f6\u03fa\3\2\2\2\u03f7"+
+ "\u03f9\n\21\2\2\u03f8\u03f7\3\2\2\2\u03f9\u03fc\3\2\2\2\u03fa\u03f8\3"+
+ "\2\2\2\u03fa\u03fb\3\2\2\2\u03fb\u03fd\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd"+
+ "\u03fe\bo\b\2\u03fe\u00df\3\2\2\2\u03ff\u0400\7\61\2\2\u0400\u0401\7,"+
+ "\2\2\u0401\u0405\3\2\2\2\u0402\u0404\13\2\2\2\u0403\u0402\3\2\2\2\u0404"+
+ "\u0407\3\2\2\2\u0405\u0406\3\2\2\2\u0405\u0403\3\2\2\2\u0406\u0408\3\2"+
+ "\2\2\u0407\u0405\3\2\2\2\u0408\u0409\7,\2\2\u0409\u040a\7\61\2\2\u040a"+
+ "\u040b\3\2\2\2\u040b\u040c\bp\b\2\u040c\u00e1\3\2\2\2\u040d\u040e\7\60"+
+ "\2\2\u040e\u040f\7d\2\2\u040f\u0410\7{\2\2\u0410\u0411\7v\2\2\u0411\u0412"+
+ "\7g\2\2\u0412\u00e3\3\2\2\2\u0413\u0414\7d\2\2\u0414\u0415\7t\2\2\u0415"+
+ "\u04f2\7m\2\2\u0416\u0417\7q\2\2\u0417\u0418\7t\2\2\u0418\u04f2\7c\2\2"+
+ "\u0419\u041a\7m\2\2\u041a\u041b\7k\2\2\u041b\u04f2\7n\2\2\u041c\u041d"+
+ "\7u\2\2\u041d\u041e\7n\2\2\u041e\u04f2\7q\2\2\u041f\u0420\7p\2\2\u0420"+
+ "\u0421\7q\2\2\u0421\u04f2\7r\2\2\u0422\u0423\7c\2\2\u0423\u0424\7u\2\2"+
+ "\u0424\u04f2\7n\2\2\u0425\u0426\7r\2\2\u0426\u0427\7j\2\2\u0427\u04f2"+
+ "\7r\2\2\u0428\u0429\7c\2\2\u0429\u042a\7p\2\2\u042a\u04f2\7e\2\2\u042b"+
+ "\u042c\7d\2\2\u042c\u042d\7r\2\2\u042d\u04f2\7n\2\2\u042e\u042f\7e\2\2"+
+ "\u042f\u0430\7n\2\2\u0430\u04f2\7e\2\2\u0431\u0432\7l\2\2\u0432\u0433"+
+ "\7u\2\2\u0433\u04f2\7t\2\2\u0434\u0435\7c\2\2\u0435\u0436\7p\2\2\u0436"+
+ "\u04f2\7f\2\2\u0437\u0438\7t\2\2\u0438\u0439\7n\2\2\u0439\u04f2\7c\2\2"+
+ "\u043a\u043b\7d\2\2\u043b\u043c\7k\2\2\u043c\u04f2\7v\2\2\u043d\u043e"+
+ "\7t\2\2\u043e\u043f\7q\2\2\u043f\u04f2\7n\2\2\u0440\u0441\7r\2\2\u0441"+
+ "\u0442\7n\2\2\u0442\u04f2\7c\2\2\u0443\u0444\7r\2\2\u0444\u0445\7n\2\2"+
+ "\u0445\u04f2\7r\2\2\u0446\u0447\7d\2\2\u0447\u0448\7o\2\2\u0448\u04f2"+
+ "\7k\2\2\u0449\u044a\7u\2\2\u044a\u044b\7g\2\2\u044b\u04f2\7e\2\2\u044c"+
+ "\u044d\7t\2\2\u044d\u044e\7v\2\2\u044e\u04f2\7k\2\2\u044f\u0450\7g\2\2"+
+ "\u0450\u0451\7q\2\2\u0451\u04f2\7t\2\2\u0452\u0453\7u\2\2\u0453\u0454"+
+ "\7t\2\2\u0454\u04f2\7g\2\2\u0455\u0456\7n\2\2\u0456\u0457\7u\2\2\u0457"+
+ "\u04f2\7t\2\2\u0458\u0459\7r\2\2\u0459\u045a\7j\2\2\u045a\u04f2\7c\2\2"+
+ "\u045b\u045c\7c\2\2\u045c\u045d\7n\2\2\u045d\u04f2\7t\2\2\u045e\u045f"+
+ "\7l\2\2\u045f\u0460\7o\2\2\u0460\u04f2\7r\2\2\u0461\u0462\7d\2\2\u0462"+
+ "\u0463\7x\2\2\u0463\u04f2\7e\2\2\u0464\u0465\7e\2\2\u0465\u0466\7n\2\2"+
+ "\u0466\u04f2\7k\2\2\u0467\u0468\7t\2\2\u0468\u0469\7v\2\2\u0469\u04f2"+
+ "\7u\2\2\u046a\u046b\7c\2\2\u046b\u046c\7f\2\2\u046c\u04f2\7e\2\2\u046d"+
+ "\u046e\7t\2\2\u046e\u046f\7t\2\2\u046f\u04f2\7c\2\2\u0470\u0471\7d\2\2"+
+ "\u0471\u0472\7x\2\2\u0472\u04f2\7u\2\2\u0473\u0474\7u\2\2\u0474\u0475"+
+ "\7g\2\2\u0475\u04f2\7k\2\2\u0476\u0477\7u\2\2\u0477\u0478\7c\2\2\u0478"+
+ "\u04f2\7z\2\2\u0479\u047a\7u\2\2\u047a\u047b\7v\2\2\u047b\u04f2\7{\2\2"+
+ "\u047c\u047d\7u\2\2\u047d\u047e\7v\2\2\u047e\u04f2\7c\2\2\u047f\u0480"+
+ "\7u\2\2\u0480\u0481\7v\2\2\u0481\u04f2\7z\2\2\u0482\u0483\7f\2\2\u0483"+
+ "\u0484\7g\2\2\u0484\u04f2\7{\2\2\u0485\u0486\7v\2\2\u0486\u0487\7z\2\2"+
+ "\u0487\u04f2\7c\2\2\u0488\u0489\7z\2\2\u0489\u048a\7c\2\2\u048a\u04f2"+
+ "\7c\2\2\u048b\u048c\7d\2\2\u048c\u048d\7e\2\2\u048d\u04f2\7e\2\2\u048e"+
+ "\u048f\7c\2\2\u048f\u0490\7j\2\2\u0490\u04f2\7z\2\2\u0491\u0492\7v\2\2"+
+ "\u0492\u0493\7{\2\2\u0493\u04f2\7c\2\2\u0494\u0495\7v\2\2\u0495\u0496"+
+ "\7z\2\2\u0496\u04f2\7u\2\2\u0497\u0498\7v\2\2\u0498\u0499\7c\2\2\u0499"+
+ "\u04f2\7u\2\2\u049a\u049b\7u\2\2\u049b\u049c\7j\2\2\u049c\u04f2\7{\2\2"+
+ "\u049d\u049e\7u\2\2\u049e\u049f\7j\2\2\u049f\u04f2\7z\2\2\u04a0\u04a1"+
+ "\7n\2\2\u04a1\u04a2\7f\2\2\u04a2\u04f2\7{\2\2\u04a3\u04a4\7n\2\2\u04a4"+
+ "\u04a5\7f\2\2\u04a5\u04f2\7c\2\2\u04a6\u04a7\7n\2\2\u04a7\u04a8\7f\2\2"+
+ "\u04a8\u04f2\7z\2\2\u04a9\u04aa\7n\2\2\u04aa\u04ab\7c\2\2\u04ab\u04f2"+
+ "\7z\2\2\u04ac\u04ad\7v\2\2\u04ad\u04ae\7c\2\2\u04ae\u04f2\7{\2\2\u04af"+
+ "\u04b0\7v\2\2\u04b0\u04b1\7c\2\2\u04b1\u04f2\7z\2\2\u04b2\u04b3\7d\2\2"+
+ "\u04b3\u04b4\7e\2\2\u04b4\u04f2\7u\2\2\u04b5\u04b6\7e\2\2\u04b6\u04b7"+
+ "\7n\2\2\u04b7\u04f2\7x\2\2\u04b8\u04b9\7v\2\2\u04b9\u04ba\7u\2\2\u04ba"+
+ "\u04f2\7z\2\2\u04bb\u04bc\7n\2\2\u04bc\u04bd\7c\2\2\u04bd\u04f2\7u\2\2"+
+ "\u04be\u04bf\7e\2\2\u04bf\u04c0\7r\2\2\u04c0\u04f2\7{\2\2\u04c1\u04c2"+
+ "\7e\2\2\u04c2\u04c3\7o\2\2\u04c3\u04f2\7r\2\2\u04c4\u04c5\7e\2\2\u04c5"+
+ "\u04c6\7r\2\2\u04c6\u04f2\7z\2\2\u04c7\u04c8\7f\2\2\u04c8\u04c9\7e\2\2"+
+ "\u04c9\u04f2\7r\2\2\u04ca\u04cb\7f\2\2\u04cb\u04cc\7g\2\2\u04cc\u04f2"+
+ "\7e\2\2\u04cd\u04ce\7k\2\2\u04ce\u04cf\7p\2\2\u04cf\u04f2\7e\2\2\u04d0"+
+ "\u04d1\7c\2\2\u04d1\u04d2\7z\2\2\u04d2\u04f2\7u\2\2\u04d3\u04d4\7d\2\2"+
+ "\u04d4\u04d5\7p\2\2\u04d5\u04f2\7g\2\2\u04d6\u04d7\7e\2\2\u04d7\u04d8"+
+ "\7n\2\2\u04d8\u04f2\7f\2\2\u04d9\u04da\7u\2\2\u04da\u04db\7d\2\2\u04db"+
+ "\u04f2\7e\2\2\u04dc\u04dd\7k\2\2\u04dd\u04de\7u\2\2\u04de\u04f2\7e\2\2"+
+ "\u04df\u04e0\7k\2\2\u04e0\u04e1\7p\2\2\u04e1\u04f2\7z\2\2\u04e2\u04e3"+
+ "\7d\2\2\u04e3\u04e4\7g\2\2\u04e4\u04f2\7s\2\2\u04e5\u04e6\7u\2\2\u04e6"+
+ "\u04e7\7g\2\2\u04e7\u04f2\7f\2\2\u04e8\u04e9\7f\2\2\u04e9\u04ea\7g\2\2"+
+ "\u04ea\u04f2\7z\2\2\u04eb\u04ec\7k\2\2\u04ec\u04ed\7p\2\2\u04ed\u04f2"+
+ "\7{\2\2\u04ee\u04ef\7t\2\2\u04ef\u04f0\7q\2\2\u04f0\u04f2\7t\2\2\u04f1"+
+ "\u0413\3\2\2\2\u04f1\u0416\3\2\2\2\u04f1\u0419\3\2\2\2\u04f1\u041c\3\2"+
+ "\2\2\u04f1\u041f\3\2\2\2\u04f1\u0422\3\2\2\2\u04f1\u0425\3\2\2\2\u04f1"+
+ "\u0428\3\2\2\2\u04f1\u042b\3\2\2\2\u04f1\u042e\3\2\2\2\u04f1\u0431\3\2"+
+ "\2\2\u04f1\u0434\3\2\2\2\u04f1\u0437\3\2\2\2\u04f1\u043a\3\2\2\2\u04f1"+
+ "\u043d\3\2\2\2\u04f1\u0440\3\2\2\2\u04f1\u0443\3\2\2\2\u04f1\u0446\3\2"+
+ "\2\2\u04f1\u0449\3\2\2\2\u04f1\u044c\3\2\2\2\u04f1\u044f\3\2\2\2\u04f1"+
+ "\u0452\3\2\2\2\u04f1\u0455\3\2\2\2\u04f1\u0458\3\2\2\2\u04f1\u045b\3\2"+
+ "\2\2\u04f1\u045e\3\2\2\2\u04f1\u0461\3\2\2\2\u04f1\u0464\3\2\2\2\u04f1"+
+ "\u0467\3\2\2\2\u04f1\u046a\3\2\2\2\u04f1\u046d\3\2\2\2\u04f1\u0470\3\2"+
+ "\2\2\u04f1\u0473\3\2\2\2\u04f1\u0476\3\2\2\2\u04f1\u0479\3\2\2\2\u04f1"+
+ "\u047c\3\2\2\2\u04f1\u047f\3\2\2\2\u04f1\u0482\3\2\2\2\u04f1\u0485\3\2"+
+ "\2\2\u04f1\u0488\3\2\2\2\u04f1\u048b\3\2\2\2\u04f1\u048e\3\2\2\2\u04f1"+
+ "\u0491\3\2\2\2\u04f1\u0494\3\2\2\2\u04f1\u0497\3\2\2\2\u04f1\u049a\3\2"+
+ "\2\2\u04f1\u049d\3\2\2\2\u04f1\u04a0\3\2\2\2\u04f1\u04a3\3\2\2\2\u04f1"+
+ "\u04a6\3\2\2\2\u04f1\u04a9\3\2\2\2\u04f1\u04ac\3\2\2\2\u04f1\u04af\3\2"+
+ "\2\2\u04f1\u04b2\3\2\2\2\u04f1\u04b5\3\2\2\2\u04f1\u04b8\3\2\2\2\u04f1"+
+ "\u04bb\3\2\2\2\u04f1\u04be\3\2\2\2\u04f1\u04c1\3\2\2\2\u04f1\u04c4\3\2"+
+ "\2\2\u04f1\u04c7\3\2\2\2\u04f1\u04ca\3\2\2\2\u04f1\u04cd\3\2\2\2\u04f1"+
+ "\u04d0\3\2\2\2\u04f1\u04d3\3\2\2\2\u04f1\u04d6\3\2\2\2\u04f1\u04d9\3\2"+
+ "\2\2\u04f1\u04dc\3\2\2\2\u04f1\u04df\3\2\2\2\u04f1\u04e2\3\2\2\2\u04f1"+
+ "\u04e5\3\2\2\2\u04f1\u04e8\3\2\2\2\u04f1\u04eb\3\2\2\2\u04f1\u04ee\3\2"+
+ "\2\2\u04f2\u00e5\3\2\2\2\u04f3\u04f4\7%\2\2\u04f4\u00e7\3\2\2\2\u04f5"+
+ "\u04f6\7<\2\2\u04f6\u00e9\3\2\2\2\u04f7\u04f8\7.\2\2\u04f8\u00eb\3\2\2"+
+ "\2\u04f9\u04fa\7*\2\2\u04fa\u00ed\3\2\2\2\u04fb\u04fc\7+\2\2\u04fc\u00ef"+
+ "\3\2\2\2\u04fd\u04fe\7]\2\2\u04fe\u00f1\3\2\2\2\u04ff\u0500\7_\2\2\u0500"+
+ "\u00f3\3\2\2\2\u0501\u0502\7\60\2\2\u0502\u00f5\3\2\2\2\u0503\u0504\7"+
+ ">\2\2\u0504\u0505\7>\2\2\u0505\u00f7\3\2\2\2\u0506\u0507\7@\2\2\u0507"+
+ "\u0508\7@\2\2\u0508\u00f9\3\2\2\2\u0509\u050a\7-\2\2\u050a\u00fb\3\2\2"+
+ "\2\u050b\u050c\7/\2\2\u050c\u00fd\3\2\2\2\u050d\u050e\7>\2\2\u050e\u00ff"+
+ "\3\2\2\2\u050f\u0510\7@\2\2\u0510\u0101\3\2\2\2\u0511\u0512\7,\2\2\u0512"+
+ "\u0103\3\2\2\2\u0513\u0514\7\61\2\2\u0514\u0105\3\2\2\2\u0515\u0516\7"+
+ "}\2\2\u0516\u0517\b\u0083\t\2\u0517\u0107\3\2\2\2\u0518\u0519\7\177\2"+
+ "\2\u0519\u051a\b\u0084\n\2\u051a\u0109\3\2\2\2\u051b\u051e\5\u010c\u0086"+
+ "\2\u051c\u051e\5\u0114\u008a\2\u051d\u051b\3\2\2\2\u051d\u051c\3\2\2\2"+
+ "\u051e\u010b\3\2\2\2\u051f\u0523\5\u010e\u0087\2\u0520\u0523\5\u0110\u0088"+
+ "\2\u0521\u0523\5\u0112\u0089\2\u0522\u051f\3\2\2\2\u0522\u0520\3\2\2\2"+
+ "\u0522\u0521\3\2\2\2\u0523\u010d\3\2\2\2\u0524\u0528\7\'\2\2\u0525\u0527"+
+ "\5\u011c\u008e\2\u0526\u0525\3\2\2\2\u0527\u052a\3\2\2\2\u0528\u0526\3"+
+ "\2\2\2\u0528\u0529\3\2\2\2\u0529\u052b\3\2\2\2\u052a\u0528\3\2\2\2\u052b"+
+ "\u052d\7\60\2\2\u052c\u052e\5\u011c\u008e\2\u052d\u052c\3\2\2\2\u052e"+
+ "\u052f\3\2\2\2\u052f\u052d\3\2\2\2\u052f\u0530\3\2\2\2\u0530\u010f\3\2"+
+ "\2\2\u0531\u0533\5\u011e\u008f\2\u0532\u0531\3\2\2\2\u0533\u0536\3\2\2"+
+ "\2\u0534\u0532\3\2\2\2\u0534\u0535\3\2\2\2\u0535\u0537\3\2\2\2\u0536\u0534"+
+ "\3\2\2\2\u0537\u0539\7\60\2\2\u0538\u053a\5\u011e\u008f\2\u0539\u0538"+
+ "\3\2\2\2\u053a\u053b\3\2\2\2\u053b\u0539\3\2\2\2\u053b\u053c\3\2\2\2\u053c"+
+ "\u0111\3\2\2\2\u053d\u0541\7&\2\2\u053e\u0540\5\u0120\u0090\2\u053f\u053e"+
+ "\3\2\2\2\u0540\u0543\3\2\2\2\u0541\u053f\3\2\2\2\u0541\u0542\3\2\2\2\u0542"+
+ "\u0544\3\2\2\2\u0543\u0541\3\2\2\2\u0544\u0546\7\60\2\2\u0545\u0547\5"+
+ "\u0120\u0090\2\u0546\u0545\3\2\2\2\u0547\u0548\3\2\2\2\u0548\u0546\3\2"+
+ "\2\2\u0548\u0549\3\2\2\2\u0549\u0113\3\2\2\2\u054a\u054e\5\u0118\u008c"+
+ "\2\u054b\u054e\5\u011a\u008d\2\u054c\u054e\5\u0116\u008b\2\u054d\u054a"+
+ "\3\2\2\2\u054d\u054b\3\2\2\2\u054d\u054c\3\2\2\2\u054e\u0115\3\2\2\2\u054f"+
+ "\u0551\7\'\2\2\u0550\u0552\5\u011c\u008e\2\u0551\u0550\3\2\2\2\u0552\u0553"+
+ "\3\2\2\2\u0553\u0551\3\2\2\2\u0553\u0554\3\2\2\2\u0554\u0117\3\2\2\2\u0555"+
+ "\u0557\5\u011e\u008f\2\u0556\u0555\3\2\2\2\u0557\u0558\3\2\2\2\u0558\u0556"+
+ "\3\2\2\2\u0558\u0559\3\2\2\2\u0559\u0119\3\2\2\2\u055a\u055c\7&\2\2\u055b"+
+ "\u055d\5\u0120\u0090\2\u055c\u055b\3\2\2\2\u055d\u055e\3\2\2\2\u055e\u055c"+
+ "\3\2\2\2\u055e\u055f\3\2\2\2\u055f\u011b\3\2\2\2\u0560\u0561\t\13\2\2"+
+ "\u0561\u011d\3\2\2\2\u0562\u0563\t\f\2\2\u0563\u011f\3\2\2\2\u0564\u0565"+
+ "\t\r\2\2\u0565\u0121\3\2\2\2\u0566\u056a\7)\2\2\u0567\u0568\7^\2\2\u0568"+
+ "\u056b\t\6\2\2\u0569\u056b\n\7\2\2\u056a\u0567\3\2\2\2\u056a\u0569\3\2"+
+ "\2\2\u056b\u056c\3\2\2\2\u056c\u056d\7)\2\2\u056d\u0123\3\2\2\2\u056e"+
+ "\u0570\5\u0126\u0093\2\u056f\u0571\t\22\2\2\u0570\u056f\3\2\2\2\u0571"+
+ "\u0572\3\2\2\2\u0572\u0570\3\2\2\2\u0572\u0573\3\2\2\2\u0573\u0125\3\2"+
+ "\2\2\u0574\u0578\7#\2\2\u0575\u0577\5\u012c\u0096\2\u0576\u0575\3\2\2"+
+ "\2\u0577\u057a\3\2\2\2\u0578\u0576\3\2\2\2\u0578\u0579\3\2\2\2\u0579\u0127"+
+ "\3\2\2\2\u057a\u0578\3\2\2\2\u057b\u057f\5\u012a\u0095\2\u057c\u057e\5"+
+ "\u012c\u0096\2\u057d\u057c\3\2\2\2\u057e\u0581\3\2\2\2\u057f\u057d\3\2"+
+ "\2\2\u057f\u0580\3\2\2\2\u0580\u0129\3\2\2\2\u0581\u057f\3\2\2\2\u0582"+
+ "\u0583\t\16\2\2\u0583\u012b\3\2\2\2\u0584\u0585\t\17\2\2\u0585\u012d\3"+
+ "\2\2\2\u0586\u0588\t\20\2\2\u0587\u0586\3\2\2\2\u0588\u0589\3\2\2\2\u0589"+
+ "\u0587\3\2\2\2\u0589\u058a\3\2\2\2\u058a\u058b\3\2\2\2\u058b\u058c\b\u0097"+
+ "\7\2\u058c\u012f\3\2\2\2\u058d\u058e\7\61\2\2\u058e\u058f\7\61\2\2\u058f"+
+ "\u0593\3\2\2\2\u0590\u0592\n\21\2\2\u0591\u0590\3\2\2\2\u0592\u0595\3"+
+ "\2\2\2\u0593\u0591\3\2\2\2\u0593\u0594\3\2\2\2\u0594\u0596\3\2\2\2\u0595"+
+ "\u0593\3\2\2\2\u0596\u0597\b\u0098\b\2\u0597\u0131\3\2\2\2\u0598\u0599"+
+ "\7\61\2\2\u0599\u059a\7,\2\2\u059a\u059e\3\2\2\2\u059b\u059d\13\2\2\2"+
+ "\u059c\u059b\3\2\2\2\u059d\u05a0\3\2\2\2\u059e\u059f\3\2\2\2\u059e\u059c"+
+ "\3\2\2\2\u059f\u05a1\3\2\2\2\u05a0\u059e\3\2\2\2\u05a1\u05a2\7,\2\2\u05a2"+
+ "\u05a3\7\61\2\2\u05a3\u05a4\3\2\2\2\u05a4\u05a5\b\u0099\b\2\u05a5\u0133"+
+ "\3\2\2\2;\2\3\u019d\u026e\u0315\u033c\u0347\u034f\u0359\u035b\u0360\u0364"+
+ "\u0366\u0369\u0371\u0377\u037c\u0383\u0388\u038f\u0394\u039b\u03a2\u03a7"+
+ "\u03ae\u03b3\u03b8\u03bf\u03c5\u03c7\u03cc\u03d3\u03d8\u03e4\u03f0\u03fa"+
+ "\u0405\u04f1\u051d\u0522\u0528\u052f\u0534\u053b\u0541\u0548\u054d\u0553"+
+ "\u0558\u055e\u056a\u0572\u0578\u057f\u0589\u0593\u059e\13\3\2\2\3&\3\3"+
+ "K\4\3]\5\3k\6\2\3\2\2\4\2\3\u0083\7\3\u0084\b";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4
index 9cf570df4..50ae80833 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4
@@ -66,8 +66,13 @@ declVariableList
;
declVariableInit
- : NAME ('=' expr)? #declVariableInitExpr
- | NAME '=' declKasm #declVariableInitKasm
+ : declVariable ('=' expr)? #declVariableInitExpr
+ | declVariable '=' declKasm #declVariableInitKasm
+ ;
+
+declVariable
+ : NAME #declVariableName
+ | declVariable BRACKET_BEGIN (expr)? BRACKET_END #declVariableArray
;
declFunction
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
index 6551fc67d..c9a5df8ff 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
@@ -27,45 +27,45 @@ public class KickCParser extends Parser {
GREATER_THAN_EQUAL=32, GREATER_THAN=33, LOGIC_AND=34, LOGIC_OR=35, ASSIGN=36,
ASSIGN_COMPOUND=37, IMPORT=38, TYPEDEF=39, PRAGMA=40, RESERVE=41, PC=42,
TARGET=43, LINK=44, CPU=45, CODESEG=46, DATASEG=47, ENCODING=48, CONST=49,
- EXTERN=50, EXPORT=51, ALIGN=52, INLINE=53, VOLATILE=54, INTERRUPT=55,
- REGISTER=56, ADDRESS=57, ADDRESS_ZEROPAGE=58, ADDRESS_MAINMEM=59, FORM_SSA=60,
- FORM_MA=61, CALLING=62, CALLINGCONVENTION=63, VARMODEL=64, IF=65, ELSE=66,
- WHILE=67, DO=68, FOR=69, SWITCH=70, RETURN=71, BREAK=72, CONTINUE=73,
- ASM=74, DEFAULT=75, CASE=76, STRUCT=77, ENUM=78, SIZEOF=79, TYPEID=80,
- KICKASM=81, RESOURCE=82, USES=83, CLOBBERS=84, BYTES=85, CYCLES=86, LOGIC_NOT=87,
- SIGNEDNESS=88, SIMPLETYPE=89, BOOLEAN=90, KICKASM_BODY=91, STRING=92,
- CHAR=93, NUMBER=94, NUMFLOAT=95, BINFLOAT=96, DECFLOAT=97, HEXFLOAT=98,
- NUMINT=99, BININTEGER=100, DECINTEGER=101, HEXINTEGER=102, NAME=103, WS=104,
- COMMENT_LINE=105, COMMENT_BLOCK=106, ASM_BYTE=107, ASM_MNEMONIC=108, ASM_IMM=109,
- ASM_COLON=110, ASM_COMMA=111, ASM_PAR_BEGIN=112, ASM_PAR_END=113, ASM_BRACKET_BEGIN=114,
- ASM_BRACKET_END=115, ASM_DOT=116, ASM_SHIFT_LEFT=117, ASM_SHIFT_RIGHT=118,
- ASM_PLUS=119, ASM_MINUS=120, ASM_LESS_THAN=121, ASM_GREATER_THAN=122,
- ASM_MULTIPLY=123, ASM_DIVIDE=124, ASM_CURLY_BEGIN=125, ASM_CURLY_END=126,
- ASM_NUMBER=127, ASM_NUMFLOAT=128, ASM_BINFLOAT=129, ASM_DECFLOAT=130,
- ASM_HEXFLOAT=131, ASM_NUMINT=132, ASM_BININTEGER=133, ASM_DECINTEGER=134,
- ASM_HEXINTEGER=135, ASM_CHAR=136, ASM_MULTI_REL=137, ASM_MULTI_NAME=138,
- ASM_NAME=139, ASM_WS=140, ASM_COMMENT_LINE=141, ASM_COMMENT_BLOCK=142,
- STATIC=143;
+ EXTERN=50, EXPORT=51, ALIGN=52, INLINE=53, VOLATILE=54, STATIC=55, INTERRUPT=56,
+ REGISTER=57, ADDRESS=58, ADDRESS_ZEROPAGE=59, ADDRESS_MAINMEM=60, FORM_SSA=61,
+ FORM_MA=62, CALLING=63, CALLINGCONVENTION=64, VARMODEL=65, IF=66, ELSE=67,
+ WHILE=68, DO=69, FOR=70, SWITCH=71, RETURN=72, BREAK=73, CONTINUE=74,
+ ASM=75, DEFAULT=76, CASE=77, STRUCT=78, ENUM=79, SIZEOF=80, TYPEID=81,
+ KICKASM=82, RESOURCE=83, USES=84, CLOBBERS=85, BYTES=86, CYCLES=87, LOGIC_NOT=88,
+ SIGNEDNESS=89, SIMPLETYPE=90, BOOLEAN=91, KICKASM_BODY=92, STRING=93,
+ CHAR=94, NUMBER=95, NUMFLOAT=96, BINFLOAT=97, DECFLOAT=98, HEXFLOAT=99,
+ NUMINT=100, BININTEGER=101, DECINTEGER=102, HEXINTEGER=103, NAME=104,
+ WS=105, COMMENT_LINE=106, COMMENT_BLOCK=107, ASM_BYTE=108, ASM_MNEMONIC=109,
+ ASM_IMM=110, ASM_COLON=111, ASM_COMMA=112, ASM_PAR_BEGIN=113, ASM_PAR_END=114,
+ ASM_BRACKET_BEGIN=115, ASM_BRACKET_END=116, ASM_DOT=117, ASM_SHIFT_LEFT=118,
+ ASM_SHIFT_RIGHT=119, ASM_PLUS=120, ASM_MINUS=121, ASM_LESS_THAN=122, ASM_GREATER_THAN=123,
+ ASM_MULTIPLY=124, ASM_DIVIDE=125, ASM_CURLY_BEGIN=126, ASM_CURLY_END=127,
+ ASM_NUMBER=128, ASM_NUMFLOAT=129, ASM_BINFLOAT=130, ASM_DECFLOAT=131,
+ ASM_HEXFLOAT=132, ASM_NUMINT=133, ASM_BININTEGER=134, ASM_DECINTEGER=135,
+ ASM_HEXINTEGER=136, ASM_CHAR=137, ASM_MULTI_REL=138, ASM_MULTI_NAME=139,
+ ASM_NAME=140, ASM_WS=141, ASM_COMMENT_LINE=142, ASM_COMMENT_BLOCK=143;
public static final int
RULE_file = 0, RULE_asmFile = 1, RULE_declSeq = 2, RULE_declOrImport = 3,
RULE_importDecl = 4, RULE_decl = 5, RULE_typeDef = 6, RULE_declTypes = 7,
RULE_declVariables = 8, RULE_declVariableList = 9, RULE_declVariableInit = 10,
- RULE_declFunction = 11, RULE_parameterListDecl = 12, RULE_parameterDecl = 13,
- RULE_globalDirective = 14, RULE_directive = 15, RULE_stmtSeq = 16, RULE_stmt = 17,
- RULE_switchCases = 18, RULE_switchCase = 19, RULE_forLoop = 20, RULE_forClassicInit = 21,
- RULE_typeDecl = 22, RULE_structRef = 23, RULE_structDef = 24, RULE_structMembers = 25,
- RULE_enumRef = 26, RULE_enumDef = 27, RULE_enumMemberList = 28, RULE_enumMember = 29,
- RULE_commaExpr = 30, RULE_expr = 31, RULE_parameterList = 32, RULE_declKasm = 33,
- RULE_asmDirectives = 34, RULE_asmDirective = 35, RULE_asmLines = 36, RULE_asmLine = 37,
- RULE_asmLabel = 38, RULE_asmInstruction = 39, RULE_asmBytes = 40, RULE_asmParamMode = 41,
- RULE_asmExpr = 42;
+ RULE_declVariable = 11, RULE_declFunction = 12, RULE_parameterListDecl = 13,
+ RULE_parameterDecl = 14, RULE_globalDirective = 15, RULE_directive = 16,
+ RULE_stmtSeq = 17, RULE_stmt = 18, RULE_switchCases = 19, RULE_switchCase = 20,
+ RULE_forLoop = 21, RULE_forClassicInit = 22, RULE_typeDecl = 23, RULE_structRef = 24,
+ RULE_structDef = 25, RULE_structMembers = 26, RULE_enumRef = 27, RULE_enumDef = 28,
+ RULE_enumMemberList = 29, RULE_enumMember = 30, RULE_commaExpr = 31, RULE_expr = 32,
+ RULE_parameterList = 33, RULE_declKasm = 34, RULE_asmDirectives = 35,
+ RULE_asmDirective = 36, RULE_asmLines = 37, RULE_asmLine = 38, RULE_asmLabel = 39,
+ RULE_asmInstruction = 40, RULE_asmBytes = 41, RULE_asmParamMode = 42,
+ RULE_asmExpr = 43;
private static String[] makeRuleNames() {
return new String[] {
"file", "asmFile", "declSeq", "declOrImport", "importDecl", "decl", "typeDef",
"declTypes", "declVariables", "declVariableList", "declVariableInit",
- "declFunction", "parameterListDecl", "parameterDecl", "globalDirective",
- "directive", "stmtSeq", "stmt", "switchCases", "switchCase", "forLoop",
- "forClassicInit", "typeDecl", "structRef", "structDef", "structMembers",
+ "declVariable", "declFunction", "parameterListDecl", "parameterDecl",
+ "globalDirective", "directive", "stmtSeq", "stmt", "switchCases", "switchCase",
+ "forLoop", "forClassicInit", "typeDecl", "structRef", "structDef", "structMembers",
"enumRef", "enumDef", "enumMemberList", "enumMember", "commaExpr", "expr",
"parameterList", "declKasm", "asmDirectives", "asmDirective", "asmLines",
"asmLine", "asmLabel", "asmInstruction", "asmBytes", "asmParamMode",
@@ -82,13 +82,14 @@ public class KickCParser extends Parser {
null, "'&&'", "'||'", "'='", null, "'import'", "'typedef'", "'#pragma'",
"'reserve'", "'pc'", "'target'", "'link'", "'cpu'", "'code_seg'", "'data_seg'",
"'encoding'", "'const'", "'extern'", "'export'", "'align'", "'inline'",
- "'volatile'", "'interrupt'", "'register'", "'__address'", "'__zp'", "'__mem'",
- "'__ssa'", "'__ma'", "'calling'", null, "'var_model'", "'if'", "'else'",
- "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", "'continue'",
- "'asm'", "'default'", "'case'", "'struct'", "'enum'", "'sizeof'", "'typeid'",
- "'kickasm'", "'resource'", "'uses'", "'clobbers'", "'bytes'", "'cycles'",
- "'!'", null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, "'.byte'", null, "'#'"
+ "'volatile'", "'static'", "'interrupt'", "'register'", "'__address'",
+ "'__zp'", "'__mem'", "'__ssa'", "'__ma'", "'calling'", null, "'var_model'",
+ "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'",
+ "'break'", "'continue'", "'asm'", "'default'", "'case'", "'struct'",
+ "'enum'", "'sizeof'", "'typeid'", "'kickasm'", "'resource'", "'uses'",
+ "'clobbers'", "'bytes'", "'cycles'", "'!'", null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, "'.byte'", null, "'#'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -102,7 +103,7 @@ public class KickCParser extends Parser {
"GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND",
"IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU",
"CODESEG", "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN",
- "INLINE", "VOLATILE", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE",
+ "INLINE", "VOLATILE", "STATIC", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE",
"ADDRESS_MAINMEM", "FORM_SSA", "FORM_MA", "CALLING", "CALLINGCONVENTION",
"VARMODEL", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK",
"CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID",
@@ -116,8 +117,7 @@ public class KickCParser extends Parser {
"ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER",
"ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT",
"ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_CHAR", "ASM_MULTI_REL",
- "ASM_MULTI_NAME", "ASM_NAME", "ASM_WS", "ASM_COMMENT_LINE", "ASM_COMMENT_BLOCK",
- "STATIC"
+ "ASM_MULTI_NAME", "ASM_NAME", "ASM_WS", "ASM_COMMENT_LINE", "ASM_COMMENT_BLOCK"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -210,9 +210,9 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(86);
+ setState(88);
declSeq();
- setState(87);
+ setState(89);
match(EOF);
}
}
@@ -257,9 +257,9 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(89);
+ setState(91);
asmLines();
- setState(90);
+ setState(92);
match(EOF);
}
}
@@ -307,17 +307,17 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(95);
+ setState(97);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << IMPORT) | (1L << TYPEDEF) | (1L << PRAGMA) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (KICKASM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << IMPORT) | (1L << TYPEDEF) | (1L << PRAGMA) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (KICKASM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) {
{
{
- setState(92);
+ setState(94);
declOrImport();
}
}
- setState(97);
+ setState(99);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -364,7 +364,7 @@ public class KickCParser extends Parser {
DeclOrImportContext _localctx = new DeclOrImportContext(_ctx, getState());
enterRule(_localctx, 6, RULE_declOrImport);
try {
- setState(100);
+ setState(102);
_errHandler.sync(this);
switch (_input.LA(1)) {
case TYPEDEFNAME:
@@ -378,6 +378,7 @@ public class KickCParser extends Parser {
case ALIGN:
case INLINE:
case VOLATILE:
+ case STATIC:
case INTERRUPT:
case REGISTER:
case ADDRESS:
@@ -391,17 +392,16 @@ public class KickCParser extends Parser {
case KICKASM:
case SIGNEDNESS:
case SIMPLETYPE:
- case STATIC:
enterOuterAlt(_localctx, 1);
{
- setState(98);
+ setState(100);
decl();
}
break;
case IMPORT:
enterOuterAlt(_localctx, 2);
{
- setState(99);
+ setState(101);
importDecl();
}
break;
@@ -448,9 +448,9 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(102);
+ setState(104);
match(IMPORT);
- setState(103);
+ setState(105);
match(STRING);
}
}
@@ -511,63 +511,63 @@ public class KickCParser extends Parser {
DeclContext _localctx = new DeclContext(_ctx, getState());
enterRule(_localctx, 10, RULE_decl);
try {
- setState(120);
+ setState(122);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(105);
+ setState(107);
declVariables();
- setState(106);
+ setState(108);
match(SEMICOLON);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(108);
+ setState(110);
structDef();
- setState(109);
+ setState(111);
match(SEMICOLON);
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(111);
+ setState(113);
enumDef();
- setState(112);
+ setState(114);
match(SEMICOLON);
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(114);
+ setState(116);
declFunction();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(115);
+ setState(117);
declKasm();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(116);
+ setState(118);
globalDirective();
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(117);
+ setState(119);
typeDef();
- setState(118);
+ setState(120);
match(SEMICOLON);
}
break;
@@ -616,11 +616,11 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(122);
- match(TYPEDEF);
- setState(123);
- typeDecl(0);
setState(124);
+ match(TYPEDEF);
+ setState(125);
+ typeDecl(0);
+ setState(126);
((TypeDefContext)_localctx).NAME = match(NAME);
cParser.addTypedef((((TypeDefContext)_localctx).NAME!=null?((TypeDefContext)_localctx).NAME.getText():null));
}
@@ -672,33 +672,33 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(130);
+ setState(132);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) {
+ while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) {
{
{
- setState(127);
+ setState(129);
directive();
}
}
- setState(132);
+ setState(134);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(133);
+ setState(135);
typeDecl(0);
- setState(137);
+ setState(139);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) {
+ while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) {
{
{
- setState(134);
+ setState(136);
directive();
}
}
- setState(139);
+ setState(141);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -747,9 +747,9 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(140);
+ setState(142);
declTypes();
- setState(141);
+ setState(143);
declVariableList(0);
}
}
@@ -807,11 +807,11 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 1);
{
{
- setState(144);
+ setState(146);
declVariableInit();
}
_ctx.stop = _input.LT(-1);
- setState(151);
+ setState(153);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,5,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -822,16 +822,16 @@ public class KickCParser extends Parser {
{
_localctx = new DeclVariableListContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_declVariableList);
- setState(146);
- if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(147);
- match(COMMA);
setState(148);
+ if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+ setState(149);
+ match(COMMA);
+ setState(150);
declVariableInit();
}
}
}
- setState(153);
+ setState(155);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,5,_ctx);
}
@@ -860,7 +860,9 @@ public class KickCParser extends Parser {
}
}
public static class DeclVariableInitKasmContext extends DeclVariableInitContext {
- public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); }
+ public DeclVariableContext declVariable() {
+ return getRuleContext(DeclVariableContext.class,0);
+ }
public TerminalNode ASSIGN() { return getToken(KickCParser.ASSIGN, 0); }
public DeclKasmContext declKasm() {
return getRuleContext(DeclKasmContext.class,0);
@@ -881,7 +883,9 @@ public class KickCParser extends Parser {
}
}
public static class DeclVariableInitExprContext extends DeclVariableInitContext {
- public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); }
+ public DeclVariableContext declVariable() {
+ return getRuleContext(DeclVariableContext.class,0);
+ }
public TerminalNode ASSIGN() { return getToken(KickCParser.ASSIGN, 0); }
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
@@ -906,23 +910,23 @@ public class KickCParser extends Parser {
DeclVariableInitContext _localctx = new DeclVariableInitContext(_ctx, getState());
enterRule(_localctx, 20, RULE_declVariableInit);
try {
- setState(162);
+ setState(165);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) {
case 1:
_localctx = new DeclVariableInitExprContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(154);
- match(NAME);
- setState(157);
+ setState(156);
+ declVariable(0);
+ setState(159);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
case 1:
{
- setState(155);
+ setState(157);
match(ASSIGN);
- setState(156);
+ setState(158);
expr(0);
}
break;
@@ -933,11 +937,11 @@ public class KickCParser extends Parser {
_localctx = new DeclVariableInitKasmContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(159);
- match(NAME);
- setState(160);
- match(ASSIGN);
setState(161);
+ declVariable(0);
+ setState(162);
+ match(ASSIGN);
+ setState(163);
declKasm();
}
break;
@@ -954,6 +958,131 @@ public class KickCParser extends Parser {
return _localctx;
}
+ public static class DeclVariableContext extends ParserRuleContext {
+ public DeclVariableContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_declVariable; }
+
+ public DeclVariableContext() { }
+ public void copyFrom(DeclVariableContext ctx) {
+ super.copyFrom(ctx);
+ }
+ }
+ public static class DeclVariableArrayContext extends DeclVariableContext {
+ public DeclVariableContext declVariable() {
+ return getRuleContext(DeclVariableContext.class,0);
+ }
+ public TerminalNode BRACKET_BEGIN() { return getToken(KickCParser.BRACKET_BEGIN, 0); }
+ public TerminalNode BRACKET_END() { return getToken(KickCParser.BRACKET_END, 0); }
+ public ExprContext expr() {
+ return getRuleContext(ExprContext.class,0);
+ }
+ public DeclVariableArrayContext(DeclVariableContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterDeclVariableArray(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitDeclVariableArray(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor extends T>)visitor).visitDeclVariableArray(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class DeclVariableNameContext extends DeclVariableContext {
+ public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); }
+ public DeclVariableNameContext(DeclVariableContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterDeclVariableName(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitDeclVariableName(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor extends T>)visitor).visitDeclVariableName(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final DeclVariableContext declVariable() throws RecognitionException {
+ return declVariable(0);
+ }
+
+ private DeclVariableContext declVariable(int _p) throws RecognitionException {
+ ParserRuleContext _parentctx = _ctx;
+ int _parentState = getState();
+ DeclVariableContext _localctx = new DeclVariableContext(_ctx, _parentState);
+ DeclVariableContext _prevctx = _localctx;
+ int _startState = 22;
+ enterRecursionRule(_localctx, 22, RULE_declVariable, _p);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ {
+ _localctx = new DeclVariableNameContext(_localctx);
+ _ctx = _localctx;
+ _prevctx = _localctx;
+
+ setState(168);
+ match(NAME);
+ }
+ _ctx.stop = _input.LT(-1);
+ setState(178);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,9,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ if ( _parseListeners!=null ) triggerExitRuleEvent();
+ _prevctx = _localctx;
+ {
+ {
+ _localctx = new DeclVariableArrayContext(new DeclVariableContext(_parentctx, _parentState));
+ pushNewRecursionContext(_localctx, _startState, RULE_declVariable);
+ setState(170);
+ if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+ setState(171);
+ match(BRACKET_BEGIN);
+ setState(173);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) {
+ {
+ setState(172);
+ expr(0);
+ }
+ }
+
+ setState(175);
+ match(BRACKET_END);
+ }
+ }
+ }
+ setState(180);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,9,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ unrollRecursionContexts(_parentctx);
+ }
+ return _localctx;
+ }
+
public static class DeclFunctionContext extends ParserRuleContext {
public DeclTypesContext declTypes() {
return getRuleContext(DeclTypesContext.class,0);
@@ -990,42 +1119,42 @@ public class KickCParser extends Parser {
public final DeclFunctionContext declFunction() throws RecognitionException {
DeclFunctionContext _localctx = new DeclFunctionContext(_ctx, getState());
- enterRule(_localctx, 22, RULE_declFunction);
+ enterRule(_localctx, 24, RULE_declFunction);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(164);
+ setState(181);
declTypes();
- setState(165);
+ setState(182);
match(NAME);
- setState(166);
+ setState(183);
match(PAR_BEGIN);
- setState(168);
+ setState(185);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) {
{
- setState(167);
+ setState(184);
parameterListDecl();
}
}
- setState(170);
+ setState(187);
match(PAR_END);
- setState(171);
+ setState(188);
match(CURLY_BEGIN);
- setState(173);
+ setState(190);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) {
{
- setState(172);
+ setState(189);
stmtSeq();
}
}
- setState(175);
+ setState(192);
match(CURLY_END);
}
}
@@ -1072,26 +1201,26 @@ public class KickCParser extends Parser {
public final ParameterListDeclContext parameterListDecl() throws RecognitionException {
ParameterListDeclContext _localctx = new ParameterListDeclContext(_ctx, getState());
- enterRule(_localctx, 24, RULE_parameterListDecl);
+ enterRule(_localctx, 26, RULE_parameterListDecl);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(177);
+ setState(194);
parameterDecl();
- setState(182);
+ setState(199);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(178);
+ setState(195);
match(COMMA);
- setState(179);
+ setState(196);
parameterDecl();
}
}
- setState(184);
+ setState(201);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1159,18 +1288,18 @@ public class KickCParser extends Parser {
public final ParameterDeclContext parameterDecl() throws RecognitionException {
ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_parameterDecl);
+ enterRule(_localctx, 28, RULE_parameterDecl);
try {
- setState(189);
+ setState(206);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) {
case 1:
_localctx = new ParameterDeclTypeContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(185);
+ setState(202);
declTypes();
- setState(186);
+ setState(203);
match(NAME);
}
break;
@@ -1178,7 +1307,7 @@ public class KickCParser extends Parser {
_localctx = new ParameterDeclVoidContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(188);
+ setState(205);
match(SIMPLETYPE);
}
break;
@@ -1433,43 +1562,43 @@ public class KickCParser extends Parser {
public final GlobalDirectiveContext globalDirective() throws RecognitionException {
GlobalDirectiveContext _localctx = new GlobalDirectiveContext(_ctx, getState());
- enterRule(_localctx, 28, RULE_globalDirective);
+ enterRule(_localctx, 30, RULE_globalDirective);
int _la;
try {
- setState(265);
+ setState(282);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
case 1:
_localctx = new GlobalDirectiveReserveContext(_localctx);
enterOuterAlt(_localctx, 1);
{
{
- setState(191);
+ setState(208);
match(PRAGMA);
- setState(192);
+ setState(209);
match(RESERVE);
}
- setState(194);
+ setState(211);
match(PAR_BEGIN);
- setState(195);
+ setState(212);
match(NUMBER);
- setState(200);
+ setState(217);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(196);
+ setState(213);
match(COMMA);
- setState(197);
+ setState(214);
match(NUMBER);
}
}
- setState(202);
+ setState(219);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(203);
+ setState(220);
match(PAR_END);
}
break;
@@ -1478,16 +1607,16 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 2);
{
{
- setState(204);
+ setState(221);
match(PRAGMA);
- setState(205);
+ setState(222);
match(PC);
}
- setState(207);
+ setState(224);
match(PAR_BEGIN);
- setState(208);
+ setState(225);
match(NUMBER);
- setState(209);
+ setState(226);
match(PAR_END);
}
break;
@@ -1496,16 +1625,16 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 3);
{
{
- setState(210);
+ setState(227);
match(PRAGMA);
- setState(211);
+ setState(228);
match(TARGET);
}
- setState(213);
+ setState(230);
match(PAR_BEGIN);
- setState(214);
+ setState(231);
match(NAME);
- setState(215);
+ setState(232);
match(PAR_END);
}
break;
@@ -1514,16 +1643,16 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 4);
{
{
- setState(216);
+ setState(233);
match(PRAGMA);
- setState(217);
+ setState(234);
match(CPU);
}
- setState(219);
+ setState(236);
match(PAR_BEGIN);
- setState(220);
+ setState(237);
match(NAME);
- setState(221);
+ setState(238);
match(PAR_END);
}
break;
@@ -1532,16 +1661,16 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 5);
{
{
- setState(222);
+ setState(239);
match(PRAGMA);
- setState(223);
+ setState(240);
match(LINK);
}
- setState(225);
+ setState(242);
match(PAR_BEGIN);
- setState(226);
+ setState(243);
match(STRING);
- setState(227);
+ setState(244);
match(PAR_END);
}
break;
@@ -1550,16 +1679,16 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 6);
{
{
- setState(228);
+ setState(245);
match(PRAGMA);
- setState(229);
+ setState(246);
match(CODESEG);
}
- setState(231);
+ setState(248);
match(PAR_BEGIN);
- setState(232);
+ setState(249);
match(NAME);
- setState(233);
+ setState(250);
match(PAR_END);
}
break;
@@ -1568,16 +1697,16 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 7);
{
{
- setState(234);
+ setState(251);
match(PRAGMA);
- setState(235);
+ setState(252);
match(DATASEG);
}
- setState(237);
+ setState(254);
match(PAR_BEGIN);
- setState(238);
+ setState(255);
match(NAME);
- setState(239);
+ setState(256);
match(PAR_END);
}
break;
@@ -1586,16 +1715,16 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 8);
{
{
- setState(240);
+ setState(257);
match(PRAGMA);
- setState(241);
+ setState(258);
match(ENCODING);
}
- setState(243);
+ setState(260);
match(PAR_BEGIN);
- setState(244);
+ setState(261);
match(NAME);
- setState(245);
+ setState(262);
match(PAR_END);
}
break;
@@ -1604,16 +1733,16 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 9);
{
{
- setState(246);
+ setState(263);
match(PRAGMA);
- setState(247);
+ setState(264);
match(CALLING);
}
- setState(249);
+ setState(266);
match(PAR_BEGIN);
- setState(250);
+ setState(267);
match(CALLINGCONVENTION);
- setState(251);
+ setState(268);
match(PAR_END);
}
break;
@@ -1622,32 +1751,32 @@ public class KickCParser extends Parser {
enterOuterAlt(_localctx, 10);
{
{
- setState(252);
+ setState(269);
match(PRAGMA);
- setState(253);
+ setState(270);
match(VARMODEL);
}
- setState(255);
+ setState(272);
match(PAR_BEGIN);
- setState(256);
+ setState(273);
match(NAME);
- setState(261);
+ setState(278);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(257);
+ setState(274);
match(COMMA);
- setState(258);
+ setState(275);
match(NAME);
}
}
- setState(263);
+ setState(280);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(264);
+ setState(281);
match(PAR_END);
}
break;
@@ -1972,17 +2101,17 @@ public class KickCParser extends Parser {
public final DirectiveContext directive() throws RecognitionException {
DirectiveContext _localctx = new DirectiveContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_directive);
+ enterRule(_localctx, 32, RULE_directive);
int _la;
try {
- setState(309);
+ setState(326);
_errHandler.sync(this);
switch (_input.LA(1)) {
case CONST:
_localctx = new DirectiveConstContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(267);
+ setState(284);
match(CONST);
}
break;
@@ -1990,13 +2119,13 @@ public class KickCParser extends Parser {
_localctx = new DirectiveAlignContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(268);
+ setState(285);
match(ALIGN);
- setState(269);
+ setState(286);
match(PAR_BEGIN);
- setState(270);
+ setState(287);
match(NUMBER);
- setState(271);
+ setState(288);
match(PAR_END);
}
break;
@@ -2004,20 +2133,20 @@ public class KickCParser extends Parser {
_localctx = new DirectiveRegisterContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(272);
+ setState(289);
match(REGISTER);
- setState(276);
+ setState(293);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) {
case 1:
{
- setState(273);
+ setState(290);
match(PAR_BEGIN);
{
- setState(274);
+ setState(291);
match(NAME);
}
- setState(275);
+ setState(292);
match(PAR_END);
}
break;
@@ -2028,7 +2157,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveMemoryAreaZpContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(278);
+ setState(295);
match(ADDRESS_ZEROPAGE);
}
break;
@@ -2036,7 +2165,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveMemoryAreaMainContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(279);
+ setState(296);
match(ADDRESS_MAINMEM);
}
break;
@@ -2044,15 +2173,15 @@ public class KickCParser extends Parser {
_localctx = new DirectiveMemoryAreaAddressContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(280);
+ setState(297);
match(ADDRESS);
- setState(281);
+ setState(298);
match(PAR_BEGIN);
{
- setState(282);
+ setState(299);
match(NUMBER);
}
- setState(283);
+ setState(300);
match(PAR_END);
}
break;
@@ -2060,7 +2189,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveVolatileContext(_localctx);
enterOuterAlt(_localctx, 7);
{
- setState(284);
+ setState(301);
match(VOLATILE);
}
break;
@@ -2068,7 +2197,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveStaticContext(_localctx);
enterOuterAlt(_localctx, 8);
{
- setState(285);
+ setState(302);
match(STATIC);
}
break;
@@ -2076,7 +2205,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveFormSsaContext(_localctx);
enterOuterAlt(_localctx, 9);
{
- setState(286);
+ setState(303);
match(FORM_SSA);
}
break;
@@ -2084,7 +2213,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveFormMaContext(_localctx);
enterOuterAlt(_localctx, 10);
{
- setState(287);
+ setState(304);
match(FORM_MA);
}
break;
@@ -2092,7 +2221,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveExternContext(_localctx);
enterOuterAlt(_localctx, 11);
{
- setState(288);
+ setState(305);
match(EXTERN);
}
break;
@@ -2100,7 +2229,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveExportContext(_localctx);
enterOuterAlt(_localctx, 12);
{
- setState(289);
+ setState(306);
match(EXPORT);
}
break;
@@ -2108,7 +2237,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveInlineContext(_localctx);
enterOuterAlt(_localctx, 13);
{
- setState(290);
+ setState(307);
match(INLINE);
}
break;
@@ -2116,18 +2245,18 @@ public class KickCParser extends Parser {
_localctx = new DirectiveInterruptContext(_localctx);
enterOuterAlt(_localctx, 14);
{
- setState(291);
+ setState(308);
match(INTERRUPT);
- setState(295);
+ setState(312);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) {
case 1:
{
- setState(292);
+ setState(309);
match(PAR_BEGIN);
- setState(293);
+ setState(310);
match(NAME);
- setState(294);
+ setState(311);
match(PAR_END);
}
break;
@@ -2138,29 +2267,29 @@ public class KickCParser extends Parser {
_localctx = new DirectiveReserveZpContext(_localctx);
enterOuterAlt(_localctx, 15);
{
- setState(297);
+ setState(314);
match(RESERVE);
- setState(298);
+ setState(315);
match(PAR_BEGIN);
- setState(299);
+ setState(316);
match(NUMBER);
- setState(304);
+ setState(321);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(300);
+ setState(317);
match(COMMA);
- setState(301);
+ setState(318);
match(NUMBER);
}
}
- setState(306);
+ setState(323);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(307);
+ setState(324);
match(PAR_END);
}
break;
@@ -2168,7 +2297,7 @@ public class KickCParser extends Parser {
_localctx = new DirectiveCallingConventionContext(_localctx);
enterOuterAlt(_localctx, 16);
{
- setState(308);
+ setState(325);
match(CALLINGCONVENTION);
}
break;
@@ -2215,25 +2344,25 @@ public class KickCParser extends Parser {
public final StmtSeqContext stmtSeq() throws RecognitionException {
StmtSeqContext _localctx = new StmtSeqContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_stmtSeq);
+ enterRule(_localctx, 34, RULE_stmtSeq);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(312);
+ setState(329);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(311);
+ setState(328);
stmt();
}
}
- setState(314);
+ setState(331);
_errHandler.sync(this);
_la = _input.LA(1);
- } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC );
+ } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0) );
}
}
catch (RecognitionException re) {
@@ -2574,19 +2703,19 @@ public class KickCParser extends Parser {
public final StmtContext stmt() throws RecognitionException {
StmtContext _localctx = new StmtContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_stmt);
+ enterRule(_localctx, 36, RULE_stmt);
int _la;
try {
- setState(400);
+ setState(417);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) {
case 1:
_localctx = new StmtDeclVarContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(316);
+ setState(333);
declVariables();
- setState(317);
+ setState(334);
match(SEMICOLON);
}
break;
@@ -2594,19 +2723,19 @@ public class KickCParser extends Parser {
_localctx = new StmtBlockContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(319);
+ setState(336);
match(CURLY_BEGIN);
- setState(321);
+ setState(338);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) {
{
- setState(320);
+ setState(337);
stmtSeq();
}
}
- setState(323);
+ setState(340);
match(CURLY_END);
}
break;
@@ -2614,9 +2743,9 @@ public class KickCParser extends Parser {
_localctx = new StmtExprContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(324);
+ setState(341);
commaExpr(0);
- setState(325);
+ setState(342);
match(SEMICOLON);
}
break;
@@ -2624,24 +2753,24 @@ public class KickCParser extends Parser {
_localctx = new StmtIfElseContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(327);
+ setState(344);
match(IF);
- setState(328);
+ setState(345);
match(PAR_BEGIN);
- setState(329);
+ setState(346);
commaExpr(0);
- setState(330);
+ setState(347);
match(PAR_END);
- setState(331);
+ setState(348);
stmt();
- setState(334);
+ setState(351);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
case 1:
{
- setState(332);
+ setState(349);
match(ELSE);
- setState(333);
+ setState(350);
stmt();
}
break;
@@ -2652,29 +2781,29 @@ public class KickCParser extends Parser {
_localctx = new StmtWhileContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(339);
+ setState(356);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) {
+ while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) {
{
{
- setState(336);
+ setState(353);
directive();
}
}
- setState(341);
+ setState(358);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(342);
+ setState(359);
match(WHILE);
- setState(343);
+ setState(360);
match(PAR_BEGIN);
- setState(344);
+ setState(361);
commaExpr(0);
- setState(345);
+ setState(362);
match(PAR_END);
- setState(346);
+ setState(363);
stmt();
}
break;
@@ -2682,33 +2811,33 @@ public class KickCParser extends Parser {
_localctx = new StmtDoWhileContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(351);
+ setState(368);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) {
+ while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) {
{
{
- setState(348);
+ setState(365);
directive();
}
}
- setState(353);
+ setState(370);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(354);
+ setState(371);
match(DO);
- setState(355);
+ setState(372);
stmt();
- setState(356);
+ setState(373);
match(WHILE);
- setState(357);
+ setState(374);
match(PAR_BEGIN);
- setState(358);
+ setState(375);
commaExpr(0);
- setState(359);
+ setState(376);
match(PAR_END);
- setState(360);
+ setState(377);
match(SEMICOLON);
}
break;
@@ -2716,29 +2845,29 @@ public class KickCParser extends Parser {
_localctx = new StmtForContext(_localctx);
enterOuterAlt(_localctx, 7);
{
- setState(365);
+ setState(382);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) {
+ while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) {
{
{
- setState(362);
+ setState(379);
directive();
}
}
- setState(367);
+ setState(384);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(368);
+ setState(385);
match(FOR);
- setState(369);
+ setState(386);
match(PAR_BEGIN);
- setState(370);
+ setState(387);
forLoop();
- setState(371);
+ setState(388);
match(PAR_END);
- setState(372);
+ setState(389);
stmt();
}
break;
@@ -2746,19 +2875,19 @@ public class KickCParser extends Parser {
_localctx = new StmtSwitchContext(_localctx);
enterOuterAlt(_localctx, 8);
{
- setState(374);
+ setState(391);
match(SWITCH);
- setState(375);
+ setState(392);
match(PAR_BEGIN);
- setState(376);
+ setState(393);
commaExpr(0);
- setState(377);
+ setState(394);
match(PAR_END);
- setState(378);
+ setState(395);
match(CURLY_BEGIN);
- setState(379);
+ setState(396);
switchCases();
- setState(380);
+ setState(397);
match(CURLY_END);
}
break;
@@ -2766,19 +2895,19 @@ public class KickCParser extends Parser {
_localctx = new StmtReturnContext(_localctx);
enterOuterAlt(_localctx, 9);
{
- setState(382);
+ setState(399);
match(RETURN);
- setState(384);
+ setState(401);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (SIZEOF - 79)) | (1L << (TYPEID - 79)) | (1L << (LOGIC_NOT - 79)) | (1L << (BOOLEAN - 79)) | (1L << (STRING - 79)) | (1L << (CHAR - 79)) | (1L << (NUMBER - 79)) | (1L << (NAME - 79)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) {
{
- setState(383);
+ setState(400);
commaExpr(0);
}
}
- setState(386);
+ setState(403);
match(SEMICOLON);
}
break;
@@ -2786,9 +2915,9 @@ public class KickCParser extends Parser {
_localctx = new StmtBreakContext(_localctx);
enterOuterAlt(_localctx, 10);
{
- setState(387);
+ setState(404);
match(BREAK);
- setState(388);
+ setState(405);
match(SEMICOLON);
}
break;
@@ -2796,9 +2925,9 @@ public class KickCParser extends Parser {
_localctx = new StmtContinueContext(_localctx);
enterOuterAlt(_localctx, 11);
{
- setState(389);
+ setState(406);
match(CONTINUE);
- setState(390);
+ setState(407);
match(SEMICOLON);
}
break;
@@ -2806,23 +2935,23 @@ public class KickCParser extends Parser {
_localctx = new StmtAsmContext(_localctx);
enterOuterAlt(_localctx, 12);
{
- setState(391);
+ setState(408);
match(ASM);
- setState(393);
+ setState(410);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==PAR_BEGIN) {
{
- setState(392);
+ setState(409);
asmDirectives();
}
}
- setState(395);
+ setState(412);
match(CURLY_BEGIN);
- setState(396);
+ setState(413);
asmLines();
- setState(397);
+ setState(414);
match(ASM_CURLY_END);
}
break;
@@ -2830,7 +2959,7 @@ public class KickCParser extends Parser {
_localctx = new StmtDeclKasmContext(_localctx);
enterOuterAlt(_localctx, 13);
{
- setState(399);
+ setState(416);
declKasm();
}
break;
@@ -2880,40 +3009,40 @@ public class KickCParser extends Parser {
public final SwitchCasesContext switchCases() throws RecognitionException {
SwitchCasesContext _localctx = new SwitchCasesContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_switchCases);
+ enterRule(_localctx, 38, RULE_switchCases);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(403);
+ setState(420);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(402);
+ setState(419);
switchCase();
}
}
- setState(405);
+ setState(422);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==CASE );
- setState(412);
+ setState(429);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==DEFAULT) {
{
- setState(407);
+ setState(424);
match(DEFAULT);
- setState(408);
+ setState(425);
match(COLON);
- setState(410);
+ setState(427);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) {
{
- setState(409);
+ setState(426);
stmtSeq();
}
}
@@ -2964,23 +3093,23 @@ public class KickCParser extends Parser {
public final SwitchCaseContext switchCase() throws RecognitionException {
SwitchCaseContext _localctx = new SwitchCaseContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_switchCase);
+ enterRule(_localctx, 40, RULE_switchCase);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(414);
+ setState(431);
match(CASE);
- setState(415);
+ setState(432);
expr(0);
- setState(416);
+ setState(433);
match(COLON);
- setState(418);
+ setState(435);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) {
{
- setState(417);
+ setState(434);
stmtSeq();
}
}
@@ -3069,30 +3198,30 @@ public class KickCParser extends Parser {
public final ForLoopContext forLoop() throws RecognitionException {
ForLoopContext _localctx = new ForLoopContext(_ctx, getState());
- enterRule(_localctx, 40, RULE_forLoop);
+ enterRule(_localctx, 42, RULE_forLoop);
int _la;
try {
- setState(436);
+ setState(453);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
case 1:
_localctx = new ForClassicContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(420);
+ setState(437);
forClassicInit();
- setState(421);
+ setState(438);
match(SEMICOLON);
- setState(422);
+ setState(439);
commaExpr(0);
- setState(423);
+ setState(440);
match(SEMICOLON);
- setState(425);
+ setState(442);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (SIZEOF - 79)) | (1L << (TYPEID - 79)) | (1L << (LOGIC_NOT - 79)) | (1L << (BOOLEAN - 79)) | (1L << (STRING - 79)) | (1L << (CHAR - 79)) | (1L << (NUMBER - 79)) | (1L << (NAME - 79)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) {
{
- setState(424);
+ setState(441);
commaExpr(0);
}
}
@@ -3103,25 +3232,25 @@ public class KickCParser extends Parser {
_localctx = new ForRangeContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(428);
+ setState(445);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) {
{
- setState(427);
+ setState(444);
declTypes();
}
}
- setState(430);
+ setState(447);
match(NAME);
- setState(431);
+ setState(448);
match(COLON);
- setState(432);
+ setState(449);
expr(0);
- setState(433);
+ setState(450);
match(RANGE);
- setState(434);
+ setState(451);
expr(0);
}
break;
@@ -3190,22 +3319,22 @@ public class KickCParser extends Parser {
public final ForClassicInitContext forClassicInit() throws RecognitionException {
ForClassicInitContext _localctx = new ForClassicInitContext(_ctx, getState());
- enterRule(_localctx, 42, RULE_forClassicInit);
+ enterRule(_localctx, 44, RULE_forClassicInit);
int _la;
try {
- setState(442);
+ setState(459);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
case 1:
_localctx = new ForClassicInitDeclContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(439);
+ setState(456);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) {
{
- setState(438);
+ setState(455);
declVariables();
}
}
@@ -3216,7 +3345,7 @@ public class KickCParser extends Parser {
_localctx = new ForClassicInitExprContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(441);
+ setState(458);
commaExpr(0);
}
break;
@@ -3468,27 +3597,27 @@ public class KickCParser extends Parser {
int _parentState = getState();
TypeDeclContext _localctx = new TypeDeclContext(_ctx, _parentState);
TypeDeclContext _prevctx = _localctx;
- int _startState = 44;
- enterRecursionRule(_localctx, 44, RULE_typeDecl, _p);
+ int _startState = 46;
+ enterRecursionRule(_localctx, 46, RULE_typeDecl, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(459);
+ setState(476);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) {
case 1:
{
_localctx = new TypeParContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(445);
+ setState(462);
match(PAR_BEGIN);
- setState(446);
+ setState(463);
typeDecl(0);
- setState(447);
+ setState(464);
match(PAR_END);
}
break;
@@ -3497,7 +3626,7 @@ public class KickCParser extends Parser {
_localctx = new TypeSimpleContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(449);
+ setState(466);
match(SIMPLETYPE);
}
break;
@@ -3506,14 +3635,14 @@ public class KickCParser extends Parser {
_localctx = new TypeSignedSimpleContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(450);
+ setState(467);
match(SIGNEDNESS);
- setState(452);
+ setState(469);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) {
case 1:
{
- setState(451);
+ setState(468);
match(SIMPLETYPE);
}
break;
@@ -3525,7 +3654,7 @@ public class KickCParser extends Parser {
_localctx = new TypeStructDefContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(454);
+ setState(471);
structDef();
}
break;
@@ -3534,7 +3663,7 @@ public class KickCParser extends Parser {
_localctx = new TypeStructRefContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(455);
+ setState(472);
structRef();
}
break;
@@ -3543,7 +3672,7 @@ public class KickCParser extends Parser {
_localctx = new TypeEnumDefContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(456);
+ setState(473);
enumDef();
}
break;
@@ -3552,7 +3681,7 @@ public class KickCParser extends Parser {
_localctx = new TypeEnumRefContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(457);
+ setState(474);
enumRef();
}
break;
@@ -3561,30 +3690,30 @@ public class KickCParser extends Parser {
_localctx = new TypeNamedRefContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(458);
+ setState(475);
match(TYPEDEFNAME);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(474);
+ setState(491);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,41,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,43,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(472);
+ setState(489);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) {
case 1:
{
_localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_typeDecl);
- setState(461);
+ setState(478);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(462);
+ setState(479);
match(ASTERISK);
}
break;
@@ -3592,21 +3721,21 @@ public class KickCParser extends Parser {
{
_localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_typeDecl);
- setState(463);
+ setState(480);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(464);
+ setState(481);
match(BRACKET_BEGIN);
- setState(466);
+ setState(483);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (SIZEOF - 79)) | (1L << (TYPEID - 79)) | (1L << (LOGIC_NOT - 79)) | (1L << (BOOLEAN - 79)) | (1L << (STRING - 79)) | (1L << (CHAR - 79)) | (1L << (NUMBER - 79)) | (1L << (NAME - 79)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) {
{
- setState(465);
+ setState(482);
expr(0);
}
}
- setState(468);
+ setState(485);
match(BRACKET_END);
}
break;
@@ -3614,20 +3743,20 @@ public class KickCParser extends Parser {
{
_localctx = new TypeProcedureContext(new TypeDeclContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_typeDecl);
- setState(469);
+ setState(486);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(470);
+ setState(487);
match(PAR_BEGIN);
- setState(471);
+ setState(488);
match(PAR_END);
}
break;
}
}
}
- setState(476);
+ setState(493);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,41,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,43,_ctx);
}
}
}
@@ -3666,13 +3795,13 @@ public class KickCParser extends Parser {
public final StructRefContext structRef() throws RecognitionException {
StructRefContext _localctx = new StructRefContext(_ctx, getState());
- enterRule(_localctx, 46, RULE_structRef);
+ enterRule(_localctx, 48, RULE_structRef);
try {
enterOuterAlt(_localctx, 1);
{
- setState(477);
+ setState(494);
match(STRUCT);
- setState(478);
+ setState(495);
match(NAME);
}
}
@@ -3719,40 +3848,40 @@ public class KickCParser extends Parser {
public final StructDefContext structDef() throws RecognitionException {
StructDefContext _localctx = new StructDefContext(_ctx, getState());
- enterRule(_localctx, 48, RULE_structDef);
+ enterRule(_localctx, 50, RULE_structDef);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(480);
+ setState(497);
match(STRUCT);
- setState(482);
+ setState(499);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==NAME) {
{
- setState(481);
+ setState(498);
match(NAME);
}
}
- setState(484);
+ setState(501);
match(CURLY_BEGIN);
- setState(486);
+ setState(503);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(485);
+ setState(502);
structMembers();
}
}
- setState(488);
+ setState(505);
_errHandler.sync(this);
_la = _input.LA(1);
- } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC );
- setState(490);
+ } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0) );
+ setState(507);
match(CURLY_END);
}
}
@@ -3793,13 +3922,13 @@ public class KickCParser extends Parser {
public final StructMembersContext structMembers() throws RecognitionException {
StructMembersContext _localctx = new StructMembersContext(_ctx, getState());
- enterRule(_localctx, 50, RULE_structMembers);
+ enterRule(_localctx, 52, RULE_structMembers);
try {
enterOuterAlt(_localctx, 1);
{
- setState(492);
+ setState(509);
declVariables();
- setState(493);
+ setState(510);
match(SEMICOLON);
}
}
@@ -3838,13 +3967,13 @@ public class KickCParser extends Parser {
public final EnumRefContext enumRef() throws RecognitionException {
EnumRefContext _localctx = new EnumRefContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_enumRef);
+ enterRule(_localctx, 54, RULE_enumRef);
try {
enterOuterAlt(_localctx, 1);
{
- setState(495);
+ setState(512);
match(ENUM);
- setState(496);
+ setState(513);
match(NAME);
}
}
@@ -3888,28 +4017,28 @@ public class KickCParser extends Parser {
public final EnumDefContext enumDef() throws RecognitionException {
EnumDefContext _localctx = new EnumDefContext(_ctx, getState());
- enterRule(_localctx, 54, RULE_enumDef);
+ enterRule(_localctx, 56, RULE_enumDef);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(498);
+ setState(515);
match(ENUM);
- setState(500);
+ setState(517);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==NAME) {
{
- setState(499);
+ setState(516);
match(NAME);
}
}
- setState(502);
+ setState(519);
match(CURLY_BEGIN);
- setState(503);
+ setState(520);
enumMemberList(0);
- setState(504);
+ setState(521);
match(CURLY_END);
}
}
@@ -3960,20 +4089,20 @@ public class KickCParser extends Parser {
int _parentState = getState();
EnumMemberListContext _localctx = new EnumMemberListContext(_ctx, _parentState);
EnumMemberListContext _prevctx = _localctx;
- int _startState = 56;
- enterRecursionRule(_localctx, 56, RULE_enumMemberList, _p);
+ int _startState = 58;
+ enterRecursionRule(_localctx, 58, RULE_enumMemberList, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(507);
+ setState(524);
enumMember();
}
_ctx.stop = _input.LT(-1);
- setState(514);
+ setState(531);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,45,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,47,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -3982,18 +4111,18 @@ public class KickCParser extends Parser {
{
_localctx = new EnumMemberListContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_enumMemberList);
- setState(509);
+ setState(526);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(510);
+ setState(527);
match(COMMA);
- setState(511);
+ setState(528);
enumMember();
}
}
}
- setState(516);
+ setState(533);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,45,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,47,_ctx);
}
}
}
@@ -4035,20 +4164,20 @@ public class KickCParser extends Parser {
public final EnumMemberContext enumMember() throws RecognitionException {
EnumMemberContext _localctx = new EnumMemberContext(_ctx, getState());
- enterRule(_localctx, 58, RULE_enumMember);
+ enterRule(_localctx, 60, RULE_enumMember);
try {
enterOuterAlt(_localctx, 1);
{
- setState(517);
+ setState(534);
match(NAME);
- setState(520);
+ setState(537);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) {
case 1:
{
- setState(518);
+ setState(535);
match(ASSIGN);
- setState(519);
+ setState(536);
expr(0);
}
break;
@@ -4129,8 +4258,8 @@ public class KickCParser extends Parser {
int _parentState = getState();
CommaExprContext _localctx = new CommaExprContext(_ctx, _parentState);
CommaExprContext _prevctx = _localctx;
- int _startState = 60;
- enterRecursionRule(_localctx, 60, RULE_commaExpr, _p);
+ int _startState = 62;
+ enterRecursionRule(_localctx, 62, RULE_commaExpr, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
@@ -4140,13 +4269,13 @@ public class KickCParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(523);
+ setState(540);
expr(0);
}
_ctx.stop = _input.LT(-1);
- setState(530);
+ setState(547);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,47,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,49,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -4155,18 +4284,18 @@ public class KickCParser extends Parser {
{
_localctx = new CommaSimpleContext(new CommaExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_commaExpr);
- setState(525);
+ setState(542);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(526);
+ setState(543);
match(COMMA);
- setState(527);
+ setState(544);
expr(0);
}
}
}
- setState(532);
+ setState(549);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,47,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,49,_ctx);
}
}
}
@@ -4701,27 +4830,27 @@ public class KickCParser extends Parser {
int _parentState = getState();
ExprContext _localctx = new ExprContext(_ctx, _parentState);
ExprContext _prevctx = _localctx;
- int _startState = 62;
- enterRecursionRule(_localctx, 62, RULE_expr, _p);
+ int _startState = 64;
+ enterRecursionRule(_localctx, 64, RULE_expr, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(587);
+ setState(604);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) {
case 1:
{
_localctx = new ExprParContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(534);
+ setState(551);
match(PAR_BEGIN);
- setState(535);
+ setState(552);
commaExpr(0);
- setState(536);
+ setState(553);
match(PAR_END);
}
break;
@@ -4730,27 +4859,27 @@ public class KickCParser extends Parser {
_localctx = new ExprSizeOfContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(538);
+ setState(555);
match(SIZEOF);
- setState(539);
+ setState(556);
match(PAR_BEGIN);
- setState(542);
+ setState(559);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) {
case 1:
{
- setState(540);
+ setState(557);
expr(0);
}
break;
case 2:
{
- setState(541);
+ setState(558);
typeDecl(0);
}
break;
}
- setState(544);
+ setState(561);
match(PAR_END);
}
break;
@@ -4759,27 +4888,27 @@ public class KickCParser extends Parser {
_localctx = new ExprTypeIdContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(546);
+ setState(563);
match(TYPEID);
- setState(547);
+ setState(564);
match(PAR_BEGIN);
- setState(550);
+ setState(567);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) {
case 1:
{
- setState(548);
+ setState(565);
expr(0);
}
break;
case 2:
{
- setState(549);
+ setState(566);
typeDecl(0);
}
break;
}
- setState(552);
+ setState(569);
match(PAR_END);
}
break;
@@ -4788,13 +4917,13 @@ public class KickCParser extends Parser {
_localctx = new ExprCastContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(554);
+ setState(571);
match(PAR_BEGIN);
- setState(555);
+ setState(572);
typeDecl(0);
- setState(556);
+ setState(573);
match(PAR_END);
- setState(557);
+ setState(574);
expr(24);
}
break;
@@ -4803,7 +4932,7 @@ public class KickCParser extends Parser {
_localctx = new ExprPreModContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(559);
+ setState(576);
_la = _input.LA(1);
if ( !(_la==INC || _la==DEC) ) {
_errHandler.recoverInline(this);
@@ -4813,7 +4942,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(560);
+ setState(577);
expr(23);
}
break;
@@ -4822,9 +4951,9 @@ public class KickCParser extends Parser {
_localctx = new ExprPtrContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(561);
+ setState(578);
match(ASTERISK);
- setState(562);
+ setState(579);
expr(21);
}
break;
@@ -4833,7 +4962,7 @@ public class KickCParser extends Parser {
_localctx = new ExprUnaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(563);
+ setState(580);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << MINUS) | (1L << AND) | (1L << BIT_NOT))) != 0) || _la==LOGIC_NOT) ) {
_errHandler.recoverInline(this);
@@ -4843,7 +4972,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(564);
+ setState(581);
expr(20);
}
break;
@@ -4852,7 +4981,7 @@ public class KickCParser extends Parser {
_localctx = new ExprUnaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(565);
+ setState(582);
_la = _input.LA(1);
if ( !(_la==LESS_THAN || _la==GREATER_THAN) ) {
_errHandler.recoverInline(this);
@@ -4862,7 +4991,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(566);
+ setState(583);
expr(16);
}
break;
@@ -4871,27 +5000,27 @@ public class KickCParser extends Parser {
_localctx = new InitListContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(567);
+ setState(584);
match(CURLY_BEGIN);
- setState(568);
+ setState(585);
expr(0);
- setState(573);
+ setState(590);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(569);
+ setState(586);
match(COMMA);
- setState(570);
+ setState(587);
expr(0);
}
}
- setState(575);
+ setState(592);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(576);
+ setState(593);
match(CURLY_END);
}
break;
@@ -4900,7 +5029,7 @@ public class KickCParser extends Parser {
_localctx = new ExprIdContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(578);
+ setState(595);
match(NAME);
}
break;
@@ -4909,7 +5038,7 @@ public class KickCParser extends Parser {
_localctx = new ExprNumberContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(579);
+ setState(596);
match(NUMBER);
}
break;
@@ -4918,7 +5047,7 @@ public class KickCParser extends Parser {
_localctx = new ExprStringContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(581);
+ setState(598);
_errHandler.sync(this);
_alt = 1;
do {
@@ -4926,7 +5055,7 @@ public class KickCParser extends Parser {
case 1:
{
{
- setState(580);
+ setState(597);
match(STRING);
}
}
@@ -4934,9 +5063,9 @@ public class KickCParser extends Parser {
default:
throw new NoViableAltException(this);
}
- setState(583);
+ setState(600);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,51,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,53,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
}
break;
@@ -4945,7 +5074,7 @@ public class KickCParser extends Parser {
_localctx = new ExprCharContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(585);
+ setState(602);
match(CHAR);
}
break;
@@ -4954,30 +5083,30 @@ public class KickCParser extends Parser {
_localctx = new ExprBoolContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(586);
+ setState(603);
match(BOOLEAN);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(649);
+ setState(666);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,55,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,57,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(647);
+ setState(664);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) {
case 1:
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(589);
+ setState(606);
if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
- setState(590);
+ setState(607);
_la = _input.LA(1);
if ( !(_la==SHIFT_LEFT || _la==SHIFT_RIGHT) ) {
_errHandler.recoverInline(this);
@@ -4987,7 +5116,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(591);
+ setState(608);
expr(20);
}
break;
@@ -4995,9 +5124,9 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(592);
+ setState(609);
if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
- setState(593);
+ setState(610);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ASTERISK) | (1L << DIVIDE) | (1L << MODULO))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -5007,7 +5136,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(594);
+ setState(611);
expr(19);
}
break;
@@ -5015,9 +5144,9 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(595);
+ setState(612);
if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
- setState(596);
+ setState(613);
_la = _input.LA(1);
if ( !(_la==PLUS || _la==MINUS) ) {
_errHandler.recoverInline(this);
@@ -5027,7 +5156,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(597);
+ setState(614);
expr(18);
}
break;
@@ -5035,9 +5164,9 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(598);
+ setState(615);
if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
- setState(599);
+ setState(616);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << EQUAL) | (1L << NOT_EQUAL) | (1L << LESS_THAN) | (1L << LESS_THAN_EQUAL) | (1L << GREATER_THAN_EQUAL) | (1L << GREATER_THAN))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -5047,7 +5176,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(600);
+ setState(617);
expr(16);
}
break;
@@ -5055,13 +5184,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(601);
+ setState(618);
if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
{
- setState(602);
+ setState(619);
match(AND);
}
- setState(603);
+ setState(620);
expr(15);
}
break;
@@ -5069,13 +5198,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(604);
+ setState(621);
if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
{
- setState(605);
+ setState(622);
match(BIT_XOR);
}
- setState(606);
+ setState(623);
expr(14);
}
break;
@@ -5083,13 +5212,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(607);
+ setState(624);
if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
{
- setState(608);
+ setState(625);
match(BIT_OR);
}
- setState(609);
+ setState(626);
expr(13);
}
break;
@@ -5097,13 +5226,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(610);
+ setState(627);
if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
{
- setState(611);
+ setState(628);
match(LOGIC_AND);
}
- setState(612);
+ setState(629);
expr(12);
}
break;
@@ -5111,13 +5240,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(613);
+ setState(630);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
{
- setState(614);
+ setState(631);
match(LOGIC_OR);
}
- setState(615);
+ setState(632);
expr(11);
}
break;
@@ -5125,15 +5254,15 @@ public class KickCParser extends Parser {
{
_localctx = new ExprTernaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(616);
+ setState(633);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(617);
+ setState(634);
match(CONDITION);
- setState(618);
+ setState(635);
expr(0);
- setState(619);
+ setState(636);
match(COLON);
- setState(620);
+ setState(637);
expr(10);
}
break;
@@ -5141,11 +5270,11 @@ public class KickCParser extends Parser {
{
_localctx = new ExprAssignmentContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(622);
+ setState(639);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(623);
+ setState(640);
match(ASSIGN);
- setState(624);
+ setState(641);
expr(8);
}
break;
@@ -5153,11 +5282,11 @@ public class KickCParser extends Parser {
{
_localctx = new ExprAssignmentCompoundContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(625);
+ setState(642);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(626);
+ setState(643);
match(ASSIGN_COMPOUND);
- setState(627);
+ setState(644);
expr(7);
}
break;
@@ -5165,11 +5294,11 @@ public class KickCParser extends Parser {
{
_localctx = new ExprDotContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(628);
+ setState(645);
if (!(precpred(_ctx, 30))) throw new FailedPredicateException(this, "precpred(_ctx, 30)");
- setState(629);
+ setState(646);
match(DOT);
- setState(630);
+ setState(647);
match(NAME);
}
break;
@@ -5177,11 +5306,11 @@ public class KickCParser extends Parser {
{
_localctx = new ExprArrowContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(631);
+ setState(648);
if (!(precpred(_ctx, 29))) throw new FailedPredicateException(this, "precpred(_ctx, 29)");
- setState(632);
+ setState(649);
match(ARROW);
- setState(633);
+ setState(650);
match(NAME);
}
break;
@@ -5189,21 +5318,21 @@ public class KickCParser extends Parser {
{
_localctx = new ExprCallContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(634);
+ setState(651);
if (!(precpred(_ctx, 28))) throw new FailedPredicateException(this, "precpred(_ctx, 28)");
- setState(635);
+ setState(652);
match(PAR_BEGIN);
- setState(637);
+ setState(654);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (SIZEOF - 79)) | (1L << (TYPEID - 79)) | (1L << (LOGIC_NOT - 79)) | (1L << (BOOLEAN - 79)) | (1L << (STRING - 79)) | (1L << (CHAR - 79)) | (1L << (NUMBER - 79)) | (1L << (NAME - 79)))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) {
{
- setState(636);
+ setState(653);
parameterList();
}
}
- setState(639);
+ setState(656);
match(PAR_END);
}
break;
@@ -5211,13 +5340,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(640);
+ setState(657);
if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)");
- setState(641);
+ setState(658);
match(BRACKET_BEGIN);
- setState(642);
+ setState(659);
commaExpr(0);
- setState(643);
+ setState(660);
match(BRACKET_END);
}
break;
@@ -5225,9 +5354,9 @@ public class KickCParser extends Parser {
{
_localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(645);
+ setState(662);
if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)");
- setState(646);
+ setState(663);
_la = _input.LA(1);
if ( !(_la==INC || _la==DEC) ) {
_errHandler.recoverInline(this);
@@ -5242,9 +5371,9 @@ public class KickCParser extends Parser {
}
}
}
- setState(651);
+ setState(668);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,55,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,57,_ctx);
}
}
}
@@ -5291,26 +5420,26 @@ public class KickCParser extends Parser {
public final ParameterListContext parameterList() throws RecognitionException {
ParameterListContext _localctx = new ParameterListContext(_ctx, getState());
- enterRule(_localctx, 64, RULE_parameterList);
+ enterRule(_localctx, 66, RULE_parameterList);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(652);
+ setState(669);
expr(0);
- setState(657);
+ setState(674);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(653);
+ setState(670);
match(COMMA);
- setState(654);
+ setState(671);
expr(0);
}
}
- setState(659);
+ setState(676);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -5354,24 +5483,24 @@ public class KickCParser extends Parser {
public final DeclKasmContext declKasm() throws RecognitionException {
DeclKasmContext _localctx = new DeclKasmContext(_ctx, getState());
- enterRule(_localctx, 66, RULE_declKasm);
+ enterRule(_localctx, 68, RULE_declKasm);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(660);
+ setState(677);
match(KICKASM);
- setState(662);
+ setState(679);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==PAR_BEGIN) {
{
- setState(661);
+ setState(678);
asmDirectives();
}
}
- setState(664);
+ setState(681);
match(KICKASM_BODY);
}
}
@@ -5420,32 +5549,32 @@ public class KickCParser extends Parser {
public final AsmDirectivesContext asmDirectives() throws RecognitionException {
AsmDirectivesContext _localctx = new AsmDirectivesContext(_ctx, getState());
- enterRule(_localctx, 68, RULE_asmDirectives);
+ enterRule(_localctx, 70, RULE_asmDirectives);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(666);
+ setState(683);
match(PAR_BEGIN);
- setState(667);
+ setState(684);
asmDirective();
- setState(672);
+ setState(689);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(668);
+ setState(685);
match(COMMA);
- setState(669);
+ setState(686);
asmDirective();
}
}
- setState(674);
+ setState(691);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(675);
+ setState(692);
match(PAR_END);
}
}
@@ -5589,18 +5718,18 @@ public class KickCParser extends Parser {
public final AsmDirectiveContext asmDirective() throws RecognitionException {
AsmDirectiveContext _localctx = new AsmDirectiveContext(_ctx, getState());
- enterRule(_localctx, 70, RULE_asmDirective);
+ enterRule(_localctx, 72, RULE_asmDirective);
try {
- setState(692);
+ setState(709);
_errHandler.sync(this);
switch (_input.LA(1)) {
case RESOURCE:
_localctx = new AsmDirectiveResourceContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(677);
+ setState(694);
match(RESOURCE);
- setState(678);
+ setState(695);
match(STRING);
}
break;
@@ -5608,9 +5737,9 @@ public class KickCParser extends Parser {
_localctx = new AsmDirectiveUsesContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(679);
+ setState(696);
match(USES);
- setState(680);
+ setState(697);
match(NAME);
}
break;
@@ -5618,9 +5747,9 @@ public class KickCParser extends Parser {
_localctx = new AsmDirectiveClobberContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(681);
+ setState(698);
match(CLOBBERS);
- setState(682);
+ setState(699);
match(STRING);
}
break;
@@ -5628,9 +5757,9 @@ public class KickCParser extends Parser {
_localctx = new AsmDirectiveBytesContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(683);
+ setState(700);
match(BYTES);
- setState(684);
+ setState(701);
expr(0);
}
break;
@@ -5638,9 +5767,9 @@ public class KickCParser extends Parser {
_localctx = new AsmDirectiveCyclesContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(685);
+ setState(702);
match(CYCLES);
- setState(686);
+ setState(703);
expr(0);
}
break;
@@ -5648,14 +5777,14 @@ public class KickCParser extends Parser {
_localctx = new AsmDirectiveAddressContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(687);
+ setState(704);
match(PC);
- setState(690);
+ setState(707);
_errHandler.sync(this);
switch (_input.LA(1)) {
case INLINE:
{
- setState(688);
+ setState(705);
match(INLINE);
}
break;
@@ -5679,7 +5808,7 @@ public class KickCParser extends Parser {
case NUMBER:
case NAME:
{
- setState(689);
+ setState(706);
expr(0);
}
break;
@@ -5731,22 +5860,22 @@ public class KickCParser extends Parser {
public final AsmLinesContext asmLines() throws RecognitionException {
AsmLinesContext _localctx = new AsmLinesContext(_ctx, getState());
- enterRule(_localctx, 72, RULE_asmLines);
+ enterRule(_localctx, 74, RULE_asmLines);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(697);
+ setState(714);
_errHandler.sync(this);
_la = _input.LA(1);
- while (((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (ASM_BYTE - 107)) | (1L << (ASM_MNEMONIC - 107)) | (1L << (ASM_MULTI_NAME - 107)) | (1L << (ASM_NAME - 107)))) != 0)) {
+ while (((((_la - 108)) & ~0x3f) == 0 && ((1L << (_la - 108)) & ((1L << (ASM_BYTE - 108)) | (1L << (ASM_MNEMONIC - 108)) | (1L << (ASM_MULTI_NAME - 108)) | (1L << (ASM_NAME - 108)))) != 0)) {
{
{
- setState(694);
+ setState(711);
asmLine();
}
}
- setState(699);
+ setState(716);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -5794,30 +5923,30 @@ public class KickCParser extends Parser {
public final AsmLineContext asmLine() throws RecognitionException {
AsmLineContext _localctx = new AsmLineContext(_ctx, getState());
- enterRule(_localctx, 74, RULE_asmLine);
+ enterRule(_localctx, 76, RULE_asmLine);
try {
- setState(703);
+ setState(720);
_errHandler.sync(this);
switch (_input.LA(1)) {
case ASM_MULTI_NAME:
case ASM_NAME:
enterOuterAlt(_localctx, 1);
{
- setState(700);
+ setState(717);
asmLabel();
}
break;
case ASM_MNEMONIC:
enterOuterAlt(_localctx, 2);
{
- setState(701);
+ setState(718);
asmInstruction();
}
break;
case ASM_BYTE:
enterOuterAlt(_localctx, 3);
{
- setState(702);
+ setState(719);
asmBytes();
}
break;
@@ -5886,18 +6015,18 @@ public class KickCParser extends Parser {
public final AsmLabelContext asmLabel() throws RecognitionException {
AsmLabelContext _localctx = new AsmLabelContext(_ctx, getState());
- enterRule(_localctx, 76, RULE_asmLabel);
+ enterRule(_localctx, 78, RULE_asmLabel);
try {
- setState(709);
+ setState(726);
_errHandler.sync(this);
switch (_input.LA(1)) {
case ASM_NAME:
_localctx = new AsmLabelNameContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(705);
+ setState(722);
match(ASM_NAME);
- setState(706);
+ setState(723);
match(ASM_COLON);
}
break;
@@ -5905,9 +6034,9 @@ public class KickCParser extends Parser {
_localctx = new AsmLabelMultiContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(707);
+ setState(724);
match(ASM_MULTI_NAME);
- setState(708);
+ setState(725);
match(ASM_COLON);
}
break;
@@ -5952,18 +6081,18 @@ public class KickCParser extends Parser {
public final AsmInstructionContext asmInstruction() throws RecognitionException {
AsmInstructionContext _localctx = new AsmInstructionContext(_ctx, getState());
- enterRule(_localctx, 78, RULE_asmInstruction);
+ enterRule(_localctx, 80, RULE_asmInstruction);
try {
enterOuterAlt(_localctx, 1);
{
- setState(711);
+ setState(728);
match(ASM_MNEMONIC);
- setState(713);
+ setState(730);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) {
case 1:
{
- setState(712);
+ setState(729);
asmParamMode();
}
break;
@@ -6014,28 +6143,28 @@ public class KickCParser extends Parser {
public final AsmBytesContext asmBytes() throws RecognitionException {
AsmBytesContext _localctx = new AsmBytesContext(_ctx, getState());
- enterRule(_localctx, 80, RULE_asmBytes);
+ enterRule(_localctx, 82, RULE_asmBytes);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(715);
+ setState(732);
match(ASM_BYTE);
- setState(716);
+ setState(733);
asmExpr(0);
- setState(721);
+ setState(738);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==ASM_COMMA) {
{
{
- setState(717);
+ setState(734);
match(ASM_COMMA);
- setState(718);
+ setState(735);
asmExpr(0);
}
}
- setState(723);
+ setState(740);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -6193,16 +6322,16 @@ public class KickCParser extends Parser {
public final AsmParamModeContext asmParamMode() throws RecognitionException {
AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState());
- enterRule(_localctx, 82, RULE_asmParamMode);
+ enterRule(_localctx, 84, RULE_asmParamMode);
try {
- setState(747);
+ setState(764);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) {
case 1:
_localctx = new AsmModeAbsContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(724);
+ setState(741);
asmExpr(0);
}
break;
@@ -6210,9 +6339,9 @@ public class KickCParser extends Parser {
_localctx = new AsmModeImmContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(725);
+ setState(742);
match(ASM_IMM);
- setState(726);
+ setState(743);
asmExpr(0);
}
break;
@@ -6220,11 +6349,11 @@ public class KickCParser extends Parser {
_localctx = new AsmModeAbsXYContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(727);
+ setState(744);
asmExpr(0);
- setState(728);
+ setState(745);
match(ASM_COMMA);
- setState(729);
+ setState(746);
match(ASM_NAME);
}
break;
@@ -6232,15 +6361,15 @@ public class KickCParser extends Parser {
_localctx = new AsmModeIndIdxXYContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(731);
+ setState(748);
match(ASM_PAR_BEGIN);
- setState(732);
+ setState(749);
asmExpr(0);
- setState(733);
+ setState(750);
match(ASM_PAR_END);
- setState(734);
+ setState(751);
match(ASM_COMMA);
- setState(735);
+ setState(752);
match(ASM_NAME);
}
break;
@@ -6248,15 +6377,15 @@ public class KickCParser extends Parser {
_localctx = new AsmModeIdxIndXYContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(737);
+ setState(754);
match(ASM_PAR_BEGIN);
- setState(738);
+ setState(755);
asmExpr(0);
- setState(739);
+ setState(756);
match(ASM_COMMA);
- setState(740);
+ setState(757);
match(ASM_NAME);
- setState(741);
+ setState(758);
match(ASM_PAR_END);
}
break;
@@ -6264,11 +6393,11 @@ public class KickCParser extends Parser {
_localctx = new AsmModeIndContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(743);
+ setState(760);
match(ASM_PAR_BEGIN);
- setState(744);
+ setState(761);
asmExpr(0);
- setState(745);
+ setState(762);
match(ASM_PAR_END);
}
break;
@@ -6466,14 +6595,14 @@ public class KickCParser extends Parser {
int _parentState = getState();
AsmExprContext _localctx = new AsmExprContext(_ctx, _parentState);
AsmExprContext _prevctx = _localctx;
- int _startState = 84;
- enterRecursionRule(_localctx, 84, RULE_asmExpr, _p);
+ int _startState = 86;
+ enterRecursionRule(_localctx, 86, RULE_asmExpr, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(763);
+ setState(780);
_errHandler.sync(this);
switch (_input.LA(1)) {
case ASM_BRACKET_BEGIN:
@@ -6482,11 +6611,11 @@ public class KickCParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(750);
+ setState(767);
match(ASM_BRACKET_BEGIN);
- setState(751);
+ setState(768);
asmExpr(0);
- setState(752);
+ setState(769);
match(ASM_BRACKET_END);
}
break;
@@ -6498,9 +6627,9 @@ public class KickCParser extends Parser {
_localctx = new AsmExprUnaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(754);
+ setState(771);
_la = _input.LA(1);
- if ( !(((((_la - 119)) & ~0x3f) == 0 && ((1L << (_la - 119)) & ((1L << (ASM_PLUS - 119)) | (1L << (ASM_MINUS - 119)) | (1L << (ASM_LESS_THAN - 119)) | (1L << (ASM_GREATER_THAN - 119)))) != 0)) ) {
+ if ( !(((((_la - 120)) & ~0x3f) == 0 && ((1L << (_la - 120)) & ((1L << (ASM_PLUS - 120)) | (1L << (ASM_MINUS - 120)) | (1L << (ASM_LESS_THAN - 120)) | (1L << (ASM_GREATER_THAN - 120)))) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -6508,7 +6637,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(755);
+ setState(772);
asmExpr(8);
}
break;
@@ -6517,7 +6646,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprLabelContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(756);
+ setState(773);
match(ASM_NAME);
}
break;
@@ -6526,7 +6655,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprLabelRelContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(757);
+ setState(774);
match(ASM_MULTI_REL);
}
break;
@@ -6535,11 +6664,11 @@ public class KickCParser extends Parser {
_localctx = new AsmExprReplaceContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(758);
+ setState(775);
match(ASM_CURLY_BEGIN);
- setState(759);
+ setState(776);
match(ASM_NAME);
- setState(760);
+ setState(777);
match(ASM_CURLY_END);
}
break;
@@ -6548,7 +6677,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprIntContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(761);
+ setState(778);
match(ASM_NUMBER);
}
break;
@@ -6557,7 +6686,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprCharContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(762);
+ setState(779);
match(ASM_CHAR);
}
break;
@@ -6565,28 +6694,28 @@ public class KickCParser extends Parser {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(779);
+ setState(796);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,69,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,71,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(777);
+ setState(794);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) {
case 1:
{
_localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_asmExpr);
- setState(765);
+ setState(782);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
{
- setState(766);
+ setState(783);
match(ASM_DOT);
}
- setState(767);
+ setState(784);
asmExpr(11);
}
break;
@@ -6594,9 +6723,9 @@ public class KickCParser extends Parser {
{
_localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_asmExpr);
- setState(768);
+ setState(785);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(769);
+ setState(786);
_la = _input.LA(1);
if ( !(_la==ASM_SHIFT_LEFT || _la==ASM_SHIFT_RIGHT) ) {
_errHandler.recoverInline(this);
@@ -6606,7 +6735,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(770);
+ setState(787);
asmExpr(10);
}
break;
@@ -6614,9 +6743,9 @@ public class KickCParser extends Parser {
{
_localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_asmExpr);
- setState(771);
+ setState(788);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(772);
+ setState(789);
_la = _input.LA(1);
if ( !(_la==ASM_MULTIPLY || _la==ASM_DIVIDE) ) {
_errHandler.recoverInline(this);
@@ -6626,7 +6755,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(773);
+ setState(790);
asmExpr(8);
}
break;
@@ -6634,9 +6763,9 @@ public class KickCParser extends Parser {
{
_localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_asmExpr);
- setState(774);
+ setState(791);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(775);
+ setState(792);
_la = _input.LA(1);
if ( !(_la==ASM_PLUS || _la==ASM_MINUS) ) {
_errHandler.recoverInline(this);
@@ -6646,16 +6775,16 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(776);
+ setState(793);
asmExpr(7);
}
break;
}
}
}
- setState(781);
+ setState(798);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,69,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,71,_ctx);
}
}
}
@@ -6674,15 +6803,17 @@ public class KickCParser extends Parser {
switch (ruleIndex) {
case 9:
return declVariableList_sempred((DeclVariableListContext)_localctx, predIndex);
- case 22:
+ case 11:
+ return declVariable_sempred((DeclVariableContext)_localctx, predIndex);
+ case 23:
return typeDecl_sempred((TypeDeclContext)_localctx, predIndex);
- case 28:
+ case 29:
return enumMemberList_sempred((EnumMemberListContext)_localctx, predIndex);
- case 30:
- return commaExpr_sempred((CommaExprContext)_localctx, predIndex);
case 31:
+ return commaExpr_sempred((CommaExprContext)_localctx, predIndex);
+ case 32:
return expr_sempred((ExprContext)_localctx, predIndex);
- case 42:
+ case 43:
return asmExpr_sempred((AsmExprContext)_localctx, predIndex);
}
return true;
@@ -6694,389 +6825,405 @@ public class KickCParser extends Parser {
}
return true;
}
- private boolean typeDecl_sempred(TypeDeclContext _localctx, int predIndex) {
+ private boolean declVariable_sempred(DeclVariableContext _localctx, int predIndex) {
switch (predIndex) {
case 1:
- return precpred(_ctx, 8);
+ return precpred(_ctx, 1);
+ }
+ return true;
+ }
+ private boolean typeDecl_sempred(TypeDeclContext _localctx, int predIndex) {
+ switch (predIndex) {
case 2:
- return precpred(_ctx, 7);
+ return precpred(_ctx, 8);
case 3:
+ return precpred(_ctx, 7);
+ case 4:
return precpred(_ctx, 6);
}
return true;
}
private boolean enumMemberList_sempred(EnumMemberListContext _localctx, int predIndex) {
switch (predIndex) {
- case 4:
+ case 5:
return precpred(_ctx, 1);
}
return true;
}
private boolean commaExpr_sempred(CommaExprContext _localctx, int predIndex) {
switch (predIndex) {
- case 5:
+ case 6:
return precpred(_ctx, 1);
}
return true;
}
private boolean expr_sempred(ExprContext _localctx, int predIndex) {
switch (predIndex) {
- case 6:
- return precpred(_ctx, 19);
case 7:
- return precpred(_ctx, 18);
+ return precpred(_ctx, 19);
case 8:
- return precpred(_ctx, 17);
+ return precpred(_ctx, 18);
case 9:
- return precpred(_ctx, 15);
+ return precpred(_ctx, 17);
case 10:
- return precpred(_ctx, 14);
+ return precpred(_ctx, 15);
case 11:
- return precpred(_ctx, 13);
+ return precpred(_ctx, 14);
case 12:
- return precpred(_ctx, 12);
+ return precpred(_ctx, 13);
case 13:
- return precpred(_ctx, 11);
+ return precpred(_ctx, 12);
case 14:
- return precpred(_ctx, 10);
+ return precpred(_ctx, 11);
case 15:
- return precpred(_ctx, 9);
+ return precpred(_ctx, 10);
case 16:
- return precpred(_ctx, 8);
+ return precpred(_ctx, 9);
case 17:
- return precpred(_ctx, 7);
+ return precpred(_ctx, 8);
case 18:
- return precpred(_ctx, 30);
+ return precpred(_ctx, 7);
case 19:
- return precpred(_ctx, 29);
+ return precpred(_ctx, 30);
case 20:
- return precpred(_ctx, 28);
+ return precpred(_ctx, 29);
case 21:
- return precpred(_ctx, 25);
+ return precpred(_ctx, 28);
case 22:
+ return precpred(_ctx, 25);
+ case 23:
return precpred(_ctx, 22);
}
return true;
}
private boolean asmExpr_sempred(AsmExprContext _localctx, int predIndex) {
switch (predIndex) {
- case 23:
- return precpred(_ctx, 10);
case 24:
- return precpred(_ctx, 9);
+ return precpred(_ctx, 10);
case 25:
- return precpred(_ctx, 7);
+ return precpred(_ctx, 9);
case 26:
+ return precpred(_ctx, 7);
+ case 27:
return precpred(_ctx, 6);
}
return true;
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0091\u0311\4\2\t"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0091\u0322\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
- ",\t,\3\2\3\2\3\2\3\3\3\3\3\3\3\4\7\4`\n\4\f\4\16\4c\13\4\3\5\3\5\5\5g"+
- "\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3"+
- "\7\3\7\5\7{\n\7\3\b\3\b\3\b\3\b\3\b\3\t\7\t\u0083\n\t\f\t\16\t\u0086\13"+
- "\t\3\t\3\t\7\t\u008a\n\t\f\t\16\t\u008d\13\t\3\n\3\n\3\n\3\13\3\13\3\13"+
- "\3\13\3\13\3\13\7\13\u0098\n\13\f\13\16\13\u009b\13\13\3\f\3\f\3\f\5\f"+
- "\u00a0\n\f\3\f\3\f\3\f\5\f\u00a5\n\f\3\r\3\r\3\r\3\r\5\r\u00ab\n\r\3\r"+
- "\3\r\3\r\5\r\u00b0\n\r\3\r\3\r\3\16\3\16\3\16\7\16\u00b7\n\16\f\16\16"+
- "\16\u00ba\13\16\3\17\3\17\3\17\3\17\5\17\u00c0\n\17\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\7\20\u00c9\n\20\f\20\16\20\u00cc\13\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0106\n\20"+
- "\f\20\16\20\u0109\13\20\3\20\5\20\u010c\n\20\3\21\3\21\3\21\3\21\3\21"+
- "\3\21\3\21\3\21\3\21\5\21\u0117\n\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
- "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u012a\n\21\3\21"+
- "\3\21\3\21\3\21\3\21\7\21\u0131\n\21\f\21\16\21\u0134\13\21\3\21\3\21"+
- "\5\21\u0138\n\21\3\22\6\22\u013b\n\22\r\22\16\22\u013c\3\23\3\23\3\23"+
- "\3\23\3\23\5\23\u0144\n\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+
- "\3\23\3\23\5\23\u0151\n\23\3\23\7\23\u0154\n\23\f\23\16\23\u0157\13\23"+
- "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\7\23\u0160\n\23\f\23\16\23\u0163\13"+
- "\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\7\23\u016e\n\23\f\23"+
- "\16\23\u0171\13\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3"+
- "\23\3\23\3\23\3\23\3\23\3\23\5\23\u0183\n\23\3\23\3\23\3\23\3\23\3\23"+
- "\3\23\3\23\5\23\u018c\n\23\3\23\3\23\3\23\3\23\3\23\5\23\u0193\n\23\3"+
- "\24\6\24\u0196\n\24\r\24\16\24\u0197\3\24\3\24\3\24\5\24\u019d\n\24\5"+
- "\24\u019f\n\24\3\25\3\25\3\25\3\25\5\25\u01a5\n\25\3\26\3\26\3\26\3\26"+
- "\3\26\5\26\u01ac\n\26\3\26\5\26\u01af\n\26\3\26\3\26\3\26\3\26\3\26\3"+
- "\26\5\26\u01b7\n\26\3\27\5\27\u01ba\n\27\3\27\5\27\u01bd\n\27\3\30\3\30"+
- "\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u01c7\n\30\3\30\3\30\3\30\3\30\3\30"+
- "\5\30\u01ce\n\30\3\30\3\30\3\30\3\30\3\30\5\30\u01d5\n\30\3\30\3\30\3"+
- "\30\3\30\7\30\u01db\n\30\f\30\16\30\u01de\13\30\3\31\3\31\3\31\3\32\3"+
- "\32\5\32\u01e5\n\32\3\32\3\32\6\32\u01e9\n\32\r\32\16\32\u01ea\3\32\3"+
- "\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\5\35\u01f7\n\35\3\35\3\35"+
- "\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\7\36\u0203\n\36\f\36\16\36\u0206"+
- "\13\36\3\37\3\37\3\37\5\37\u020b\n\37\3 \3 \3 \3 \3 \3 \7 \u0213\n \f"+
- " \16 \u0216\13 \3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u0221\n!\3!\3!\3!\3!\3!"+
- "\3!\5!\u0229\n!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!"+
- "\3!\7!\u023e\n!\f!\16!\u0241\13!\3!\3!\3!\3!\3!\6!\u0248\n!\r!\16!\u0249"+
- "\3!\3!\5!\u024e\n!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!"+
- "\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!"+
- "\3!\3!\3!\3!\3!\3!\3!\3!\5!\u0280\n!\3!\3!\3!\3!\3!\3!\3!\3!\7!\u028a"+
- "\n!\f!\16!\u028d\13!\3\"\3\"\3\"\7\"\u0292\n\"\f\"\16\"\u0295\13\"\3#"+
- "\3#\5#\u0299\n#\3#\3#\3$\3$\3$\3$\7$\u02a1\n$\f$\16$\u02a4\13$\3$\3$\3"+
- "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u02b5\n%\5%\u02b7\n%\3&\7&\u02ba"+
- "\n&\f&\16&\u02bd\13&\3\'\3\'\3\'\5\'\u02c2\n\'\3(\3(\3(\3(\5(\u02c8\n"+
- "(\3)\3)\5)\u02cc\n)\3*\3*\3*\3*\7*\u02d2\n*\f*\16*\u02d5\13*\3+\3+\3+"+
- "\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\5+\u02ee"+
- "\n+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u02fe\n,\3,\3,\3,\3,"+
- "\3,\3,\3,\3,\3,\3,\3,\3,\7,\u030c\n,\f,\16,\u030f\13,\3,\2\b\24.:>@V-"+
- "\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFH"+
- "JLNPRTV\2\r\3\2\26\27\5\2\21\22\30\31YY\4\2 ##\3\2\34\35\3\2\23\25\3"+
- "\2\21\22\3\2\36#\3\2y|\3\2wx\3\2}~\3\2yz\2\u0383\2X\3\2\2\2\4[\3\2\2\2"+
- "\6a\3\2\2\2\bf\3\2\2\2\nh\3\2\2\2\fz\3\2\2\2\16|\3\2\2\2\20\u0084\3\2"+
- "\2\2\22\u008e\3\2\2\2\24\u0091\3\2\2\2\26\u00a4\3\2\2\2\30\u00a6\3\2\2"+
- "\2\32\u00b3\3\2\2\2\34\u00bf\3\2\2\2\36\u010b\3\2\2\2 \u0137\3\2\2\2\""+
- "\u013a\3\2\2\2$\u0192\3\2\2\2&\u0195\3\2\2\2(\u01a0\3\2\2\2*\u01b6\3\2"+
- "\2\2,\u01bc\3\2\2\2.\u01cd\3\2\2\2\60\u01df\3\2\2\2\62\u01e2\3\2\2\2\64"+
- "\u01ee\3\2\2\2\66\u01f1\3\2\2\28\u01f4\3\2\2\2:\u01fc\3\2\2\2<\u0207\3"+
- "\2\2\2>\u020c\3\2\2\2@\u024d\3\2\2\2B\u028e\3\2\2\2D\u0296\3\2\2\2F\u029c"+
- "\3\2\2\2H\u02b6\3\2\2\2J\u02bb\3\2\2\2L\u02c1\3\2\2\2N\u02c7\3\2\2\2P"+
- "\u02c9\3\2\2\2R\u02cd\3\2\2\2T\u02ed\3\2\2\2V\u02fd\3\2\2\2XY\5\6\4\2"+
- "YZ\7\2\2\3Z\3\3\2\2\2[\\\5J&\2\\]\7\2\2\3]\5\3\2\2\2^`\5\b\5\2_^\3\2\2"+
- "\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2\2b\7\3\2\2\2ca\3\2\2\2dg\5\f\7\2eg\5\n"+
- "\6\2fd\3\2\2\2fe\3\2\2\2g\t\3\2\2\2hi\7(\2\2ij\7^\2\2j\13\3\2\2\2kl\5"+
- "\22\n\2lm\7\n\2\2m{\3\2\2\2no\5\62\32\2op\7\n\2\2p{\3\2\2\2qr\58\35\2"+
- "rs\7\n\2\2s{\3\2\2\2t{\5\30\r\2u{\5D#\2v{\5\36\20\2wx\5\16\b\2xy\7\n\2"+
- "\2y{\3\2\2\2zk\3\2\2\2zn\3\2\2\2zq\3\2\2\2zt\3\2\2\2zu\3\2\2\2zv\3\2\2"+
- "\2zw\3\2\2\2{\r\3\2\2\2|}\7)\2\2}~\5.\30\2~\177\7i\2\2\177\u0080\b\b\1"+
- "\2\u0080\17\3\2\2\2\u0081\u0083\5 \21\2\u0082\u0081\3\2\2\2\u0083\u0086"+
- "\3\2\2\2\u0084\u0082\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0087\3\2\2\2\u0086"+
- "\u0084\3\2\2\2\u0087\u008b\5.\30\2\u0088\u008a\5 \21\2\u0089\u0088\3\2"+
- "\2\2\u008a\u008d\3\2\2\2\u008b\u0089\3\2\2\2\u008b\u008c\3\2\2\2\u008c"+
- "\21\3\2\2\2\u008d\u008b\3\2\2\2\u008e\u008f\5\20\t\2\u008f\u0090\5\24"+
- "\13\2\u0090\23\3\2\2\2\u0091\u0092\b\13\1\2\u0092\u0093\5\26\f\2\u0093"+
- "\u0099\3\2\2\2\u0094\u0095\f\3\2\2\u0095\u0096\7\f\2\2\u0096\u0098\5\26"+
- "\f\2\u0097\u0094\3\2\2\2\u0098\u009b\3\2\2\2\u0099\u0097\3\2\2\2\u0099"+
- "\u009a\3\2\2\2\u009a\25\3\2\2\2\u009b\u0099\3\2\2\2\u009c\u009f\7i\2\2"+
- "\u009d\u009e\7&\2\2\u009e\u00a0\5@!\2\u009f\u009d\3\2\2\2\u009f\u00a0"+
- "\3\2\2\2\u00a0\u00a5\3\2\2\2\u00a1\u00a2\7i\2\2\u00a2\u00a3\7&\2\2\u00a3"+
- "\u00a5\5D#\2\u00a4\u009c\3\2\2\2\u00a4\u00a1\3\2\2\2\u00a5\27\3\2\2\2"+
- "\u00a6\u00a7\5\20\t\2\u00a7\u00a8\7i\2\2\u00a8\u00aa\7\b\2\2\u00a9\u00ab"+
- "\5\32\16\2\u00aa\u00a9\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2"+
- "\u00ac\u00ad\7\t\2\2\u00ad\u00af\7\4\2\2\u00ae\u00b0\5\"\22\2\u00af\u00ae"+
- "\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7\5\2\2\u00b2"+
- "\31\3\2\2\2\u00b3\u00b8\5\34\17\2\u00b4\u00b5\7\f\2\2\u00b5\u00b7\5\34"+
- "\17\2\u00b6\u00b4\3\2\2\2\u00b7\u00ba\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b8"+
- "\u00b9\3\2\2\2\u00b9\33\3\2\2\2\u00ba\u00b8\3\2\2\2\u00bb\u00bc\5\20\t"+
- "\2\u00bc\u00bd\7i\2\2\u00bd\u00c0\3\2\2\2\u00be\u00c0\7[\2\2\u00bf\u00bb"+
- "\3\2\2\2\u00bf\u00be\3\2\2\2\u00c0\35\3\2\2\2\u00c1\u00c2\7*\2\2\u00c2"+
- "\u00c3\7+\2\2\u00c3\u00c4\3\2\2\2\u00c4\u00c5\7\b\2\2\u00c5\u00ca\7`\2"+
- "\2\u00c6\u00c7\7\f\2\2\u00c7\u00c9\7`\2\2\u00c8\u00c6\3\2\2\2\u00c9\u00cc"+
- "\3\2\2\2\u00ca\u00c8\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cd\3\2\2\2\u00cc"+
- "\u00ca\3\2\2\2\u00cd\u010c\7\t\2\2\u00ce\u00cf\7*\2\2\u00cf\u00d0\7,\2"+
- "\2\u00d0\u00d1\3\2\2\2\u00d1\u00d2\7\b\2\2\u00d2\u00d3\7`\2\2\u00d3\u010c"+
- "\7\t\2\2\u00d4\u00d5\7*\2\2\u00d5\u00d6\7-\2\2\u00d6\u00d7\3\2\2\2\u00d7"+
- "\u00d8\7\b\2\2\u00d8\u00d9\7i\2\2\u00d9\u010c\7\t\2\2\u00da\u00db\7*\2"+
- "\2\u00db\u00dc\7/\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00de\7\b\2\2\u00de\u00df"+
- "\7i\2\2\u00df\u010c\7\t\2\2\u00e0\u00e1\7*\2\2\u00e1\u00e2\7.\2\2\u00e2"+
- "\u00e3\3\2\2\2\u00e3\u00e4\7\b\2\2\u00e4\u00e5\7^\2\2\u00e5\u010c\7\t"+
- "\2\2\u00e6\u00e7\7*\2\2\u00e7\u00e8\7\60\2\2\u00e8\u00e9\3\2\2\2\u00e9"+
- "\u00ea\7\b\2\2\u00ea\u00eb\7i\2\2\u00eb\u010c\7\t\2\2\u00ec\u00ed\7*\2"+
- "\2\u00ed\u00ee\7\61\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f0\7\b\2\2\u00f0"+
- "\u00f1\7i\2\2\u00f1\u010c\7\t\2\2\u00f2\u00f3\7*\2\2\u00f3\u00f4\7\62"+
- "\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f6\7\b\2\2\u00f6\u00f7\7i\2\2\u00f7"+
- "\u010c\7\t\2\2\u00f8\u00f9\7*\2\2\u00f9\u00fa\7@\2\2\u00fa\u00fb\3\2\2"+
- "\2\u00fb\u00fc\7\b\2\2\u00fc\u00fd\7A\2\2\u00fd\u010c\7\t\2\2\u00fe\u00ff"+
- "\7*\2\2\u00ff\u0100\7B\2\2\u0100\u0101\3\2\2\2\u0101\u0102\7\b\2\2\u0102"+
- "\u0107\7i\2\2\u0103\u0104\7\f\2\2\u0104\u0106\7i\2\2\u0105\u0103\3\2\2"+
- "\2\u0106\u0109\3\2\2\2\u0107\u0105\3\2\2\2\u0107\u0108\3\2\2\2\u0108\u010a"+
- "\3\2\2\2\u0109\u0107\3\2\2\2\u010a\u010c\7\t\2\2\u010b\u00c1\3\2\2\2\u010b"+
- "\u00ce\3\2\2\2\u010b\u00d4\3\2\2\2\u010b\u00da\3\2\2\2\u010b\u00e0\3\2"+
- "\2\2\u010b\u00e6\3\2\2\2\u010b\u00ec\3\2\2\2\u010b\u00f2\3\2\2\2\u010b"+
- "\u00f8\3\2\2\2\u010b\u00fe\3\2\2\2\u010c\37\3\2\2\2\u010d\u0138\7\63\2"+
- "\2\u010e\u010f\7\66\2\2\u010f\u0110\7\b\2\2\u0110\u0111\7`\2\2\u0111\u0138"+
- "\7\t\2\2\u0112\u0116\7:\2\2\u0113\u0114\7\b\2\2\u0114\u0115\7i\2\2\u0115"+
- "\u0117\7\t\2\2\u0116\u0113\3\2\2\2\u0116\u0117\3\2\2\2\u0117\u0138\3\2"+
- "\2\2\u0118\u0138\7<\2\2\u0119\u0138\7=\2\2\u011a\u011b\7;\2\2\u011b\u011c"+
- "\7\b\2\2\u011c\u011d\7`\2\2\u011d\u0138\7\t\2\2\u011e\u0138\78\2\2\u011f"+
- "\u0138\7\u0091\2\2\u0120\u0138\7>\2\2\u0121\u0138\7?\2\2\u0122\u0138\7"+
- "\64\2\2\u0123\u0138\7\65\2\2\u0124\u0138\7\67\2\2\u0125\u0129\79\2\2\u0126"+
- "\u0127\7\b\2\2\u0127\u0128\7i\2\2\u0128\u012a\7\t\2\2\u0129\u0126\3\2"+
- "\2\2\u0129\u012a\3\2\2\2\u012a\u0138\3\2\2\2\u012b\u012c\7+\2\2\u012c"+
- "\u012d\7\b\2\2\u012d\u0132\7`\2\2\u012e\u012f\7\f\2\2\u012f\u0131\7`\2"+
- "\2\u0130\u012e\3\2\2\2\u0131\u0134\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0133"+
- "\3\2\2\2\u0133\u0135\3\2\2\2\u0134\u0132\3\2\2\2\u0135\u0138\7\t\2\2\u0136"+
- "\u0138\7A\2\2\u0137\u010d\3\2\2\2\u0137\u010e\3\2\2\2\u0137\u0112\3\2"+
- "\2\2\u0137\u0118\3\2\2\2\u0137\u0119\3\2\2\2\u0137\u011a\3\2\2\2\u0137"+
- "\u011e\3\2\2\2\u0137\u011f\3\2\2\2\u0137\u0120\3\2\2\2\u0137\u0121\3\2"+
- "\2\2\u0137\u0122\3\2\2\2\u0137\u0123\3\2\2\2\u0137\u0124\3\2\2\2\u0137"+
- "\u0125\3\2\2\2\u0137\u012b\3\2\2\2\u0137\u0136\3\2\2\2\u0138!\3\2\2\2"+
- "\u0139\u013b\5$\23\2\u013a\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\u013a"+
- "\3\2\2\2\u013c\u013d\3\2\2\2\u013d#\3\2\2\2\u013e\u013f\5\22\n\2\u013f"+
- "\u0140\7\n\2\2\u0140\u0193\3\2\2\2\u0141\u0143\7\4\2\2\u0142\u0144\5\""+
- "\22\2\u0143\u0142\3\2\2\2\u0143\u0144\3\2\2\2\u0144\u0145\3\2\2\2\u0145"+
- "\u0193\7\5\2\2\u0146\u0147\5> \2\u0147\u0148\7\n\2\2\u0148\u0193\3\2\2"+
- "\2\u0149\u014a\7C\2\2\u014a\u014b\7\b\2\2\u014b\u014c\5> \2\u014c\u014d"+
- "\7\t\2\2\u014d\u0150\5$\23\2\u014e\u014f\7D\2\2\u014f\u0151\5$\23\2\u0150"+
- "\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0193\3\2\2\2\u0152\u0154\5 "+
- "\21\2\u0153\u0152\3\2\2\2\u0154\u0157\3\2\2\2\u0155\u0153\3\2\2\2\u0155"+
- "\u0156\3\2\2\2\u0156\u0158\3\2\2\2\u0157\u0155\3\2\2\2\u0158\u0159\7E"+
- "\2\2\u0159\u015a\7\b\2\2\u015a\u015b\5> \2\u015b\u015c\7\t\2\2\u015c\u015d"+
- "\5$\23\2\u015d\u0193\3\2\2\2\u015e\u0160\5 \21\2\u015f\u015e\3\2\2\2\u0160"+
- "\u0163\3\2\2\2\u0161\u015f\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0164\3\2"+
- "\2\2\u0163\u0161\3\2\2\2\u0164\u0165\7F\2\2\u0165\u0166\5$\23\2\u0166"+
- "\u0167\7E\2\2\u0167\u0168\7\b\2\2\u0168\u0169\5> \2\u0169\u016a\7\t\2"+
- "\2\u016a\u016b\7\n\2\2\u016b\u0193\3\2\2\2\u016c\u016e\5 \21\2\u016d\u016c"+
- "\3\2\2\2\u016e\u0171\3\2\2\2\u016f\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170"+
- "\u0172\3\2\2\2\u0171\u016f\3\2\2\2\u0172\u0173\7G\2\2\u0173\u0174\7\b"+
- "\2\2\u0174\u0175\5*\26\2\u0175\u0176\7\t\2\2\u0176\u0177\5$\23\2\u0177"+
- "\u0193\3\2\2\2\u0178\u0179\7H\2\2\u0179\u017a\7\b\2\2\u017a\u017b\5> "+
- "\2\u017b\u017c\7\t\2\2\u017c\u017d\7\4\2\2\u017d\u017e\5&\24\2\u017e\u017f"+
- "\7\5\2\2\u017f\u0193\3\2\2\2\u0180\u0182\7I\2\2\u0181\u0183\5> \2\u0182"+
- "\u0181\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u0193\7\n"+
- "\2\2\u0185\u0186\7J\2\2\u0186\u0193\7\n\2\2\u0187\u0188\7K\2\2\u0188\u0193"+
- "\7\n\2\2\u0189\u018b\7L\2\2\u018a\u018c\5F$\2\u018b\u018a\3\2\2\2\u018b"+
- "\u018c\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018e\7\4\2\2\u018e\u018f\5J"+
- "&\2\u018f\u0190\7\u0080\2\2\u0190\u0193\3\2\2\2\u0191\u0193\5D#\2\u0192"+
- "\u013e\3\2\2\2\u0192\u0141\3\2\2\2\u0192\u0146\3\2\2\2\u0192\u0149\3\2"+
- "\2\2\u0192\u0155\3\2\2\2\u0192\u0161\3\2\2\2\u0192\u016f\3\2\2\2\u0192"+
- "\u0178\3\2\2\2\u0192\u0180\3\2\2\2\u0192\u0185\3\2\2\2\u0192\u0187\3\2"+
- "\2\2\u0192\u0189\3\2\2\2\u0192\u0191\3\2\2\2\u0193%\3\2\2\2\u0194\u0196"+
- "\5(\25\2\u0195\u0194\3\2\2\2\u0196\u0197\3\2\2\2\u0197\u0195\3\2\2\2\u0197"+
- "\u0198\3\2\2\2\u0198\u019e\3\2\2\2\u0199\u019a\7M\2\2\u019a\u019c\7\13"+
- "\2\2\u019b\u019d\5\"\22\2\u019c\u019b\3\2\2\2\u019c\u019d\3\2\2\2\u019d"+
- "\u019f\3\2\2\2\u019e\u0199\3\2\2\2\u019e\u019f\3\2\2\2\u019f\'\3\2\2\2"+
- "\u01a0\u01a1\7N\2\2\u01a1\u01a2\5@!\2\u01a2\u01a4\7\13\2\2\u01a3\u01a5"+
- "\5\"\22\2\u01a4\u01a3\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5)\3\2\2\2\u01a6"+
- "\u01a7\5,\27\2\u01a7\u01a8\7\n\2\2\u01a8\u01a9\5> \2\u01a9\u01ab\7\n\2"+
- "\2\u01aa\u01ac\5> \2\u01ab\u01aa\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01b7"+
- "\3\2\2\2\u01ad\u01af\5\20\t\2\u01ae\u01ad\3\2\2\2\u01ae\u01af\3\2\2\2"+
- "\u01af\u01b0\3\2\2\2\u01b0\u01b1\7i\2\2\u01b1\u01b2\7\13\2\2\u01b2\u01b3"+
- "\5@!\2\u01b3\u01b4\7\r\2\2\u01b4\u01b5\5@!\2\u01b5\u01b7\3\2\2\2\u01b6"+
- "\u01a6\3\2\2\2\u01b6\u01ae\3\2\2\2\u01b7+\3\2\2\2\u01b8\u01ba\5\22\n\2"+
- "\u01b9\u01b8\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01bd\3\2\2\2\u01bb\u01bd"+
- "\5> \2\u01bc\u01b9\3\2\2\2\u01bc\u01bb\3\2\2\2\u01bd-\3\2\2\2\u01be\u01bf"+
- "\b\30\1\2\u01bf\u01c0\7\b\2\2\u01c0\u01c1\5.\30\2\u01c1\u01c2\7\t\2\2"+
- "\u01c2\u01ce\3\2\2\2\u01c3\u01ce\7[\2\2\u01c4\u01c6\7Z\2\2\u01c5\u01c7"+
- "\7[\2\2\u01c6\u01c5\3\2\2\2\u01c6\u01c7\3\2\2\2\u01c7\u01ce\3\2\2\2\u01c8"+
- "\u01ce\5\62\32\2\u01c9\u01ce\5\60\31\2\u01ca\u01ce\58\35\2\u01cb\u01ce"+
- "\5\66\34\2\u01cc\u01ce\7\3\2\2\u01cd\u01be\3\2\2\2\u01cd\u01c3\3\2\2\2"+
- "\u01cd\u01c4\3\2\2\2\u01cd\u01c8\3\2\2\2\u01cd\u01c9\3\2\2\2\u01cd\u01ca"+
- "\3\2\2\2\u01cd\u01cb\3\2\2\2\u01cd\u01cc\3\2\2\2\u01ce\u01dc\3\2\2\2\u01cf"+
- "\u01d0\f\n\2\2\u01d0\u01db\7\23\2\2\u01d1\u01d2\f\t\2\2\u01d2\u01d4\7"+
- "\6\2\2\u01d3\u01d5\5@!\2\u01d4\u01d3\3\2\2\2\u01d4\u01d5\3\2\2\2\u01d5"+
- "\u01d6\3\2\2\2\u01d6\u01db\7\7\2\2\u01d7\u01d8\f\b\2\2\u01d8\u01d9\7\b"+
- "\2\2\u01d9\u01db\7\t\2\2\u01da\u01cf\3\2\2\2\u01da\u01d1\3\2\2\2\u01da"+
- "\u01d7\3\2\2\2\u01db\u01de\3\2\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2"+
- "\2\2\u01dd/\3\2\2\2\u01de\u01dc\3\2\2\2\u01df\u01e0\7O\2\2\u01e0\u01e1"+
- "\7i\2\2\u01e1\61\3\2\2\2\u01e2\u01e4\7O\2\2\u01e3\u01e5\7i\2\2\u01e4\u01e3"+
- "\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6\u01e8\7\4\2\2\u01e7"+
- "\u01e9\5\64\33\2\u01e8\u01e7\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea\u01e8\3"+
- "\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed\7\5\2\2\u01ed"+
- "\63\3\2\2\2\u01ee\u01ef\5\22\n\2\u01ef\u01f0\7\n\2\2\u01f0\65\3\2\2\2"+
- "\u01f1\u01f2\7P\2\2\u01f2\u01f3\7i\2\2\u01f3\67\3\2\2\2\u01f4\u01f6\7"+
- "P\2\2\u01f5\u01f7\7i\2\2\u01f6\u01f5\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7"+
- "\u01f8\3\2\2\2\u01f8\u01f9\7\4\2\2\u01f9\u01fa\5:\36\2\u01fa\u01fb\7\5"+
- "\2\2\u01fb9\3\2\2\2\u01fc\u01fd\b\36\1\2\u01fd\u01fe\5<\37\2\u01fe\u0204"+
- "\3\2\2\2\u01ff\u0200\f\3\2\2\u0200\u0201\7\f\2\2\u0201\u0203\5<\37\2\u0202"+
- "\u01ff\3\2\2\2\u0203\u0206\3\2\2\2\u0204\u0202\3\2\2\2\u0204\u0205\3\2"+
- "\2\2\u0205;\3\2\2\2\u0206\u0204\3\2\2\2\u0207\u020a\7i\2\2\u0208\u0209"+
- "\7&\2\2\u0209\u020b\5@!\2\u020a\u0208\3\2\2\2\u020a\u020b\3\2\2\2\u020b"+
- "=\3\2\2\2\u020c\u020d\b \1\2\u020d\u020e\5@!\2\u020e\u0214\3\2\2\2\u020f"+
- "\u0210\f\3\2\2\u0210\u0211\7\f\2\2\u0211\u0213\5@!\2\u0212\u020f\3\2\2"+
- "\2\u0213\u0216\3\2\2\2\u0214\u0212\3\2\2\2\u0214\u0215\3\2\2\2\u0215?"+
- "\3\2\2\2\u0216\u0214\3\2\2\2\u0217\u0218\b!\1\2\u0218\u0219\7\b\2\2\u0219"+
- "\u021a\5> \2\u021a\u021b\7\t\2\2\u021b\u024e\3\2\2\2\u021c\u021d\7Q\2"+
- "\2\u021d\u0220\7\b\2\2\u021e\u0221\5@!\2\u021f\u0221\5.\30\2\u0220\u021e"+
- "\3\2\2\2\u0220\u021f\3\2\2\2\u0221\u0222\3\2\2\2\u0222\u0223\7\t\2\2\u0223"+
- "\u024e\3\2\2\2\u0224\u0225\7R\2\2\u0225\u0228\7\b\2\2\u0226\u0229\5@!"+
- "\2\u0227\u0229\5.\30\2\u0228\u0226\3\2\2\2\u0228\u0227\3\2\2\2\u0229\u022a"+
- "\3\2\2\2\u022a\u022b\7\t\2\2\u022b\u024e\3\2\2\2\u022c\u022d\7\b\2\2\u022d"+
- "\u022e\5.\30\2\u022e\u022f\7\t\2\2\u022f\u0230\5@!\32\u0230\u024e\3\2"+
- "\2\2\u0231\u0232\t\2\2\2\u0232\u024e\5@!\31\u0233\u0234\7\23\2\2\u0234"+
- "\u024e\5@!\27\u0235\u0236\t\3\2\2\u0236\u024e\5@!\26\u0237\u0238\t\4\2"+
- "\2\u0238\u024e\5@!\22\u0239\u023a\7\4\2\2\u023a\u023f\5@!\2\u023b\u023c"+
- "\7\f\2\2\u023c\u023e\5@!\2\u023d\u023b\3\2\2\2\u023e\u0241\3\2\2\2\u023f"+
- "\u023d\3\2\2\2\u023f\u0240\3\2\2\2\u0240\u0242\3\2\2\2\u0241\u023f\3\2"+
- "\2\2\u0242\u0243\7\5\2\2\u0243\u024e\3\2\2\2\u0244\u024e\7i\2\2\u0245"+
- "\u024e\7`\2\2\u0246\u0248\7^\2\2\u0247\u0246\3\2\2\2\u0248\u0249\3\2\2"+
- "\2\u0249\u0247\3\2\2\2\u0249\u024a\3\2\2\2\u024a\u024e\3\2\2\2\u024b\u024e"+
- "\7_\2\2\u024c\u024e\7\\\2\2\u024d\u0217\3\2\2\2\u024d\u021c\3\2\2\2\u024d"+
- "\u0224\3\2\2\2\u024d\u022c\3\2\2\2\u024d\u0231\3\2\2\2\u024d\u0233\3\2"+
- "\2\2\u024d\u0235\3\2\2\2\u024d\u0237\3\2\2\2\u024d\u0239\3\2\2\2\u024d"+
- "\u0244\3\2\2\2\u024d\u0245\3\2\2\2\u024d\u0247\3\2\2\2\u024d\u024b\3\2"+
- "\2\2\u024d\u024c\3\2\2\2\u024e\u028b\3\2\2\2\u024f\u0250\f\25\2\2\u0250"+
- "\u0251\t\5\2\2\u0251\u028a\5@!\26\u0252\u0253\f\24\2\2\u0253\u0254\t\6"+
- "\2\2\u0254\u028a\5@!\25\u0255\u0256\f\23\2\2\u0256\u0257\t\7\2\2\u0257"+
- "\u028a\5@!\24\u0258\u0259\f\21\2\2\u0259\u025a\t\b\2\2\u025a\u028a\5@"+
- "!\22\u025b\u025c\f\20\2\2\u025c\u025d\7\30\2\2\u025d\u028a\5@!\21\u025e"+
- "\u025f\f\17\2\2\u025f\u0260\7\32\2\2\u0260\u028a\5@!\20\u0261\u0262\f"+
- "\16\2\2\u0262\u0263\7\33\2\2\u0263\u028a\5@!\17\u0264\u0265\f\r\2\2\u0265"+
- "\u0266\7$\2\2\u0266\u028a\5@!\16\u0267\u0268\f\f\2\2\u0268\u0269\7%\2"+
- "\2\u0269\u028a\5@!\r\u026a\u026b\f\13\2\2\u026b\u026c\7\16\2\2\u026c\u026d"+
- "\5@!\2\u026d\u026e\7\13\2\2\u026e\u026f\5@!\f\u026f\u028a\3\2\2\2\u0270"+
- "\u0271\f\n\2\2\u0271\u0272\7&\2\2\u0272\u028a\5@!\n\u0273\u0274\f\t\2"+
- "\2\u0274\u0275\7\'\2\2\u0275\u028a\5@!\t\u0276\u0277\f \2\2\u0277\u0278"+
- "\7\17\2\2\u0278\u028a\7i\2\2\u0279\u027a\f\37\2\2\u027a\u027b\7\20\2\2"+
- "\u027b\u028a\7i\2\2\u027c\u027d\f\36\2\2\u027d\u027f\7\b\2\2\u027e\u0280"+
- "\5B\"\2\u027f\u027e\3\2\2\2\u027f\u0280\3\2\2\2\u0280\u0281\3\2\2\2\u0281"+
- "\u028a\7\t\2\2\u0282\u0283\f\33\2\2\u0283\u0284\7\6\2\2\u0284\u0285\5"+
- "> \2\u0285\u0286\7\7\2\2\u0286\u028a\3\2\2\2\u0287\u0288\f\30\2\2\u0288"+
- "\u028a\t\2\2\2\u0289\u024f\3\2\2\2\u0289\u0252\3\2\2\2\u0289\u0255\3\2"+
- "\2\2\u0289\u0258\3\2\2\2\u0289\u025b\3\2\2\2\u0289\u025e\3\2\2\2\u0289"+
- "\u0261\3\2\2\2\u0289\u0264\3\2\2\2\u0289\u0267\3\2\2\2\u0289\u026a\3\2"+
- "\2\2\u0289\u0270\3\2\2\2\u0289\u0273\3\2\2\2\u0289\u0276\3\2\2\2\u0289"+
- "\u0279\3\2\2\2\u0289\u027c\3\2\2\2\u0289\u0282\3\2\2\2\u0289\u0287\3\2"+
- "\2\2\u028a\u028d\3\2\2\2\u028b\u0289\3\2\2\2\u028b\u028c\3\2\2\2\u028c"+
- "A\3\2\2\2\u028d\u028b\3\2\2\2\u028e\u0293\5@!\2\u028f\u0290\7\f\2\2\u0290"+
- "\u0292\5@!\2\u0291\u028f\3\2\2\2\u0292\u0295\3\2\2\2\u0293\u0291\3\2\2"+
- "\2\u0293\u0294\3\2\2\2\u0294C\3\2\2\2\u0295\u0293\3\2\2\2\u0296\u0298"+
- "\7S\2\2\u0297\u0299\5F$\2\u0298\u0297\3\2\2\2\u0298\u0299\3\2\2\2\u0299"+
- "\u029a\3\2\2\2\u029a\u029b\7]\2\2\u029bE\3\2\2\2\u029c\u029d\7\b\2\2\u029d"+
- "\u02a2\5H%\2\u029e\u029f\7\f\2\2\u029f\u02a1\5H%\2\u02a0\u029e\3\2\2\2"+
- "\u02a1\u02a4\3\2\2\2\u02a2\u02a0\3\2\2\2\u02a2\u02a3\3\2\2\2\u02a3\u02a5"+
- "\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a5\u02a6\7\t\2\2\u02a6G\3\2\2\2\u02a7"+
- "\u02a8\7T\2\2\u02a8\u02b7\7^\2\2\u02a9\u02aa\7U\2\2\u02aa\u02b7\7i\2\2"+
- "\u02ab\u02ac\7V\2\2\u02ac\u02b7\7^\2\2\u02ad\u02ae\7W\2\2\u02ae\u02b7"+
- "\5@!\2\u02af\u02b0\7X\2\2\u02b0\u02b7\5@!\2\u02b1\u02b4\7,\2\2\u02b2\u02b5"+
- "\7\67\2\2\u02b3\u02b5\5@!\2\u02b4\u02b2\3\2\2\2\u02b4\u02b3\3\2\2\2\u02b5"+
- "\u02b7\3\2\2\2\u02b6\u02a7\3\2\2\2\u02b6\u02a9\3\2\2\2\u02b6\u02ab\3\2"+
- "\2\2\u02b6\u02ad\3\2\2\2\u02b6\u02af\3\2\2\2\u02b6\u02b1\3\2\2\2\u02b7"+
- "I\3\2\2\2\u02b8\u02ba\5L\'\2\u02b9\u02b8\3\2\2\2\u02ba\u02bd\3\2\2\2\u02bb"+
- "\u02b9\3\2\2\2\u02bb\u02bc\3\2\2\2\u02bcK\3\2\2\2\u02bd\u02bb\3\2\2\2"+
- "\u02be\u02c2\5N(\2\u02bf\u02c2\5P)\2\u02c0\u02c2\5R*\2\u02c1\u02be\3\2"+
- "\2\2\u02c1\u02bf\3\2\2\2\u02c1\u02c0\3\2\2\2\u02c2M\3\2\2\2\u02c3\u02c4"+
- "\7\u008d\2\2\u02c4\u02c8\7p\2\2\u02c5\u02c6\7\u008c\2\2\u02c6\u02c8\7"+
- "p\2\2\u02c7\u02c3\3\2\2\2\u02c7\u02c5\3\2\2\2\u02c8O\3\2\2\2\u02c9\u02cb"+
- "\7n\2\2\u02ca\u02cc\5T+\2\u02cb\u02ca\3\2\2\2\u02cb\u02cc\3\2\2\2\u02cc"+
- "Q\3\2\2\2\u02cd\u02ce\7m\2\2\u02ce\u02d3\5V,\2\u02cf\u02d0\7q\2\2\u02d0"+
- "\u02d2\5V,\2\u02d1\u02cf\3\2\2\2\u02d2\u02d5\3\2\2\2\u02d3\u02d1\3\2\2"+
- "\2\u02d3\u02d4\3\2\2\2\u02d4S\3\2\2\2\u02d5\u02d3\3\2\2\2\u02d6\u02ee"+
- "\5V,\2\u02d7\u02d8\7o\2\2\u02d8\u02ee\5V,\2\u02d9\u02da\5V,\2\u02da\u02db"+
- "\7q\2\2\u02db\u02dc\7\u008d\2\2\u02dc\u02ee\3\2\2\2\u02dd\u02de\7r\2\2"+
- "\u02de\u02df\5V,\2\u02df\u02e0\7s\2\2\u02e0\u02e1\7q\2\2\u02e1\u02e2\7"+
- "\u008d\2\2\u02e2\u02ee\3\2\2\2\u02e3\u02e4\7r\2\2\u02e4\u02e5\5V,\2\u02e5"+
- "\u02e6\7q\2\2\u02e6\u02e7\7\u008d\2\2\u02e7\u02e8\7s\2\2\u02e8\u02ee\3"+
- "\2\2\2\u02e9\u02ea\7r\2\2\u02ea\u02eb\5V,\2\u02eb\u02ec\7s\2\2\u02ec\u02ee"+
- "\3\2\2\2\u02ed\u02d6\3\2\2\2\u02ed\u02d7\3\2\2\2\u02ed\u02d9\3\2\2\2\u02ed"+
- "\u02dd\3\2\2\2\u02ed\u02e3\3\2\2\2\u02ed\u02e9\3\2\2\2\u02eeU\3\2\2\2"+
- "\u02ef\u02f0\b,\1\2\u02f0\u02f1\7t\2\2\u02f1\u02f2\5V,\2\u02f2\u02f3\7"+
- "u\2\2\u02f3\u02fe\3\2\2\2\u02f4\u02f5\t\t\2\2\u02f5\u02fe\5V,\n\u02f6"+
- "\u02fe\7\u008d\2\2\u02f7\u02fe\7\u008b\2\2\u02f8\u02f9\7\177\2\2\u02f9"+
- "\u02fa\7\u008d\2\2\u02fa\u02fe\7\u0080\2\2\u02fb\u02fe\7\u0081\2\2\u02fc"+
- "\u02fe\7\u008a\2\2\u02fd\u02ef\3\2\2\2\u02fd\u02f4\3\2\2\2\u02fd\u02f6"+
- "\3\2\2\2\u02fd\u02f7\3\2\2\2\u02fd\u02f8\3\2\2\2\u02fd\u02fb\3\2\2\2\u02fd"+
- "\u02fc\3\2\2\2\u02fe\u030d\3\2\2\2\u02ff\u0300\f\f\2\2\u0300\u0301\7v"+
- "\2\2\u0301\u030c\5V,\r\u0302\u0303\f\13\2\2\u0303\u0304\t\n\2\2\u0304"+
- "\u030c\5V,\f\u0305\u0306\f\t\2\2\u0306\u0307\t\13\2\2\u0307\u030c\5V,"+
- "\n\u0308\u0309\f\b\2\2\u0309\u030a\t\f\2\2\u030a\u030c\5V,\t\u030b\u02ff"+
- "\3\2\2\2\u030b\u0302\3\2\2\2\u030b\u0305\3\2\2\2\u030b\u0308\3\2\2\2\u030c"+
- "\u030f\3\2\2\2\u030d\u030b\3\2\2\2\u030d\u030e\3\2\2\2\u030eW\3\2\2\2"+
- "\u030f\u030d\3\2\2\2Hafz\u0084\u008b\u0099\u009f\u00a4\u00aa\u00af\u00b8"+
- "\u00bf\u00ca\u0107\u010b\u0116\u0129\u0132\u0137\u013c\u0143\u0150\u0155"+
- "\u0161\u016f\u0182\u018b\u0192\u0197\u019c\u019e\u01a4\u01ab\u01ae\u01b6"+
- "\u01b9\u01bc\u01c6\u01cd\u01d4\u01da\u01dc\u01e4\u01ea\u01f6\u0204\u020a"+
- "\u0214\u0220\u0228\u023f\u0249\u024d\u027f\u0289\u028b\u0293\u0298\u02a2"+
- "\u02b4\u02b6\u02bb\u02c1\u02c7\u02cb\u02d3\u02ed\u02fd\u030b\u030d";
+ ",\t,\4-\t-\3\2\3\2\3\2\3\3\3\3\3\3\3\4\7\4b\n\4\f\4\16\4e\13\4\3\5\3\5"+
+ "\5\5i\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7"+
+ "\3\7\3\7\3\7\5\7}\n\7\3\b\3\b\3\b\3\b\3\b\3\t\7\t\u0085\n\t\f\t\16\t\u0088"+
+ "\13\t\3\t\3\t\7\t\u008c\n\t\f\t\16\t\u008f\13\t\3\n\3\n\3\n\3\13\3\13"+
+ "\3\13\3\13\3\13\3\13\7\13\u009a\n\13\f\13\16\13\u009d\13\13\3\f\3\f\3"+
+ "\f\5\f\u00a2\n\f\3\f\3\f\3\f\3\f\5\f\u00a8\n\f\3\r\3\r\3\r\3\r\3\r\3\r"+
+ "\5\r\u00b0\n\r\3\r\7\r\u00b3\n\r\f\r\16\r\u00b6\13\r\3\16\3\16\3\16\3"+
+ "\16\5\16\u00bc\n\16\3\16\3\16\3\16\5\16\u00c1\n\16\3\16\3\16\3\17\3\17"+
+ "\3\17\7\17\u00c8\n\17\f\17\16\17\u00cb\13\17\3\20\3\20\3\20\3\20\5\20"+
+ "\u00d1\n\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\7\21\u00da\n\21\f\21\16"+
+ "\21\u00dd\13\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\7\21\u0117\n\21\f\21\16\21\u011a\13\21\3\21\5\21\u011d"+
+ "\n\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u0128\n\22\3\22"+
+ "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+
+ "\3\22\3\22\5\22\u013b\n\22\3\22\3\22\3\22\3\22\3\22\7\22\u0142\n\22\f"+
+ "\22\16\22\u0145\13\22\3\22\3\22\5\22\u0149\n\22\3\23\6\23\u014c\n\23\r"+
+ "\23\16\23\u014d\3\24\3\24\3\24\3\24\3\24\5\24\u0155\n\24\3\24\3\24\3\24"+
+ "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u0162\n\24\3\24\7\24\u0165"+
+ "\n\24\f\24\16\24\u0168\13\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\7\24\u0171"+
+ "\n\24\f\24\16\24\u0174\13\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3"+
+ "\24\7\24\u017f\n\24\f\24\16\24\u0182\13\24\3\24\3\24\3\24\3\24\3\24\3"+
+ "\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u0194\n\24"+
+ "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u019d\n\24\3\24\3\24\3\24\3\24"+
+ "\3\24\5\24\u01a4\n\24\3\25\6\25\u01a7\n\25\r\25\16\25\u01a8\3\25\3\25"+
+ "\3\25\5\25\u01ae\n\25\5\25\u01b0\n\25\3\26\3\26\3\26\3\26\5\26\u01b6\n"+
+ "\26\3\27\3\27\3\27\3\27\3\27\5\27\u01bd\n\27\3\27\5\27\u01c0\n\27\3\27"+
+ "\3\27\3\27\3\27\3\27\3\27\5\27\u01c8\n\27\3\30\5\30\u01cb\n\30\3\30\5"+
+ "\30\u01ce\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u01d8\n\31"+
+ "\3\31\3\31\3\31\3\31\3\31\5\31\u01df\n\31\3\31\3\31\3\31\3\31\3\31\5\31"+
+ "\u01e6\n\31\3\31\3\31\3\31\3\31\7\31\u01ec\n\31\f\31\16\31\u01ef\13\31"+
+ "\3\32\3\32\3\32\3\33\3\33\5\33\u01f6\n\33\3\33\3\33\6\33\u01fa\n\33\r"+
+ "\33\16\33\u01fb\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\5\36"+
+ "\u0208\n\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\7\37\u0214"+
+ "\n\37\f\37\16\37\u0217\13\37\3 \3 \3 \5 \u021c\n \3!\3!\3!\3!\3!\3!\7"+
+ "!\u0224\n!\f!\16!\u0227\13!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u0232"+
+ "\n\"\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u023a\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+
+ "\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\7\"\u024f\n\"\f\"\16"+
+ "\"\u0252\13\"\3\"\3\"\3\"\3\"\3\"\6\"\u0259\n\"\r\"\16\"\u025a\3\"\3\""+
+ "\5\"\u025f\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+
+ "\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3"+
+ "\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5\""+
+ "\u0291\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\7\"\u029b\n\"\f\"\16\"\u029e"+
+ "\13\"\3#\3#\3#\7#\u02a3\n#\f#\16#\u02a6\13#\3$\3$\5$\u02aa\n$\3$\3$\3"+
+ "%\3%\3%\3%\7%\u02b2\n%\f%\16%\u02b5\13%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&"+
+ "\3&\3&\3&\3&\3&\5&\u02c6\n&\5&\u02c8\n&\3\'\7\'\u02cb\n\'\f\'\16\'\u02ce"+
+ "\13\'\3(\3(\3(\5(\u02d3\n(\3)\3)\3)\3)\5)\u02d9\n)\3*\3*\5*\u02dd\n*\3"+
+ "+\3+\3+\3+\7+\u02e3\n+\f+\16+\u02e6\13+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,"+
+ "\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u02ff\n,\3-\3-\3-\3-\3-\3-"+
+ "\3-\3-\3-\3-\3-\3-\3-\3-\5-\u030f\n-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-"+
+ "\3-\7-\u031d\n-\f-\16-\u0320\13-\3-\2\t\24\30\60<@BX.\2\4\6\b\n\f\16\20"+
+ "\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVX\2\r\3\2\26"+
+ "\27\5\2\21\22\30\31ZZ\4\2 ##\3\2\34\35\3\2\23\25\3\2\21\22\3\2\36#\3"+
+ "\2z}\3\2xy\3\2~\177\3\2z{\2\u0395\2Z\3\2\2\2\4]\3\2\2\2\6c\3\2\2\2\bh"+
+ "\3\2\2\2\nj\3\2\2\2\f|\3\2\2\2\16~\3\2\2\2\20\u0086\3\2\2\2\22\u0090\3"+
+ "\2\2\2\24\u0093\3\2\2\2\26\u00a7\3\2\2\2\30\u00a9\3\2\2\2\32\u00b7\3\2"+
+ "\2\2\34\u00c4\3\2\2\2\36\u00d0\3\2\2\2 \u011c\3\2\2\2\"\u0148\3\2\2\2"+
+ "$\u014b\3\2\2\2&\u01a3\3\2\2\2(\u01a6\3\2\2\2*\u01b1\3\2\2\2,\u01c7\3"+
+ "\2\2\2.\u01cd\3\2\2\2\60\u01de\3\2\2\2\62\u01f0\3\2\2\2\64\u01f3\3\2\2"+
+ "\2\66\u01ff\3\2\2\28\u0202\3\2\2\2:\u0205\3\2\2\2<\u020d\3\2\2\2>\u0218"+
+ "\3\2\2\2@\u021d\3\2\2\2B\u025e\3\2\2\2D\u029f\3\2\2\2F\u02a7\3\2\2\2H"+
+ "\u02ad\3\2\2\2J\u02c7\3\2\2\2L\u02cc\3\2\2\2N\u02d2\3\2\2\2P\u02d8\3\2"+
+ "\2\2R\u02da\3\2\2\2T\u02de\3\2\2\2V\u02fe\3\2\2\2X\u030e\3\2\2\2Z[\5\6"+
+ "\4\2[\\\7\2\2\3\\\3\3\2\2\2]^\5L\'\2^_\7\2\2\3_\5\3\2\2\2`b\5\b\5\2a`"+
+ "\3\2\2\2be\3\2\2\2ca\3\2\2\2cd\3\2\2\2d\7\3\2\2\2ec\3\2\2\2fi\5\f\7\2"+
+ "gi\5\n\6\2hf\3\2\2\2hg\3\2\2\2i\t\3\2\2\2jk\7(\2\2kl\7_\2\2l\13\3\2\2"+
+ "\2mn\5\22\n\2no\7\n\2\2o}\3\2\2\2pq\5\64\33\2qr\7\n\2\2r}\3\2\2\2st\5"+
+ ":\36\2tu\7\n\2\2u}\3\2\2\2v}\5\32\16\2w}\5F$\2x}\5 \21\2yz\5\16\b\2z{"+
+ "\7\n\2\2{}\3\2\2\2|m\3\2\2\2|p\3\2\2\2|s\3\2\2\2|v\3\2\2\2|w\3\2\2\2|"+
+ "x\3\2\2\2|y\3\2\2\2}\r\3\2\2\2~\177\7)\2\2\177\u0080\5\60\31\2\u0080\u0081"+
+ "\7j\2\2\u0081\u0082\b\b\1\2\u0082\17\3\2\2\2\u0083\u0085\5\"\22\2\u0084"+
+ "\u0083\3\2\2\2\u0085\u0088\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2"+
+ "\2\2\u0087\u0089\3\2\2\2\u0088\u0086\3\2\2\2\u0089\u008d\5\60\31\2\u008a"+
+ "\u008c\5\"\22\2\u008b\u008a\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3"+
+ "\2\2\2\u008d\u008e\3\2\2\2\u008e\21\3\2\2\2\u008f\u008d\3\2\2\2\u0090"+
+ "\u0091\5\20\t\2\u0091\u0092\5\24\13\2\u0092\23\3\2\2\2\u0093\u0094\b\13"+
+ "\1\2\u0094\u0095\5\26\f\2\u0095\u009b\3\2\2\2\u0096\u0097\f\3\2\2\u0097"+
+ "\u0098\7\f\2\2\u0098\u009a\5\26\f\2\u0099\u0096\3\2\2\2\u009a\u009d\3"+
+ "\2\2\2\u009b\u0099\3\2\2\2\u009b\u009c\3\2\2\2\u009c\25\3\2\2\2\u009d"+
+ "\u009b\3\2\2\2\u009e\u00a1\5\30\r\2\u009f\u00a0\7&\2\2\u00a0\u00a2\5B"+
+ "\"\2\u00a1\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a8\3\2\2\2\u00a3"+
+ "\u00a4\5\30\r\2\u00a4\u00a5\7&\2\2\u00a5\u00a6\5F$\2\u00a6\u00a8\3\2\2"+
+ "\2\u00a7\u009e\3\2\2\2\u00a7\u00a3\3\2\2\2\u00a8\27\3\2\2\2\u00a9\u00aa"+
+ "\b\r\1\2\u00aa\u00ab\7j\2\2\u00ab\u00b4\3\2\2\2\u00ac\u00ad\f\3\2\2\u00ad"+
+ "\u00af\7\6\2\2\u00ae\u00b0\5B\"\2\u00af\u00ae\3\2\2\2\u00af\u00b0\3\2"+
+ "\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b3\7\7\2\2\u00b2\u00ac\3\2\2\2\u00b3"+
+ "\u00b6\3\2\2\2\u00b4\u00b2\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\31\3\2\2"+
+ "\2\u00b6\u00b4\3\2\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7j\2\2\u00b9\u00bb"+
+ "\7\b\2\2\u00ba\u00bc\5\34\17\2\u00bb\u00ba\3\2\2\2\u00bb\u00bc\3\2\2\2"+
+ "\u00bc\u00bd\3\2\2\2\u00bd\u00be\7\t\2\2\u00be\u00c0\7\4\2\2\u00bf\u00c1"+
+ "\5$\23\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2"+
+ "\u00c3\7\5\2\2\u00c3\33\3\2\2\2\u00c4\u00c9\5\36\20\2\u00c5\u00c6\7\f"+
+ "\2\2\u00c6\u00c8\5\36\20\2\u00c7\u00c5\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9"+
+ "\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\35\3\2\2\2\u00cb\u00c9\3\2\2"+
+ "\2\u00cc\u00cd\5\20\t\2\u00cd\u00ce\7j\2\2\u00ce\u00d1\3\2\2\2\u00cf\u00d1"+
+ "\7\\\2\2\u00d0\u00cc\3\2\2\2\u00d0\u00cf\3\2\2\2\u00d1\37\3\2\2\2\u00d2"+
+ "\u00d3\7*\2\2\u00d3\u00d4\7+\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\7\b\2"+
+ "\2\u00d6\u00db\7a\2\2\u00d7\u00d8\7\f\2\2\u00d8\u00da\7a\2\2\u00d9\u00d7"+
+ "\3\2\2\2\u00da\u00dd\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc"+
+ "\u00de\3\2\2\2\u00dd\u00db\3\2\2\2\u00de\u011d\7\t\2\2\u00df\u00e0\7*"+
+ "\2\2\u00e0\u00e1\7,\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\7\b\2\2\u00e3"+
+ "\u00e4\7a\2\2\u00e4\u011d\7\t\2\2\u00e5\u00e6\7*\2\2\u00e6\u00e7\7-\2"+
+ "\2\u00e7\u00e8\3\2\2\2\u00e8\u00e9\7\b\2\2\u00e9\u00ea\7j\2\2\u00ea\u011d"+
+ "\7\t\2\2\u00eb\u00ec\7*\2\2\u00ec\u00ed\7/\2\2\u00ed\u00ee\3\2\2\2\u00ee"+
+ "\u00ef\7\b\2\2\u00ef\u00f0\7j\2\2\u00f0\u011d\7\t\2\2\u00f1\u00f2\7*\2"+
+ "\2\u00f2\u00f3\7.\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f5\7\b\2\2\u00f5\u00f6"+
+ "\7_\2\2\u00f6\u011d\7\t\2\2\u00f7\u00f8\7*\2\2\u00f8\u00f9\7\60\2\2\u00f9"+
+ "\u00fa\3\2\2\2\u00fa\u00fb\7\b\2\2\u00fb\u00fc\7j\2\2\u00fc\u011d\7\t"+
+ "\2\2\u00fd\u00fe\7*\2\2\u00fe\u00ff\7\61\2\2\u00ff\u0100\3\2\2\2\u0100"+
+ "\u0101\7\b\2\2\u0101\u0102\7j\2\2\u0102\u011d\7\t\2\2\u0103\u0104\7*\2"+
+ "\2\u0104\u0105\7\62\2\2\u0105\u0106\3\2\2\2\u0106\u0107\7\b\2\2\u0107"+
+ "\u0108\7j\2\2\u0108\u011d\7\t\2\2\u0109\u010a\7*\2\2\u010a\u010b\7A\2"+
+ "\2\u010b\u010c\3\2\2\2\u010c\u010d\7\b\2\2\u010d\u010e\7B\2\2\u010e\u011d"+
+ "\7\t\2\2\u010f\u0110\7*\2\2\u0110\u0111\7C\2\2\u0111\u0112\3\2\2\2\u0112"+
+ "\u0113\7\b\2\2\u0113\u0118\7j\2\2\u0114\u0115\7\f\2\2\u0115\u0117\7j\2"+
+ "\2\u0116\u0114\3\2\2\2\u0117\u011a\3\2\2\2\u0118\u0116\3\2\2\2\u0118\u0119"+
+ "\3\2\2\2\u0119\u011b\3\2\2\2\u011a\u0118\3\2\2\2\u011b\u011d\7\t\2\2\u011c"+
+ "\u00d2\3\2\2\2\u011c\u00df\3\2\2\2\u011c\u00e5\3\2\2\2\u011c\u00eb\3\2"+
+ "\2\2\u011c\u00f1\3\2\2\2\u011c\u00f7\3\2\2\2\u011c\u00fd\3\2\2\2\u011c"+
+ "\u0103\3\2\2\2\u011c\u0109\3\2\2\2\u011c\u010f\3\2\2\2\u011d!\3\2\2\2"+
+ "\u011e\u0149\7\63\2\2\u011f\u0120\7\66\2\2\u0120\u0121\7\b\2\2\u0121\u0122"+
+ "\7a\2\2\u0122\u0149\7\t\2\2\u0123\u0127\7;\2\2\u0124\u0125\7\b\2\2\u0125"+
+ "\u0126\7j\2\2\u0126\u0128\7\t\2\2\u0127\u0124\3\2\2\2\u0127\u0128\3\2"+
+ "\2\2\u0128\u0149\3\2\2\2\u0129\u0149\7=\2\2\u012a\u0149\7>\2\2\u012b\u012c"+
+ "\7<\2\2\u012c\u012d\7\b\2\2\u012d\u012e\7a\2\2\u012e\u0149\7\t\2\2\u012f"+
+ "\u0149\78\2\2\u0130\u0149\79\2\2\u0131\u0149\7?\2\2\u0132\u0149\7@\2\2"+
+ "\u0133\u0149\7\64\2\2\u0134\u0149\7\65\2\2\u0135\u0149\7\67\2\2\u0136"+
+ "\u013a\7:\2\2\u0137\u0138\7\b\2\2\u0138\u0139\7j\2\2\u0139\u013b\7\t\2"+
+ "\2\u013a\u0137\3\2\2\2\u013a\u013b\3\2\2\2\u013b\u0149\3\2\2\2\u013c\u013d"+
+ "\7+\2\2\u013d\u013e\7\b\2\2\u013e\u0143\7a\2\2\u013f\u0140\7\f\2\2\u0140"+
+ "\u0142\7a\2\2\u0141\u013f\3\2\2\2\u0142\u0145\3\2\2\2\u0143\u0141\3\2"+
+ "\2\2\u0143\u0144\3\2\2\2\u0144\u0146\3\2\2\2\u0145\u0143\3\2\2\2\u0146"+
+ "\u0149\7\t\2\2\u0147\u0149\7B\2\2\u0148\u011e\3\2\2\2\u0148\u011f\3\2"+
+ "\2\2\u0148\u0123\3\2\2\2\u0148\u0129\3\2\2\2\u0148\u012a\3\2\2\2\u0148"+
+ "\u012b\3\2\2\2\u0148\u012f\3\2\2\2\u0148\u0130\3\2\2\2\u0148\u0131\3\2"+
+ "\2\2\u0148\u0132\3\2\2\2\u0148\u0133\3\2\2\2\u0148\u0134\3\2\2\2\u0148"+
+ "\u0135\3\2\2\2\u0148\u0136\3\2\2\2\u0148\u013c\3\2\2\2\u0148\u0147\3\2"+
+ "\2\2\u0149#\3\2\2\2\u014a\u014c\5&\24\2\u014b\u014a\3\2\2\2\u014c\u014d"+
+ "\3\2\2\2\u014d\u014b\3\2\2\2\u014d\u014e\3\2\2\2\u014e%\3\2\2\2\u014f"+
+ "\u0150\5\22\n\2\u0150\u0151\7\n\2\2\u0151\u01a4\3\2\2\2\u0152\u0154\7"+
+ "\4\2\2\u0153\u0155\5$\23\2\u0154\u0153\3\2\2\2\u0154\u0155\3\2\2\2\u0155"+
+ "\u0156\3\2\2\2\u0156\u01a4\7\5\2\2\u0157\u0158\5@!\2\u0158\u0159\7\n\2"+
+ "\2\u0159\u01a4\3\2\2\2\u015a\u015b\7D\2\2\u015b\u015c\7\b\2\2\u015c\u015d"+
+ "\5@!\2\u015d\u015e\7\t\2\2\u015e\u0161\5&\24\2\u015f\u0160\7E\2\2\u0160"+
+ "\u0162\5&\24\2\u0161\u015f\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u01a4\3\2"+
+ "\2\2\u0163\u0165\5\"\22\2\u0164\u0163\3\2\2\2\u0165\u0168\3\2\2\2\u0166"+
+ "\u0164\3\2\2\2\u0166\u0167\3\2\2\2\u0167\u0169\3\2\2\2\u0168\u0166\3\2"+
+ "\2\2\u0169\u016a\7F\2\2\u016a\u016b\7\b\2\2\u016b\u016c\5@!\2\u016c\u016d"+
+ "\7\t\2\2\u016d\u016e\5&\24\2\u016e\u01a4\3\2\2\2\u016f\u0171\5\"\22\2"+
+ "\u0170\u016f\3\2\2\2\u0171\u0174\3\2\2\2\u0172\u0170\3\2\2\2\u0172\u0173"+
+ "\3\2\2\2\u0173\u0175\3\2\2\2\u0174\u0172\3\2\2\2\u0175\u0176\7G\2\2\u0176"+
+ "\u0177\5&\24\2\u0177\u0178\7F\2\2\u0178\u0179\7\b\2\2\u0179\u017a\5@!"+
+ "\2\u017a\u017b\7\t\2\2\u017b\u017c\7\n\2\2\u017c\u01a4\3\2\2\2\u017d\u017f"+
+ "\5\"\22\2\u017e\u017d\3\2\2\2\u017f\u0182\3\2\2\2\u0180\u017e\3\2\2\2"+
+ "\u0180\u0181\3\2\2\2\u0181\u0183\3\2\2\2\u0182\u0180\3\2\2\2\u0183\u0184"+
+ "\7H\2\2\u0184\u0185\7\b\2\2\u0185\u0186\5,\27\2\u0186\u0187\7\t\2\2\u0187"+
+ "\u0188\5&\24\2\u0188\u01a4\3\2\2\2\u0189\u018a\7I\2\2\u018a\u018b\7\b"+
+ "\2\2\u018b\u018c\5@!\2\u018c\u018d\7\t\2\2\u018d\u018e\7\4\2\2\u018e\u018f"+
+ "\5(\25\2\u018f\u0190\7\5\2\2\u0190\u01a4\3\2\2\2\u0191\u0193\7J\2\2\u0192"+
+ "\u0194\5@!\2\u0193\u0192\3\2\2\2\u0193\u0194\3\2\2\2\u0194\u0195\3\2\2"+
+ "\2\u0195\u01a4\7\n\2\2\u0196\u0197\7K\2\2\u0197\u01a4\7\n\2\2\u0198\u0199"+
+ "\7L\2\2\u0199\u01a4\7\n\2\2\u019a\u019c\7M\2\2\u019b\u019d\5H%\2\u019c"+
+ "\u019b\3\2\2\2\u019c\u019d\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u019f\7\4"+
+ "\2\2\u019f\u01a0\5L\'\2\u01a0\u01a1\7\u0081\2\2\u01a1\u01a4\3\2\2\2\u01a2"+
+ "\u01a4\5F$\2\u01a3\u014f\3\2\2\2\u01a3\u0152\3\2\2\2\u01a3\u0157\3\2\2"+
+ "\2\u01a3\u015a\3\2\2\2\u01a3\u0166\3\2\2\2\u01a3\u0172\3\2\2\2\u01a3\u0180"+
+ "\3\2\2\2\u01a3\u0189\3\2\2\2\u01a3\u0191\3\2\2\2\u01a3\u0196\3\2\2\2\u01a3"+
+ "\u0198\3\2\2\2\u01a3\u019a\3\2\2\2\u01a3\u01a2\3\2\2\2\u01a4\'\3\2\2\2"+
+ "\u01a5\u01a7\5*\26\2\u01a6\u01a5\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8\u01a6"+
+ "\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01af\3\2\2\2\u01aa\u01ab\7N\2\2\u01ab"+
+ "\u01ad\7\13\2\2\u01ac\u01ae\5$\23\2\u01ad\u01ac\3\2\2\2\u01ad\u01ae\3"+
+ "\2\2\2\u01ae\u01b0\3\2\2\2\u01af\u01aa\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0"+
+ ")\3\2\2\2\u01b1\u01b2\7O\2\2\u01b2\u01b3\5B\"\2\u01b3\u01b5\7\13\2\2\u01b4"+
+ "\u01b6\5$\23\2\u01b5\u01b4\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6+\3\2\2\2"+
+ "\u01b7\u01b8\5.\30\2\u01b8\u01b9\7\n\2\2\u01b9\u01ba\5@!\2\u01ba\u01bc"+
+ "\7\n\2\2\u01bb\u01bd\5@!\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd"+
+ "\u01c8\3\2\2\2\u01be\u01c0\5\20\t\2\u01bf\u01be\3\2\2\2\u01bf\u01c0\3"+
+ "\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c2\7j\2\2\u01c2\u01c3\7\13\2\2\u01c3"+
+ "\u01c4\5B\"\2\u01c4\u01c5\7\r\2\2\u01c5\u01c6\5B\"\2\u01c6\u01c8\3\2\2"+
+ "\2\u01c7\u01b7\3\2\2\2\u01c7\u01bf\3\2\2\2\u01c8-\3\2\2\2\u01c9\u01cb"+
+ "\5\22\n\2\u01ca\u01c9\3\2\2\2\u01ca\u01cb\3\2\2\2\u01cb\u01ce\3\2\2\2"+
+ "\u01cc\u01ce\5@!\2\u01cd\u01ca\3\2\2\2\u01cd\u01cc\3\2\2\2\u01ce/\3\2"+
+ "\2\2\u01cf\u01d0\b\31\1\2\u01d0\u01d1\7\b\2\2\u01d1\u01d2\5\60\31\2\u01d2"+
+ "\u01d3\7\t\2\2\u01d3\u01df\3\2\2\2\u01d4\u01df\7\\\2\2\u01d5\u01d7\7["+
+ "\2\2\u01d6\u01d8\7\\\2\2\u01d7\u01d6\3\2\2\2\u01d7\u01d8\3\2\2\2\u01d8"+
+ "\u01df\3\2\2\2\u01d9\u01df\5\64\33\2\u01da\u01df\5\62\32\2\u01db\u01df"+
+ "\5:\36\2\u01dc\u01df\58\35\2\u01dd\u01df\7\3\2\2\u01de\u01cf\3\2\2\2\u01de"+
+ "\u01d4\3\2\2\2\u01de\u01d5\3\2\2\2\u01de\u01d9\3\2\2\2\u01de\u01da\3\2"+
+ "\2\2\u01de\u01db\3\2\2\2\u01de\u01dc\3\2\2\2\u01de\u01dd\3\2\2\2\u01df"+
+ "\u01ed\3\2\2\2\u01e0\u01e1\f\n\2\2\u01e1\u01ec\7\23\2\2\u01e2\u01e3\f"+
+ "\t\2\2\u01e3\u01e5\7\6\2\2\u01e4\u01e6\5B\"\2\u01e5\u01e4\3\2\2\2\u01e5"+
+ "\u01e6\3\2\2\2\u01e6\u01e7\3\2\2\2\u01e7\u01ec\7\7\2\2\u01e8\u01e9\f\b"+
+ "\2\2\u01e9\u01ea\7\b\2\2\u01ea\u01ec\7\t\2\2\u01eb\u01e0\3\2\2\2\u01eb"+
+ "\u01e2\3\2\2\2\u01eb\u01e8\3\2\2\2\u01ec\u01ef\3\2\2\2\u01ed\u01eb\3\2"+
+ "\2\2\u01ed\u01ee\3\2\2\2\u01ee\61\3\2\2\2\u01ef\u01ed\3\2\2\2\u01f0\u01f1"+
+ "\7P\2\2\u01f1\u01f2\7j\2\2\u01f2\63\3\2\2\2\u01f3\u01f5\7P\2\2\u01f4\u01f6"+
+ "\7j\2\2\u01f5\u01f4\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7"+
+ "\u01f9\7\4\2\2\u01f8\u01fa\5\66\34\2\u01f9\u01f8\3\2\2\2\u01fa\u01fb\3"+
+ "\2\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fd\3\2\2\2\u01fd"+
+ "\u01fe\7\5\2\2\u01fe\65\3\2\2\2\u01ff\u0200\5\22\n\2\u0200\u0201\7\n\2"+
+ "\2\u0201\67\3\2\2\2\u0202\u0203\7Q\2\2\u0203\u0204\7j\2\2\u02049\3\2\2"+
+ "\2\u0205\u0207\7Q\2\2\u0206\u0208\7j\2\2\u0207\u0206\3\2\2\2\u0207\u0208"+
+ "\3\2\2\2\u0208\u0209\3\2\2\2\u0209\u020a\7\4\2\2\u020a\u020b\5<\37\2\u020b"+
+ "\u020c\7\5\2\2\u020c;\3\2\2\2\u020d\u020e\b\37\1\2\u020e\u020f\5> \2\u020f"+
+ "\u0215\3\2\2\2\u0210\u0211\f\3\2\2\u0211\u0212\7\f\2\2\u0212\u0214\5>"+
+ " \2\u0213\u0210\3\2\2\2\u0214\u0217\3\2\2\2\u0215\u0213\3\2\2\2\u0215"+
+ "\u0216\3\2\2\2\u0216=\3\2\2\2\u0217\u0215\3\2\2\2\u0218\u021b\7j\2\2\u0219"+
+ "\u021a\7&\2\2\u021a\u021c\5B\"\2\u021b\u0219\3\2\2\2\u021b\u021c\3\2\2"+
+ "\2\u021c?\3\2\2\2\u021d\u021e\b!\1\2\u021e\u021f\5B\"\2\u021f\u0225\3"+
+ "\2\2\2\u0220\u0221\f\3\2\2\u0221\u0222\7\f\2\2\u0222\u0224\5B\"\2\u0223"+
+ "\u0220\3\2\2\2\u0224\u0227\3\2\2\2\u0225\u0223\3\2\2\2\u0225\u0226\3\2"+
+ "\2\2\u0226A\3\2\2\2\u0227\u0225\3\2\2\2\u0228\u0229\b\"\1\2\u0229\u022a"+
+ "\7\b\2\2\u022a\u022b\5@!\2\u022b\u022c\7\t\2\2\u022c\u025f\3\2\2\2\u022d"+
+ "\u022e\7R\2\2\u022e\u0231\7\b\2\2\u022f\u0232\5B\"\2\u0230\u0232\5\60"+
+ "\31\2\u0231\u022f\3\2\2\2\u0231\u0230\3\2\2\2\u0232\u0233\3\2\2\2\u0233"+
+ "\u0234\7\t\2\2\u0234\u025f\3\2\2\2\u0235\u0236\7S\2\2\u0236\u0239\7\b"+
+ "\2\2\u0237\u023a\5B\"\2\u0238\u023a\5\60\31\2\u0239\u0237\3\2\2\2\u0239"+
+ "\u0238\3\2\2\2\u023a\u023b\3\2\2\2\u023b\u023c\7\t\2\2\u023c\u025f\3\2"+
+ "\2\2\u023d\u023e\7\b\2\2\u023e\u023f\5\60\31\2\u023f\u0240\7\t\2\2\u0240"+
+ "\u0241\5B\"\32\u0241\u025f\3\2\2\2\u0242\u0243\t\2\2\2\u0243\u025f\5B"+
+ "\"\31\u0244\u0245\7\23\2\2\u0245\u025f\5B\"\27\u0246\u0247\t\3\2\2\u0247"+
+ "\u025f\5B\"\26\u0248\u0249\t\4\2\2\u0249\u025f\5B\"\22\u024a\u024b\7\4"+
+ "\2\2\u024b\u0250\5B\"\2\u024c\u024d\7\f\2\2\u024d\u024f\5B\"\2\u024e\u024c"+
+ "\3\2\2\2\u024f\u0252\3\2\2\2\u0250\u024e\3\2\2\2\u0250\u0251\3\2\2\2\u0251"+
+ "\u0253\3\2\2\2\u0252\u0250\3\2\2\2\u0253\u0254\7\5\2\2\u0254\u025f\3\2"+
+ "\2\2\u0255\u025f\7j\2\2\u0256\u025f\7a\2\2\u0257\u0259\7_\2\2\u0258\u0257"+
+ "\3\2\2\2\u0259\u025a\3\2\2\2\u025a\u0258\3\2\2\2\u025a\u025b\3\2\2\2\u025b"+
+ "\u025f\3\2\2\2\u025c\u025f\7`\2\2\u025d\u025f\7]\2\2\u025e\u0228\3\2\2"+
+ "\2\u025e\u022d\3\2\2\2\u025e\u0235\3\2\2\2\u025e\u023d\3\2\2\2\u025e\u0242"+
+ "\3\2\2\2\u025e\u0244\3\2\2\2\u025e\u0246\3\2\2\2\u025e\u0248\3\2\2\2\u025e"+
+ "\u024a\3\2\2\2\u025e\u0255\3\2\2\2\u025e\u0256\3\2\2\2\u025e\u0258\3\2"+
+ "\2\2\u025e\u025c\3\2\2\2\u025e\u025d\3\2\2\2\u025f\u029c\3\2\2\2\u0260"+
+ "\u0261\f\25\2\2\u0261\u0262\t\5\2\2\u0262\u029b\5B\"\26\u0263\u0264\f"+
+ "\24\2\2\u0264\u0265\t\6\2\2\u0265\u029b\5B\"\25\u0266\u0267\f\23\2\2\u0267"+
+ "\u0268\t\7\2\2\u0268\u029b\5B\"\24\u0269\u026a\f\21\2\2\u026a\u026b\t"+
+ "\b\2\2\u026b\u029b\5B\"\22\u026c\u026d\f\20\2\2\u026d\u026e\7\30\2\2\u026e"+
+ "\u029b\5B\"\21\u026f\u0270\f\17\2\2\u0270\u0271\7\32\2\2\u0271\u029b\5"+
+ "B\"\20\u0272\u0273\f\16\2\2\u0273\u0274\7\33\2\2\u0274\u029b\5B\"\17\u0275"+
+ "\u0276\f\r\2\2\u0276\u0277\7$\2\2\u0277\u029b\5B\"\16\u0278\u0279\f\f"+
+ "\2\2\u0279\u027a\7%\2\2\u027a\u029b\5B\"\r\u027b\u027c\f\13\2\2\u027c"+
+ "\u027d\7\16\2\2\u027d\u027e\5B\"\2\u027e\u027f\7\13\2\2\u027f\u0280\5"+
+ "B\"\f\u0280\u029b\3\2\2\2\u0281\u0282\f\n\2\2\u0282\u0283\7&\2\2\u0283"+
+ "\u029b\5B\"\n\u0284\u0285\f\t\2\2\u0285\u0286\7\'\2\2\u0286\u029b\5B\""+
+ "\t\u0287\u0288\f \2\2\u0288\u0289\7\17\2\2\u0289\u029b\7j\2\2\u028a\u028b"+
+ "\f\37\2\2\u028b\u028c\7\20\2\2\u028c\u029b\7j\2\2\u028d\u028e\f\36\2\2"+
+ "\u028e\u0290\7\b\2\2\u028f\u0291\5D#\2\u0290\u028f\3\2\2\2\u0290\u0291"+
+ "\3\2\2\2\u0291\u0292\3\2\2\2\u0292\u029b\7\t\2\2\u0293\u0294\f\33\2\2"+
+ "\u0294\u0295\7\6\2\2\u0295\u0296\5@!\2\u0296\u0297\7\7\2\2\u0297\u029b"+
+ "\3\2\2\2\u0298\u0299\f\30\2\2\u0299\u029b\t\2\2\2\u029a\u0260\3\2\2\2"+
+ "\u029a\u0263\3\2\2\2\u029a\u0266\3\2\2\2\u029a\u0269\3\2\2\2\u029a\u026c"+
+ "\3\2\2\2\u029a\u026f\3\2\2\2\u029a\u0272\3\2\2\2\u029a\u0275\3\2\2\2\u029a"+
+ "\u0278\3\2\2\2\u029a\u027b\3\2\2\2\u029a\u0281\3\2\2\2\u029a\u0284\3\2"+
+ "\2\2\u029a\u0287\3\2\2\2\u029a\u028a\3\2\2\2\u029a\u028d\3\2\2\2\u029a"+
+ "\u0293\3\2\2\2\u029a\u0298\3\2\2\2\u029b\u029e\3\2\2\2\u029c\u029a\3\2"+
+ "\2\2\u029c\u029d\3\2\2\2\u029dC\3\2\2\2\u029e\u029c\3\2\2\2\u029f\u02a4"+
+ "\5B\"\2\u02a0\u02a1\7\f\2\2\u02a1\u02a3\5B\"\2\u02a2\u02a0\3\2\2\2\u02a3"+
+ "\u02a6\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a5\3\2\2\2\u02a5E\3\2\2\2"+
+ "\u02a6\u02a4\3\2\2\2\u02a7\u02a9\7T\2\2\u02a8\u02aa\5H%\2\u02a9\u02a8"+
+ "\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab\u02ac\7^\2\2\u02ac"+
+ "G\3\2\2\2\u02ad\u02ae\7\b\2\2\u02ae\u02b3\5J&\2\u02af\u02b0\7\f\2\2\u02b0"+
+ "\u02b2\5J&\2\u02b1\u02af\3\2\2\2\u02b2\u02b5\3\2\2\2\u02b3\u02b1\3\2\2"+
+ "\2\u02b3\u02b4\3\2\2\2\u02b4\u02b6\3\2\2\2\u02b5\u02b3\3\2\2\2\u02b6\u02b7"+
+ "\7\t\2\2\u02b7I\3\2\2\2\u02b8\u02b9\7U\2\2\u02b9\u02c8\7_\2\2\u02ba\u02bb"+
+ "\7V\2\2\u02bb\u02c8\7j\2\2\u02bc\u02bd\7W\2\2\u02bd\u02c8\7_\2\2\u02be"+
+ "\u02bf\7X\2\2\u02bf\u02c8\5B\"\2\u02c0\u02c1\7Y\2\2\u02c1\u02c8\5B\"\2"+
+ "\u02c2\u02c5\7,\2\2\u02c3\u02c6\7\67\2\2\u02c4\u02c6\5B\"\2\u02c5\u02c3"+
+ "\3\2\2\2\u02c5\u02c4\3\2\2\2\u02c6\u02c8\3\2\2\2\u02c7\u02b8\3\2\2\2\u02c7"+
+ "\u02ba\3\2\2\2\u02c7\u02bc\3\2\2\2\u02c7\u02be\3\2\2\2\u02c7\u02c0\3\2"+
+ "\2\2\u02c7\u02c2\3\2\2\2\u02c8K\3\2\2\2\u02c9\u02cb\5N(\2\u02ca\u02c9"+
+ "\3\2\2\2\u02cb\u02ce\3\2\2\2\u02cc\u02ca\3\2\2\2\u02cc\u02cd\3\2\2\2\u02cd"+
+ "M\3\2\2\2\u02ce\u02cc\3\2\2\2\u02cf\u02d3\5P)\2\u02d0\u02d3\5R*\2\u02d1"+
+ "\u02d3\5T+\2\u02d2\u02cf\3\2\2\2\u02d2\u02d0\3\2\2\2\u02d2\u02d1\3\2\2"+
+ "\2\u02d3O\3\2\2\2\u02d4\u02d5\7\u008e\2\2\u02d5\u02d9\7q\2\2\u02d6\u02d7"+
+ "\7\u008d\2\2\u02d7\u02d9\7q\2\2\u02d8\u02d4\3\2\2\2\u02d8\u02d6\3\2\2"+
+ "\2\u02d9Q\3\2\2\2\u02da\u02dc\7o\2\2\u02db\u02dd\5V,\2\u02dc\u02db\3\2"+
+ "\2\2\u02dc\u02dd\3\2\2\2\u02ddS\3\2\2\2\u02de\u02df\7n\2\2\u02df\u02e4"+
+ "\5X-\2\u02e0\u02e1\7r\2\2\u02e1\u02e3\5X-\2\u02e2\u02e0\3\2\2\2\u02e3"+
+ "\u02e6\3\2\2\2\u02e4\u02e2\3\2\2\2\u02e4\u02e5\3\2\2\2\u02e5U\3\2\2\2"+
+ "\u02e6\u02e4\3\2\2\2\u02e7\u02ff\5X-\2\u02e8\u02e9\7p\2\2\u02e9\u02ff"+
+ "\5X-\2\u02ea\u02eb\5X-\2\u02eb\u02ec\7r\2\2\u02ec\u02ed\7\u008e\2\2\u02ed"+
+ "\u02ff\3\2\2\2\u02ee\u02ef\7s\2\2\u02ef\u02f0\5X-\2\u02f0\u02f1\7t\2\2"+
+ "\u02f1\u02f2\7r\2\2\u02f2\u02f3\7\u008e\2\2\u02f3\u02ff\3\2\2\2\u02f4"+
+ "\u02f5\7s\2\2\u02f5\u02f6\5X-\2\u02f6\u02f7\7r\2\2\u02f7\u02f8\7\u008e"+
+ "\2\2\u02f8\u02f9\7t\2\2\u02f9\u02ff\3\2\2\2\u02fa\u02fb\7s\2\2\u02fb\u02fc"+
+ "\5X-\2\u02fc\u02fd\7t\2\2\u02fd\u02ff\3\2\2\2\u02fe\u02e7\3\2\2\2\u02fe"+
+ "\u02e8\3\2\2\2\u02fe\u02ea\3\2\2\2\u02fe\u02ee\3\2\2\2\u02fe\u02f4\3\2"+
+ "\2\2\u02fe\u02fa\3\2\2\2\u02ffW\3\2\2\2\u0300\u0301\b-\1\2\u0301\u0302"+
+ "\7u\2\2\u0302\u0303\5X-\2\u0303\u0304\7v\2\2\u0304\u030f\3\2\2\2\u0305"+
+ "\u0306\t\t\2\2\u0306\u030f\5X-\n\u0307\u030f\7\u008e\2\2\u0308\u030f\7"+
+ "\u008c\2\2\u0309\u030a\7\u0080\2\2\u030a\u030b\7\u008e\2\2\u030b\u030f"+
+ "\7\u0081\2\2\u030c\u030f\7\u0082\2\2\u030d\u030f\7\u008b\2\2\u030e\u0300"+
+ "\3\2\2\2\u030e\u0305\3\2\2\2\u030e\u0307\3\2\2\2\u030e\u0308\3\2\2\2\u030e"+
+ "\u0309\3\2\2\2\u030e\u030c\3\2\2\2\u030e\u030d\3\2\2\2\u030f\u031e\3\2"+
+ "\2\2\u0310\u0311\f\f\2\2\u0311\u0312\7w\2\2\u0312\u031d\5X-\r\u0313\u0314"+
+ "\f\13\2\2\u0314\u0315\t\n\2\2\u0315\u031d\5X-\f\u0316\u0317\f\t\2\2\u0317"+
+ "\u0318\t\13\2\2\u0318\u031d\5X-\n\u0319\u031a\f\b\2\2\u031a\u031b\t\f"+
+ "\2\2\u031b\u031d\5X-\t\u031c\u0310\3\2\2\2\u031c\u0313\3\2\2\2\u031c\u0316"+
+ "\3\2\2\2\u031c\u0319\3\2\2\2\u031d\u0320\3\2\2\2\u031e\u031c\3\2\2\2\u031e"+
+ "\u031f\3\2\2\2\u031fY\3\2\2\2\u0320\u031e\3\2\2\2Jch|\u0086\u008d\u009b"+
+ "\u00a1\u00a7\u00af\u00b4\u00bb\u00c0\u00c9\u00d0\u00db\u0118\u011c\u0127"+
+ "\u013a\u0143\u0148\u014d\u0154\u0161\u0166\u0172\u0180\u0193\u019c\u01a3"+
+ "\u01a8\u01ad\u01af\u01b5\u01bc\u01bf\u01c7\u01ca\u01cd\u01d7\u01de\u01e5"+
+ "\u01eb\u01ed\u01f5\u01fb\u0207\u0215\u021b\u0225\u0231\u0239\u0250\u025a"+
+ "\u025e\u0290\u029a\u029c\u02a4\u02a9\u02b3\u02c5\u02c7\u02cc\u02d2\u02d8"+
+ "\u02dc\u02e4\u02fe\u030e\u031c\u031e";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens
index 7fbfbc819..2f6bc0fa9 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens
@@ -52,95 +52,95 @@ EXPORT=51
ALIGN=52
INLINE=53
VOLATILE=54
-INTERRUPT=55
-REGISTER=56
-ADDRESS=57
-ADDRESS_ZEROPAGE=58
-ADDRESS_MAINMEM=59
-FORM_SSA=60
-FORM_MA=61
-CALLING=62
-CALLINGCONVENTION=63
-VARMODEL=64
-IF=65
-ELSE=66
-WHILE=67
-DO=68
-FOR=69
-SWITCH=70
-RETURN=71
-BREAK=72
-CONTINUE=73
-ASM=74
-DEFAULT=75
-CASE=76
-STRUCT=77
-ENUM=78
-SIZEOF=79
-TYPEID=80
-KICKASM=81
-RESOURCE=82
-USES=83
-CLOBBERS=84
-BYTES=85
-CYCLES=86
-LOGIC_NOT=87
-SIGNEDNESS=88
-SIMPLETYPE=89
-BOOLEAN=90
-KICKASM_BODY=91
-STRING=92
-CHAR=93
-NUMBER=94
-NUMFLOAT=95
-BINFLOAT=96
-DECFLOAT=97
-HEXFLOAT=98
-NUMINT=99
-BININTEGER=100
-DECINTEGER=101
-HEXINTEGER=102
-NAME=103
-WS=104
-COMMENT_LINE=105
-COMMENT_BLOCK=106
-ASM_BYTE=107
-ASM_MNEMONIC=108
-ASM_IMM=109
-ASM_COLON=110
-ASM_COMMA=111
-ASM_PAR_BEGIN=112
-ASM_PAR_END=113
-ASM_BRACKET_BEGIN=114
-ASM_BRACKET_END=115
-ASM_DOT=116
-ASM_SHIFT_LEFT=117
-ASM_SHIFT_RIGHT=118
-ASM_PLUS=119
-ASM_MINUS=120
-ASM_LESS_THAN=121
-ASM_GREATER_THAN=122
-ASM_MULTIPLY=123
-ASM_DIVIDE=124
-ASM_CURLY_BEGIN=125
-ASM_CURLY_END=126
-ASM_NUMBER=127
-ASM_NUMFLOAT=128
-ASM_BINFLOAT=129
-ASM_DECFLOAT=130
-ASM_HEXFLOAT=131
-ASM_NUMINT=132
-ASM_BININTEGER=133
-ASM_DECINTEGER=134
-ASM_HEXINTEGER=135
-ASM_CHAR=136
-ASM_MULTI_REL=137
-ASM_MULTI_NAME=138
-ASM_NAME=139
-ASM_WS=140
-ASM_COMMENT_LINE=141
-ASM_COMMENT_BLOCK=142
-STATIC=143
+STATIC=55
+INTERRUPT=56
+REGISTER=57
+ADDRESS=58
+ADDRESS_ZEROPAGE=59
+ADDRESS_MAINMEM=60
+FORM_SSA=61
+FORM_MA=62
+CALLING=63
+CALLINGCONVENTION=64
+VARMODEL=65
+IF=66
+ELSE=67
+WHILE=68
+DO=69
+FOR=70
+SWITCH=71
+RETURN=72
+BREAK=73
+CONTINUE=74
+ASM=75
+DEFAULT=76
+CASE=77
+STRUCT=78
+ENUM=79
+SIZEOF=80
+TYPEID=81
+KICKASM=82
+RESOURCE=83
+USES=84
+CLOBBERS=85
+BYTES=86
+CYCLES=87
+LOGIC_NOT=88
+SIGNEDNESS=89
+SIMPLETYPE=90
+BOOLEAN=91
+KICKASM_BODY=92
+STRING=93
+CHAR=94
+NUMBER=95
+NUMFLOAT=96
+BINFLOAT=97
+DECFLOAT=98
+HEXFLOAT=99
+NUMINT=100
+BININTEGER=101
+DECINTEGER=102
+HEXINTEGER=103
+NAME=104
+WS=105
+COMMENT_LINE=106
+COMMENT_BLOCK=107
+ASM_BYTE=108
+ASM_MNEMONIC=109
+ASM_IMM=110
+ASM_COLON=111
+ASM_COMMA=112
+ASM_PAR_BEGIN=113
+ASM_PAR_END=114
+ASM_BRACKET_BEGIN=115
+ASM_BRACKET_END=116
+ASM_DOT=117
+ASM_SHIFT_LEFT=118
+ASM_SHIFT_RIGHT=119
+ASM_PLUS=120
+ASM_MINUS=121
+ASM_LESS_THAN=122
+ASM_GREATER_THAN=123
+ASM_MULTIPLY=124
+ASM_DIVIDE=125
+ASM_CURLY_BEGIN=126
+ASM_CURLY_END=127
+ASM_NUMBER=128
+ASM_NUMFLOAT=129
+ASM_BINFLOAT=130
+ASM_DECFLOAT=131
+ASM_HEXFLOAT=132
+ASM_NUMINT=133
+ASM_BININTEGER=134
+ASM_DECINTEGER=135
+ASM_HEXINTEGER=136
+ASM_CHAR=137
+ASM_MULTI_REL=138
+ASM_MULTI_NAME=139
+ASM_NAME=140
+ASM_WS=141
+ASM_COMMENT_LINE=142
+ASM_COMMENT_BLOCK=143
';'=8
'..'=11
'?'=12
@@ -176,37 +176,38 @@ STATIC=143
'align'=52
'inline'=53
'volatile'=54
-'interrupt'=55
-'register'=56
-'__address'=57
-'__zp'=58
-'__mem'=59
-'__ssa'=60
-'__ma'=61
-'calling'=62
-'var_model'=64
-'if'=65
-'else'=66
-'while'=67
-'do'=68
-'for'=69
-'switch'=70
-'return'=71
-'break'=72
-'continue'=73
-'asm'=74
-'default'=75
-'case'=76
-'struct'=77
-'enum'=78
-'sizeof'=79
-'typeid'=80
-'kickasm'=81
-'resource'=82
-'uses'=83
-'clobbers'=84
-'bytes'=85
-'cycles'=86
-'!'=87
-'.byte'=107
-'#'=109
+'static'=55
+'interrupt'=56
+'register'=57
+'__address'=58
+'__zp'=59
+'__mem'=60
+'__ssa'=61
+'__ma'=62
+'calling'=63
+'var_model'=65
+'if'=66
+'else'=67
+'while'=68
+'do'=69
+'for'=70
+'switch'=71
+'return'=72
+'break'=73
+'continue'=74
+'asm'=75
+'default'=76
+'case'=77
+'struct'=78
+'enum'=79
+'sizeof'=80
+'typeid'=81
+'kickasm'=82
+'resource'=83
+'uses'=84
+'clobbers'=85
+'bytes'=86
+'cycles'=87
+'!'=88
+'.byte'=108
+'#'=110
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java
index 1df4bfc54..bd453b356 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java
@@ -157,6 +157,30 @@ public class KickCParserBaseListener implements KickCParserListener {
* The default implementation does nothing.
*/
@Override public void exitDeclVariableInitKasm(KickCParser.DeclVariableInitKasmContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterDeclVariableArray(KickCParser.DeclVariableArrayContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitDeclVariableArray(KickCParser.DeclVariableArrayContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterDeclVariableName(KickCParser.DeclVariableNameContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitDeclVariableName(KickCParser.DeclVariableNameContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java
index 5340fd937..e044d6d79 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java
@@ -97,6 +97,20 @@ public class KickCParserBaseVisitor extends AbstractParseTreeVisitor imple
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitDeclVariableInitKasm(KickCParser.DeclVariableInitKasmContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitDeclVariableArray(KickCParser.DeclVariableArrayContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitDeclVariableName(KickCParser.DeclVariableNameContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java
index a78a45602..c9cbff122 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java
@@ -133,6 +133,30 @@ public interface KickCParserListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitDeclVariableInitKasm(KickCParser.DeclVariableInitKasmContext ctx);
+ /**
+ * Enter a parse tree produced by the {@code declVariableArray}
+ * labeled alternative in {@link KickCParser#declVariable}.
+ * @param ctx the parse tree
+ */
+ void enterDeclVariableArray(KickCParser.DeclVariableArrayContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code declVariableArray}
+ * labeled alternative in {@link KickCParser#declVariable}.
+ * @param ctx the parse tree
+ */
+ void exitDeclVariableArray(KickCParser.DeclVariableArrayContext ctx);
+ /**
+ * Enter a parse tree produced by the {@code declVariableName}
+ * labeled alternative in {@link KickCParser#declVariable}.
+ * @param ctx the parse tree
+ */
+ void enterDeclVariableName(KickCParser.DeclVariableNameContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code declVariableName}
+ * labeled alternative in {@link KickCParser#declVariable}.
+ * @param ctx the parse tree
+ */
+ void exitDeclVariableName(KickCParser.DeclVariableNameContext ctx);
/**
* Enter a parse tree produced by {@link KickCParser#declFunction}.
* @param ctx the parse tree
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java
index 6fcc33fba..6e853527b 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java
@@ -86,6 +86,20 @@ public interface KickCParserVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitDeclVariableInitKasm(KickCParser.DeclVariableInitKasmContext ctx);
+ /**
+ * Visit a parse tree produced by the {@code declVariableArray}
+ * labeled alternative in {@link KickCParser#declVariable}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitDeclVariableArray(KickCParser.DeclVariableArrayContext ctx);
+ /**
+ * Visit a parse tree produced by the {@code declVariableName}
+ * labeled alternative in {@link KickCParser#declVariable}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitDeclVariableName(KickCParser.DeclVariableNameContext ctx);
/**
* Visit a parse tree produced by {@link KickCParser#declFunction}.
* @param ctx the parse tree
diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java
index 013cd44ab..6296c7abe 100644
--- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java
+++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java
@@ -567,11 +567,11 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor(val+$80);
}
@@ -385,7 +385,7 @@ void rotate_matrix(signed char x, signed char y, signed char z) {
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
// f(x) = >(( x * x ))
-char[0x200] align(0x100) mulf_sqr1 = kickasm {{
+char align(0x100) mulf_sqr1[0x200] = kickasm {{
.for(var i=0;i<$200;i++) {
.if(i<=159) { .byte round((i*i)/256) }
.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
@@ -394,7 +394,7 @@ char[0x200] align(0x100) mulf_sqr1 = kickasm {{
}};
// g(x) = >((( 1 - x ) * ( 1 - x )))
-char[0x200] align(0x100) mulf_sqr2 = kickasm {{
+char align(0x100) mulf_sqr2[0x200] = kickasm {{
.for(var i=0;i<$200;i++) {
.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
@@ -419,8 +419,8 @@ byte[512] align($100) mulf_sqr2;
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x) and g(x) = f(1-x)
void mulf_init() {
- signed word sqr = 0;
- signed word add = 1;
+ signed int sqr = 0;
+ signed int add = 1;
for( byte i:0..128) {
byte val = >sqr;
mulf_sqr1[i] = val;
@@ -447,7 +447,7 @@ kickasm(pc SPRITE, resource "balloon.png") {{
}}
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
-signed char[0x100] align(0x100) PERSP_Z = kickasm {{
+signed char align(0x100) PERSP_Z[0x100] = kickasm {{
{
.var d = 256.0
.var z0 = 6.0
@@ -465,7 +465,7 @@ signed char[0x100] align(0x100) PERSP_Z = kickasm {{
// Sine and Cosine Tables
// Angles: $00=0, $80=PI,$100=2*PI
// Half Sine/Cosine: signed fixed [-$20;20]
-signed char[0x140] align(0x40) SINH = kickasm {{
+signed char align(0x40) SINH[0x140] = kickasm {{
{
.var min = -$2000
.var max = $2000
@@ -479,7 +479,7 @@ signed char[0x140] align(0x40) SINH = kickasm {{
signed char* COSH = SINH+$40; // sin(x) = cos(x+PI/2)
// Quarter Sine/Cosine: signed fixed [-$10,$10]
-signed char[0x140] align(0x40) SINQ = kickasm {{
+signed char align(0x40) SINQ[0x140] = kickasm {{
{
.var min = -$1000
.var max = $1000
@@ -495,7 +495,7 @@ signed char* COSQ = SINQ+$40; // sin(x) = cos(x+PI/2)
// 16 bit Sine and Cosine Tables
// Angles: $00=0, $80=PI,$100=2*PI
// Half Sine/Cosine: signed fixed [-$1f,$1f]
-char[0x140] align(0x40) SINH_LO = kickasm {{
+char align(0x40) SINH_LO[0x140] = kickasm {{
{
.var min = -$2000
.var max = $2000
@@ -508,7 +508,7 @@ char[0x140] align(0x40) SINH_LO = kickasm {{
}};
char* COSH_LO = SINH_LO+$40; // sin(x) = cos(x+PI/2)
-char[0x140] align(0x40) SINH_HI = kickasm {{
+char align(0x40) SINH_HI[0x140] = kickasm {{
{
.var min = -$2000
.var max = $2000
@@ -522,7 +522,7 @@ char[0x140] align(0x40) SINH_HI = kickasm {{
char* COSH_HI = SINH_HI+$40; // sin(x) = cos(x+PI/2)
// Quarter Sine/Cosine: signed fixed [-$0f,$0f]
-char[0x140] align(0x40) SINQ_LO = kickasm {{
+char align(0x40) SINQ_LO[0x140] = kickasm {{
{
.var min = -$1000
.var max = $1000
@@ -535,7 +535,7 @@ char[0x140] align(0x40) SINQ_LO = kickasm {{
}};
char* COSQ_LO = SINQ_LO+$40; // sin(x) = cos(x+PI/2)
-char[0x140] align(0x40) SINQ_HI = kickasm {{
+char align(0x40) SINQ_HI[0x140] = kickasm {{
{
.var min = -$1000
.var max = $1000
diff --git a/src/test/kc/examples/3d/perspective.kc b/src/test/kc/examples/3d/perspective.kc
index 9ae720a05..9c6a3170c 100644
--- a/src/test/kc/examples/3d/perspective.kc
+++ b/src/test/kc/examples/3d/perspective.kc
@@ -11,14 +11,14 @@ signed char* yr = $f1;
signed char* zr = $f2;
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
-word* psp1 = $f3;
-word* psp2 = $f5;
+unsigned int* psp1 = $f3;
+unsigned int* psp2 = $f5;
void main() {
asm { sei }
mulf_init();
- *psp1 = (word)mulf_sqr1;
- *psp2 = (word)mulf_sqr2;
+ *psp1 = (unsigned int)mulf_sqr1;
+ *psp2 = (unsigned int)mulf_sqr2;
print_cls();
do_perspective($39, -$47, $36);
/*
@@ -97,14 +97,14 @@ void perspective(signed char x, signed char y, signed char z) {
// - http://codebase64.org/doku.php?id=magazines:chacking16
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
// f(x) = >(( x * x ))
-char[512] align($100) mulf_sqr1;
+char align($100) mulf_sqr1[512];
// g(x) = >((( 1 - x ) * ( 1 - x )))
-char[512] align($100) mulf_sqr2;
+char align($100) mulf_sqr2[512];
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x) and g(x) = f(1-x)
void mulf_init() {
- signed word sqr = 0;
- signed word add = 1;
+ signed int sqr = 0;
+ signed int add = 1;
for( char i:0..128) {
char val = >sqr;
mulf_sqr1[i] = val;
@@ -121,7 +121,7 @@ void mulf_init() {
}
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
-signed char[0x100] align(0x100) PERSP_Z = kickasm {{
+signed char align(0x100) PERSP_Z[0x100] = kickasm {{
{
.var d = 256.0
.var z0 = 5.0
diff --git a/src/test/kc/examples/bresenham/bitmap-bresenham.kc b/src/test/kc/examples/bresenham/bitmap-bresenham.kc
index a37b67b4f..8b1c09d40 100644
--- a/src/test/kc/examples/bresenham/bitmap-bresenham.kc
+++ b/src/test/kc/examples/bresenham/bitmap-bresenham.kc
@@ -4,8 +4,8 @@ import "bitmap-draw.kc"
const char* SCREEN = $400;
const char* BITMAP = $2000;
-char[] lines_x = { 60, 80, 110, 80, 60, 40, 10, 40, 60 };
-char[] lines_y = { 10, 40, 60, 80, 110, 80, 60, 40, 10 };
+char lines_x[] = { 60, 80, 110, 80, 60, 40, 10, 40, 60 };
+char lines_y[] = { 10, 40, 60, 80, 110, 80, 60, 40, 10 };
char lines_cnt = 8;
void main() {
diff --git a/src/test/kc/examples/chargen/chargen-analysis.kc b/src/test/kc/examples/chargen/chargen-analysis.kc
index c209f8fe9..c13af27ce 100644
--- a/src/test/kc/examples/chargen/chargen-analysis.kc
+++ b/src/test/kc/examples/chargen/chargen-analysis.kc
@@ -68,7 +68,7 @@ void print_str_at(char* str, char* at) {
// Render 8x8 char (ch) as pixels on char canvas #pos
void plot_chargen(char pos, char ch, char shift) {
asm { sei }
- char* chargen = CHARGEN+(word)ch*8;
+ char* chargen = CHARGEN+(unsigned int)ch*8;
if(shift!=0) {
chargen = chargen + $0800;
}
diff --git a/src/test/kc/examples/fastmultiply/fastmultiply8.kc b/src/test/kc/examples/fastmultiply/fastmultiply8.kc
index 80d190912..8c7d39c68 100644
--- a/src/test/kc/examples/fastmultiply/fastmultiply8.kc
+++ b/src/test/kc/examples/fastmultiply/fastmultiply8.kc
@@ -8,7 +8,7 @@
import "print.kc"
-signed char[] vals = {-95, -64, -32, -16, 0, 16, 32, 64, 95};
+signed char vals[] = {-95, -64, -32, -16, 0, 16, 32, 64, 95};
void main() {
init_screen();
@@ -71,7 +71,7 @@ signed char fmul8(signed char a, signed char b) {
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
// f(x) = >(( x * x ))
-char[0x200] align(0x100) mulf_sqr1 = kickasm {{
+char align(0x100) mulf_sqr1[0x200] = kickasm {{
.for(var i=0;i<$200;i++) {
.if(i<=159) { .byte round((i*i)/256) }
.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
@@ -81,7 +81,7 @@ char[0x200] align(0x100) mulf_sqr1 = kickasm {{
// g(x) = >((( 1 - x ) * ( 1 - x )))
-char[0x200] align(0x100) mulf_sqr2 = kickasm {{
+char align(0x100) mulf_sqr2[0x200] = kickasm {{
.for(var i=0;i<$200;i++) {
.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
diff --git a/src/test/kc/examples/fire/fire.kc b/src/test/kc/examples/fire/fire.kc
index 13ee9559b..eb5f8e4d2 100644
--- a/src/test/kc/examples/fire/fire.kc
+++ b/src/test/kc/examples/fire/fire.kc
@@ -56,7 +56,7 @@ void fire(unsigned char* screenbase) {
// Make a fire-friendly charset in chars $00-$3f of the passed charset
void makecharset(char* charset) {
- const unsigned char[8] bittab = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
+ const unsigned char bittab[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
for (unsigned char *font = charset; font != (charset+(1*8)); ++font)
*font = 0x00;
for (unsigned char *font = (charset+(64*8)); font != (charset+(256*8)); ++font)
@@ -78,7 +78,7 @@ void makecharset(char* charset) {
// Fill a screen (1000 chars) with a specific char
void fillscreen(unsigned char* screen, unsigned char fill) {
- for( unsigned word i : 0..999) {
+ for( unsigned int i : 0..999) {
*screen++ = fill;
}
}
diff --git a/src/test/kc/examples/fire/sid.kc b/src/test/kc/examples/fire/sid.kc
index 869834186..f02552d16 100644
--- a/src/test/kc/examples/fire/sid.kc
+++ b/src/test/kc/examples/fire/sid.kc
@@ -1,5 +1,5 @@
// SID registers for random number generation
-const word* SID_VOICE3_FREQ = $d40e;
+const unsigned int* SID_VOICE3_FREQ = $d40e;
const char* SID_VOICE3_FREQ_LOW = $d40e;
const char* SID_VOICE3_FREQ_HIGH = $d40f;
const char* SID_VOICE3_CONTROL = $d412;
diff --git a/src/test/kc/examples/font-2x2/font-2x2.kc b/src/test/kc/examples/font-2x2/font-2x2.kc
index d3f89a02c..feb6d8730 100644
--- a/src/test/kc/examples/font-2x2/font-2x2.kc
+++ b/src/test/kc/examples/font-2x2/font-2x2.kc
@@ -6,7 +6,7 @@ import "string"
const char* SCREEN = 0x0400;
const char* FONT_ORIGINAL = 0x2000;
const char* FONT_COMPRESSED = 0x2800;
-char[0x100] align(0x100) FONT_COMPRESSED_MAP;
+char align(0x100) FONT_COMPRESSED_MAP[0x100];
void main() {
// Create 2x2 font from CHARGEN
diff --git a/src/test/kc/examples/kernalload/kernalload.kc b/src/test/kc/examples/kernalload/kernalload.kc
index b6e5a5b61..76997b00c 100644
--- a/src/test/kc/examples/kernalload/kernalload.kc
+++ b/src/test/kc/examples/kernalload/kernalload.kc
@@ -8,7 +8,7 @@ import "c64"
// Sprite file
#pragma data_seg(Sprite)
-export char[] SPRITE = kickasm(resource "sprite.png") {{
+export char SPRITE[] = kickasm(resource "sprite.png") {{
.var pic = LoadPicture("sprite.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++)
.for (var x=0;x<3; x++)
diff --git a/src/test/kc/examples/linking/linking.kc b/src/test/kc/examples/linking/linking.kc
index 084a0f507..1b83c41bc 100644
--- a/src/test/kc/examples/linking/linking.kc
+++ b/src/test/kc/examples/linking/linking.kc
@@ -29,5 +29,5 @@ void fillscreen(char c) {
*screen = c+base[i++];
}
-char[256] base;
+char base[256];
diff --git a/src/test/kc/examples/multiplexer/simple-multiplexer.kc b/src/test/kc/examples/multiplexer/simple-multiplexer.kc
index 5a2e24bf7..cdaf3b6c1 100644
--- a/src/test/kc/examples/multiplexer/simple-multiplexer.kc
+++ b/src/test/kc/examples/multiplexer/simple-multiplexer.kc
@@ -5,7 +5,7 @@ import "multiplexer"
// Location of screen & sprites
char* SCREEN = $400;
-char[0x100] align(0x100) YSIN = kickasm {{
+char align(0x100) YSIN[0x100] = kickasm {{
.var min = 50
.var max = 250-21
.var ampl = max-min;
diff --git a/src/test/kc/examples/nmisamples/nmisamples.kc b/src/test/kc/examples/nmisamples/nmisamples.kc
index 5d680450d..ed90097cf 100644
--- a/src/test/kc/examples/nmisamples/nmisamples.kc
+++ b/src/test/kc/examples/nmisamples/nmisamples.kc
@@ -5,7 +5,7 @@
import "c64"
const unsigned int SAMPLE_SIZE = 0x6100;
-char[SAMPLE_SIZE] SAMPLE = kickasm(resource "moments_sample.bin") {{ .import binary "moments_sample.bin" }};
+char SAMPLE[SAMPLE_SIZE] = kickasm(resource "moments_sample.bin") {{ .import binary "moments_sample.bin" }};
volatile char* sample = SAMPLE;
diff --git a/src/test/kc/examples/plasma/plasma-unroll.kc b/src/test/kc/examples/plasma/plasma-unroll.kc
index 0f961d335..3dd966a04 100644
--- a/src/test/kc/examples/plasma/plasma-unroll.kc
+++ b/src/test/kc/examples/plasma/plasma-unroll.kc
@@ -13,7 +13,7 @@ import "sid"
const unsigned char* SCREEN1 = $2800;
const unsigned char* CHARSET = $2000;
-const unsigned char[0x100] align(0x100) SINTABLE = kickasm {{
+const unsigned char align(0x100) SINTABLE[0x100] = kickasm {{
.for(var i=0;i<$100;i++)
.byte round(127.5+127.5*sin(toRadians(360*i/256)))
}};
@@ -40,8 +40,8 @@ unsigned char c2B = 0;
// Render plasma to the passed screen
void doplasma(unsigned char* screen) {
- unsigned char[40] xbuf;
- unsigned char[25] ybuf;
+ unsigned char xbuf[40];
+ unsigned char ybuf[25];
unsigned char c1a = c1A;
unsigned char c1b = c1B;
@@ -79,7 +79,7 @@ void doplasma(unsigned char* screen) {
// Make a plasma-friendly charset where the chars are randomly filled
void makecharset(unsigned char* charset) {
- const unsigned char[8] bittab = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
+ const unsigned char bittab[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
sid_rnd_init();
print_cls();
for (unsigned int c = 0; c < 0x100; ++c) {
diff --git a/src/test/kc/examples/plasma/plasma.kc b/src/test/kc/examples/plasma/plasma.kc
index 3ed30b189..7f166c0d0 100644
--- a/src/test/kc/examples/plasma/plasma.kc
+++ b/src/test/kc/examples/plasma/plasma.kc
@@ -12,7 +12,7 @@ const char* SCREEN1 = 0x2800;
const char* SCREEN2 = 0x2c00;
const char* CHARSET = 0x2000;
-const char[0x100] align(0x100) SINTABLE = kickasm {{
+const char align(0x100) SINTABLE[0x100] = kickasm {{
.for(var i=0;i<$100;i++)
.byte round(127.5+127.5*sin(2*PI*i/256))
}};
@@ -41,8 +41,8 @@ char c2B = 0;
// Render plasma to the passed screen
void doplasma (char* screen) {
- char[40] xbuf;
- char[25] ybuf;
+ char xbuf[40];
+ char ybuf[25];
char c1a = c1A;
char c1b = c1B;
@@ -72,7 +72,7 @@ void doplasma (char* screen) {
// Make a plasma-friendly charset where the chars are randomly filled
void makecharset(char* charset) {
- const char[8] bittab = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
+ const char bittab[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
sid_rnd_init();
print_cls();
for (unsigned int c = 0; c < 0x100; ++c) {
diff --git a/src/test/kc/examples/rasterbars/raster-bars.kc b/src/test/kc/examples/rasterbars/raster-bars.kc
index b536e1bcd..a2ef34f1c 100644
--- a/src/test/kc/examples/rasterbars/raster-bars.kc
+++ b/src/test/kc/examples/rasterbars/raster-bars.kc
@@ -11,7 +11,7 @@ void main() {
} while (true);
}
-char[] rastercols = { $b, $0, $b, $b, $c, $b, $c, $c, $f, $c, $f, $f, $1, $f, $1, $1, $f, $1, $f, $f, $c, $f, $c, $c, $b, $c, $b, $b, $0, $b, $0, $ff };
+char rastercols[] = { $b, $0, $b, $b, $c, $b, $c, $c, $f, $c, $f, $f, $1, $f, $1, $1, $f, $1, $f, $f, $c, $f, $c, $c, $b, $c, $b, $b, $0, $b, $0, $ff };
void raster() {
diff --git a/src/test/kc/examples/rotate/rotate.kc b/src/test/kc/examples/rotate/rotate.kc
index d66920f91..d09f1ba61 100644
--- a/src/test/kc/examples/rotate/rotate.kc
+++ b/src/test/kc/examples/rotate/rotate.kc
@@ -10,7 +10,7 @@ char* SCREEN = $0400;
// Sine and Cosine tables
// Angles: $00=0, $80=PI,$100=2*PI
// Sine/Cosine: signed fixed [-$7f,$7f]
-char[0x140] align(0x40) SIN = kickasm {{
+char align(0x40) SIN[0x140] = kickasm {{
.for(var i=0;i<$140;i++)
.byte >round($7fff*sin(i*2*PI/256))
}};
@@ -34,8 +34,8 @@ void init() {
}
// Positions to rotate
-signed char[8] xs = { -70, -70, -70, 0, 0, 70, 70, 70};
-signed char[8] ys = { -70, 0, 70, -70, 70, -70, 0, 70};
+signed char xs[8] = { -70, -70, -70, 0, 0, 70, 70, 70};
+signed char ys[8] = { -70, 0, 70, -70, 70, -70, 0, 70};
void anim() {
char angle = 0;
@@ -50,12 +50,12 @@ void anim() {
signed char x = xs[i]; // signed fixed[7.0]
signed char y = ys[i]; // signed fixed[7.0]
mulf8s_prepare(cos_a);
- signed word xr = mulf8s_prepared(x)*2; // signed fixed[8.8]
- signed word yr = mulf8s_prepared(y)*2; // signed fixed[8.8]
+ signed int xr = mulf8s_prepared(x)*2; // signed fixed[8.8]
+ signed int yr = mulf8s_prepared(y)*2; // signed fixed[8.8]
mulf8s_prepare(sin_a);
xr -= mulf8s_prepared(y)*2; // signed fixed[8.8]
yr += mulf8s_prepared(x)*2; // signed fixed[8.8]
- signed word xpos = ((signed char) >xr) + 24 /*border*/ + 149 /*center*/;
+ signed int xpos = ((signed char) >xr) + 24 /*border*/ + 149 /*center*/;
sprite_msb = sprite_msb/2;
if(>xpos!=0) {
sprite_msb |= $80;
@@ -68,7 +68,7 @@ void anim() {
*SPRITES_XMSB = sprite_msb;
angle++;
// Calculate the cycle count - 0x12 is the base usage of start/read
- dword cyclecount = clock()-CLOCKS_PER_INIT;
+ unsigned long cyclecount = clock()-CLOCKS_PER_INIT;
// Print cycle count
print_dword_at(cyclecount, SCREEN);
*BORDERCOL = LIGHT_BLUE;
diff --git a/src/test/kc/examples/scroll/scroll.kc b/src/test/kc/examples/scroll/scroll.kc
index 904a52db2..45c626221 100644
--- a/src/test/kc/examples/scroll/scroll.kc
+++ b/src/test/kc/examples/scroll/scroll.kc
@@ -2,7 +2,7 @@ const char* SCREEN = $0400;
const char* RASTER = $d012;
const char* BGCOL = $d020;
const char* SCROLL = $d016;
-const char[] TEXT = "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- ";
+const char TEXT[] = "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- ";
void main() {
fillscreen(SCREEN, $20);
diff --git a/src/test/kc/examples/sinsprites/sinus-sprites.kc b/src/test/kc/examples/sinsprites/sinus-sprites.kc
index 15cb588a3..887754d10 100644
--- a/src/test/kc/examples/sinsprites/sinus-sprites.kc
+++ b/src/test/kc/examples/sinsprites/sinus-sprites.kc
@@ -3,9 +3,9 @@ import "basic-floats"
import "print"
const char sinlen_x = 221;
-const char[221] sintab_x;
+const char sintab_x[221];
const char sinlen_y = 197;
-const char[197] sintab_y;
+const char sintab_y[197];
const char* sprites = $2000;
const char* SCREEN = $400;
@@ -53,7 +53,7 @@ void progress_init(char* line) {
// Done by increasing the character until the idx is 8 and then moving to the next char
void progress_inc() {
// Progress characters
- const char[] progress_chars = { $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0};
+ const char progress_chars[] = { $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0};
if(++progress_idx==8) {
*progress_cursor = progress_chars[8];
progress_cursor++;
@@ -121,7 +121,7 @@ void place_sprites() {
}
void gen_sprites() {
- char[] cml = "camelot"z;
+ char cml[] = "camelot"z;
char* spr = sprites;
for( char i : 0..6 ) {
gen_chargen_sprite(cml[i], spr);
@@ -181,9 +181,9 @@ void gen_chargen_sprite(char ch, char* sprite) {
// - min is the minimum value of the generated sinus
// - max is the maximum value of the generated sinus
void gen_sintab(char* sintab, char length, char min, char max) {
- char[] f_i = {0, 0, 0, 0, 0}; // i * 2 * PI
- char[] f_min = {0, 0, 0, 0, 0}; // amplitude/2 + min
- char[] f_amp = {0, 0, 0, 0, 0}; // amplitude/2
+ char f_i[] = {0, 0, 0, 0, 0}; // i * 2 * PI
+ char f_min[] = {0, 0, 0, 0, 0}; // amplitude/2 + min
+ char f_amp[] = {0, 0, 0, 0, 0}; // amplitude/2
char* f_2pi = $e2e5; // 2 * PI
setFAC((unsigned int)max); // fac = max
setARGtoFAC(); // arg = max
diff --git a/src/test/kc/examples/zpcode/zpcode.kc b/src/test/kc/examples/zpcode/zpcode.kc
index 9a42c1581..e2b06c211 100644
--- a/src/test/kc/examples/zpcode/zpcode.kc
+++ b/src/test/kc/examples/zpcode/zpcode.kc
@@ -32,7 +32,7 @@ void loop() {
}
// Array containing the zeropage code to be transferred to zeropage before execution
-char[] zpCodeData = kickasm {{
+char zpCodeData[] = kickasm {{
.segmentout [segments="ZpCode"]
}};
diff --git a/src/test/ref/examples/3d/3d.asm b/src/test/ref/examples/3d/3d.asm
index ce3b37f26..b766431d5 100644
--- a/src/test/ref/examples/3d/3d.asm
+++ b/src/test/ref/examples/3d/3d.asm
@@ -40,13 +40,13 @@ main: {
sei
// sprites_init()
jsr sprites_init
- // *psp1 = (word)mulf_sqr1
+ // *psp1 = (unsigned int)mulf_sqr1
//mulf_init();
lda #mulf_sqr1
sta psp1+1
- // *psp2 = (word)mulf_sqr2
+ // *psp2 = (unsigned int)mulf_sqr2
lda #mulf_sqr2
@@ -1226,9 +1226,9 @@ sprites_init: {
xrs: .fill 8, 0
yrs: .fill 8, 0
zrs: .fill 8, 0
- // Persepctive factors (from zrs)
+ // Perspective factors (from zrs)
pps: .fill 8, 0
- // Rotated positions with persepctive
+ // Rotated positions with perspective
xps: .fill 8, 0
yps: .fill 8, 0
// The rotation matrix
diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log
index ac6d9d1ed..7c82aa8a0 100644
--- a/src/test/ref/examples/3d/3d.log
+++ b/src/test/ref/examples/3d/3d.log
@@ -6287,9 +6287,9 @@ sprites_init: {
xrs: .fill 8, 0
yrs: .fill 8, 0
zrs: .fill 8, 0
- // Persepctive factors (from zrs)
+ // Perspective factors (from zrs)
pps: .fill 8, 0
- // Rotated positions with persepctive
+ // Rotated positions with perspective
xps: .fill 8, 0
yps: .fill 8, 0
// The rotation matrix
@@ -8771,9 +8771,9 @@ sprites_init: {
xrs: .fill 8, 0
yrs: .fill 8, 0
zrs: .fill 8, 0
- // Persepctive factors (from zrs)
+ // Perspective factors (from zrs)
pps: .fill 8, 0
- // Rotated positions with persepctive
+ // Rotated positions with perspective
xps: .fill 8, 0
yps: .fill 8, 0
// The rotation matrix
@@ -9685,14 +9685,14 @@ main: {
// [5] call sprites_init
jsr sprites_init
// main::@1
- // *psp1 = (word)mulf_sqr1
+ // *psp1 = (unsigned int)mulf_sqr1
// [6] *((const word*) psp1) ← (word)(const byte*) mulf_sqr1 -- _deref_pwuc1=vwuc2
//mulf_init();
lda #mulf_sqr1
sta psp1+1
- // *psp2 = (word)mulf_sqr2
+ // *psp2 = (unsigned int)mulf_sqr2
// [7] *((const word*) psp2) ← (word)(const byte*) mulf_sqr2 -- _deref_pwuc1=vwuc2
lda #mulf_sqr1
sta psp1+1
- // *psp2 = (word)mulf_sqr2
+ // *psp2 = (unsigned int)mulf_sqr2
lda #mulf_sqr2
diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log
index 3f5fda753..d9a52625b 100644
--- a/src/test/ref/examples/3d/perspective.log
+++ b/src/test/ref/examples/3d/perspective.log
@@ -3511,13 +3511,13 @@ main: {
// [88] phi from main to mulf_init [phi:main->mulf_init]
jsr mulf_init
// main::@1
- // *psp1 = (word)mulf_sqr1
+ // *psp1 = (unsigned int)mulf_sqr1
// [6] *((const word*) psp1) ← (word)(const byte*) mulf_sqr1 -- _deref_pwuc1=vwuc2
lda #mulf_sqr1
sta psp1+1
- // *psp2 = (word)mulf_sqr2
+ // *psp2 = (unsigned int)mulf_sqr2
// [7] *((const word*) psp2) ← (word)(const byte*) mulf_sqr2 -- _deref_pwuc1=vwuc2
lda #