diff --git a/lib/jsyntaxpane-0.9.5.jar b/lib/jsyntaxpane-0.9.5.jar index fa79c09bf..083820ccb 100644 Binary files a/lib/jsyntaxpane-0.9.5.jar and b/lib/jsyntaxpane-0.9.5.jar differ diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex index 198006e0d..24bed6ed0 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex @@ -1,329 +1,352 @@ -/* - * Copyright 2008 Ayman Al-Sairafi ayman.alsairafi@gmail.com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License - * at http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package jsyntaxpane.lexers; - - -import jsyntaxpane.Token; -import jsyntaxpane.TokenType; - -%% - -%public -%class ActionScriptLexer -%extends DefaultJFlexLexer -%final -%unicode -%char -%type Token - - -%{ - /** - * Create an empty lexer, yyrset will be called later to reset and assign - * the reader - */ - public ActionScriptLexer() { - super(); - } - - @Override - public int yychar() { - return yychar; - } - - private static final byte PARAN = 1; - private static final byte BRACKET = 2; - private static final byte CURLY = 3; - - private static String xmlTagName=""; - -%} - -/* main character classes */ -LineTerminator = \r|\n|\r\n -InputCharacter = [^\r\n] - -WhiteSpace = {LineTerminator} | [ \t\f]+ - -/* comments */ -Comment = {TraditionalComment} | {EndOfLineComment} - -TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" -EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? - - - -/* identifiers */ -Identifier = [:jletter:][:jletterdigit:]* - -IdentifierNs = {Identifier} ":" {Identifier} - -TypeNameSpec = ".<" {Identifier} ">" - -/* XML */ -LetterColon = [:jletter] | ":" -XMLIdentifier = {Identifier} | {IdentifierNs} -XMLAttribute = " "* {XMLIdentifier} " "* "=" " "* \" {InputCharacter}* \" " "* -XMLBeginOneTag = "<" {XMLIdentifier} {XMLAttribute}* ">" -XMLBeginTag = "<" {XMLIdentifier} " " -XMLEndTag = "" - -/* integer literals */ -DecIntegerLiteral = 0 | [1-9][0-9]* - -HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} -HexDigit = [0-9a-fA-F] - -OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} -OctDigit = [0-7] - -/* floating point literals */ -DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? - -FLit1 = [0-9]+ \. [0-9]* -FLit2 = \. [0-9]+ -FLit3 = [0-9]+ -Exponent = [eE] [+-]? [0-9]+ - -NewVector = "new" {WhiteSpace}* "<" - -/* string and character literals */ -StringCharacter = [^\r\n\"\\] -SingleCharacter = [^\r\n\'\\] - -%state STRING, CHARLITERAL, XMLSTARTTAG, XML - -%% - - { - - /* keywords */ - "break" | - "case" | - "continue" | - "default" | - "do" | - "while" | - "else" | - "for" | - "each" | - "in" | - "if" | - "label" | - "return" | - "super" | - "switch" | - "throw" | - "try" | - "catch" | - "finally" | - "while" | - "with" | - "dynamic" | - "final" | - "internal" | - "native" | - "override" | - "private" | - "protected" | - "public" | - "static" | - "class" | - "const" | - "extends" | - "function" | - "get" | - "implements" | - "interface" | - "namespace" | - "package" | - "set" | - "var" | - "import" | - "include" | - "use" | - "false" | - "null" | - "this" | - "true" { return token(TokenType.KEYWORD); } - - - /* operators */ - - "(" { return token(TokenType.OPERATOR, PARAN); } - ")" { return token(TokenType.OPERATOR, -PARAN); } - "{" { return token(TokenType.OPERATOR, CURLY); } - "}" { return token(TokenType.OPERATOR, -CURLY); } - "[" { return token(TokenType.OPERATOR, BRACKET); } - "]" { return token(TokenType.OPERATOR, -BRACKET); } - ";" | - "," | - "..." | - "." | - "=" | - ">" | - "<" | - "!" | - "~" | - "?" | - ":" | - "==" | - "<=" | - ">=" | - "!=" | - "&&" | - "||" | - "++" | - "--" | - "+" | - "-" | - "*" | - "/" | - "&" | - "|" | - "^" | - "%" | - "<<" | - ">>" | - ">>>" | - "+=" | - "-=" | - "*=" | - "/=" | - "&=" | - "|=" | - "^=" | - "%=" | - "<<=" | - ">>=" | - ">>>=" | - "as" | - "delete" | - "instanceof" | - "is" | - "::" | - "new" | - "typeof" | - "void" | - {NewVector} | - "@" { return token(TokenType.OPERATOR); } - - /* string literal */ - \" { - yybegin(STRING); - tokenStart = yychar; - tokenLength = 1; - } - - /* character literal */ - \' { - yybegin(CHARLITERAL); - tokenStart = yychar; - tokenLength = 1; - } - - /* numeric literals */ - - {DecIntegerLiteral} | - - {HexIntegerLiteral} | - - {OctIntegerLiteral} | - - {DoubleLiteral} | - {DoubleLiteral}[dD] { return token(TokenType.NUMBER); } - - // JavaDoc comments need a state so that we can highlight the @ controls - - /* comments */ - {Comment} { return token(TokenType.COMMENT); } - - /* whitespace */ - {WhiteSpace} { } - {TypeNameSpec} { return token(TokenType.IDENTIFIER); } - {XMLBeginOneTag} { yybegin(XML); - tokenStart = yychar; - tokenLength = yylength(); - String s=yytext(); - s=s.substring(1,s.length()-1); - if(s.contains(" ")){ - s=s.substring(0,s.indexOf(" ")); - } - xmlTagName = s; - } - /*{XMLBeginTag} { yybegin(XMLSTARTTAG); - tokenStart = yychar; - tokenLength = yylength(); - String s=yytext(); - xmlTagName = s.substring(1); - }*/ - /* identifiers */ - {Identifier} { return token(TokenType.IDENTIFIER); } -} - - { - {XMLAttribute} { tokenLength += yylength();} - {WhiteSpace} { tokenLength += yylength(); } - ">" { yybegin(XML); tokenLength += yylength();} -} - { - {XMLBeginOneTag} { tokenLength += yylength();} - {XMLEndTag} { tokenLength += yylength(); - String endtagname=yytext(); - endtagname=endtagname.substring(2,endtagname.length()-1); - if(endtagname.equals(xmlTagName)){ - yybegin(YYINITIAL); - return token(TokenType.STRING, tokenStart, tokenLength); - } - } - .|\n { tokenLength += yylength(); } -} - - { - \" { - yybegin(YYINITIAL); - // length also includes the trailing quote - return token(TokenType.STRING, tokenStart, tokenLength + 1); - } - - {StringCharacter}+ { tokenLength += yylength(); } - - \\[0-3]?{OctDigit}?{OctDigit} { tokenLength += yylength(); } - - /* escape sequences */ - - \\. { tokenLength += 2; } - {LineTerminator} { yybegin(YYINITIAL); } -} - - { - \' { - yybegin(YYINITIAL); - // length also includes the trailing quote - return token(TokenType.STRING, tokenStart, tokenLength + 1); - } - - {SingleCharacter}+ { tokenLength += yylength(); } - - /* escape sequences */ - - \\. { tokenLength += 2; } - {LineTerminator} { yybegin(YYINITIAL); } -} - -/* error fallback */ -.|\n { } -<> { return null; } - +/* + * Copyright 2008 Ayman Al-Sairafi ayman.alsairafi@gmail.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License + * at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jsyntaxpane.lexers; + + +import jsyntaxpane.Token; +import jsyntaxpane.TokenType; + +%% + +%public +%class ActionScriptLexer +%extends DefaultJFlexLexer +%final +%unicode +%char +%type Token + + +%{ + /** + * Create an empty lexer, yyrset will be called later to reset and assign + * the reader + */ + public ActionScriptLexer() { + super(); + } + + @Override + public int yychar() { + return yychar; + } + + private static final byte PARAN = 1; + private static final byte BRACKET = 2; + private static final byte CURLY = 3; + + private static String xmlTagName=""; + +%} + +/* main character classes */ +LineTerminator = \r|\n|\r\n +InputCharacter = [^\r\n] + +WhiteSpace = {LineTerminator} | [ \t\f]+ + +/* comments */ +Comment = {TraditionalComment} | {EndOfLineComment} + +TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" +EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? + + + +/* identifiers */ +Identifier = [:jletter:][:jletterdigit:]* + +IdentifierNs = {Identifier} ":" {Identifier} + +TypeNameSpec = ".<" {Identifier} ">" + +/* XML */ +LetterColon = [:jletter] | ":" +XMLIdentifier = {Identifier} | {IdentifierNs} +XMLAttribute = " "* {XMLIdentifier} " "* "=" " "* \" {InputCharacter}* \" " "* +XMLBeginOneTag = "<" {XMLIdentifier} {XMLAttribute}* ">" +XMLBeginTag = "<" {XMLIdentifier} " " +XMLEndTag = "" + +/* integer literals */ +DecIntegerLiteral = 0 | [1-9][0-9]* + +HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} +HexDigit = [0-9a-fA-F] + +OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} +OctDigit = [0-7] + +/* floating point literals */ +DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? + +FLit1 = [0-9]+ \. [0-9]* +FLit2 = \. [0-9]+ +FLit3 = [0-9]+ +Exponent = [eE] [+-]? [0-9]+ + +NewVector = "new" {WhiteSpace}* "<" + +/* string and character literals */ +StringCharacter = [^\r\n\"\\] +SingleCharacter = [^\r\n\'\\] + +OIdentifierCharacter = [^\r\n\u00A7\\] + +%state STRING, CHARLITERAL, XMLSTARTTAG, XML, OIDENTIFIER + +%% + + { + + /* keywords */ + "break" | + "case" | + "continue" | + "default" | + "do" | + "while" | + "else" | + "for" | + "each" | + "in" | + "if" | + "label" | + "return" | + "super" | + "switch" | + "throw" | + "try" | + "catch" | + "finally" | + "while" | + "with" | + "dynamic" | + "final" | + "internal" | + "native" | + "override" | + "private" | + "protected" | + "public" | + "static" | + "class" | + "const" | + "extends" | + "function" | + "get" | + "implements" | + "interface" | + "namespace" | + "package" | + "set" | + "var" | + "import" | + "include" | + "use" | + "false" | + "null" | + "this" | + "true" { return token(TokenType.KEYWORD); } + + + /* operators */ + + "(" { return token(TokenType.OPERATOR, PARAN); } + ")" { return token(TokenType.OPERATOR, -PARAN); } + "{" { return token(TokenType.OPERATOR, CURLY); } + "}" { return token(TokenType.OPERATOR, -CURLY); } + "[" { return token(TokenType.OPERATOR, BRACKET); } + "]" { return token(TokenType.OPERATOR, -BRACKET); } + ";" | + "," | + "..." | + "." | + "=" | + ">" | + "<" | + "!" | + "~" | + "?" | + ":" | + "==" | + "<=" | + ">=" | + "!=" | + "&&" | + "||" | + "++" | + "--" | + "+" | + "-" | + "*" | + "/" | + "&" | + "|" | + "^" | + "%" | + "<<" | + ">>" | + ">>>" | + "+=" | + "-=" | + "*=" | + "/=" | + "&=" | + "|=" | + "^=" | + "%=" | + "<<=" | + ">>=" | + ">>>=" | + "as" | + "delete" | + "instanceof" | + "is" | + "::" | + "new" | + "typeof" | + "void" | + {NewVector} | + "@" { return token(TokenType.OPERATOR); } + + /* string literal */ + \" { + yybegin(STRING); + tokenStart = yychar; + tokenLength = 1; + } + "\u00A7" { + yybegin(OIDENTIFIER); + tokenStart = yychar; + tokenLength = 1; + } + + /* character literal */ + \' { + yybegin(CHARLITERAL); + tokenStart = yychar; + tokenLength = 1; + } + + /* numeric literals */ + + {DecIntegerLiteral} | + + {HexIntegerLiteral} | + + {OctIntegerLiteral} | + + {DoubleLiteral} | + {DoubleLiteral}[dD] { return token(TokenType.NUMBER); } + + // JavaDoc comments need a state so that we can highlight the @ controls + + /* comments */ + {Comment} { return token(TokenType.COMMENT); } + + /* whitespace */ + {WhiteSpace} { } + {TypeNameSpec} { return token(TokenType.IDENTIFIER); } + {XMLBeginOneTag} { yybegin(XML); + tokenStart = yychar; + tokenLength = yylength(); + String s=yytext(); + s=s.substring(1,s.length()-1); + if(s.contains(" ")){ + s=s.substring(0,s.indexOf(" ")); + } + xmlTagName = s; + } + /*{XMLBeginTag} { yybegin(XMLSTARTTAG); + tokenStart = yychar; + tokenLength = yylength(); + String s=yytext(); + xmlTagName = s.substring(1); + }*/ + /* identifiers */ + {Identifier} { return token(TokenType.IDENTIFIER); } +} + + { + {XMLAttribute} { tokenLength += yylength();} + {WhiteSpace} { tokenLength += yylength(); } + ">" { yybegin(XML); tokenLength += yylength();} +} + { + {XMLBeginOneTag} { tokenLength += yylength();} + {XMLEndTag} { tokenLength += yylength(); + String endtagname=yytext(); + endtagname=endtagname.substring(2,endtagname.length()-1); + if(endtagname.equals(xmlTagName)){ + yybegin(YYINITIAL); + return token(TokenType.STRING, tokenStart, tokenLength); + } + } + .|\n { tokenLength += yylength(); } +} + + { + \" { + yybegin(YYINITIAL); + // length also includes the trailing quote + return token(TokenType.STRING, tokenStart, tokenLength + 1); + } + + {StringCharacter}+ { tokenLength += yylength(); } + + \\[0-3]?{OctDigit}?{OctDigit} { tokenLength += yylength(); } + + /* escape sequences */ + + \\. { tokenLength += 2; } + {LineTerminator} { yybegin(YYINITIAL); } +} + + { + "\u00A7" { + yybegin(YYINITIAL); + // length also includes the trailing quote + return token(TokenType.REGEX, tokenStart, tokenLength + 1); + } + + {OIdentifierCharacter}+ { tokenLength += yylength(); } + + + /* escape sequences */ + + \\. { tokenLength += 2; } + {LineTerminator} { yybegin(YYINITIAL); } +} + + { + \' { + yybegin(YYINITIAL); + // length also includes the trailing quote + return token(TokenType.STRING, tokenStart, tokenLength + 1); + } + + {SingleCharacter}+ { tokenLength += yylength(); } + + /* escape sequences */ + + \\. { tokenLength += 2; } + {LineTerminator} { yybegin(YYINITIAL); } +} + +/* error fallback */ +.|\n { } +<> { return null; } + diff --git a/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java b/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java index b463378cf..0540f3e1b 100644 --- a/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java +++ b/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java @@ -17,968 +17,937 @@ * along with this program. If not, see . */ package com.jpexs.decompiler.flash.abc.avm2.parser.script; - import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.List; import java.util.Stack; +import java.util.List; +import java.util.ArrayList; +import java.io.StringReader; + /** - * This class is a scanner generated by - * JFlex 1.5.0-SNAPSHOT from the - * specification file - * D:/Dropbox/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex + * This class is a scanner generated by + * JFlex 1.5.0-SNAPSHOT + * from the specification file D:/Dropbox/Programovani/JavaSE/FFDec/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex */ public final class ActionScriptLexer { - /** - * This character denotes the end of file - */ - public static final int YYEOF = -1; + /** This character denotes the end of file */ + public static final int YYEOF = -1; - /** - * initial size of the lookahead buffer - */ - private static final int ZZ_BUFFERSIZE = 16384; + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; - /** - * lexical states - */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; - public static final int CHARLITERAL = 4; - public static final int XMLOPENTAG = 6; - public static final int XMLOPENTAGATTRIB = 8; - public static final int XMLINSTROPENTAG = 10; - public static final int XMLINSTRATTRIB = 12; - public static final int XMLCDATA = 14; - public static final int XMLCOMMENT = 16; - public static final int XML = 18; + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int CHARLITERAL = 4; + public static final int XMLOPENTAG = 6; + public static final int XMLOPENTAGATTRIB = 8; + public static final int XMLINSTROPENTAG = 10; + public static final int XMLINSTRATTRIB = 12; + public static final int XMLCDATA = 14; + public static final int XMLCOMMENT = 16; + public static final int XML = 18; + public static final int OIDENTIFIER = 20; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the - * beginning of a line l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, - 8, 8, 9, 9 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, + 8, 8, 9, 9, 10, 10 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED - = "\11\7\1\12\1\2\1\111\1\3\1\1\16\7\4\0\1\12\1\13" - + "\1\33\1\0\1\6\1\107\1\104\1\34\1\75\1\76\1\5\1\45" - + "\1\102\1\14\1\10\1\4\1\35\3\41\4\42\2\21\1\16\1\101" - + "\1\11\1\32\1\15\1\23\1\110\1\27\1\17\1\25\1\26\1\43" - + "\1\17\2\20\1\73\4\20\1\74\5\20\1\30\3\20\1\37\2\20" - + "\1\24\1\46\1\31\1\106\1\20\1\0\1\51\1\47\1\53\1\62" - + "\1\44\1\40\1\72\1\65\1\60\1\20\1\52\1\63\1\70\1\56" - + "\1\55\1\66\1\20\1\50\1\54\1\57\1\61\1\71\1\64\1\36" - + "\1\67\1\20\1\77\1\105\1\100\1\103\6\7\1\112\32\7\2\0" - + "\4\6\4\0\1\6\2\0\1\7\7\0\1\6\1\0\1\22\2\0" - + "\1\6\5\0\27\6\1\0\37\6\1\0\u01ca\6\4\0\14\6\16\0" - + "\5\6\7\0\1\6\1\0\1\6\21\0\160\7\5\6\1\0\2\6" - + "\2\0\4\6\1\0\7\0\1\6\1\0\3\6\1\0\1\6\1\0" - + "\24\6\1\0\123\6\1\0\213\6\1\0\5\7\2\0\236\6\11\0" - + "\46\6\2\0\1\6\7\0\47\6\11\0\55\7\1\0\1\7\1\0" - + "\2\7\1\0\2\7\1\0\1\7\10\0\33\6\5\0\3\6\15\0" - + "\4\7\7\0\1\6\4\0\13\7\5\0\53\6\37\7\4\0\2\6" - + "\1\7\143\6\1\0\1\6\10\7\1\0\6\7\2\6\2\7\1\0" - + "\4\7\2\6\12\7\3\6\2\0\1\6\17\0\1\7\1\6\1\7" - + "\36\6\33\7\2\0\131\6\13\7\1\6\16\0\12\7\41\6\11\7" - + "\2\6\4\0\1\6\5\0\26\6\4\7\1\6\11\7\1\6\3\7" - + "\1\6\5\7\22\0\31\6\3\7\244\0\4\7\66\6\3\7\1\6" - + "\22\7\1\6\7\7\12\6\2\7\2\0\12\7\1\0\7\6\1\0" - + "\7\6\1\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0" - + "\7\6\1\0\1\6\3\0\4\6\2\0\1\7\1\6\7\7\2\0" - + "\2\7\2\0\3\7\1\6\10\0\1\7\4\0\2\6\1\0\3\6" - + "\2\7\2\0\12\7\4\6\7\0\1\6\5\0\3\7\1\0\6\6" - + "\4\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0\2\6" - + "\1\0\2\6\2\0\1\7\1\0\5\7\4\0\2\7\2\0\3\7" - + "\3\0\1\7\7\0\4\6\1\0\1\6\7\0\14\7\3\6\1\7" - + "\13\0\3\7\1\0\11\6\1\0\3\6\1\0\26\6\1\0\7\6" - + "\1\0\2\6\1\0\5\6\2\0\1\7\1\6\10\7\1\0\3\7" - + "\1\0\3\7\2\0\1\6\17\0\2\6\2\7\2\0\12\7\1\0" - + "\1\6\17\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0" - + "\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7\2\0" - + "\2\7\2\0\3\7\10\0\2\7\4\0\2\6\1\0\3\6\2\7" - + "\2\0\12\7\1\0\1\6\20\0\1\7\1\6\1\0\6\6\3\0" - + "\3\6\1\0\4\6\3\0\2\6\1\0\1\6\1\0\2\6\3\0" - + "\2\6\3\0\3\6\3\0\14\6\4\0\5\7\3\0\3\7\1\0" - + "\4\7\2\0\1\6\6\0\1\7\16\0\12\7\11\0\1\6\7\0" - + "\3\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0" - + "\5\6\3\0\1\6\7\7\1\0\3\7\1\0\4\7\7\0\2\7" - + "\1\0\2\6\6\0\2\6\2\7\2\0\12\7\22\0\2\7\1\0" - + "\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0\5\6\2\0" - + "\1\7\1\6\7\7\1\0\3\7\1\0\4\7\7\0\2\7\7\0" - + "\1\6\1\0\2\6\2\7\2\0\12\7\1\0\2\6\17\0\2\7" - + "\1\0\10\6\1\0\3\6\1\0\51\6\2\0\1\6\7\7\1\0" - + "\3\7\1\0\4\7\1\6\10\0\1\7\10\0\2\6\2\7\2\0" - + "\12\7\12\0\6\6\2\0\2\7\1\0\22\6\3\0\30\6\1\0" - + "\11\6\1\0\1\6\2\0\7\6\3\0\1\7\4\0\6\7\1\0" - + "\1\7\1\0\10\7\22\0\2\7\15\0\60\6\1\7\2\6\7\7" - + "\4\0\10\6\10\7\1\0\12\7\47\0\2\6\1\0\1\6\2\0" - + "\2\6\1\0\1\6\2\0\1\6\6\0\4\6\1\0\7\6\1\0" - + "\3\6\1\0\1\6\1\0\1\6\2\0\2\6\1\0\4\6\1\7" - + "\2\6\6\7\1\0\2\7\1\6\2\0\5\6\1\0\1\6\1\0" - + "\6\7\2\0\12\7\2\0\2\6\42\0\1\6\27\0\2\7\6\0" - + "\12\7\13\0\1\7\1\0\1\7\1\0\1\7\4\0\2\7\10\6" - + "\1\0\44\6\4\0\24\7\1\0\2\7\5\6\13\7\1\0\44\7" - + "\11\0\1\7\71\0\53\6\24\7\1\6\12\7\6\0\6\6\4\7" - + "\4\6\3\7\1\6\3\7\2\6\7\7\3\6\4\7\15\6\14\7" - + "\1\6\17\7\2\0\46\6\12\0\53\6\1\0\1\6\3\0\u0149\6" - + "\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0\51\6" - + "\1\0\4\6\2\0\41\6\1\0\4\6\2\0\7\6\1\0\1\6" - + "\1\0\4\6\2\0\17\6\1\0\71\6\1\0\4\6\2\0\103\6" - + "\2\0\3\7\40\0\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6" - + "\1\0\32\6\5\0\113\6\3\0\3\6\17\0\15\6\1\0\4\6" - + "\3\7\13\0\22\6\3\7\13\0\22\6\2\7\14\0\15\6\1\0" - + "\3\6\1\0\2\7\14\0\64\6\40\7\3\0\1\6\3\0\2\6" - + "\1\7\2\0\12\7\41\0\3\7\2\0\12\7\6\0\130\6\10\0" - + "\51\6\1\7\1\6\5\0\106\6\12\0\35\6\3\0\14\7\4\0" - + "\14\7\12\0\12\7\36\6\2\0\5\6\13\0\54\6\4\0\21\7" - + "\7\6\2\7\6\0\12\7\46\0\27\6\5\7\4\0\65\6\12\7" - + "\1\0\35\7\2\0\13\7\6\0\12\7\15\0\1\6\130\0\5\7" - + "\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0\3\7\36\6" - + "\12\7\3\0\2\6\12\7\6\0\46\6\16\7\14\0\44\6\24\7" - + "\10\0\12\7\3\0\3\6\12\7\44\6\122\0\3\7\1\0\25\7" - + "\4\6\1\7\4\6\1\7\15\0\300\6\47\7\25\0\4\7\u0116\6" - + "\2\0\6\6\2\0\46\6\2\0\6\6\2\0\10\6\1\0\1\6" - + "\1\0\1\6\1\0\1\6\1\0\37\6\2\0\65\6\1\0\7\6" - + "\1\0\1\6\3\0\3\6\1\0\7\6\3\0\4\6\2\0\6\6" - + "\4\0\15\6\5\0\3\6\1\0\7\6\3\0\13\0\1\7\2\7" - + "\2\7\30\0\1\111\1\111\5\7\20\0\2\6\23\0\1\6\13\0" - + "\5\7\5\0\6\7\1\0\1\6\15\0\1\6\20\0\15\6\3\0" - + "\32\6\26\0\15\7\4\0\1\7\3\0\14\7\21\0\1\6\4\0" - + "\1\6\2\0\12\6\1\0\1\6\3\0\5\6\6\0\1\6\1\0" - + "\1\6\1\0\1\6\1\0\4\6\1\0\13\6\2\0\4\6\5\0" - + "\5\6\4\0\1\6\21\0\51\6\7\0\u0a70\0\57\6\1\0\57\6" - + "\1\0\205\6\6\0\4\6\3\7\16\0\46\6\12\0\66\6\11\0" - + "\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6" - + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6" - + "\1\0\40\7\57\0\1\6\u01c0\0\21\0\4\0\3\6\31\0\11\6" - + "\6\7\1\0\5\6\2\0\5\6\4\0\126\6\2\0\2\7\2\0" - + "\3\6\1\0\132\6\1\0\4\6\5\0\51\6\3\0\136\6\21\0" - + "\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cc\6\64\0\u048d\6\103\0" - + "\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6\1\7" - + "\14\0\2\7\1\0\31\6\10\0\120\6\2\7\45\0\11\6\2\0" - + "\147\6\2\0\4\6\1\0\2\6\16\0\12\6\120\0\10\6\1\7" - + "\3\6\1\7\4\6\1\7\27\6\5\7\20\0\1\6\7\0\64\6" - + "\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7\6\6\3\0" - + "\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7\14\0\35\6" - + "\3\0\4\7\57\6\16\7\16\0\1\6\12\7\46\0\51\6\16\7" - + "\11\0\3\6\1\7\10\6\2\7\2\0\12\7\6\0\27\6\3\0" - + "\1\6\1\7\4\0\60\6\1\7\1\6\3\7\2\6\2\7\5\6" - + "\2\7\1\6\1\7\1\6\30\0\3\6\43\0\6\6\2\0\6\6" - + "\2\0\6\6\11\0\7\6\1\0\7\6\221\0\43\6\10\7\1\0" - + "\2\7\2\0\12\7\6\0\u2ba4\6\14\0\27\6\4\0\61\6\4\0" - + "\u1800\0\u0900\0\u012e\6\2\0\76\6\2\0\152\6\46\0\7\6\14\0" - + "\5\6\5\0\1\6\1\7\12\6\1\0\15\6\1\0\5\6\1\0" - + "\1\6\1\0\2\6\1\0\2\6\1\0\154\6\41\0\u016b\6\22\0" - + "\100\6\2\0\66\6\10\0\40\0\15\6\3\0\20\7\20\0\7\7" - + "\14\0\2\6\30\0\3\6\31\0\1\6\6\0\5\6\1\0\207\6" - + "\2\0\1\7\4\0\1\6\13\0\12\7\7\0\32\6\4\0\1\6" - + "\1\0\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0\6\6" - + "\2\0\3\6\3\0\2\6\3\0\2\6\22\0\3\7\2\0\2\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\7\1\12\1\2\1\112\1\3\1\1\16\7\4\0\1\12\1\13"+ + "\1\33\1\0\1\6\1\110\1\105\1\34\1\76\1\77\1\5\1\45"+ + "\1\103\1\14\1\10\1\4\1\35\3\41\4\42\2\21\1\16\1\102"+ + "\1\11\1\32\1\15\1\23\1\111\1\27\1\17\1\25\1\26\1\43"+ + "\1\17\2\20\1\74\4\20\1\75\5\20\1\30\3\20\1\37\2\20"+ + "\1\24\1\46\1\31\1\107\1\20\1\0\1\52\1\50\1\54\1\63"+ + "\1\44\1\40\1\73\1\66\1\61\1\20\1\53\1\64\1\71\1\57"+ + "\1\56\1\67\1\20\1\51\1\55\1\60\1\62\1\72\1\65\1\36"+ + "\1\70\1\20\1\100\1\106\1\101\1\104\6\7\1\113\32\7\2\0"+ + "\4\6\1\0\1\47\2\0\1\6\2\0\1\7\7\0\1\6\1\0"+ + "\1\22\2\0\1\6\5\0\2\6\1\114\24\6\1\0\37\6\1\0"+ + "\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6\1\0\1\6\21\0"+ + "\160\7\5\6\1\0\2\6\2\0\4\6\1\0\7\0\1\6\1\0"+ + "\3\6\1\0\1\6\1\0\24\6\1\0\123\6\1\0\213\6\1\0"+ + "\5\7\2\0\236\6\11\0\46\6\2\0\1\6\7\0\47\6\11\0"+ + "\55\7\1\0\1\7\1\0\2\7\1\0\2\7\1\0\1\7\10\0"+ + "\33\6\5\0\3\6\15\0\4\7\7\0\1\6\4\0\13\7\5\0"+ + "\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6\10\7\1\0"+ + "\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6"+ + "\17\0\1\7\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6"+ + "\16\0\12\7\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7"+ + "\1\6\11\7\1\6\3\7\1\6\5\7\22\0\31\6\3\7\244\0"+ + "\4\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0"+ + "\12\7\1\0\7\6\1\0\7\6\1\0\3\7\1\0\10\6\2\0"+ + "\2\6\2\0\26\6\1\0\7\6\1\0\1\6\3\0\4\6\2\0"+ + "\1\7\1\6\7\7\2\0\2\7\2\0\3\7\1\6\10\0\1\7"+ + "\4\0\2\6\1\0\3\6\2\7\2\0\12\7\4\6\7\0\1\6"+ + "\5\0\3\7\1\0\6\6\4\0\2\6\2\0\26\6\1\0\7\6"+ + "\1\0\2\6\1\0\2\6\1\0\2\6\2\0\1\7\1\0\5\7"+ + "\4\0\2\7\2\0\3\7\3\0\1\7\7\0\4\6\1\0\1\6"+ + "\7\0\14\7\3\6\1\7\13\0\3\7\1\0\11\6\1\0\3\6"+ + "\1\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7"+ + "\1\6\10\7\1\0\3\7\1\0\3\7\2\0\1\6\17\0\2\6"+ + "\2\7\2\0\12\7\1\0\1\6\17\0\3\7\1\0\10\6\2\0"+ + "\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0"+ + "\1\7\1\6\7\7\2\0\2\7\2\0\3\7\10\0\2\7\4\0"+ + "\2\6\1\0\3\6\2\7\2\0\12\7\1\0\1\6\20\0\1\7"+ + "\1\6\1\0\6\6\3\0\3\6\1\0\4\6\3\0\2\6\1\0"+ + "\1\6\1\0\2\6\3\0\2\6\3\0\3\6\3\0\14\6\4\0"+ + "\5\7\3\0\3\7\1\0\4\7\2\0\1\6\6\0\1\7\16\0"+ + "\12\7\11\0\1\6\7\0\3\7\1\0\10\6\1\0\3\6\1\0"+ + "\27\6\1\0\12\6\1\0\5\6\3\0\1\6\7\7\1\0\3\7"+ + "\1\0\4\7\7\0\2\7\1\0\2\6\6\0\2\6\2\7\2\0"+ + "\12\7\22\0\2\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0"+ + "\12\6\1\0\5\6\2\0\1\7\1\6\7\7\1\0\3\7\1\0"+ + "\4\7\7\0\2\7\7\0\1\6\1\0\2\6\2\7\2\0\12\7"+ + "\1\0\2\6\17\0\2\7\1\0\10\6\1\0\3\6\1\0\51\6"+ + "\2\0\1\6\7\7\1\0\3\7\1\0\4\7\1\6\10\0\1\7"+ + "\10\0\2\6\2\7\2\0\12\7\12\0\6\6\2\0\2\7\1\0"+ + "\22\6\3\0\30\6\1\0\11\6\1\0\1\6\2\0\7\6\3\0"+ + "\1\7\4\0\6\7\1\0\1\7\1\0\10\7\22\0\2\7\15\0"+ + "\60\6\1\7\2\6\7\7\4\0\10\6\10\7\1\0\12\7\47\0"+ + "\2\6\1\0\1\6\2\0\2\6\1\0\1\6\2\0\1\6\6\0"+ + "\4\6\1\0\7\6\1\0\3\6\1\0\1\6\1\0\1\6\2\0"+ + "\2\6\1\0\4\6\1\7\2\6\6\7\1\0\2\7\1\6\2\0"+ + "\5\6\1\0\1\6\1\0\6\7\2\0\12\7\2\0\2\6\42\0"+ + "\1\6\27\0\2\7\6\0\12\7\13\0\1\7\1\0\1\7\1\0"+ + "\1\7\4\0\2\7\10\6\1\0\44\6\4\0\24\7\1\0\2\7"+ + "\5\6\13\7\1\0\44\7\11\0\1\7\71\0\53\6\24\7\1\6"+ + "\12\7\6\0\6\6\4\7\4\6\3\7\1\6\3\7\2\6\7\7"+ + "\3\6\4\7\15\6\14\7\1\6\17\7\2\0\46\6\12\0\53\6"+ + "\1\0\1\6\3\0\u0149\6\1\0\4\6\2\0\7\6\1\0\1\6"+ + "\1\0\4\6\2\0\51\6\1\0\4\6\2\0\41\6\1\0\4\6"+ + "\2\0\7\6\1\0\1\6\1\0\4\6\2\0\17\6\1\0\71\6"+ + "\1\0\4\6\2\0\103\6\2\0\3\7\40\0\20\6\20\0\125\6"+ + "\14\0\u026c\6\2\0\21\6\1\0\32\6\5\0\113\6\3\0\3\6"+ + "\17\0\15\6\1\0\4\6\3\7\13\0\22\6\3\7\13\0\22\6"+ + "\2\7\14\0\15\6\1\0\3\6\1\0\2\7\14\0\64\6\40\7"+ + "\3\0\1\6\3\0\2\6\1\7\2\0\12\7\41\0\3\7\2\0"+ + "\12\7\6\0\130\6\10\0\51\6\1\7\1\6\5\0\106\6\12\0"+ + "\35\6\3\0\14\7\4\0\14\7\12\0\12\7\36\6\2\0\5\6"+ + "\13\0\54\6\4\0\21\7\7\6\2\7\6\0\12\7\46\0\27\6"+ + "\5\7\4\0\65\6\12\7\1\0\35\7\2\0\13\7\6\0\12\7"+ + "\15\0\1\6\130\0\5\7\57\6\21\7\7\6\4\0\12\7\21\0"+ + "\11\7\14\0\3\7\36\6\12\7\3\0\2\6\12\7\6\0\46\6"+ + "\16\7\14\0\44\6\24\7\10\0\12\7\3\0\3\6\12\7\44\6"+ + "\122\0\3\7\1\0\25\7\4\6\1\7\4\6\1\7\15\0\300\6"+ + "\47\7\25\0\4\7\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6"+ + "\2\0\10\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\37\6"+ + "\2\0\65\6\1\0\7\6\1\0\1\6\3\0\3\6\1\0\7\6"+ + "\3\0\4\6\2\0\6\6\4\0\15\6\5\0\3\6\1\0\7\6"+ + "\3\0\13\0\1\7\2\7\2\7\30\0\1\112\1\112\5\7\20\0"+ + "\2\6\23\0\1\6\13\0\5\7\5\0\6\7\1\0\1\6\15\0"+ + "\1\6\20\0\15\6\3\0\32\6\26\0\15\7\4\0\1\7\3\0"+ + "\14\7\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6\3\0"+ + "\5\6\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6\1\0"+ + "\13\6\2\0\4\6\5\0\5\6\4\0\1\6\21\0\51\6\7\0"+ + "\u0a70\0\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\7\16\0"+ + "\46\6\12\0\66\6\11\0\1\6\17\0\1\7\27\6\11\0\7\6"+ + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6"+ + "\1\0\7\6\1\0\7\6\1\0\40\7\57\0\1\6\u01c0\0\21\0"+ + "\4\0\3\6\31\0\11\6\6\7\1\0\5\6\2\0\5\6\4\0"+ + "\126\6\2\0\2\7\2\0\3\6\1\0\132\6\1\0\4\6\5\0"+ + "\51\6\3\0\136\6\21\0\33\6\65\0\20\6\u0200\0\u19b6\6\112\0"+ + "\u51cc\6\64\0\u048d\6\103\0\56\6\2\0\u010d\6\3\0\20\6\12\7"+ + "\2\6\24\0\57\6\1\7\14\0\2\7\1\0\31\6\10\0\120\6"+ + "\2\7\45\0\11\6\2\0\147\6\2\0\4\6\1\0\2\6\16\0"+ + "\12\6\120\0\10\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7"+ + "\20\0\1\6\7\0\64\6\14\0\2\7\62\6\21\7\13\0\12\7"+ + "\6\0\22\7\6\6\3\0\1\6\4\0\12\7\34\6\10\7\2\0"+ + "\27\6\15\7\14\0\35\6\3\0\4\7\57\6\16\7\16\0\1\6"+ + "\12\7\46\0\51\6\16\7\11\0\3\6\1\7\10\6\2\7\2\0"+ + "\12\7\6\0\27\6\3\0\1\6\1\7\4\0\60\6\1\7\1\6"+ + "\3\7\2\6\2\7\5\6\2\7\1\6\1\7\1\6\30\0\3\6"+ + "\43\0\6\6\2\0\6\6\2\0\6\6\11\0\7\6\1\0\7\6"+ + "\221\0\43\6\10\7\1\0\2\7\2\0\12\7\6\0\u2ba4\6\14\0"+ + "\27\6\4\0\61\6\4\0\u1800\0\u0900\0\u012e\6\2\0\76\6\2\0"+ + "\152\6\46\0\7\6\14\0\5\6\5\0\1\6\1\7\12\6\1\0"+ + "\15\6\1\0\5\6\1\0\1\6\1\0\2\6\1\0\2\6\1\0"+ + "\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6\10\0\40\0\15\6"+ + "\3\0\20\7\20\0\7\7\14\0\2\6\30\0\3\6\31\0\1\6"+ + "\6\0\5\6\1\0\207\6\2\0\1\7\4\0\1\6\13\0\12\7"+ + "\7\0\32\6\4\0\1\6\1\0\32\6\13\0\131\6\3\0\6\6"+ + "\2\0\6\6\2\0\6\6\2\0\3\6\3\0\2\6\3\0\2\6"+ + "\22\0\3\7\2\0\2\0"; - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 - = "\12\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7" - + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17" - + "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\21\6" - + "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34" - + "\1\35\1\36\1\37\1\40\1\41\2\42\1\43\1\1" - + "\1\41\2\44\1\41\1\1\1\45\1\1\1\46\1\1" - + "\1\47\2\1\1\50\1\1\1\51\2\41\2\52\1\41" - + "\1\53\1\3\1\0\1\54\1\55\1\56\1\57\1\60" - + "\1\61\1\62\1\63\1\64\1\65\1\66\1\67\1\70" - + "\1\71\1\72\1\73\1\0\1\74\1\60\1\75\1\0" - + "\2\75\7\6\1\76\1\77\2\6\1\100\16\6\1\101" - + "\1\102\1\103\4\6\1\104\13\6\1\105\1\106\1\107" - + "\1\110\1\111\1\112\1\113\1\114\1\115\1\116\1\117" - + "\1\116\1\120\1\121\1\122\1\123\1\124\1\125\1\0" - + "\1\126\1\0\1\127\1\0\1\130\1\131\1\0\1\132" - + "\5\0\1\133\1\0\1\134\2\3\2\0\1\135\1\136" - + "\1\137\1\140\1\141\1\0\1\60\1\142\2\143\1\75" - + "\1\6\1\144\13\6\1\145\4\6\1\146\3\6\1\147" - + "\6\6\1\150\12\6\1\151\1\6\1\152\1\6\1\153" - + "\1\116\1\0\1\132\1\154\1\155\1\0\1\156\2\0" - + "\1\157\1\160\1\0\1\161\1\143\1\75\4\6\1\162" - + "\1\163\2\6\1\164\11\6\1\165\1\166\1\6\1\167" - + "\11\6\1\170\5\6\1\171\1\6\1\0\1\172\1\173" - + "\1\0\1\143\1\75\1\174\1\175\2\6\1\176\1\6" - + "\1\177\1\200\1\6\1\201\1\6\1\202\3\6\1\203" - + "\11\6\1\204\5\6\1\0\1\143\1\75\3\6\1\205" - + "\1\6\1\206\1\207\2\6\1\210\3\6\1\211\3\6" - + "\1\212\4\6\1\213\1\6\1\0\1\143\1\75\1\214" - + "\1\6\1\215\10\6\1\216\1\217\1\6\1\220\1\221" - + "\1\6\1\0\1\143\1\75\1\222\1\223\1\224\3\6" - + "\1\225\3\6\1\226\1\0\1\143\1\75\1\227\1\6" - + "\1\230\1\6\1\231\1\232\1\233\1\143\1\75\1\234" - + "\1\235\6\75"; + private static final String ZZ_ACTION_PACKED_0 = + "\13\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17"+ + "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\1\25"+ + "\21\6\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ + "\1\35\1\36\1\37\1\40\1\41\1\42\2\43\1\44"+ + "\1\1\1\42\2\45\1\42\1\1\1\46\1\1\1\47"+ + "\1\1\1\50\2\1\1\51\1\1\1\52\2\42\2\53"+ + "\1\42\1\54\1\42\1\1\1\55\1\3\1\0\1\56"+ + "\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66"+ + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\0"+ + "\1\76\1\62\1\77\1\0\2\77\7\6\1\100\1\101"+ + "\2\6\1\102\16\6\1\103\1\104\1\105\4\6\1\106"+ + "\13\6\1\107\1\110\1\111\1\112\1\113\1\114\1\115"+ + "\1\116\1\117\1\120\1\121\1\120\1\122\1\123\1\124"+ + "\1\125\1\126\1\127\1\0\1\130\1\0\1\131\1\0"+ + "\1\132\1\133\1\0\1\134\5\0\1\135\1\0\1\136"+ + "\1\115\2\3\2\0\1\137\1\140\1\141\1\142\1\143"+ + "\1\0\1\62\1\144\2\145\1\77\1\6\1\146\13\6"+ + "\1\147\4\6\1\150\3\6\1\151\6\6\1\152\12\6"+ + "\1\153\1\6\1\154\1\6\1\155\1\120\1\0\1\134"+ + "\1\156\1\157\1\0\1\160\2\0\1\161\1\162\1\163"+ + "\1\0\1\164\1\145\1\77\4\6\1\165\1\166\2\6"+ + "\1\167\11\6\1\170\1\171\1\6\1\172\11\6\1\173"+ + "\5\6\1\174\1\6\1\0\1\175\1\176\1\0\1\145"+ + "\1\77\1\177\1\200\2\6\1\201\1\6\1\202\1\203"+ + "\1\6\1\204\1\6\1\205\3\6\1\206\11\6\1\207"+ + "\5\6\1\0\1\145\1\77\3\6\1\210\1\6\1\211"+ + "\1\212\2\6\1\213\3\6\1\214\3\6\1\215\4\6"+ + "\1\216\1\6\1\0\1\145\1\77\1\217\1\6\1\220"+ + "\10\6\1\221\1\222\1\6\1\223\1\224\1\6\1\0"+ + "\1\145\1\77\1\225\1\226\1\227\3\6\1\230\3\6"+ + "\1\231\1\0\1\145\1\77\1\232\1\6\1\233\1\6"+ + "\1\234\1\235\1\236\1\145\1\77\1\237\1\240\6\77"; - private static int[] zzUnpackAction() { - int[] result = new int[426]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + private static int [] zzUnpackAction() { + int [] result = new int[433]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\115\0\232\0\347\0\u0134\0\u0181\0\u01ce\0\u021b"+ + "\0\u0268\0\u02b5\0\u0302\0\u034f\0\u039c\0\u034f\0\u03e9\0\u0436"+ + "\0\u0483\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e"+ + "\0\u06eb\0\u034f\0\u034f\0\u034f\0\u0738\0\u034f\0\u034f\0\u0785"+ + "\0\u07d2\0\u081f\0\u086c\0\u034f\0\u08b9\0\u0906\0\u0953\0\u09a0"+ + "\0\u09ed\0\u0a3a\0\u0a87\0\u0ad4\0\u0b21\0\u0b6e\0\u0bbb\0\u0c08"+ + "\0\u0c55\0\u0ca2\0\u0cef\0\u0d3c\0\u0d89\0\u034f\0\u034f\0\u034f"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u0dd6\0\u0e23\0\u0e70\0\u0ebd"+ + "\0\u034f\0\u0f0a\0\u0f57\0\u034f\0\u034f\0\u0fa4\0\u0ff1\0\u103e"+ + "\0\u034f\0\u108b\0\u10d8\0\u034f\0\u1125\0\u034f\0\u1172\0\u034f"+ + "\0\u11bf\0\u120c\0\u034f\0\u1259\0\u034f\0\u034f\0\u12a6\0\u034f"+ + "\0\u12f3\0\u1340\0\u034f\0\u138d\0\u13da\0\u034f\0\u1427\0\u1474"+ + "\0\u034f\0\u034f\0\u14c1\0\u034f\0\u150e\0\u034f\0\u155b\0\u15a8"+ + "\0\u034f\0\u034f\0\u15f5\0\u034f\0\u034f\0\u1642\0\u034f\0\u034f"+ + "\0\u168f\0\u16dc\0\u1729\0\u1776\0\u17c3\0\u1810\0\u185d\0\u18aa"+ + "\0\u18f7\0\u1944\0\u1991\0\u19de\0\u1a2b\0\u1a78\0\u034f\0\u034f"+ + "\0\u1ac5\0\u1b12\0\u04d0\0\u1b5f\0\u1bac\0\u1bf9\0\u1c46\0\u1c93"+ + "\0\u1ce0\0\u1d2d\0\u1d7a\0\u1dc7\0\u1e14\0\u1e61\0\u1eae\0\u1efb"+ + "\0\u1f48\0\u04d0\0\u04d0\0\u1f95\0\u1fe2\0\u202f\0\u207c\0\u20c9"+ + "\0\u04d0\0\u2116\0\u2163\0\u21b0\0\u21fd\0\u224a\0\u2297\0\u22e4"+ + "\0\u2331\0\u237e\0\u23cb\0\u2418\0\u034f\0\u034f\0\u034f\0\u034f"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u2465\0\u034f\0\u24b2"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u1125\0\u034f"+ + "\0\u1172\0\u034f\0\u11bf\0\u034f\0\u034f\0\u1259\0\u24ff\0\u254c"+ + "\0\u2599\0\u25e6\0\u2633\0\u2680\0\u26cd\0\u271a\0\u034f\0\u2767"+ + "\0\u27b4\0\u034f\0\u2801\0\u284e\0\u034f\0\u034f\0\u034f\0\u289b"+ + "\0\u034f\0\u28e8\0\u28e8\0\u034f\0\u2935\0\u17c3\0\u2982\0\u29cf"+ + "\0\u04d0\0\u2a1c\0\u2a69\0\u2ab6\0\u2b03\0\u2b50\0\u2b9d\0\u2bea"+ + "\0\u2c37\0\u2c84\0\u2cd1\0\u2d1e\0\u04d0\0\u2d6b\0\u2db8\0\u2e05"+ + "\0\u2e52\0\u04d0\0\u2e9f\0\u2eec\0\u2f39\0\u04d0\0\u2f86\0\u2fd3"+ + "\0\u3020\0\u306d\0\u30ba\0\u3107\0\u04d0\0\u3154\0\u31a1\0\u31ee"+ + "\0\u323b\0\u3288\0\u32d5\0\u3322\0\u336f\0\u33bc\0\u3409\0\u04d0"+ + "\0\u3456\0\u04d0\0\u34a3\0\u04d0\0\u034f\0\u24ff\0\u034f\0\u034f"+ + "\0\u034f\0\u34f0\0\u034f\0\u353d\0\u358a\0\u35d7\0\u034f\0\u034f"+ + "\0\u3624\0\u034f\0\u3671\0\u36be\0\u370b\0\u3758\0\u37a5\0\u37f2"+ + "\0\u04d0\0\u04d0\0\u383f\0\u388c\0\u04d0\0\u38d9\0\u3926\0\u3973"+ + "\0\u39c0\0\u3a0d\0\u3a5a\0\u3aa7\0\u3af4\0\u3b41\0\u04d0\0\u04d0"+ + "\0\u3b8e\0\u04d0\0\u3bdb\0\u3c28\0\u3c75\0\u3cc2\0\u3d0f\0\u3d5c"+ + "\0\u3da9\0\u3df6\0\u3e43\0\u04d0\0\u3e90\0\u3edd\0\u3f2a\0\u3f77"+ + "\0\u3fc4\0\u04d0\0\u4011\0\u405e\0\u034f\0\u034f\0\u40ab\0\u40f8"+ + "\0\u4145\0\u04d0\0\u4192\0\u41df\0\u422c\0\u04d0\0\u4279\0\u04d0"+ + "\0\u04d0\0\u42c6\0\u04d0\0\u4313\0\u04d0\0\u4360\0\u43ad\0\u43fa"+ + "\0\u04d0\0\u4447\0\u4494\0\u44e1\0\u452e\0\u457b\0\u45c8\0\u4615"+ + "\0\u4662\0\u46af\0\u04d0\0\u46fc\0\u4749\0\u4796\0\u47e3\0\u4830"+ + "\0\u487d\0\u48ca\0\u4917\0\u4964\0\u49b1\0\u49fe\0\u04d0\0\u4a4b"+ + "\0\u04d0\0\u04d0\0\u4a98\0\u4ae5\0\u04d0\0\u4b32\0\u4b7f\0\u4bcc"+ + "\0\u04d0\0\u4c19\0\u4c66\0\u4cb3\0\u04d0\0\u4d00\0\u4d4d\0\u4d9a"+ + "\0\u4de7\0\u04d0\0\u4e34\0\u4e81\0\u4ece\0\u4f1b\0\u04d0\0\u4f68"+ + "\0\u04d0\0\u4fb5\0\u5002\0\u504f\0\u509c\0\u50e9\0\u5136\0\u5183"+ + "\0\u51d0\0\u04d0\0\u04d0\0\u521d\0\u04d0\0\u04d0\0\u526a\0\u52b7"+ + "\0\u5304\0\u5351\0\u04d0\0\u04d0\0\u04d0\0\u539e\0\u53eb\0\u5438"+ + "\0\u04d0\0\u5485\0\u54d2\0\u551f\0\u04d0\0\u556c\0\u55b9\0\u5606"+ + "\0\u04d0\0\u5653\0\u04d0\0\u56a0\0\u04d0\0\u04d0\0\u034f\0\u034f"+ + "\0\u56ed\0\u04d0\0\u04d0\0\u573a\0\u5787\0\u57d4\0\u5821\0\u586e"+ + "\0\u1729"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[433]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } + return j; + } - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); - private static final String ZZ_ROWMAP_PACKED_0 - = "\0\0\0\113\0\226\0\341\0\u012c\0\u0177\0\u01c2\0\u020d" - + "\0\u0258\0\u02a3\0\u02ee\0\u0339\0\u02ee\0\u0384\0\u03cf\0\u041a" - + "\0\u0465\0\u04b0\0\u04fb\0\u0546\0\u0591\0\u05dc\0\u0627\0\u0672" - + "\0\u02ee\0\u02ee\0\u02ee\0\u06bd\0\u02ee\0\u02ee\0\u0708\0\u0753" - + "\0\u079e\0\u07e9\0\u0834\0\u087f\0\u08ca\0\u0915\0\u0960\0\u09ab" - + "\0\u09f6\0\u0a41\0\u0a8c\0\u0ad7\0\u0b22\0\u0b6d\0\u0bb8\0\u0c03" - + "\0\u0c4e\0\u0c99\0\u0ce4\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee" - + "\0\u02ee\0\u02ee\0\u0d2f\0\u0d7a\0\u0dc5\0\u0e10\0\u02ee\0\u0e5b" - + "\0\u0ea6\0\u02ee\0\u02ee\0\u0ef1\0\u0f3c\0\u0f87\0\u02ee\0\u0fd2" - + "\0\u101d\0\u02ee\0\u1068\0\u02ee\0\u10b3\0\u02ee\0\u10fe\0\u1149" - + "\0\u02ee\0\u1194\0\u02ee\0\u02ee\0\u11df\0\u02ee\0\u122a\0\u1275" - + "\0\u02ee\0\u12c0\0\u130b\0\u02ee\0\u02ee\0\u1356\0\u02ee\0\u13a1" - + "\0\u02ee\0\u13ec\0\u1437\0\u02ee\0\u02ee\0\u1482\0\u02ee\0\u02ee" - + "\0\u14cd\0\u02ee\0\u02ee\0\u1518\0\u1563\0\u15ae\0\u15f9\0\u1644" - + "\0\u168f\0\u16da\0\u1725\0\u1770\0\u17bb\0\u1806\0\u1851\0\u189c" - + "\0\u18e7\0\u02ee\0\u02ee\0\u1932\0\u197d\0\u0465\0\u19c8\0\u1a13" - + "\0\u1a5e\0\u1aa9\0\u1af4\0\u1b3f\0\u1b8a\0\u1bd5\0\u1c20\0\u1c6b" - + "\0\u1cb6\0\u1d01\0\u1d4c\0\u1d97\0\u0465\0\u0465\0\u1de2\0\u1e2d" - + "\0\u1e78\0\u1ec3\0\u1f0e\0\u0465\0\u1f59\0\u1fa4\0\u1fef\0\u203a" - + "\0\u2085\0\u20d0\0\u211b\0\u2166\0\u21b1\0\u21fc\0\u2247\0\u02ee" - + "\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee" - + "\0\u2292\0\u02ee\0\u22dd\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee" - + "\0\u02ee\0\u1068\0\u02ee\0\u10b3\0\u02ee\0\u10fe\0\u02ee\0\u02ee" - + "\0\u1194\0\u2328\0\u2373\0\u23be\0\u2409\0\u2454\0\u249f\0\u24ea" - + "\0\u2535\0\u02ee\0\u2580\0\u02ee\0\u25cb\0\u2616\0\u02ee\0\u02ee" - + "\0\u02ee\0\u2661\0\u02ee\0\u26ac\0\u26ac\0\u02ee\0\u26f7\0\u1644" - + "\0\u2742\0\u278d\0\u0465\0\u27d8\0\u2823\0\u286e\0\u28b9\0\u2904" - + "\0\u294f\0\u299a\0\u29e5\0\u2a30\0\u2a7b\0\u2ac6\0\u0465\0\u2b11" - + "\0\u2b5c\0\u2ba7\0\u2bf2\0\u0465\0\u2c3d\0\u2c88\0\u2cd3\0\u0465" - + "\0\u2d1e\0\u2d69\0\u2db4\0\u2dff\0\u2e4a\0\u2e95\0\u0465\0\u2ee0" - + "\0\u2f2b\0\u2f76\0\u2fc1\0\u300c\0\u3057\0\u30a2\0\u30ed\0\u3138" - + "\0\u3183\0\u0465\0\u31ce\0\u0465\0\u3219\0\u0465\0\u02ee\0\u2328" - + "\0\u02ee\0\u02ee\0\u02ee\0\u3264\0\u02ee\0\u32af\0\u32fa\0\u3345" - + "\0\u02ee\0\u3390\0\u02ee\0\u33db\0\u3426\0\u3471\0\u34bc\0\u3507" - + "\0\u3552\0\u0465\0\u0465\0\u359d\0\u35e8\0\u0465\0\u3633\0\u367e" - + "\0\u36c9\0\u3714\0\u375f\0\u37aa\0\u37f5\0\u3840\0\u388b\0\u0465" - + "\0\u0465\0\u38d6\0\u0465\0\u3921\0\u396c\0\u39b7\0\u3a02\0\u3a4d" - + "\0\u3a98\0\u3ae3\0\u3b2e\0\u3b79\0\u0465\0\u3bc4\0\u3c0f\0\u3c5a" - + "\0\u3ca5\0\u3cf0\0\u0465\0\u3d3b\0\u3d86\0\u02ee\0\u02ee\0\u3dd1" - + "\0\u3e1c\0\u3e67\0\u0465\0\u3eb2\0\u3efd\0\u3f48\0\u0465\0\u3f93" - + "\0\u0465\0\u0465\0\u3fde\0\u0465\0\u4029\0\u0465\0\u4074\0\u40bf" - + "\0\u410a\0\u0465\0\u4155\0\u41a0\0\u41eb\0\u4236\0\u4281\0\u42cc" - + "\0\u4317\0\u4362\0\u43ad\0\u0465\0\u43f8\0\u4443\0\u448e\0\u44d9" - + "\0\u4524\0\u456f\0\u45ba\0\u4605\0\u4650\0\u469b\0\u46e6\0\u0465" - + "\0\u4731\0\u0465\0\u0465\0\u477c\0\u47c7\0\u0465\0\u4812\0\u485d" - + "\0\u48a8\0\u0465\0\u48f3\0\u493e\0\u4989\0\u0465\0\u49d4\0\u4a1f" - + "\0\u4a6a\0\u4ab5\0\u0465\0\u4b00\0\u4b4b\0\u4b96\0\u4be1\0\u0465" - + "\0\u4c2c\0\u0465\0\u4c77\0\u4cc2\0\u4d0d\0\u4d58\0\u4da3\0\u4dee" - + "\0\u4e39\0\u4e84\0\u0465\0\u0465\0\u4ecf\0\u0465\0\u0465\0\u4f1a" - + "\0\u4f65\0\u4fb0\0\u4ffb\0\u0465\0\u0465\0\u0465\0\u5046\0\u5091" - + "\0\u50dc\0\u0465\0\u5127\0\u5172\0\u51bd\0\u0465\0\u5208\0\u5253" - + "\0\u529e\0\u0465\0\u52e9\0\u0465\0\u5334\0\u0465\0\u0465\0\u02ee" - + "\0\u02ee\0\u537f\0\u0465\0\u0465\0\u53ca\0\u5415\0\u5460\0\u54ab" - + "\0\u54f6\0\u15ae"; + private static final String ZZ_TRANS_PACKED_0 = + "\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\14"+ + "\1\23\1\24\1\17\1\25\1\26\1\27\1\30\2\22"+ + "\1\31\1\14\1\32\1\33\4\22\1\34\1\35\1\36"+ + "\1\37\1\40\2\22\1\41\2\31\1\22\1\42\1\43"+ + "\1\14\1\44\1\45\1\46\1\47\1\22\1\50\1\51"+ + "\1\52\1\53\1\54\1\55\1\56\1\57\1\22\1\60"+ + "\1\22\1\61\2\22\1\62\1\63\1\64\1\65\1\66"+ + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76"+ + "\1\77\1\100\1\101\2\0\1\22\1\102\1\103\1\104"+ + "\30\102\1\105\12\102\1\106\46\102\1\107\1\103\1\104"+ + "\31\107\1\105\11\107\1\106\46\107\1\14\1\110\1\111"+ + "\1\112\1\113\5\14\1\112\2\14\1\114\3\115\4\14"+ + "\4\115\5\14\3\115\2\14\2\115\3\14\26\115\2\14"+ + "\1\116\11\14\2\0\2\14\1\0\1\14\1\0\27\14"+ + "\1\117\44\14\1\120\11\14\2\0\2\14\1\110\1\111"+ + "\1\112\6\14\1\112\3\14\3\121\2\14\1\122\1\14"+ + "\4\121\5\14\3\121\2\14\2\121\3\14\26\121\2\14"+ + "\1\123\11\14\2\0\2\14\1\0\1\14\1\0\27\14"+ + "\1\124\44\14\1\125\11\14\2\0\1\14\1\126\1\110"+ + "\1\111\1\0\25\126\1\127\60\126\2\0\1\126\1\130"+ + "\1\110\1\111\1\0\10\130\1\131\75\130\2\0\1\130"+ + "\1\126\1\110\1\111\1\0\5\126\1\132\66\126\1\133"+ + "\11\126\2\0\1\126\1\134\1\103\1\104\43\134\1\135"+ + "\1\136\45\134\117\0\1\16\115\0\1\17\6\0\1\17"+ + "\106\0\1\137\1\140\24\0\1\141\114\0\1\142\70\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\26\22\15\0\2\22\10\0\1\143\1\144\7\0\1\145"+ + "\13\0\1\145\3\0\2\145\33\0\1\146\27\0\1\147"+ + "\4\0\3\150\4\0\4\150\1\0\1\151\3\0\3\150"+ + "\2\0\2\150\3\0\26\150\2\0\1\152\46\0\1\153"+ + "\76\0\1\154\15\0\1\155\77\0\1\156\14\0\1\157"+ + "\100\0\1\160\106\0\1\145\10\0\1\31\13\0\1\31"+ + "\3\0\2\31\2\161\102\0\1\162\72\0\1\145\10\0"+ + "\1\163\13\0\1\164\2\165\1\0\1\166\1\167\2\161"+ + "\56\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\170\3\22\1\171\2\22\1\172\1\173"+ + "\13\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\1\22\1\174\6\22\3\0\2\22\1\175"+ + "\11\22\1\176\11\22\15\0\2\22\32\0\1\177\12\0"+ + "\1\200\55\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\201\24\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\202"+ + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\5\22\1\203\20\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\204\3\22\1\205\5\22"+ + "\1\206\11\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\207\3\0\10\22\1\210"+ + "\1\22\1\211\2\22\1\212\10\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\22\22\1\213\3\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\214\3\0\2\22"+ + "\1\215\7\22\1\216\13\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22"+ + "\1\217\14\22\1\220\1\22\1\221\5\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\3\22"+ + "\1\222\4\22\3\0\5\22\1\223\1\22\1\224\11\22"+ + "\1\225\4\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\5\22\1\226\1\22"+ + "\1\227\16\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\230\3\0\6\22\1\231"+ + "\11\22\1\232\5\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\233"+ + "\4\22\1\234\7\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\235"+ + "\1\236\7\22\1\237\13\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\240\3\22\1\241\17\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\242\3\0"+ + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\7\22\1\243\16\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\2\22\1\244\23\22\15\0\2\22\32\0"+ + "\1\245\52\0\1\246\41\0\1\247\53\0\1\250\40\0"+ + "\1\251\114\0\1\252\62\0\1\102\2\0\30\102\1\0"+ + "\12\102\1\0\46\102\2\0\1\104\112\0\1\253\3\0"+ + "\27\253\1\254\1\255\1\256\2\253\1\257\1\256\1\260"+ + "\3\253\1\261\1\253\1\262\1\263\5\253\1\264\1\265"+ + "\31\253\2\0\1\253\1\107\2\0\31\107\1\0\11\107"+ + "\1\0\46\107\2\0\1\111\115\0\1\112\6\0\1\112"+ + "\117\0\1\266\107\0\1\267\3\0\1\267\1\0\5\267"+ + "\2\0\4\267\1\0\1\270\2\0\10\267\3\0\26\267"+ + "\17\0\1\271\2\0\30\271\1\272\61\271\10\0\1\273"+ + "\3\0\1\273\1\0\5\273\2\0\4\273\1\0\1\274"+ + "\2\0\10\273\3\0\26\273\34\0\1\275\77\0\1\276"+ + "\2\0\30\276\1\277\1\300\60\276\31\0\1\301\77\0"+ + "\1\302\104\0\1\303\6\0\1\304\2\0\3\305\2\0"+ + "\1\306\1\0\4\305\5\0\3\305\2\0\2\305\3\0"+ + "\26\305\2\0\1\307\14\0\1\134\2\0\43\134\2\0"+ + "\45\134\1\253\3\0\34\253\1\257\5\253\1\261\1\253"+ + "\1\262\1\263\5\253\1\264\1\265\31\253\2\0\1\310"+ + "\1\137\1\311\1\312\112\137\5\313\1\314\107\313\10\0"+ + "\1\315\125\0\1\145\13\0\1\145\3\0\2\145\2\161"+ + "\102\0\1\316\72\0\1\150\3\0\1\150\1\0\5\150"+ + "\2\0\4\150\4\0\10\150\3\0\26\150\51\0\1\317"+ + "\77\0\1\320\14\0\1\321\76\0\1\322\4\0\1\323"+ + "\13\0\1\323\3\0\2\323\2\0\1\322\101\0\1\324"+ + "\72\0\1\145\10\0\1\163\13\0\1\163\3\0\2\163"+ + "\2\161\60\0\1\145\10\0\1\163\13\0\1\164\3\0"+ + "\1\166\1\167\2\161\67\0\1\325\1\0\1\325\3\0"+ + "\3\325\5\0\1\326\2\0\5\325\3\0\1\325\1\0"+ + "\1\325\1\0\1\325\6\0\1\325\41\0\1\145\10\0"+ + "\1\163\13\0\1\167\3\0\2\167\2\161\60\0\1\145"+ + "\10\0\1\163\13\0\1\327\3\0\2\327\2\161\56\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\14\22\1\330\11\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\331"+ + "\24\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\7\22\1\332\16\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\7\22\1\333\16\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\10\22\1\334\15\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\335"+ + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\5\22\1\336\20\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\337\3\0\26\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22"+ + "\1\340\15\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\5\22\1\341\2\22"+ + "\1\342\15\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\7\22\1\343\16\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\344\23\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\10\22\1\345\15\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\346\23\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\17\22\1\347\6\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\11\22\1\350\14\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\351\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\15\22\1\352"+ + "\10\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\21\22\1\353\4\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\14\22\1\354\11\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\12\22\1\355\5\22\1\356\5\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\1\22\1\357\7\22\1\360\14\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\17\22\1\361\6\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\5\22\1\362"+ + "\2\22\1\363\15\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\17\22\1\364"+ + "\6\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\365\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\13\22\1\366\12\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\3\22\1\367\4\22"+ + "\3\0\14\22\1\370\11\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22"+ + "\1\371\16\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\10\22\1\372\15\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\11\22\1\373\14\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\6\22\1\374\2\22\1\375\14\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\4\22\1\376\21\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\377"+ + "\25\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\1\22\1\u0100\24\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\11\22\1\u0101\14\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\10\22\1\u0102\15\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\3\22\1\u0103\4\22\3\0"+ + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\25\22\1\u0104\15\0\2\22"+ + "\35\0\1\260\3\0\2\260\107\0\1\u0105\3\0\2\u0105"+ + "\52\0\1\u0106\2\0\30\u0106\1\277\1\0\60\u0106\1\300"+ + "\2\0\30\300\1\u0107\61\300\15\0\1\u0108\114\0\1\u0109"+ + "\115\0\3\u010a\4\0\4\u010a\5\0\3\u010a\2\0\2\u010a"+ + "\3\0\26\u010a\2\0\1\u010b\30\0\1\u010c\7\0\1\u010d"+ + "\100\0\1\305\3\0\1\305\1\0\5\305\2\0\4\305"+ + "\4\0\10\305\3\0\26\305\35\0\3\u010e\4\0\4\u010e"+ + "\5\0\3\u010e\2\0\2\u010e\3\0\26\u010e\2\0\1\u010f"+ + "\63\0\1\u0110\47\0\1\312\112\0\5\313\1\u0111\107\313"+ + "\4\0\1\312\1\314\141\0\1\u0112\103\0\1\323\13\0"+ + "\1\323\3\0\2\323\71\0\1\u0113\1\0\1\u0113\3\0"+ + "\3\u0113\5\0\1\u0113\2\0\5\u0113\3\0\1\u0113\1\0"+ + "\1\u0113\1\0\1\u0113\6\0\1\u0113\41\0\1\145\10\0"+ + "\1\163\13\0\1\u0114\3\0\2\u0114\2\161\56\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22"+ + "\1\u0115\20\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u0116\23\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\4\22\1\u0117\21\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u0118\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0119"+ + "\7\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u011a\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\u011b\23\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\12\22"+ + "\1\u011c\13\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u011d\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\4\22\1\u011e\21\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\5\22\1\u011f\2\22\1\u0120\15\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\5\22\1\u0121\20\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u0122"+ + "\15\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u0123\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\10\22\1\u0124\15\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22"+ + "\1\u0125\24\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u0126\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\14\22\1\u0127\11\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u0128"+ + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\6\22\1\u0129\17\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\5\22\1\u012a\20\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u012b\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u012c"+ + "\15\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u012d\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\6\22\1\u012e\5\22\1\u012f\11\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u0130\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u0131"+ + "\23\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u0132\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\u0133\23\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\16\22"+ + "\1\u0134\7\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0135\11\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\10\22\1\u0136\15\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\22\22\1\u0137\3\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\3\22"+ + "\1\u0138\22\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0139\11\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\13\22\1\u013a\12\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\11\22\1\u013b\14\22\15\0\2\22\1\0\2\u013c"+ + "\5\0\1\u010a\1\0\1\u013c\1\0\1\u010a\1\u013d\5\u010a"+ + "\2\0\4\u010a\4\0\10\u010a\3\0\26\u010a\33\0\1\u013e"+ + "\125\0\1\u013f\77\0\1\u010e\3\0\1\u010e\1\0\5\u010e"+ + "\2\0\4\u010e\4\0\10\u010e\3\0\26\u010e\17\0\4\313"+ + "\1\312\1\u0111\107\313\17\0\1\u0140\1\0\1\u0140\3\0"+ + "\3\u0140\5\0\1\u0140\2\0\5\u0140\3\0\1\u0140\1\0"+ + "\1\u0140\1\0\1\u0140\6\0\1\u0140\41\0\1\145\10\0"+ + "\1\163\13\0\1\u0141\3\0\2\u0141\2\161\56\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u0142\3\0"+ + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\14\22\1\u0143\11\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\u0144\15\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\7\22\1\u0145\16\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\3\22\1\u0146"+ + "\22\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\1\22\1\u0147\24\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\16\22\1\u0148\7\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\10\22\1\u0149\15\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u014a"+ + "\14\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\5\22\1\u014b\20\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\11\22\1\u014c\14\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\1\22\1\u014d\24\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u014e"+ + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\1\22\1\u014f\24\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\u0150\20\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\15\22\1\u0151\10\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\6\22\1\u0152"+ + "\17\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\2\22\1\u0153\23\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\u0154\24\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\1\22\1\u0155\24\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0156\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\3\22\1\u0157\4\22\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\12\22\1\u0158\13\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22"+ + "\1\u0159\15\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\21\22\1\u015a\4\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u015b\3\0\26\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u015c"+ + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u015d\23\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\u015e\23\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\11\22\1\u015f\14\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22"+ + "\1\u0160\16\22\15\0\2\22\1\0\2\u013c\7\0\1\u013c"+ + "\2\0\1\u013d\125\0\1\u0161\105\0\1\u0162\1\0\1\u0162"+ + "\3\0\3\u0162\5\0\1\u0162\2\0\5\u0162\3\0\1\u0162"+ + "\1\0\1\u0162\1\0\1\u0162\6\0\1\u0162\41\0\1\145"+ + "\10\0\1\163\13\0\1\u0163\3\0\2\u0163\2\161\56\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\14\22\1\u0164\11\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0165"+ + "\14\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\13\22\1\u0166\12\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\7\22\1\u0167\16\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\7\22\1\u0168\16\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u0169"+ + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\16\22\1\u016a\7\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\11\22\1\u016b\14\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\17\22\1\u016c\6\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\3\22\1\u016d\4\22\3\0"+ + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\7\22\1\u016e\16\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\3\22\1\u016f\4\22\3\0\7\22\1\u0170\16\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\u0171\15\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\21\22\1\u0172\4\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0173"+ + "\14\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\14\22\1\u0174\11\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\u0175\3\0\26\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\11\22"+ + "\1\u0176\14\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u0177\21\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\10\22\1\u0178\15\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\23\22\1\u0179\2\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22"+ + "\1\u017a\21\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\11\22\1\u017b\14\22"+ + "\15\0\2\22\27\0\1\u017c\104\0\1\u017d\1\0\1\u017d"+ + "\3\0\3\u017d\5\0\1\u017d\2\0\5\u017d\3\0\1\u017d"+ + "\1\0\1\u017d\1\0\1\u017d\6\0\1\u017d\41\0\1\145"+ + "\10\0\1\163\13\0\1\u017e\3\0\2\u017e\2\161\56\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\20\22\1\u017f\5\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\6\22\1\u0180"+ + "\17\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\5\22\1\u0181\20\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\12\22\1\u0182\13\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\13\22\1\u0183\12\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u0184"+ + "\23\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\4\22\1\u0185\21\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\2\22\1\u0186\23\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\2\22\1\u0187\23\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0188\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\7\22\1\u0189\16\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\10\22\1\u018a\15\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22"+ + "\1\u018b\21\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u018c\15\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u018d\3\0\26\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u018e"+ + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u018f\15\22"+ + "\15\0\2\22\30\0\1\u0190\103\0\1\u0191\1\0\1\u0191"+ + "\3\0\3\u0191\5\0\1\u0191\2\0\5\u0191\3\0\1\u0191"+ + "\1\0\1\u0191\1\0\1\u0191\6\0\1\u0191\41\0\1\145"+ + "\10\0\1\163\13\0\1\u0192\3\0\2\u0192\2\161\56\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\7\22\1\u0193\16\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0194\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u0195\3\0\26\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\4\22\1\u0196\21\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0197\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\4\22\1\u0198\21\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\14\22\1\u0199\11\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22"+ + "\1\u019a\16\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u019b\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\u019c\3\0\26\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\20\22"+ + "\1\u019d\5\22\15\0\2\22\27\0\1\u019e\104\0\1\u019f"+ + "\1\0\1\u019f\3\0\3\u019f\5\0\1\u019f\2\0\5\u019f"+ + "\3\0\1\u019f\1\0\1\u019f\1\0\1\u019f\6\0\1\u019f"+ + "\41\0\1\145\10\0\1\163\13\0\1\u01a0\3\0\2\u01a0"+ + "\2\161\56\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\u01a1\3\0\26\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\6\22"+ + "\1\u01a2\17\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u01a3\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\u01a4\15\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\13\22\1\u01a5\12\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\13\22\1\u01a6"+ + "\12\22\15\0\2\22\24\0\1\u01a7\107\0\1\u01a8\1\0"+ + "\1\u01a8\3\0\3\u01a8\5\0\1\u01a8\2\0\5\u01a8\3\0"+ + "\1\u01a8\1\0\1\u01a8\1\0\1\u01a8\6\0\1\u01a8\41\0"+ + "\1\145\10\0\1\163\13\0\1\u01a9\3\0\2\u01a9\2\161"+ + "\56\0\2\22\7\0\3\22\3\0\4\22\4\0\3\22"+ + "\1\u01aa\4\22\3\0\26\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22"+ + "\1\u01ab\20\22\15\0\2\22\10\0\1\145\10\0\1\163"+ + "\13\0\1\u01ac\3\0\2\u01ac\2\161\60\0\1\145\10\0"+ + "\1\163\13\0\1\u01ad\3\0\2\u01ad\2\161\60\0\1\145"+ + "\10\0\1\163\13\0\1\u01ae\3\0\2\u01ae\2\161\60\0"+ + "\1\145\10\0\1\163\13\0\1\u01af\3\0\2\u01af\2\161"+ + "\60\0\1\145\10\0\1\163\13\0\1\u01b0\3\0\2\u01b0"+ + "\2\161\60\0\1\145\10\0\1\163\13\0\1\u01b1\3\0"+ + "\2\u01b1\2\161\50\0"; - private static int[] zzUnpackRowMap() { - int[] result = new int[426]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + private static int [] zzUnpackTrans() { + int [] result = new int[22715]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\13\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11"+ + "\4\1\1\11\21\1\7\11\4\1\1\11\2\1\2\11"+ + "\3\1\1\11\2\1\1\11\1\1\1\11\1\1\1\11"+ + "\2\1\1\11\1\1\2\11\1\1\1\11\2\1\1\11"+ + "\2\1\1\11\1\1\1\0\2\11\1\1\1\11\1\1"+ + "\1\11\2\1\2\11\1\1\2\11\1\1\2\11\1\0"+ + "\3\1\1\0\11\1\2\11\44\1\11\11\1\1\1\11"+ + "\1\1\6\11\1\0\1\11\1\0\1\11\1\0\2\11"+ + "\1\0\1\1\5\0\1\1\1\0\1\11\2\1\1\11"+ + "\2\0\3\11\1\1\1\11\1\0\1\1\1\11\60\1"+ + "\1\11\1\0\3\11\1\0\1\11\2\0\1\1\2\11"+ + "\1\0\1\11\51\1\1\0\2\11\1\0\41\1\1\0"+ + "\32\1\1\0\23\1\1\0\15\1\1\0\10\1\2\11"+ + "\11\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[433]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); + /** the input device */ + private java.io.Reader zzReader; - private static final String ZZ_TRANS_PACKED_0 - = "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\13" - + "\1\22\1\23\1\16\1\24\1\25\1\26\1\27\2\21" - + "\1\30\1\13\1\31\1\32\4\21\1\33\1\34\1\35" - + "\1\36\1\37\2\21\1\40\2\30\1\21\1\41\1\42" - + "\1\13\1\43\1\44\1\45\1\21\1\46\1\47\1\50" - + "\1\51\1\52\1\53\1\54\1\55\1\21\1\56\1\21" - + "\1\57\2\21\1\60\1\61\1\62\1\63\1\64\1\65" - + "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75" - + "\1\76\1\77\2\0\1\100\1\101\1\102\30\100\1\103" - + "\12\100\1\104\44\100\1\105\1\101\1\102\31\105\1\103" - + "\11\105\1\104\44\105\1\13\1\106\1\107\1\110\1\111" - + "\5\13\1\110\2\13\1\112\3\113\4\13\4\113\5\13" - + "\3\113\2\13\2\113\2\13\26\113\2\13\1\114\11\13" - + "\2\0\1\13\1\0\1\13\1\0\27\13\1\115\43\13" - + "\1\116\11\13\2\0\1\13\1\106\1\107\1\110\6\13" - + "\1\110\3\13\3\117\2\13\1\120\1\13\4\117\5\13" - + "\3\117\2\13\2\117\2\13\26\117\2\13\1\121\11\13" - + "\2\0\1\13\1\0\1\13\1\0\27\13\1\122\43\13" - + "\1\123\11\13\2\0\1\124\1\106\1\107\1\0\25\124" - + "\1\125\57\124\2\0\1\126\1\106\1\107\1\0\10\126" - + "\1\127\74\126\2\0\1\124\1\106\1\107\1\0\5\124" - + "\1\130\65\124\1\131\11\124\117\0\1\15\113\0\1\16" - + "\6\0\1\16\104\0\1\132\1\133\24\0\1\134\112\0" - + "\1\135\66\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\26\21\15\0\1\21\10\0\1\136\1\137" - + "\7\0\1\140\13\0\1\140\3\0\2\140\32\0\1\141" - + "\26\0\1\142\4\0\3\143\4\0\4\143\1\0\1\144" - + "\3\0\3\143\2\0\2\143\2\0\26\143\2\0\1\145" - + "\45\0\1\146\74\0\1\147\15\0\1\150\75\0\1\151" - + "\14\0\1\152\76\0\1\153\104\0\1\140\10\0\1\30" - + "\13\0\1\30\3\0\2\30\2\154\100\0\1\155\70\0" - + "\1\140\10\0\1\156\13\0\1\157\2\160\1\0\1\161" - + "\1\162\2\154\54\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\2\21\1\163\3\21\1\164\2\21" - + "\1\165\1\166\13\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\1\21\1\167\6\21\2\0" - + "\2\21\1\170\11\21\1\171\11\21\15\0\1\21\32\0" - + "\1\172\12\0\1\173\53\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\1\21\1\174\24\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\7\21\1\175\2\0\26\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\5\21" - + "\1\176\20\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\2\21\1\177\3\21" - + "\1\200\5\21\1\201\11\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\7\21\1\202\2\0" - + "\10\21\1\203\1\21\1\204\2\21\1\205\10\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\22\21\1\206\3\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\207" - + "\2\0\2\21\1\210\7\21\1\211\13\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\1\21\1\212\14\21\1\213\1\21\1\214\5\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\3\21\1\215\4\21\2\0\5\21\1\216\1\21" - + "\1\217\11\21\1\220\4\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\5\21" - + "\1\221\1\21\1\222\16\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\7\21\1\223\2\0" - + "\6\21\1\224\11\21\1\225\5\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\11\21\1\226\4\21\1\227\7\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\1\21\1\230\1\231\7\21\1\232\13\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\2\21\1\233\3\21\1\234\17\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\7\21" - + "\1\235\2\0\26\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\236" - + "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\2\21\1\237\23\21\15\0" - + "\1\21\32\0\1\240\51\0\1\241\40\0\1\242\52\0" - + "\1\243\37\0\1\244\112\0\1\245\60\0\1\100\2\0" - + "\30\100\1\0\12\100\1\0\44\100\2\0\1\102\110\0" - + "\1\246\3\0\27\246\1\247\1\250\1\251\2\246\1\252" - + "\1\251\1\253\3\246\1\254\1\255\1\256\5\246\1\257" - + "\1\260\31\246\2\0\1\105\2\0\31\105\1\0\11\105" - + "\1\0\44\105\2\0\1\107\113\0\1\110\6\0\1\110" - + "\115\0\1\261\105\0\1\262\3\0\1\262\1\0\5\262" - + "\2\0\4\262\1\0\1\263\2\0\10\262\2\0\26\262" - + "\16\0\1\264\2\0\30\264\1\265\57\264\10\0\1\266" - + "\3\0\1\266\1\0\5\266\2\0\4\266\1\0\1\267" - + "\2\0\10\266\2\0\26\266\33\0\1\270\75\0\1\271" - + "\2\0\30\271\1\272\1\273\56\271\31\0\1\274\75\0" - + "\1\275\102\0\1\276\6\0\1\277\2\0\3\300\2\0" - + "\1\301\1\0\4\300\5\0\3\300\2\0\2\300\2\0" - + "\26\300\2\0\1\302\13\0\1\132\1\303\1\304\110\132" - + "\5\305\1\306\105\305\10\0\1\307\123\0\1\140\13\0" - + "\1\140\3\0\2\140\2\154\100\0\1\310\70\0\1\143" - + "\3\0\1\143\1\0\5\143\2\0\4\143\4\0\10\143" - + "\2\0\26\143\50\0\1\311\75\0\1\312\14\0\1\313" - + "\74\0\1\314\4\0\1\315\13\0\1\315\3\0\2\315" - + "\2\0\1\314\77\0\1\316\70\0\1\140\10\0\1\156" - + "\13\0\1\156\3\0\2\156\2\154\56\0\1\140\10\0" - + "\1\156\13\0\1\157\3\0\1\161\1\162\2\154\65\0" - + "\1\317\1\0\1\317\3\0\3\317\5\0\1\320\2\0" - + "\5\317\2\0\1\317\1\0\1\317\1\0\1\317\6\0" - + "\1\317\40\0\1\140\10\0\1\156\13\0\1\162\3\0" - + "\2\162\2\154\56\0\1\140\10\0\1\156\13\0\1\321" - + "\3\0\2\321\2\154\54\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\14\21\1\322\11\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\1\21\1\323\24\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\7\21\1\324\16\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\325" - + "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\10\21\1\326\15\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\4\21\1\327\21\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\5\21\1\330\20\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\7\21\1\331\2\0\26\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\10\21\1\332\15\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\5\21\1\333\2\21\1\334\15\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\7\21\1\335\16\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21" - + "\1\336\23\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\10\21\1\337\15\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\2\21\1\340\23\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\17\21\1\341\6\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21" - + "\1\342\14\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\7\21\1\343\2\0\26\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\15\21\1\344\10\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\21\21\1\345\4\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\346" - + "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\12\21\1\347\5\21\1\350" - + "\5\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\1\21\1\351\7\21\1\352" - + "\14\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\17\21\1\353\6\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\5\21\1\354\2\21\1\355\15\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\17\21\1\356\6\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\357" - + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\13\21\1\360\12\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\3\21\1\361\4\21\2\0\14\21\1\362\11\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\7\21\1\363\16\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\10\21\1\364\15\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21" - + "\1\365\14\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\6\21\1\366\2\21" - + "\1\367\14\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\4\21\1\370\21\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\1\371\25\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\1\21\1\372\24\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\11\21\1\373" - + "\14\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\10\21\1\374\15\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\3\21\1\375\4\21\2\0\26\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\25\21\1\376\15\0\1\21\35\0\1\253\3\0\2\253" - + "\105\0\1\377\3\0\2\377\50\0\1\u0100\2\0\30\u0100" - + "\1\272\1\0\56\u0100\1\273\2\0\30\273\1\u0101\57\273" - + "\15\0\1\u0102\112\0\1\u0103\113\0\3\u0104\4\0\4\u0104" - + "\5\0\3\u0104\2\0\2\u0104\2\0\26\u0104\2\0\1\u0105" - + "\27\0\1\u0106\7\0\1\u0107\76\0\1\300\3\0\1\300" - + "\1\0\5\300\2\0\4\300\4\0\10\300\2\0\26\300" - + "\34\0\3\u0108\4\0\4\u0108\5\0\3\u0108\2\0\2\u0108" - + "\2\0\26\u0108\2\0\1\u0109\15\0\1\304\110\0\5\305" - + "\1\u010a\105\305\4\0\1\304\1\306\137\0\1\u010b\101\0" - + "\1\315\13\0\1\315\3\0\2\315\67\0\1\u010c\1\0" - + "\1\u010c\3\0\3\u010c\5\0\1\u010c\2\0\5\u010c\2\0" - + "\1\u010c\1\0\1\u010c\1\0\1\u010c\6\0\1\u010c\40\0" - + "\1\140\10\0\1\156\13\0\1\u010d\3\0\2\u010d\2\154" - + "\54\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\5\21\1\u010e\20\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21" - + "\1\u010f\23\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\4\21\1\u0110\21\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\7\21\1\u0111\2\0\26\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\16\21\1\u0112\7\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\7\21\1\u0113\2\0\26\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\2\21\1\u0114\23\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\12\21\1\u0115\13\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\7\21\1\u0116\2\0" - + "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\4\21\1\u0117\21\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\5\21\1\u0118\2\21\1\u0119\15\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\5\21\1\u011a\20\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\10\21\1\u011b\15\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\7\21\1\u011c\2\0\26\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\10\21\1\u011d\15\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\1\21\1\u011e\24\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\7\21\1\u011f\2\0" - + "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\14\21\1\u0120\11\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\7\21\1\u0121\2\0\26\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\6\21" - + "\1\u0122\17\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\5\21\1\u0123\20\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\7\21\1\u0124\2\0\26\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\10\21\1\u0125\15\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\7\21\1\u0126\2\0\26\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\6\21\1\u0127\5\21\1\u0128\11\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\7\21\1\u0129\2\0\26\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\2\21\1\u012a\23\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\7\21\1\u012b\2\0\26\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\2\21\1\u012c\23\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\16\21\1\u012d\7\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\14\21" - + "\1\u012e\11\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\10\21\1\u012f\15\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\22\21\1\u0130\3\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\3\21\1\u0131\22\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\14\21" - + "\1\u0132\11\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\13\21\1\u0133\12\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\11\21\1\u0134\14\21\15\0\1\21" - + "\1\0\2\u0135\5\0\1\u0104\1\0\1\u0135\1\0\1\u0104" - + "\1\u0136\5\u0104\2\0\4\u0104\4\0\10\u0104\2\0\26\u0104" - + "\32\0\1\u0137\123\0\1\u0138\75\0\1\u0108\3\0\1\u0108" - + "\1\0\5\u0108\2\0\4\u0108\4\0\10\u0108\2\0\26\u0108" - + "\16\0\4\305\1\304\1\u010a\105\305\17\0\1\u0139\1\0" - + "\1\u0139\3\0\3\u0139\5\0\1\u0139\2\0\5\u0139\2\0" - + "\1\u0139\1\0\1\u0139\1\0\1\u0139\6\0\1\u0139\40\0" - + "\1\140\10\0\1\156\13\0\1\u013a\3\0\2\u013a\2\154" - + "\54\0\2\21\7\0\3\21\3\0\4\21\4\0\7\21" - + "\1\u013b\2\0\26\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\u013c" - + "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\10\21\1\u013d\15\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\7\21\1\u013e\16\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\3\21\1\u013f\22\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\1\21\1\u0140" - + "\24\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\16\21\1\u0141\7\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\10\21\1\u0142\15\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\11\21\1\u0143\14\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\5\21\1\u0144" - + "\20\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\11\21\1\u0145\14\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\1\21\1\u0146\24\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\4\21\1\u0147\21\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\1\21\1\u0148" - + "\24\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\5\21\1\u0149\20\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\15\21\1\u014a\10\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\6\21\1\u014b\17\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\2\21\1\u014c" - + "\23\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\1\21\1\u014d\24\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\1\21\1\u014e\24\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u014f" - + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\3\21\1\u0150\4\21\2\0\26\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\12\21\1\u0151\13\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\10\21\1\u0152\15\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\21\21" - + "\1\u0153\4\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\7\21\1\u0154\2\0\26\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\7\21\1\u0155\2\0\26\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21" - + "\1\u0156\23\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\2\21\1\u0157\23\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\11\21\1\u0158\14\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\7\21\1\u0159\16\21\15\0\1\21\1\0\2\u0135" - + "\7\0\1\u0135\2\0\1\u0136\123\0\1\u015a\103\0\1\u015b" - + "\1\0\1\u015b\3\0\3\u015b\5\0\1\u015b\2\0\5\u015b" - + "\2\0\1\u015b\1\0\1\u015b\1\0\1\u015b\6\0\1\u015b" - + "\40\0\1\140\10\0\1\156\13\0\1\u015c\3\0\2\u015c" - + "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\14\21\1\u015d\11\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\11\21\1\u015e\14\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\13\21\1\u015f" - + "\12\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\7\21\1\u0160\16\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\7\21\1\u0161\16\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\4\21\1\u0162\21\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\16\21\1\u0163" - + "\7\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\11\21\1\u0164\14\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\17\21\1\u0165\6\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\3\21\1\u0166" - + "\4\21\2\0\26\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\u0167" - + "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\3\21\1\u0168\4\21\2\0\7\21\1\u0169" - + "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\10\21\1\u016a\15\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\21\21\1\u016b\4\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\11\21\1\u016c\14\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\u016d" - + "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\7\21\1\u016e\2\0\26\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\11\21\1\u016f\14\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\4\21" - + "\1\u0170\21\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\10\21\1\u0171\15\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\23\21\1\u0172\2\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\4\21\1\u0173\21\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21" - + "\1\u0174\14\21\15\0\1\21\27\0\1\u0175\102\0\1\u0176" - + "\1\0\1\u0176\3\0\3\u0176\5\0\1\u0176\2\0\5\u0176" - + "\2\0\1\u0176\1\0\1\u0176\1\0\1\u0176\6\0\1\u0176" - + "\40\0\1\140\10\0\1\156\13\0\1\u0177\3\0\2\u0177" - + "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\20\21\1\u0178\5\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\6\21\1\u0179\17\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\5\21\1\u017a" - + "\20\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\12\21\1\u017b\13\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\13\21\1\u017c\12\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\2\21\1\u017d\23\21\15\0\1\21\6\0\2\21\7\0" - + "\3\21\3\0\4\21\4\0\10\21\2\0\4\21\1\u017e" - + "\21\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\2\21\1\u017f\23\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\2\21\1\u0180\23\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u0181" - + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\7\21\1\u0182\16\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\10\21\1\u0183\15\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\4\21\1\u0184\21\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\10\21" - + "\1\u0185\15\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\7\21\1\u0186\2\0\26\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\7\21\1\u0187\2\0\26\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\10\21" - + "\1\u0188\15\21\15\0\1\21\30\0\1\u0189\101\0\1\u018a" - + "\1\0\1\u018a\3\0\3\u018a\5\0\1\u018a\2\0\5\u018a" - + "\2\0\1\u018a\1\0\1\u018a\1\0\1\u018a\6\0\1\u018a" - + "\40\0\1\140\10\0\1\156\13\0\1\u018b\3\0\2\u018b" - + "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\7\21\1\u018c\16\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u018d" - + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\7\21\1\u018e\2\0\26\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\4\21\1\u018f\21\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u0190" - + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" - + "\3\0\4\21\4\0\10\21\2\0\4\21\1\u0191\21\21" - + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\10\21\2\0\14\21\1\u0192\11\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\7\21\1\u0193\16\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\7\21\1\u0194\2\0" - + "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\7\21\1\u0195\2\0\26\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\20\21\1\u0196\5\21\15\0\1\21\27\0\1\u0197" - + "\102\0\1\u0198\1\0\1\u0198\3\0\3\u0198\5\0\1\u0198" - + "\2\0\5\u0198\2\0\1\u0198\1\0\1\u0198\1\0\1\u0198" - + "\6\0\1\u0198\40\0\1\140\10\0\1\156\13\0\1\u0199" - + "\3\0\2\u0199\2\154\54\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\7\21\1\u019a\2\0\26\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\6\21\1\u019b\17\21\15\0\1\21\6\0\2\21" - + "\7\0\3\21\3\0\4\21\4\0\7\21\1\u019c\2\0" - + "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" - + "\4\21\4\0\10\21\2\0\10\21\1\u019d\15\21\15\0" - + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" - + "\10\21\2\0\13\21\1\u019e\12\21\15\0\1\21\6\0" - + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" - + "\13\21\1\u019f\12\21\15\0\1\21\24\0\1\u01a0\105\0" - + "\1\u01a1\1\0\1\u01a1\3\0\3\u01a1\5\0\1\u01a1\2\0" - + "\5\u01a1\2\0\1\u01a1\1\0\1\u01a1\1\0\1\u01a1\6\0" - + "\1\u01a1\40\0\1\140\10\0\1\156\13\0\1\u01a2\3\0" - + "\2\u01a2\2\154\54\0\2\21\7\0\3\21\3\0\4\21" - + "\4\0\3\21\1\u01a3\4\21\2\0\26\21\15\0\1\21" - + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" - + "\2\0\5\21\1\u01a4\20\21\15\0\1\21\10\0\1\140" - + "\10\0\1\156\13\0\1\u01a5\3\0\2\u01a5\2\154\56\0" - + "\1\140\10\0\1\156\13\0\1\u01a6\3\0\2\u01a6\2\154" - + "\56\0\1\140\10\0\1\156\13\0\1\u01a7\3\0\2\u01a7" - + "\2\154\56\0\1\140\10\0\1\156\13\0\1\u01a8\3\0" - + "\2\u01a8\2\154\56\0\1\140\10\0\1\156\13\0\1\u01a9" - + "\3\0\2\u01a9\2\154\56\0\1\140\10\0\1\156\13\0" - + "\1\u01aa\3\0\2\u01aa\2\154\46\0"; + /** the current state of the DFA */ + private int zzState; - private static int[] zzUnpackTrans() { - int[] result = new int[21825]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - int j = offset; /* index in unpacked array */ + /** the textposition at the last accepting state */ + private int zzMarkedPos; - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /** the current text position in the buffer */ + private int zzCurrentPos; + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; + /** number of newlines encountered up to the start of the matched text */ + private int yyline; - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); + /** the number of characters up to the start of the matched text */ + private int yychar; - private static final String ZZ_ATTRIBUTE_PACKED_0 - = "\12\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11" - + "\25\1\7\11\4\1\1\11\2\1\2\11\3\1\1\11" - + "\2\1\1\11\1\1\1\11\1\1\1\11\2\1\1\11" - + "\1\1\2\11\1\1\1\11\2\1\1\11\1\1\1\0" - + "\2\11\1\1\1\11\1\1\1\11\2\1\2\11\1\1" - + "\2\11\1\1\2\11\1\0\3\1\1\0\11\1\2\11" - + "\44\1\11\11\1\1\1\11\1\1\6\11\1\0\1\11" - + "\1\0\1\11\1\0\2\11\1\0\1\1\5\0\1\1" - + "\1\0\1\11\1\1\1\11\2\0\3\11\1\1\1\11" - + "\1\0\1\1\1\11\60\1\1\11\1\0\3\11\1\0" - + "\1\11\2\0\1\1\1\11\1\0\1\11\51\1\1\0" - + "\2\11\1\0\41\1\1\0\32\1\1\0\23\1\1\0" - + "\15\1\1\0\10\1\2\11\11\1"; + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; - private static int[] zzUnpackAttribute() { - int[] result = new int[426]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; - int j = offset; /* index in unpacked array */ + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /* user code: */ - /** - * the input device - */ - private java.io.Reader zzReader; - - /** - * the current state of the DFA - */ - private int zzState; - - /** - * the current lexical state - */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of - * the yytext() string - */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** - * the textposition at the last accepting state - */ - private int zzMarkedPos; - - /** - * the current text position in the buffer - */ - private int zzCurrentPos; - - /** - * startRead marks the beginning of the yytext() string in the buffer - */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from - * input - */ - private int zzEndRead; - - /** - * number of newlines encountered up to the start of the matched text - */ - private int yyline; - - /** - * the number of characters up to the start of the matched text - */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** - * zzAtEOF == true <=> the scanner is at the EOF - */ - private boolean zzAtEOF; - - /** - * denotes if the user-EOF-code has already been executed - */ - private boolean zzEOFDone; - - /* user code: */ private String sourceCode; - public ActionScriptLexer(String sourceCode) { + public ActionScriptLexer(String sourceCode){ this(new StringReader(sourceCode)); - this.sourceCode = sourceCode; + this.sourceCode = sourceCode; } - public void yypushbackstr(String s, int state) { - sourceCode = s + sourceCode.substring(yychar + yylength()); + public void yypushbackstr(String s, int state) + { + sourceCode=s+sourceCode.substring(yychar+yylength()); yyreset(new StringReader(sourceCode)); yybegin(state); } - public void yypushbackstr(String s) { - yypushbackstr(s, YYINITIAL); + public void yypushbackstr(String s) + { + yypushbackstr(s,YYINITIAL); } StringBuffer string = new StringBuffer(); - private static String xmlTagName = ""; + private static String xmlTagName=""; public int yychar() { return yychar; } - private Stack pushedBack = new Stack<>(); + private Stack pushedBack=new Stack(); public int yyline() { - return yyline + 1; + return yyline+1; } - private List listeners = new ArrayList<>(); + private List listeners=new ArrayList<>(); - public void addListener(LexListener listener) { + public void addListener(LexListener listener){ listeners.add(listener); } - public void removeListener(LexListener listener) { + public void removeListener(LexListener listener){ listeners.remove(listener); } - public void informListenersLex(ParsedSymbol s) { - for (LexListener l : listeners) { + public void informListenersLex(ParsedSymbol s){ + for(LexListener l:listeners){ l.onLex(s); } } - public void informListenersPushBack(ParsedSymbol s) { - for (LexListener l : listeners) { + public void informListenersPushBack(ParsedSymbol s){ + for(LexListener l:listeners){ l.onPushBack(s); } } @@ -989,1244 +958,1089 @@ public final class ActionScriptLexer { informListenersPushBack(symb); } ParsedSymbol last; - - public ParsedSymbol lex() throws java.io.IOException, ParseException { - ParsedSymbol ret = null; - if (!pushedBack.isEmpty()) { + public ParsedSymbol lex() throws java.io.IOException, ParseException{ + ParsedSymbol ret=null; + if(!pushedBack.isEmpty()){ ret = last = pushedBack.pop(); - } else { + }else{ ret = last = yylex(); } informListenersLex(ret); return ret; } - /** - * Creates a new scanner There is also a java.io.InputStream version of this - * constructor. - * - * @param in the java.io.Reader to read input from. - */ - public ActionScriptLexer(java.io.Reader in) { - this.zzReader = in; + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptLexer(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ActionScriptLexer(java.io.InputStream in) { + this(new java.io.InputStreamReader + (in, java.nio.charset.Charset.forName("UTF-8"))); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 2288) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; } - /** - * Creates a new scanner. There is also java.io.Reader version of this - * constructor. - * - * @param in the java.io.Inputstream to read input from. - */ - public ActionScriptLexer(java.io.InputStream in) { - this(new java.io.InputStreamReader(in, java.nio.charset.Charset.forName("UTF-8"))); + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; } - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length-zzEndRead); - int j = 0; /* index in unpacked array */ - - while (i < 2280) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do { - map[j++] = value; - } while (--count > 0); - } - return map; + if (numRead > 0) { + zzEndRead+= numRead; + return false; } - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead - zzStartRead); - - /* translate stored positions */ - zzEndRead -= zzStartRead; - zzCurrentPos -= zzStartRead; - zzMarkedPos -= zzStartRead; - zzStartRead = 0; - } - - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos * 2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length - zzEndRead); - - if (numRead > 0) { - zzEndRead += numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0 + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } } - /** - * Closes the input stream. - * - * @throws java.io.IOException - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ + // numRead < 0 + return true; + } - zzEndRead = zzStartRead; /* invalidate buffer */ + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ - if (zzReader != null) { - zzReader.close(); - } + if (zzReader != null) + zzReader.close(); + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Resets the scanner to read from a new input stream. Does not close the - * old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). Lexical - * state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has - * grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) { - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - } + throw new Error(message); + } - /** - * Returns the current lexical state. - * - * @return - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Returns the text matched by the current regular expression. - * - * @return - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + zzMarkedPos -= number; + } - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. A value from 0 to - * yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - /** - * Returns the length of the matched text region. - * - * @return - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException, ParseException { + int zzInput; + int zzAction; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and - * a match-all fallback rule) this method will only be called with things - * that "Can't Possibly Happen". If this method is called, something is - * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error - * fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - throw new Error(message); - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. This number must - * not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) { - zzScanError(ZZ_PUSHBACK_2BIG); - } + while (true) { + zzMarkedPosL = zzMarkedPos; - zzMarkedPos -= number; - } + yychar+= zzMarkedPosL-zzStartRead; - /** - * Resumes scanning until the next regular expression is matched, the end of - * input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - * @throws com.jpexs.decompiler.flash.abc.avm2.parser.ParseException - */ - public ParsedSymbol yylex() throws java.io.IOException, ParseException { - int zzInput; - int zzAction; + zzAction = -1; - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar += zzMarkedPosL - zzStartRead; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; - - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - - zzForAction: - { - while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = zzBufferL[zzCurrentPosL++]; - } else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) { - break zzForAction; - } - zzState = zzNext; - - zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) { - break zzForAction; - } - } - - } + else { + zzInput = zzBufferL[zzCurrentPosL++]; } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; - // store back cached position - zzMarkedPos = zzMarkedPosL; + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: { - } - case 158: - break; - case 2: { - yyline++; - } - case 159: - break; - case 3: { /*ignore*/ - - } - case 160: - break; - case 4: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); - } - case 161: - break; - case 5: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); - } - case 162: - break; - case 6: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); - } - case 163: - break; - case 7: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); - } - case 164: - break; - case 8: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); - } - case 165: - break; - case 9: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); - } - case 166: - break; - case 10: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); - } - case 167: - break; - case 11: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); - } - case 168: - break; - case 12: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); - } - case 169: - break; - case 13: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong((yytext())))); - } - case 170: - break; - case 14: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); - } - case 171: - break; - case 15: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); - } - case 172: - break; - case 16: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); - } - case 173: - break; - case 17: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); - } - case 174: - break; - case 18: { - string.setLength(0); - yybegin(STRING); - } - case 175: - break; - case 19: { - string.setLength(0); - yybegin(CHARLITERAL); - } - case 176: - break; - case 20: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); - } - case 177: - break; - case 21: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); - } - case 178: - break; - case 22: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); - } - case 179: - break; - case 23: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); - } - case 180: - break; - case 24: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); - } - case 181: - break; - case 25: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); - } - case 182: - break; - case 26: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); - } - case 183: - break; - case 27: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); - } - case 184: - break; - case 28: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); - } - case 185: - break; - case 29: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); - } - case 186: - break; - case 30: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); - } - case 187: - break; - case 31: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); - } - case 188: - break; - case 32: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); - } - case 189: - break; - case 33: { - string.append(yytext()); - } - case 190: - break; - case 34: { - yybegin(YYINITIAL); - yyline++; - } - case 191: - break; - case 35: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); - } - case 192: - break; - case 36: { - string.append(yytext()); - yyline++; - } - case 193: - break; - case 37: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 194: - break; - case 38: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 195: - break; - case 39: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); - } - case 196: - break; - case 40: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 197: - break; - case 41: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); - } - case 198: - break; - case 42: { - string.append(yytext()); - } - case 199: - break; - case 43: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 200: - break; - case 44: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); - } - case 201: - break; - case 45: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); - } - case 202: - break; - case 46: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); - } - case 203: - break; - case 47: { - return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); - } - case 204: - break; - case 48: { - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); - } - case 205: - break; - case 49: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); - } - case 206: - break; - case 50: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); - } - case 207: - break; - case 51: { - yybegin(XMLOPENTAG); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()); - } - case 208: - break; - case 52: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); - } - case 209: - break; - case 53: { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); - } - case 210: - break; - case 54: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); - } - case 211: - break; - case 55: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); - } - case 212: - break; - case 56: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); - } - case 213: - break; - case 57: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); - } - case 214: - break; - case 58: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); - } - case 215: - break; - case 59: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); - } - case 216: - break; - case 60: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); - } - case 217: - break; - case 61: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); - } - case 218: - break; - case 62: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); - } - case 219: - break; - case 63: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); - } - case 220: - break; - case 64: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); - } - case 221: - break; - case 65: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); - } - case 222: - break; - case 66: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); - } - case 223: - break; - case 67: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); - } - case 224: - break; - case 68: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); - } - case 225: - break; - case 69: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); - } - case 226: - break; - case 70: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); - } - case 227: - break; - case 71: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); - } - case 228: - break; - case 72: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); - } - case 229: - break; - case 73: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); - } - case 230: - break; - case 74: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); - } - case 231: - break; - case 75: { - throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 232: - break; - case 76: { - string.append('\"'); - } - case 233: - break; - case 77: { - string.append('\''); - } - case 234: - break; - case 78: { - char val = (char) Integer.parseInt(yytext().substring(1), 8); - string.append(val); - } - case 235: - break; - case 79: { - string.append('\f'); - } - case 236: - break; - case 80: { - string.append('\\'); - } - case 237: - break; - case 81: { - string.append('\b'); - } - case 238: - break; - case 82: { - string.append('\r'); - } - case 239: - break; - case 83: { - string.append('\n'); - } - case 240: - break; - case 84: { - string.append('\t'); - } - case 241: - break; - case 85: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 242: - break; - case 86: { - yybegin(XMLOPENTAGATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 243: - break; - case 87: { - yybegin(XMLOPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 244: - break; - case 88: { - yybegin(XMLINSTRATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 245: - break; - case 89: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_END, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 246: - break; - case 90: { - yybegin(XMLINSTROPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 247: - break; - case 91: { - yybegin(XMLOPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 248: - break; - case 92: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 249: - break; - case 93: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); - } - case 250: - break; - case 94: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); - } - case 251: - break; - case 95: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); - } - case 252: - break; - case 96: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); - } - case 253: - break; - case 97: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); - } - case 254: - break; - case 98: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); - } - case 255: - break; - case 99: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); - } - case 256: - break; - case 100: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); - } - case 257: - break; - case 101: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); - } - case 258: - break; - case 102: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); - } - case 259: - break; - case 103: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); - } - case 260: - break; - case 104: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); - } - case 261: - break; - case 105: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); - } - case 262: - break; - case 106: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); - } - case 263: - break; - case 107: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); - } - case 264: - break; - case 108: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); - } - case 265: - break; - case 109: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); - } - case 266: - break; - case 110: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 267: - break; - case 111: { - yybegin(XMLINSTROPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 268: - break; - case 112: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRVARTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 269: - break; - case 113: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); - } - case 270: - break; - case 114: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EACH, yytext()); - } - case 271: - break; - case 115: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); - } - case 272: - break; - case 116: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); - } - case 273: - break; - case 117: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); - } - case 274: - break; - case 118: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); - } - case 275: - break; - case 119: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); - } - case 276: - break; - case 120: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); - } - case 277: - break; - case 121: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); - } - case 278: - break; - case 122: { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 279: - break; - case 123: { - String ret = string.toString(); - string.setLength(0); - string.append(yytext()); - yybegin(XMLCOMMENT); - if (!ret.isEmpty()) { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); - } - } - case 280: - break; - case 124: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); - } - case 281: - break; - case 125: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINAL, yytext()); - } - case 282: - break; - case 126: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); - } - case 283: - break; - case 127: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); - } - case 284: - break; - case 128: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); - } - case 285: - break; - case 129: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); - } - case 286: - break; - case 130: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); - } - case 287: - break; - case 131: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); - } - case 288: - break; - case 132: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); - } - case 289: - break; - case 133: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); - } - case 290: - break; - case 134: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.STATIC, yytext()); - } - case 291: - break; - case 135: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); - } - case 292: - break; - case 136: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); - } - case 293: - break; - case 137: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); - } - case 294: - break; - case 138: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); - } - case 295: - break; - case 139: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); - } - case 296: - break; - case 140: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); - } - case 297: - break; - case 141: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); - } - case 298: - break; - case 142: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); - } - case 299: - break; - case 143: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DYNAMIC, yytext()); - } - case 300: - break; - case 144: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); - } - case 301: - break; - case 145: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); - } - case 302: - break; - case 146: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); - } - case 303: - break; - case 147: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); - } - case 304: - break; - case 148: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.OVERRIDE, yytext()); - } - case 305: - break; - case 149: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); - } - case 306: - break; - case 150: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); - } - case 307: - break; - case 151: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NAMESPACE, yytext()); - } - case 308: - break; - case 152: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); - } - case 309: - break; - case 153: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); - } - case 310: - break; - case 154: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); - } - case 311: - break; - case 155: { - String ret = string.toString(); - string.setLength(0); - string.append(yytext()); - yybegin(XMLCDATA); - if (!ret.isEmpty()) { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); - } - } - case 312: - break; - case 156: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); - } - case 313: - break; - case 157: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); - } - case 314: - break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null); - } - } else { - zzScanError(ZZ_NO_MATCH); - } - } } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + case 161: break; + case 2: + { yyline++; + } + case 162: break; + case 3: + { /*ignore*/ + } + case 163: break; + case 4: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); + } + case 164: break; + case 5: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); + } + case 165: break; + case 6: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); + } + case 166: break; + case 7: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); + } + case 167: break; + case 8: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); + } + case 168: break; + case 9: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); + } + case 169: break; + case 10: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); + } + case 170: break; + case 11: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); + } + case 171: break; + case 12: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); + } + case 172: break; + case 13: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); + } + case 173: break; + case 14: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); + } + case 174: break; + case 15: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); + } + case 175: break; + case 16: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); + } + case 176: break; + case 17: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); + } + case 177: break; + case 18: + { string.setLength(0); + yybegin(STRING); + } + case 178: break; + case 19: + { string.setLength(0); + yybegin(CHARLITERAL); + } + case 179: break; + case 20: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); + } + case 180: break; + case 21: + { string.setLength(0); + yybegin(OIDENTIFIER); + } + case 181: break; + case 22: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); + } + case 182: break; + case 23: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); + } + case 183: break; + case 24: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); + } + case 184: break; + case 25: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); + } + case 185: break; + case 26: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); + } + case 186: break; + case 27: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); + } + case 187: break; + case 28: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); + } + case 188: break; + case 29: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); + } + case 189: break; + case 30: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); + } + case 190: break; + case 31: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); + } + case 191: break; + case 32: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); + } + case 192: break; + case 33: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); + } + case 193: break; + case 34: + { string.append( yytext() ); + } + case 194: break; + case 35: + { yybegin(YYINITIAL); yyline++; + } + case 195: break; + case 36: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); + } + case 196: break; + case 37: + { string.append( yytext() ); yyline++; + } + case 197: break; + case 38: + { yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 198: break; + case 39: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 199: break; + case 40: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); + } + case 200: break; + case 41: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 201: break; + case 42: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); + } + case 202: break; + case 43: + { string.append(yytext()); + } + case 203: break; + case 44: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_VAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 204: break; + case 45: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER,string.toString()); + } + case 205: break; + case 46: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); + } + case 206: break; + case 47: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); + } + case 207: break; + case 48: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DESCENDANTS,yytext()); + } + case 208: break; + case 49: + { return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,yytext()); + } + case 209: break; + case 50: + { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); + } + case 210: break; + case 51: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FILTER,yytext()); + } + case 211: break; + case 52: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); + } + case 212: break; + case 53: + { yybegin(XMLOPENTAG); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext()); + } + case 213: break; + case 54: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); + } + case 214: break; + case 55: + { return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext()); + } + case 215: break; + case 56: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); + } + case 216: break; + case 57: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); + } + case 217: break; + case 58: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); + } + case 218: break; + case 59: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); + } + case 219: break; + case 60: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); + } + case 220: break; + case 61: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); + } + case 221: break; + case 62: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); + } + case 222: break; + case 63: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); + } + case 223: break; + case 64: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); + } + case 224: break; + case 65: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); + } + case 225: break; + case 66: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); + } + case 226: break; + case 67: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); + } + case 227: break; + case 68: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); + } + case 228: break; + case 69: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); + } + case 229: break; + case 70: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); + } + case 230: break; + case 71: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); + } + case 231: break; + case 72: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); + } + case 232: break; + case 73: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); + } + case 233: break; + case 74: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); + } + case 234: break; + case 75: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); + } + case 235: break; + case 76: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); + } + case 236: break; + case 77: + { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); + } + case 237: break; + case 78: + { string.append( '\"' ); + } + case 238: break; + case 79: + { string.append( '\'' ); + } + case 239: break; + case 80: + { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); + } + case 240: break; + case 81: + { string.append( '\f' ); + } + case 241: break; + case 82: + { string.append( '\\' ); + } + case 242: break; + case 83: + { string.append( '\b' ); + } + case 243: break; + case 84: + { string.append( '\r' ); + } + case 244: break; + case 85: + { string.append( '\n' ); + } + case 245: break; + case 86: + { string.append( '\t' ); + } + case 246: break; + case 87: + { yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTFINISHTAG_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 247: break; + case 88: + { yybegin(XMLOPENTAGATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 248: break; + case 89: + { yybegin(XMLOPENTAG); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 249: break; + case 90: + { yybegin(XMLINSTRATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 250: break; + case 91: + { yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 251: break; + case 92: + { yybegin(XMLINSTROPENTAG); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 252: break; + case 93: + { yybegin(XMLOPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 253: break; + case 94: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 254: break; + case 95: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); + } + case 255: break; + case 96: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); + } + case 256: break; + case 97: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); + } + case 257: break; + case 98: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); + } + case 258: break; + case 99: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); + } + case 259: break; + case 100: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); + } + case 260: break; + case 101: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); + } + case 261: break; + case 102: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); + } + case 262: break; + case 103: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); + } + case 263: break; + case 104: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); + } + case 264: break; + case 105: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); + } + case 265: break; + case 106: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); + } + case 266: break; + case 107: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); + } + case 267: break; + case 108: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); + } + case 268: break; + case 109: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); + } + case 269: break; + case 110: + { string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_CDATA, ret); + } + case 270: break; + case 111: + { string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_COMMENT, ret); + } + case 271: break; + case 112: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_FINISHVARTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 272: break; + case 113: + { yybegin(XMLINSTROPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 273: break; + case 114: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRVARTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 274: break; + case 115: + { string.append( '\u00A7' ); + } + case 275: break; + case 116: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); + } + case 276: break; + case 117: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); + } + case 277: break; + case 118: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); + } + case 278: break; + case 119: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); + } + case 279: break; + case 120: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); + } + case 280: break; + case 121: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); + } + case 281: break; + case 122: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); + } + case 282: break; + case 123: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); + } + case 283: break; + case 124: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); + } + case 284: break; + case 125: + { pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_FINISHTAG, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 285: break; + case 126: + { String ret=string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT); + if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); + } + case 286: break; + case 127: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); + } + case 287: break; + case 128: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINAL,yytext()); + } + case 288: break; + case 129: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); + } + case 289: break; + case 130: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); + } + case 290: break; + case 131: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); + } + case 291: break; + case 132: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); + } + case 292: break; + case 133: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); + } + case 293: break; + case 134: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); + } + case 294: break; + case 135: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); + } + case 295: break; + case 136: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); + } + case 296: break; + case 137: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); + } + case 297: break; + case 138: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); + } + case 298: break; + case 139: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); + } + case 299: break; + case 140: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); + } + case 300: break; + case 141: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); + } + case 301: break; + case 142: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); + } + case 302: break; + case 143: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); + } + case 303: break; + case 144: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); + } + case 304: break; + case 145: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); + } + case 305: break; + case 146: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); + } + case 306: break; + case 147: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); + } + case 307: break; + case 148: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); + } + case 308: break; + case 149: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); + } + case 309: break; + case 150: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); + } + case 310: break; + case 151: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); + } + case 311: break; + case 152: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); + } + case 312: break; + case 153: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); + } + case 313: break; + case 154: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); + } + case 314: break; + case 155: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); + } + case 315: break; + case 156: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); + } + case 316: break; + case 157: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); + } + case 317: break; + case 158: + { String ret=string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA); + if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); + } + case 318: break; + case 159: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); + } + case 319: break; + case 160: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); + } + case 320: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex b/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex index 61f7c7601..6c1bb6786 100644 --- a/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex +++ b/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex @@ -1,618 +1,648 @@ -/* - * Copyright (C) 2010-2014 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.abc.avm2.parser.script; -import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; -import java.util.Stack; -import java.util.List; -import java.util.ArrayList; -import java.io.StringReader; - -%% - -%public -%class ActionScriptLexer -%final -%unicode -%char -%type ParsedSymbol -%throws ParseException - -%{ - - private String sourceCode; - - public ActionScriptLexer(String sourceCode){ - this(new StringReader(sourceCode)); - this.sourceCode = sourceCode; - } - - public void yypushbackstr(String s, int state) - { - sourceCode=s+sourceCode.substring(yychar+yylength()); - yyreset(new StringReader(sourceCode)); - yybegin(state); - } - - public void yypushbackstr(String s) - { - yypushbackstr(s,YYINITIAL); - } - - StringBuffer string = new StringBuffer(); - - private static String xmlTagName=""; - - public int yychar() { - return yychar; - } - - private Stack pushedBack=new Stack(); - - public int yyline() { - return yyline+1; - } - private List listeners=new ArrayList<>(); - - public void addListener(LexListener listener){ - listeners.add(listener); - } - - public void removeListener(LexListener listener){ - listeners.remove(listener); - } - - public void informListenersLex(ParsedSymbol s){ - for(LexListener l:listeners){ - l.onLex(s); - } - } - - public void informListenersPushBack(ParsedSymbol s){ - for(LexListener l:listeners){ - l.onPushBack(s); - } - } - - public void pushback(ParsedSymbol symb) { - pushedBack.push(symb); - last = null; - informListenersPushBack(symb); - } - ParsedSymbol last; - public ParsedSymbol lex() throws java.io.IOException, ParseException{ - ParsedSymbol ret=null; - if(!pushedBack.isEmpty()){ - ret = last = pushedBack.pop(); - }else{ - ret = last = yylex(); - } - informListenersLex(ret); - return ret; - } - -%} - -/* main character classes */ -LineTerminator = \r|\n|\r\n -InputCharacter = [^\r\n] - -WhiteSpace = {LineTerminator} | [ \t\f]+ - -/* comments */ -Comment = {TraditionalComment} | {EndOfLineComment} - -TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" -EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? - - - -/* identifiers */ -Identifier = [:jletter:][:jletterdigit:]* - -TypeNameSpec = ".<" - -/* XML */ - -XmlS = (\u0020 | \u0009 | \u000D | \u000A)+ - -XmlCommentStart = "" - -XmlNameStartChar = ":" | [A-Z] | "_" | [a-z] -XmlNameStartCharUnicode = [\u00C0-\u00D6] | - [\u00D8-\u00F6] | - [\u00F8-\u02FF] | - [\u0370-\u037D] | - [\u037F-\u1FFF] | - [\u200C-\u200D] | - [\u2070-\u218F] | - [\u2C00-\u2FEF] | - [\u3001-\uD7FF] | - [\uF900-\uFDCF] | - [\uFDF0-\uFFFD] | - [\u10000-\uEFFFF] - -XmlNameChar = {XmlNameStartChar} | "-" | "." | [0-9] | \u00B7 -XmlNameCharUnicode = [\u0300-\u036F] | [\u0203F-\u2040] -XmlName = {XmlNameStartChar} {XmlNameChar}* -XmlNameUnicode = ({XmlNameStartChar}|{XmlNameStartCharUnicode}) ({XmlNameChar}|{XmlNameCharUnicode})* - -/* XML Processing Instructions */ -XmlInstrStart = "" - -/* CDATA */ -XmlCDataStart = "" - -/* Tags */ -XmlOpenTagStart = "<" {XmlName} -XmlOpenTagClose = "/>" -XmlOpenTagEnd = ">" - -XmlCloseTag = "" - -/* attribute */ -XmlAttribute = {XmlName} "=" - -/* string and character literals */ -XmlDQuoteStringChar = [^\r\n\"] -XmlSQuoteStringChar = [^\r\n\'] - - - -/* integer literals */ -DecIntegerLiteral = 0 | [1-9][0-9]* - -HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} -HexDigit = [0-9a-fA-F] - -OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} -OctDigit = [0-7] - -/* floating point literals */ -DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? - -FLit1 = [0-9]+ \. [0-9]* -FLit2 = \. [0-9]+ -FLit3 = [0-9]+ -Exponent = [eE] [+-]? [0-9]+ - -/* string and character literals */ -StringCharacter = [^\r\n\"\\] -SingleCharacter = [^\r\n\'\\] - -%state STRING, CHARLITERAL,XMLOPENTAG,XMLOPENTAGATTRIB,XMLINSTROPENTAG,XMLINSTRATTRIB,XMLCDATA,XMLCOMMENT,XML - -%% - - { - - /* keywords */ - "break" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); } - "case" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); } - "continue" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); } - "default" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); } - "do" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); } - "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } - "else" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); } - "for" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); } - "each" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); } - "in" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); } - "if" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); } - "return" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); } - "super" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); } - "switch" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); } - "throw" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); } - "try" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); } - "catch" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); } - "finally" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); } - "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } - "with" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); } - "dynamic" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); } - "internal" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); } - "override" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); } - "private" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); } - "protected" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); } - "public" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); } - "static" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); } - "class" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); } - "const" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); } - "extends" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); } - "function" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); } - "get" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); } - "implements" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); } - "interface" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); } - "namespace" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); } - "package" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); } - "set" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); } - "var" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); } - "import" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); } - "use" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); } - "false" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); } - "null" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); } - "this" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); } - "true" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); } - "undefined" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); } - "Infinity" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); } - "NaN" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); } - "final" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINAL,yytext()); } - - - /* operators */ - - "(" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); } - ")" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); } - "{" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); } - "}" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); } - "[" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); } - "]" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); } - ";" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); } - "," { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); } - "..." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); } - "." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); } - "=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); } - ">" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); } - "<" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); } - "!" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); } - "~" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); } - "?" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); } - ":" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); } - "===" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); } - "==" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); } - "<=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); } - ">=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); } - "!==" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); } - "!=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); } - "&&" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); } - "||" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); } - "++" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); } - "--" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); } - "+" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); } - "-" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); } - "*" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); } - "/" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); } - "&" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); } - "|" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); } - "^" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); } - "%" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); } - "<<" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); } - ">>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); } - ">>>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); } - "+=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); } - "-=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); } - "*=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); } - "/=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); } - "&=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); } - "|=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); } - "^=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); } - "%=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); } - "<<=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); } - ">>=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); } - ">>>=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); } - "as" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); } - "delete" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); } - "instanceof" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); } - "is" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); } - "::" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); } - "new" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); } - "typeof" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); } - "void" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); } - "@" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); } - ".(" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FILTER,yytext()); } - ".." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DESCENDANTS,yytext()); } - - /* string literal */ - \" { - string.setLength(0); - yybegin(STRING); - } - - /* character literal */ - \' { - string.setLength(0); - yybegin(CHARLITERAL); - } - - /* numeric literals */ - - {DecIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); } - - {HexIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); } - - {OctIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); } - - {DoubleLiteral} { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); } - - /* comments */ - {Comment} { /*ignore*/ } - - {LineTerminator} { yyline++;} - /* whitespace */ - {WhiteSpace} { /*ignore*/ } - {TypeNameSpec} { return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,yytext()); } - {XmlOpenTagStart} { - yybegin(XMLOPENTAG); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext()); - } - "<{" { return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext()); } - /* identifiers */ - {Identifier} { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); } -} - - { - {XmlAttribute} { - yybegin(XMLOPENTAGATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - "{" { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - {XmlOpenTagEnd} { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_END, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - {XmlOpenTagClose} { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTFINISHTAG_END, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - {LineTerminator} { string.append( yytext() ); yyline++;} - {WhiteSpace} { string.append( yytext() ); } -} - - - - { - \"{XmlDQuoteStringChar}*\" { - yybegin(XMLOPENTAG); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - "{" { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); - } -} - - - { - {XmlAttribute} { - yybegin(XMLINSTRATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - "{" { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - {XmlInstrEnd} { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_END, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - {LineTerminator} { string.append( yytext() ); yyline++;} - {WhiteSpace} { string.append( yytext() ); } -} - - { - \"{XmlDQuoteStringChar}*\" { - yybegin(XMLINSTROPENTAG); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - \"{XmlSQuoteStringChar}*\" { - yybegin(XMLINSTROPENTAG); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - "{" { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); - } -} - - - { - {XmlCDataEnd} { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_CDATA, ret); - } - {LineTerminator} { string.append( yytext() ); yyline++;} - .|\n { string.append( yytext() ); } -} - - { - {XmlCommentEnd} { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_COMMENT, ret); - } - {LineTerminator} { string.append( yytext() ); yyline++;} - .|\n { string.append(yytext());} -} - - { - {XmlCDataStart} { - String ret=string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA); - if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); - } - {XmlInstrStart} { - yybegin(XMLINSTROPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - "0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - {XmlCommentStart} { - String ret=string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT); - if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); - } - {XmlOpenTagStart} { - yybegin(XMLOPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - {XmlCloseTag} { - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_FINISHTAG, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - - "<{" { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - "0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - "{" { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_VAR_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - {LineTerminator} { string.append( yytext() ); yyline++;} - .|\n { string.append( yytext() ); } -} - - { - \" { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); - } - - {StringCharacter}+ { string.append( yytext() ); } - - /* escape sequences */ - "\\b" { string.append( '\b' ); } - "\\t" { string.append( '\t' ); } - "\\n" { string.append( '\n' ); } - "\\f" { string.append( '\f' ); } - "\\r" { string.append( '\r' ); } - "\\\"" { string.append( '\"' ); } - "\\'" { string.append( '\'' ); } - "\\\\" { string.append( '\\' ); } - \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); } - - /* escape sequences */ - - \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } - {LineTerminator} { yybegin(YYINITIAL); yyline++;} -} - - { - \' { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); - } - - {SingleCharacter}+ { string.append( yytext() ); } - - /* escape sequences */ -/* escape sequences */ - "\\b" { string.append( '\b' ); } - "\\t" { string.append( '\t' ); } - "\\n" { string.append( '\n' ); } - "\\f" { string.append( '\f' ); } - "\\r" { string.append( '\r' ); } - "\\\"" { string.append( '\"' ); } - "\\'" { string.append( '\'' ); } - "\\\\" { string.append( '\\' ); } - \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); } - - /* escape sequences */ - - \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } - {LineTerminator} { yybegin(YYINITIAL); yyline++;} -} - -/* error fallback */ -.|\n { } -<> { return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); } +/* + * Copyright (C) 2010-2014 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.abc.avm2.parser.script; +import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; +import java.io.StringReader; + +%% + +%public +%class ActionScriptLexer +%final +%unicode +%char +%type ParsedSymbol +%throws ParseException + +%{ + + private String sourceCode; + + public ActionScriptLexer(String sourceCode){ + this(new StringReader(sourceCode)); + this.sourceCode = sourceCode; + } + + public void yypushbackstr(String s, int state) + { + sourceCode=s+sourceCode.substring(yychar+yylength()); + yyreset(new StringReader(sourceCode)); + yybegin(state); + } + + public void yypushbackstr(String s) + { + yypushbackstr(s,YYINITIAL); + } + + StringBuffer string = new StringBuffer(); + + private static String xmlTagName=""; + + public int yychar() { + return yychar; + } + + private Stack pushedBack=new Stack(); + + public int yyline() { + return yyline+1; + } + private List listeners=new ArrayList<>(); + + public void addListener(LexListener listener){ + listeners.add(listener); + } + + public void removeListener(LexListener listener){ + listeners.remove(listener); + } + + public void informListenersLex(ParsedSymbol s){ + for(LexListener l:listeners){ + l.onLex(s); + } + } + + public void informListenersPushBack(ParsedSymbol s){ + for(LexListener l:listeners){ + l.onPushBack(s); + } + } + + public void pushback(ParsedSymbol symb) { + pushedBack.push(symb); + last = null; + informListenersPushBack(symb); + } + ParsedSymbol last; + public ParsedSymbol lex() throws java.io.IOException, ParseException{ + ParsedSymbol ret=null; + if(!pushedBack.isEmpty()){ + ret = last = pushedBack.pop(); + }else{ + ret = last = yylex(); + } + informListenersLex(ret); + return ret; + } + +%} + +/* main character classes */ +LineTerminator = \r|\n|\r\n +InputCharacter = [^\r\n] + +WhiteSpace = {LineTerminator} | [ \t\f]+ + +/* comments */ +Comment = {TraditionalComment} | {EndOfLineComment} + +TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" +EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? + + + +/* identifiers */ +Identifier = [:jletter:][:jletterdigit:]* + +TypeNameSpec = ".<" + +/* XML */ + +XmlS = (\u0020 | \u0009 | \u000D | \u000A)+ + +XmlCommentStart = "" + +XmlNameStartChar = ":" | [A-Z] | "_" | [a-z] +XmlNameStartCharUnicode = [\u00C0-\u00D6] | + [\u00D8-\u00F6] | + [\u00F8-\u02FF] | + [\u0370-\u037D] | + [\u037F-\u1FFF] | + [\u200C-\u200D] | + [\u2070-\u218F] | + [\u2C00-\u2FEF] | + [\u3001-\uD7FF] | + [\uF900-\uFDCF] | + [\uFDF0-\uFFFD] | + [\u10000-\uEFFFF] + +XmlNameChar = {XmlNameStartChar} | "-" | "." | [0-9] | \u00B7 +XmlNameCharUnicode = [\u0300-\u036F] | [\u0203F-\u2040] +XmlName = {XmlNameStartChar} {XmlNameChar}* +XmlNameUnicode = ({XmlNameStartChar}|{XmlNameStartCharUnicode}) ({XmlNameChar}|{XmlNameCharUnicode})* + +/* XML Processing Instructions */ +XmlInstrStart = "" + +/* CDATA */ +XmlCDataStart = "" + +/* Tags */ +XmlOpenTagStart = "<" {XmlName} +XmlOpenTagClose = "/>" +XmlOpenTagEnd = ">" + +XmlCloseTag = "" + +/* attribute */ +XmlAttribute = {XmlName} "=" + +/* string and character literals */ +XmlDQuoteStringChar = [^\r\n\"] +XmlSQuoteStringChar = [^\r\n\'] + + + +/* integer literals */ +DecIntegerLiteral = 0 | [1-9][0-9]* + +HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} +HexDigit = [0-9a-fA-F] + +OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} +OctDigit = [0-7] + +/* floating point literals */ +DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? + +FLit1 = [0-9]+ \. [0-9]* +FLit2 = \. [0-9]+ +FLit3 = [0-9]+ +Exponent = [eE] [+-]? [0-9]+ + +/* string and character literals */ +StringCharacter = [^\r\n\"\\] +SingleCharacter = [^\r\n\'\\] +OIdentifierCharacter = [^\r\n\u00A7\\] + +%state STRING, CHARLITERAL,XMLOPENTAG,XMLOPENTAGATTRIB,XMLINSTROPENTAG,XMLINSTRATTRIB,XMLCDATA,XMLCOMMENT,XML,OIDENTIFIER + +%% + + { + + /* keywords */ + "break" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); } + "case" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); } + "continue" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); } + "default" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); } + "do" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); } + "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } + "else" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); } + "for" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); } + "each" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); } + "in" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); } + "if" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); } + "return" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); } + "super" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); } + "switch" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); } + "throw" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); } + "try" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); } + "catch" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); } + "finally" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); } + "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } + "with" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); } + "dynamic" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); } + "internal" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); } + "override" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); } + "private" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); } + "protected" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); } + "public" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); } + "static" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); } + "class" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); } + "const" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); } + "extends" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); } + "function" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); } + "get" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); } + "implements" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); } + "interface" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); } + "namespace" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); } + "package" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); } + "set" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); } + "var" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); } + "import" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); } + "use" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); } + "false" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); } + "null" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); } + "this" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); } + "true" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); } + "undefined" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); } + "Infinity" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); } + "NaN" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); } + "final" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINAL,yytext()); } + + + /* operators */ + + "(" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); } + ")" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); } + "{" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); } + "}" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); } + "[" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); } + "]" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); } + ";" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); } + "," { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); } + "..." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); } + "." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); } + "=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); } + ">" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); } + "<" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); } + "!" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); } + "~" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); } + "?" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); } + ":" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); } + "===" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); } + "==" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); } + "<=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); } + ">=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); } + "!==" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); } + "!=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); } + "&&" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); } + "||" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); } + "++" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); } + "--" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); } + "+" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); } + "-" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); } + "*" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); } + "/" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); } + "&" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); } + "|" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); } + "^" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); } + "%" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); } + "<<" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); } + ">>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); } + ">>>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); } + "+=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); } + "-=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); } + "*=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); } + "/=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); } + "&=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); } + "|=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); } + "^=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); } + "%=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); } + "<<=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); } + ">>=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); } + ">>>=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); } + "as" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); } + "delete" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); } + "instanceof" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); } + "is" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); } + "::" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); } + "new" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); } + "typeof" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); } + "void" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); } + "@" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); } + ".(" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FILTER,yytext()); } + ".." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DESCENDANTS,yytext()); } + + /* string literal */ + \" { + string.setLength(0); + yybegin(STRING); + } + "\u00A7" { + string.setLength(0); + yybegin(OIDENTIFIER); + } + + /* character literal */ + \' { + string.setLength(0); + yybegin(CHARLITERAL); + } + + /* numeric literals */ + + {DecIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); } + + {HexIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); } + + {OctIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); } + + {DoubleLiteral} { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); } + + /* comments */ + {Comment} { /*ignore*/ } + + {LineTerminator} { yyline++;} + /* whitespace */ + {WhiteSpace} { /*ignore*/ } + {TypeNameSpec} { return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,yytext()); } + {XmlOpenTagStart} { + yybegin(XMLOPENTAG); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext()); + } + "<{" { return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext()); } + /* identifiers */ + {Identifier} { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); } + +} + + { + {XmlAttribute} { + yybegin(XMLOPENTAGATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + "{" { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + {XmlOpenTagEnd} { + yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + {XmlOpenTagClose} { + yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTFINISHTAG_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + {LineTerminator} { string.append( yytext() ); yyline++;} + {WhiteSpace} { string.append( yytext() ); } +} + + + + { + \"{XmlDQuoteStringChar}*\" { + yybegin(XMLOPENTAG); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + "{" { + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); + } +} + + + { + {XmlAttribute} { + yybegin(XMLINSTRATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + "{" { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + {XmlInstrEnd} { + yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + {LineTerminator} { string.append( yytext() ); yyline++;} + {WhiteSpace} { string.append( yytext() ); } +} + + { + \"{XmlDQuoteStringChar}*\" { + yybegin(XMLINSTROPENTAG); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + \"{XmlSQuoteStringChar}*\" { + yybegin(XMLINSTROPENTAG); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + "{" { + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); + } +} + + + { + {XmlCDataEnd} { + string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_CDATA, ret); + } + {LineTerminator} { string.append( yytext() ); yyline++;} + .|\n { string.append( yytext() ); } +} + + { + {XmlCommentEnd} { + string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_COMMENT, ret); + } + {LineTerminator} { string.append( yytext() ); yyline++;} + .|\n { string.append(yytext());} +} + + { + {XmlCDataStart} { + String ret=string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA); + if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); + } + {XmlInstrStart} { + yybegin(XMLINSTROPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + "0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + {XmlCommentStart} { + String ret=string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT); + if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); + } + {XmlOpenTagStart} { + yybegin(XMLOPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + {XmlCloseTag} { + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_FINISHTAG, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + + "<{" { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + "0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + "{" { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_VAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + {LineTerminator} { string.append( yytext() ); yyline++;} + .|\n { string.append( yytext() ); } +} + + { + "\u00A7" { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER,string.toString()); + } + + {OIdentifierCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\§" { string.append( '\u00A7' ); } + "\\r" { string.append( '\r' ); } + "\\\\" { string.append( '\\' ); } + + /* escape sequences */ + + \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + {LineTerminator} { yybegin(YYINITIAL); yyline++;} +} + + { + \" { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); + } + + {StringCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\r" { string.append( '\r' ); } + "\\\"" { string.append( '\"' ); } + "\\'" { string.append( '\'' ); } + "\\\\" { string.append( '\\' ); } + \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); } + + /* escape sequences */ + + \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + {LineTerminator} { yybegin(YYINITIAL); yyline++;} +} + + { + \' { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); + } + + {SingleCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ +/* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\r" { string.append( '\r' ); } + "\\\"" { string.append( '\"' ); } + "\\'" { string.append( '\'' ); } + "\\\\" { string.append( '\\' ); } + \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); } + + /* escape sequences */ + + \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + {LineTerminator} { yybegin(YYINITIAL); yyline++;} +} + +/* error fallback */ +.|\n { } +<> { return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); } diff --git a/src/com/jpexs/decompiler/flash/action/Deobfuscation.java b/src/com/jpexs/decompiler/flash/action/Deobfuscation.java index e45a564c5..49715d867 100644 --- a/src/com/jpexs/decompiler/flash/action/Deobfuscation.java +++ b/src/com/jpexs/decompiler/flash/action/Deobfuscation.java @@ -175,10 +175,17 @@ public class Deobfuscation { return null; } - public static boolean isValidName(String s) { + public static boolean isValidName(String s,String ...exceptions) { boolean isValid = true; - if (Action.isReservedWord(s)) { - isValid = false; + + for(String e:exceptions){ + if(e.equals(s)){ + return true; + } + } + + if (Action.isReservedWord(s)) { + isValid = false; } if (isValid) { @@ -241,5 +248,37 @@ public class Deobfuscation { } return null; } + + public static String makeObfuscatedIdentifier(String s){ + return "§"+escapeOIdentifier(s)+"§"; + } + + public static String escapeOIdentifier(String s) { + StringBuilder ret = new StringBuilder(s.length()); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (c == '\n') { + ret.append("\\n"); + } else if (c == '\r') { + ret.append("\\r"); + } else if (c == '\t') { + ret.append("\\t"); + } else if (c == '\b') { + ret.append("\\b"); + } else if (c == '\t') { + ret.append("\\t"); + } else if (c == '\f') { + ret.append("\\f"); + } else if (c == '\\') { + ret.append("\\\\"); + } else if (c == '§') { + ret.append("\\§"); + } else { + ret.append(c); + } + } + + return ret.toString(); + } } diff --git a/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java b/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java index 87f799600..7afba6fb0 100644 --- a/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java +++ b/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java @@ -1,112 +1,118 @@ -/* - * Copyright (C) 2010-2014 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.action.model; - -import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal; -import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal2; -import com.jpexs.decompiler.flash.helpers.GraphTextWriter; -import com.jpexs.decompiler.graph.CompilationException; -import com.jpexs.decompiler.graph.GraphSourceItem; -import com.jpexs.decompiler.graph.GraphSourceItemPos; -import com.jpexs.decompiler.graph.GraphTargetItem; -import com.jpexs.decompiler.graph.SourceGenerator; -import com.jpexs.decompiler.graph.model.LocalData; -import java.util.ArrayList; -import java.util.List; - -public class DefineLocalActionItem extends ActionItem implements SetTypeActionItem { - - public GraphTargetItem name; - //public GraphTargetItem value; - private int tempRegister = -1; - - @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(name); - if (value != null) { - ret.add(value); - } - return ret; - } - - @Override - public void setValue(GraphTargetItem value) { - this.value = value; - } - - @Override - public int getTempRegister() { - return tempRegister; - } - - @Override - public void setTempRegister(int tempRegister) { - this.tempRegister = tempRegister; - } - - @Override - public GraphTargetItem getValue() { - return value; - } - - public DefineLocalActionItem(GraphSourceItem instruction, GraphTargetItem name, GraphTargetItem value) { - super(instruction, PRECEDENCE_PRIMARY); - this.name = name; - this.value = value; - } - - @Override - public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - writer.append("var "); - stripQuotes(name, localData, writer); - if (value == null) { - return writer; - } - writer.append(" = "); - return value.toString(writer, localData); - } - - @Override - public List getNeededSources() { - List ret = super.getNeededSources(); - ret.addAll(value.getNeededSources()); - ret.addAll(name.getNeededSources()); - return ret; - } - - @Override - public GraphTargetItem getObject() { - return new DefineLocalActionItem(src, name, null); - } - - @Override - public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { - if (value == null) { - return toSourceMerge(localData, generator, name, new ActionDefineLocal2()); - } else { - return toSourceMerge(localData, generator, name, value, new ActionDefineLocal()); - } - - } - - @Override - public boolean hasReturnValue() { - return false; - } -} +/* + * Copyright (C) 2010-2014 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.model; + +import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal; +import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal2; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.CompilationException; +import com.jpexs.decompiler.graph.GraphSourceItem; +import com.jpexs.decompiler.graph.GraphSourceItemPos; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.model.LocalData; +import java.util.ArrayList; +import java.util.List; + +public class DefineLocalActionItem extends ActionItem implements SetTypeActionItem { + + public GraphTargetItem name; + //public GraphTargetItem value; + private int tempRegister = -1; + + @Override + public List getAllSubItems() { + List ret = new ArrayList<>(); + ret.add(name); + if (value != null) { + ret.add(value); + } + return ret; + } + + @Override + public void setValue(GraphTargetItem value) { + this.value = value; + } + + @Override + public int getTempRegister() { + return tempRegister; + } + + @Override + public void setTempRegister(int tempRegister) { + this.tempRegister = tempRegister; + } + + @Override + public GraphTargetItem getValue() { + return value; + } + + public DefineLocalActionItem(GraphSourceItem instruction, GraphTargetItem name, GraphTargetItem value) { + super(instruction, PRECEDENCE_PRIMARY); + this.name = name; + this.value = value; + } + + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + writer.append("var "); + + if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!Deobfuscation.isValidName(((DirectValueActionItem) name).toStringNoQuotes(localData),"this","super"))){ + writer.append(Deobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); + } else { + stripQuotes(name, localData, writer); + } + if (value == null) { + return writer; + } + writer.append(" = "); + return value.toString(writer, localData); + } + + @Override + public List getNeededSources() { + List ret = super.getNeededSources(); + ret.addAll(value.getNeededSources()); + ret.addAll(name.getNeededSources()); + return ret; + } + + @Override + public GraphTargetItem getObject() { + return new DefineLocalActionItem(src, name, null); + } + + @Override + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { + if (value == null) { + return toSourceMerge(localData, generator, name, new ActionDefineLocal2()); + } else { + return toSourceMerge(localData, generator, name, value, new ActionDefineLocal()); + } + + } + + @Override + public boolean hasReturnValue() { + return false; + } +} diff --git a/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java b/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java index 8fc0bcf09..40e9e6d90 100644 --- a/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java +++ b/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java @@ -84,16 +84,14 @@ public class FunctionActionItem extends ActionItem { writer.append(" "); String fname = calculatedFunctionName.toStringNoQuotes(localData); if (!Deobfuscation.isValidName(fname)) { - calculatedFunctionName.appendTo(writer, localData); //Use quotes + writer.append(Deobfuscation.makeObfuscatedIdentifier(fname)); } else { calculatedFunctionName.appendToNoQuotes(writer, localData); } } else if (!functionName.isEmpty()) { writer.append(" "); if (!Deobfuscation.isValidName(functionName)) { - writer.append("\""); - writer.append(Helper.escapeString(functionName)); - writer.append("\""); + writer.append(Deobfuscation.makeObfuscatedIdentifier(functionName)); } else { writer.append(functionName); } @@ -110,9 +108,7 @@ public class FunctionActionItem extends ActionItem { pname = new RegisterNumber(regStart + p).translate(); } if (!Deobfuscation.isValidName(pname)) { - writer.append("\""); - writer.append(Helper.escapeString(pname)); - writer.append("\""); + writer.append(Deobfuscation.makeObfuscatedIdentifier(pname)); } writer.append(pname); } diff --git a/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java b/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java index bf4ee59d2..0c0fd0367 100644 --- a/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java +++ b/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java @@ -53,12 +53,13 @@ public class GetVariableActionItem extends ActionItem { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - if ((!(name instanceof DirectValueActionItem)) || (!((DirectValueActionItem) name).isString()) || (!Deobfuscation.isValidName(((DirectValueActionItem) name).toStringNoQuotes(localData)))) { - if ((!((DirectValueActionItem) name).toStringNoQuotes(localData).equals("this")) && (!((DirectValueActionItem) name).toStringNoQuotes(localData).equals("super"))) { - writer.append("eval("); - name.appendTo(writer, localData); - return writer.append(")"); - } + + if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!Deobfuscation.isValidName(((DirectValueActionItem) name).toStringNoQuotes(localData),"this","super"))){ + return writer.append(Deobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); + }else if ((!(name instanceof DirectValueActionItem)) || (!((DirectValueActionItem) name).isString())) { + writer.append("eval("); + name.appendTo(writer, localData); + return writer.append(")"); } return stripQuotes(name, localData, writer); } diff --git a/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java b/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java index f9c9e2bd7..12a627e72 100644 --- a/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java +++ b/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java @@ -73,12 +73,12 @@ public class SetVariableActionItem extends ActionItem implements SetTypeActionIt } @Override - public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - if (((name instanceof DirectValueActionItem) && ((DirectValueActionItem) name).isString() && Deobfuscation.isValidName(((DirectValueActionItem) name).toStringNoQuotes(localData))) || name instanceof VariableActionItem) { - stripQuotes(name, localData, writer); + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!Deobfuscation.isValidName(((DirectValueActionItem) name).toStringNoQuotes(localData),"this","super"))){ + writer.append(Deobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); writer.append(" = "); return value.toString(writer, localData); - } else { + }else if ((!(name instanceof DirectValueActionItem)) || (!((DirectValueActionItem) name).isString())) { writer.append("set"); writer.spaceBeforeCallParenthesies(2); writer.append("("); @@ -87,6 +87,9 @@ public class SetVariableActionItem extends ActionItem implements SetTypeActionIt value.toString(writer, localData); return writer.append(")"); } + stripQuotes(name, localData, writer); + writer.append(" = "); + return value.toString(writer, localData); } @Override diff --git a/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java b/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java index 39178d6c7..8e19fdcf1 100644 --- a/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java +++ b/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java @@ -17,1215 +17,1180 @@ * along with this program. If not, see . */ package com.jpexs.decompiler.flash.action.parser.script; - import com.jpexs.decompiler.flash.action.parser.ParseException; -import java.util.ArrayList; -import java.util.List; import java.util.Stack; +import java.util.List; +import java.util.ArrayList; + /** - * This class is a scanner generated by - * JFlex 1.5.0-SNAPSHOT from the - * specification file - * D:/Dropbox/Programovani/JavaSE/FFDec/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex + * This class is a scanner generated by + * JFlex 1.5.0-SNAPSHOT + * from the specification file D:/Dropbox/Programovani/JavaSE/FFDec/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex */ public final class ActionScriptLexer { - /** - * This character denotes the end of file - */ - public static final int YYEOF = -1; + /** This character denotes the end of file */ + public static final int YYEOF = -1; - /** - * initial size of the lookahead buffer - */ - private static final int ZZ_BUFFERSIZE = 16384; + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; - /** - * lexical states - */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; - public static final int CHARLITERAL = 4; - public static final int XMLSTARTTAG = 6; - public static final int XML = 8; + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int CHARLITERAL = 4; + public static final int XMLSTARTTAG = 6; + public static final int XML = 8; + public static final int OIDENTIFIER = 10; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the - * beginning of a line l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED - = "\11\7\1\3\1\2\1\120\1\121\1\1\16\7\4\0\1\14\1\107" - + "\1\16\1\0\1\6\1\116\1\112\1\30\1\77\1\100\1\5\1\114" - + "\1\106\1\26\1\11\1\4\1\17\3\23\4\24\2\20\1\10\1\105" - + "\1\12\1\15\1\13\1\111\1\117\1\61\1\22\1\71\1\72\1\25" - + "\1\63\1\6\1\65\1\76\2\6\1\67\1\70\1\75\1\6\1\74" - + "\1\66\1\6\1\62\1\64\1\60\1\73\1\6\1\21\2\6\1\103" - + "\1\27\1\104\1\115\1\6\1\0\1\34\1\31\1\36\1\45\1\33" - + "\1\46\1\57\1\51\1\43\1\6\1\35\1\47\1\54\1\41\1\40" - + "\1\52\1\6\1\32\1\37\1\42\1\44\1\55\1\50\1\56\1\53" - + "\1\6\1\101\1\113\1\102\1\110\6\7\1\122\32\7\2\0\4\6" - + "\4\0\1\6\2\0\1\7\7\0\1\6\4\0\1\6\5\0\27\6" - + "\1\0\37\6\1\0\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6" - + "\1\0\1\6\21\0\160\7\5\6\1\0\2\6\2\0\4\6\10\0" - + "\1\6\1\0\3\6\1\0\1\6\1\0\24\6\1\0\123\6\1\0" - + "\213\6\1\0\5\7\2\0\236\6\11\0\46\6\2\0\1\6\7\0" - + "\47\6\11\0\55\7\1\0\1\7\1\0\2\7\1\0\2\7\1\0" - + "\1\7\10\0\33\6\5\0\3\6\15\0\4\7\7\0\1\6\4\0" - + "\13\7\5\0\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6" - + "\10\7\1\0\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6" - + "\2\0\1\6\17\0\1\7\1\6\1\7\36\6\33\7\2\0\131\6" - + "\13\7\1\6\16\0\12\7\41\6\11\7\2\6\4\0\1\6\5\0" - + "\26\6\4\7\1\6\11\7\1\6\3\7\1\6\5\7\22\0\31\6" - + "\3\7\244\0\4\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6" - + "\2\7\2\0\12\7\1\0\7\6\1\0\7\6\1\0\3\7\1\0" - + "\10\6\2\0\2\6\2\0\26\6\1\0\7\6\1\0\1\6\3\0" - + "\4\6\2\0\1\7\1\6\7\7\2\0\2\7\2\0\3\7\1\6" - + "\10\0\1\7\4\0\2\6\1\0\3\6\2\7\2\0\12\7\4\6" - + "\7\0\1\6\5\0\3\7\1\0\6\6\4\0\2\6\2\0\26\6" - + "\1\0\7\6\1\0\2\6\1\0\2\6\1\0\2\6\2\0\1\7" - + "\1\0\5\7\4\0\2\7\2\0\3\7\3\0\1\7\7\0\4\6" - + "\1\0\1\6\7\0\14\7\3\6\1\7\13\0\3\7\1\0\11\6" - + "\1\0\3\6\1\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6" - + "\2\0\1\7\1\6\10\7\1\0\3\7\1\0\3\7\2\0\1\6" - + "\17\0\2\6\2\7\2\0\12\7\1\0\1\6\17\0\3\7\1\0" - + "\10\6\2\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0" - + "\5\6\2\0\1\7\1\6\7\7\2\0\2\7\2\0\3\7\10\0" - + "\2\7\4\0\2\6\1\0\3\6\2\7\2\0\12\7\1\0\1\6" - + "\20\0\1\7\1\6\1\0\6\6\3\0\3\6\1\0\4\6\3\0" - + "\2\6\1\0\1\6\1\0\2\6\3\0\2\6\3\0\3\6\3\0" - + "\14\6\4\0\5\7\3\0\3\7\1\0\4\7\2\0\1\6\6\0" - + "\1\7\16\0\12\7\11\0\1\6\7\0\3\7\1\0\10\6\1\0" - + "\3\6\1\0\27\6\1\0\12\6\1\0\5\6\3\0\1\6\7\7" - + "\1\0\3\7\1\0\4\7\7\0\2\7\1\0\2\6\6\0\2\6" - + "\2\7\2\0\12\7\22\0\2\7\1\0\10\6\1\0\3\6\1\0" - + "\27\6\1\0\12\6\1\0\5\6\2\0\1\7\1\6\7\7\1\0" - + "\3\7\1\0\4\7\7\0\2\7\7\0\1\6\1\0\2\6\2\7" - + "\2\0\12\7\1\0\2\6\17\0\2\7\1\0\10\6\1\0\3\6" - + "\1\0\51\6\2\0\1\6\7\7\1\0\3\7\1\0\4\7\1\6" - + "\10\0\1\7\10\0\2\6\2\7\2\0\12\7\12\0\6\6\2\0" - + "\2\7\1\0\22\6\3\0\30\6\1\0\11\6\1\0\1\6\2\0" - + "\7\6\3\0\1\7\4\0\6\7\1\0\1\7\1\0\10\7\22\0" - + "\2\7\15\0\60\6\1\7\2\6\7\7\4\0\10\6\10\7\1\0" - + "\12\7\47\0\2\6\1\0\1\6\2\0\2\6\1\0\1\6\2\0" - + "\1\6\6\0\4\6\1\0\7\6\1\0\3\6\1\0\1\6\1\0" - + "\1\6\2\0\2\6\1\0\4\6\1\7\2\6\6\7\1\0\2\7" - + "\1\6\2\0\5\6\1\0\1\6\1\0\6\7\2\0\12\7\2\0" - + "\2\6\42\0\1\6\27\0\2\7\6\0\12\7\13\0\1\7\1\0" - + "\1\7\1\0\1\7\4\0\2\7\10\6\1\0\44\6\4\0\24\7" - + "\1\0\2\7\5\6\13\7\1\0\44\7\11\0\1\7\71\0\53\6" - + "\24\7\1\6\12\7\6\0\6\6\4\7\4\6\3\7\1\6\3\7" - + "\2\6\7\7\3\6\4\7\15\6\14\7\1\6\17\7\2\0\46\6" - + "\12\0\53\6\1\0\1\6\3\0\u0149\6\1\0\4\6\2\0\7\6" - + "\1\0\1\6\1\0\4\6\2\0\51\6\1\0\4\6\2\0\41\6" - + "\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0\17\6" - + "\1\0\71\6\1\0\4\6\2\0\103\6\2\0\3\7\40\0\20\6" - + "\20\0\125\6\14\0\u026c\6\2\0\21\6\1\0\32\6\5\0\113\6" - + "\3\0\3\6\17\0\15\6\1\0\4\6\3\7\13\0\22\6\3\7" - + "\13\0\22\6\2\7\14\0\15\6\1\0\3\6\1\0\2\7\14\0" - + "\64\6\40\7\3\0\1\6\3\0\2\6\1\7\2\0\12\7\41\0" - + "\3\7\2\0\12\7\6\0\130\6\10\0\51\6\1\7\1\6\5\0" - + "\106\6\12\0\35\6\3\0\14\7\4\0\14\7\12\0\12\7\36\6" - + "\2\0\5\6\13\0\54\6\4\0\21\7\7\6\2\7\6\0\12\7" - + "\46\0\27\6\5\7\4\0\65\6\12\7\1\0\35\7\2\0\13\7" - + "\6\0\12\7\15\0\1\6\130\0\5\7\57\6\21\7\7\6\4\0" - + "\12\7\21\0\11\7\14\0\3\7\36\6\12\7\3\0\2\6\12\7" - + "\6\0\46\6\16\7\14\0\44\6\24\7\10\0\12\7\3\0\3\6" - + "\12\7\44\6\122\0\3\7\1\0\25\7\4\6\1\7\4\6\1\7" - + "\15\0\300\6\47\7\25\0\4\7\u0116\6\2\0\6\6\2\0\46\6" - + "\2\0\6\6\2\0\10\6\1\0\1\6\1\0\1\6\1\0\1\6" - + "\1\0\37\6\2\0\65\6\1\0\7\6\1\0\1\6\3\0\3\6" - + "\1\0\7\6\3\0\4\6\2\0\6\6\4\0\15\6\5\0\3\6" - + "\1\0\7\6\16\0\5\7\30\0\1\120\1\120\5\7\20\0\2\6" - + "\23\0\1\6\13\0\5\7\5\0\6\7\1\0\1\6\15\0\1\6" - + "\20\0\15\6\3\0\32\6\26\0\15\7\4\0\1\7\3\0\14\7" - + "\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6\3\0\5\6" - + "\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6\1\0\13\6" - + "\2\0\4\6\5\0\5\6\4\0\1\6\21\0\51\6\u0a77\0\57\6" - + "\1\0\57\6\1\0\205\6\6\0\4\6\3\7\16\0\46\6\12\0" - + "\66\6\11\0\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6" - + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6" - + "\1\0\7\6\1\0\40\7\57\0\1\6\u01d5\0\3\6\31\0\11\6" - + "\6\7\1\0\5\6\2\0\5\6\4\0\126\6\2\0\2\7\2\0" - + "\3\6\1\0\132\6\1\0\4\6\5\0\51\6\3\0\136\6\21\0" - + "\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cc\6\64\0\u048d\6\103\0" - + "\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6\1\7" - + "\14\0\2\7\1\0\31\6\10\0\120\6\2\7\45\0\11\6\2\0" - + "\147\6\2\0\4\6\1\0\2\6\16\0\12\6\120\0\10\6\1\7" - + "\3\6\1\7\4\6\1\7\27\6\5\7\20\0\1\6\7\0\64\6" - + "\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7\6\6\3\0" - + "\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7\14\0\35\6" - + "\3\0\4\7\57\6\16\7\16\0\1\6\12\7\46\0\51\6\16\7" - + "\11\0\3\6\1\7\10\6\2\7\2\0\12\7\6\0\27\6\3\0" - + "\1\6\1\7\4\0\60\6\1\7\1\6\3\7\2\6\2\7\5\6" - + "\2\7\1\6\1\7\1\6\30\0\3\6\43\0\6\6\2\0\6\6" - + "\2\0\6\6\11\0\7\6\1\0\7\6\221\0\43\6\10\7\1\0" - + "\2\7\2\0\12\7\6\0\u2ba4\6\14\0\27\6\4\0\61\6\u2104\0" - + "\u012e\6\2\0\76\6\2\0\152\6\46\0\7\6\14\0\5\6\5\0" - + "\1\6\1\7\12\6\1\0\15\6\1\0\5\6\1\0\1\6\1\0" - + "\2\6\1\0\2\6\1\0\154\6\41\0\u016b\6\22\0\100\6\2\0" - + "\66\6\50\0\15\6\3\0\20\7\20\0\7\7\14\0\2\6\30\0" - + "\3\6\31\0\1\6\6\0\5\6\1\0\207\6\2\0\1\7\4\0" - + "\1\6\13\0\12\7\7\0\32\6\4\0\1\6\1\0\32\6\13\0" - + "\131\6\3\0\6\6\2\0\6\6\2\0\6\6\2\0\3\6\3\0" - + "\2\6\3\0\2\6\22\0\3\7\4\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\7\1\3\1\2\1\121\1\122\1\1\16\7\4\0\1\14\1\110"+ + "\1\16\1\0\1\6\1\117\1\113\1\30\1\100\1\101\1\5\1\115"+ + "\1\107\1\26\1\11\1\4\1\17\3\23\4\24\2\20\1\10\1\106"+ + "\1\12\1\15\1\13\1\112\1\120\1\62\1\22\1\72\1\73\1\25"+ + "\1\64\1\6\1\66\1\77\2\6\1\70\1\71\1\76\1\6\1\75"+ + "\1\67\1\6\1\63\1\65\1\61\1\74\1\6\1\21\2\6\1\104"+ + "\1\27\1\105\1\116\1\6\1\0\1\35\1\32\1\37\1\46\1\34"+ + "\1\47\1\60\1\52\1\44\1\6\1\36\1\50\1\55\1\42\1\41"+ + "\1\53\1\6\1\33\1\40\1\43\1\45\1\56\1\51\1\57\1\54"+ + "\1\6\1\102\1\114\1\103\1\111\6\7\1\123\32\7\2\0\4\6"+ + "\1\0\1\31\2\0\1\6\2\0\1\7\7\0\1\6\4\0\1\6"+ + "\5\0\27\6\1\0\37\6\1\0\u01ca\6\4\0\14\6\16\0\5\6"+ + "\7\0\1\6\1\0\1\6\21\0\160\7\5\6\1\0\2\6\2\0"+ + "\4\6\10\0\1\6\1\0\3\6\1\0\1\6\1\0\24\6\1\0"+ + "\123\6\1\0\213\6\1\0\5\7\2\0\236\6\11\0\46\6\2\0"+ + "\1\6\7\0\47\6\11\0\55\7\1\0\1\7\1\0\2\7\1\0"+ + "\2\7\1\0\1\7\10\0\33\6\5\0\3\6\15\0\4\7\7\0"+ + "\1\6\4\0\13\7\5\0\53\6\37\7\4\0\2\6\1\7\143\6"+ + "\1\0\1\6\10\7\1\0\6\7\2\6\2\7\1\0\4\7\2\6"+ + "\12\7\3\6\2\0\1\6\17\0\1\7\1\6\1\7\36\6\33\7"+ + "\2\0\131\6\13\7\1\6\16\0\12\7\41\6\11\7\2\6\4\0"+ + "\1\6\5\0\26\6\4\7\1\6\11\7\1\6\3\7\1\6\5\7"+ + "\22\0\31\6\3\7\244\0\4\7\66\6\3\7\1\6\22\7\1\6"+ + "\7\7\12\6\2\7\2\0\12\7\1\0\7\6\1\0\7\6\1\0"+ + "\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6\1\0"+ + "\1\6\3\0\4\6\2\0\1\7\1\6\7\7\2\0\2\7\2\0"+ + "\3\7\1\6\10\0\1\7\4\0\2\6\1\0\3\6\2\7\2\0"+ + "\12\7\4\6\7\0\1\6\5\0\3\7\1\0\6\6\4\0\2\6"+ + "\2\0\26\6\1\0\7\6\1\0\2\6\1\0\2\6\1\0\2\6"+ + "\2\0\1\7\1\0\5\7\4\0\2\7\2\0\3\7\3\0\1\7"+ + "\7\0\4\6\1\0\1\6\7\0\14\7\3\6\1\7\13\0\3\7"+ + "\1\0\11\6\1\0\3\6\1\0\26\6\1\0\7\6\1\0\2\6"+ + "\1\0\5\6\2\0\1\7\1\6\10\7\1\0\3\7\1\0\3\7"+ + "\2\0\1\6\17\0\2\6\2\7\2\0\12\7\1\0\1\6\17\0"+ + "\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6\1\0"+ + "\2\6\1\0\5\6\2\0\1\7\1\6\7\7\2\0\2\7\2\0"+ + "\3\7\10\0\2\7\4\0\2\6\1\0\3\6\2\7\2\0\12\7"+ + "\1\0\1\6\20\0\1\7\1\6\1\0\6\6\3\0\3\6\1\0"+ + "\4\6\3\0\2\6\1\0\1\6\1\0\2\6\3\0\2\6\3\0"+ + "\3\6\3\0\14\6\4\0\5\7\3\0\3\7\1\0\4\7\2\0"+ + "\1\6\6\0\1\7\16\0\12\7\11\0\1\6\7\0\3\7\1\0"+ + "\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0\5\6\3\0"+ + "\1\6\7\7\1\0\3\7\1\0\4\7\7\0\2\7\1\0\2\6"+ + "\6\0\2\6\2\7\2\0\12\7\22\0\2\7\1\0\10\6\1\0"+ + "\3\6\1\0\27\6\1\0\12\6\1\0\5\6\2\0\1\7\1\6"+ + "\7\7\1\0\3\7\1\0\4\7\7\0\2\7\7\0\1\6\1\0"+ + "\2\6\2\7\2\0\12\7\1\0\2\6\17\0\2\7\1\0\10\6"+ + "\1\0\3\6\1\0\51\6\2\0\1\6\7\7\1\0\3\7\1\0"+ + "\4\7\1\6\10\0\1\7\10\0\2\6\2\7\2\0\12\7\12\0"+ + "\6\6\2\0\2\7\1\0\22\6\3\0\30\6\1\0\11\6\1\0"+ + "\1\6\2\0\7\6\3\0\1\7\4\0\6\7\1\0\1\7\1\0"+ + "\10\7\22\0\2\7\15\0\60\6\1\7\2\6\7\7\4\0\10\6"+ + "\10\7\1\0\12\7\47\0\2\6\1\0\1\6\2\0\2\6\1\0"+ + "\1\6\2\0\1\6\6\0\4\6\1\0\7\6\1\0\3\6\1\0"+ + "\1\6\1\0\1\6\2\0\2\6\1\0\4\6\1\7\2\6\6\7"+ + "\1\0\2\7\1\6\2\0\5\6\1\0\1\6\1\0\6\7\2\0"+ + "\12\7\2\0\2\6\42\0\1\6\27\0\2\7\6\0\12\7\13\0"+ + "\1\7\1\0\1\7\1\0\1\7\4\0\2\7\10\6\1\0\44\6"+ + "\4\0\24\7\1\0\2\7\5\6\13\7\1\0\44\7\11\0\1\7"+ + "\71\0\53\6\24\7\1\6\12\7\6\0\6\6\4\7\4\6\3\7"+ + "\1\6\3\7\2\6\7\7\3\6\4\7\15\6\14\7\1\6\17\7"+ + "\2\0\46\6\12\0\53\6\1\0\1\6\3\0\u0149\6\1\0\4\6"+ + "\2\0\7\6\1\0\1\6\1\0\4\6\2\0\51\6\1\0\4\6"+ + "\2\0\41\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6"+ + "\2\0\17\6\1\0\71\6\1\0\4\6\2\0\103\6\2\0\3\7"+ + "\40\0\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6\1\0\32\6"+ + "\5\0\113\6\3\0\3\6\17\0\15\6\1\0\4\6\3\7\13\0"+ + "\22\6\3\7\13\0\22\6\2\7\14\0\15\6\1\0\3\6\1\0"+ + "\2\7\14\0\64\6\40\7\3\0\1\6\3\0\2\6\1\7\2\0"+ + "\12\7\41\0\3\7\2\0\12\7\6\0\130\6\10\0\51\6\1\7"+ + "\1\6\5\0\106\6\12\0\35\6\3\0\14\7\4\0\14\7\12\0"+ + "\12\7\36\6\2\0\5\6\13\0\54\6\4\0\21\7\7\6\2\7"+ + "\6\0\12\7\46\0\27\6\5\7\4\0\65\6\12\7\1\0\35\7"+ + "\2\0\13\7\6\0\12\7\15\0\1\6\130\0\5\7\57\6\21\7"+ + "\7\6\4\0\12\7\21\0\11\7\14\0\3\7\36\6\12\7\3\0"+ + "\2\6\12\7\6\0\46\6\16\7\14\0\44\6\24\7\10\0\12\7"+ + "\3\0\3\6\12\7\44\6\122\0\3\7\1\0\25\7\4\6\1\7"+ + "\4\6\1\7\15\0\300\6\47\7\25\0\4\7\u0116\6\2\0\6\6"+ + "\2\0\46\6\2\0\6\6\2\0\10\6\1\0\1\6\1\0\1\6"+ + "\1\0\1\6\1\0\37\6\2\0\65\6\1\0\7\6\1\0\1\6"+ + "\3\0\3\6\1\0\7\6\3\0\4\6\2\0\6\6\4\0\15\6"+ + "\5\0\3\6\1\0\7\6\16\0\5\7\30\0\1\121\1\121\5\7"+ + "\20\0\2\6\23\0\1\6\13\0\5\7\5\0\6\7\1\0\1\6"+ + "\15\0\1\6\20\0\15\6\3\0\32\6\26\0\15\7\4\0\1\7"+ + "\3\0\14\7\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6"+ + "\3\0\5\6\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6"+ + "\1\0\13\6\2\0\4\6\5\0\5\6\4\0\1\6\21\0\51\6"+ + "\u0a77\0\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\7\16\0"+ + "\46\6\12\0\66\6\11\0\1\6\17\0\1\7\27\6\11\0\7\6"+ + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6"+ + "\1\0\7\6\1\0\7\6\1\0\40\7\57\0\1\6\u01d5\0\3\6"+ + "\31\0\11\6\6\7\1\0\5\6\2\0\5\6\4\0\126\6\2\0"+ + "\2\7\2\0\3\6\1\0\132\6\1\0\4\6\5\0\51\6\3\0"+ + "\136\6\21\0\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cc\6\64\0"+ + "\u048d\6\103\0\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6\24\0"+ + "\57\6\1\7\14\0\2\7\1\0\31\6\10\0\120\6\2\7\45\0"+ + "\11\6\2\0\147\6\2\0\4\6\1\0\2\6\16\0\12\6\120\0"+ + "\10\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7\20\0\1\6"+ + "\7\0\64\6\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7"+ + "\6\6\3\0\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7"+ + "\14\0\35\6\3\0\4\7\57\6\16\7\16\0\1\6\12\7\46\0"+ + "\51\6\16\7\11\0\3\6\1\7\10\6\2\7\2\0\12\7\6\0"+ + "\27\6\3\0\1\6\1\7\4\0\60\6\1\7\1\6\3\7\2\6"+ + "\2\7\5\6\2\7\1\6\1\7\1\6\30\0\3\6\43\0\6\6"+ + "\2\0\6\6\2\0\6\6\11\0\7\6\1\0\7\6\221\0\43\6"+ + "\10\7\1\0\2\7\2\0\12\7\6\0\u2ba4\6\14\0\27\6\4\0"+ + "\61\6\u2104\0\u012e\6\2\0\76\6\2\0\152\6\46\0\7\6\14\0"+ + "\5\6\5\0\1\6\1\7\12\6\1\0\15\6\1\0\5\6\1\0"+ + "\1\6\1\0\2\6\1\0\2\6\1\0\154\6\41\0\u016b\6\22\0"+ + "\100\6\2\0\66\6\50\0\15\6\3\0\20\7\20\0\7\7\14\0"+ + "\2\6\30\0\3\6\31\0\1\6\6\0\5\6\1\0\207\6\2\0"+ + "\1\7\4\0\1\6\13\0\12\7\7\0\32\6\4\0\1\6\1\0"+ + "\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0\6\6\2\0"+ + "\3\6\3\0\2\6\3\0\2\6\22\0\3\7\4\0"; - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 - = "\5\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7" - + "\1\10\1\11\1\12\1\13\1\14\2\15\1\16\1\17" - + "\26\6\1\20\1\21\1\22\1\23\1\24\1\25\1\26" - + "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36" - + "\1\37\1\40\1\41\2\42\1\43\1\1\1\41\2\44" - + "\1\41\1\1\1\45\3\41\1\3\1\0\1\46\1\47" - + "\1\50\2\0\1\51\1\0\1\52\1\53\1\54\1\55" - + "\1\56\1\57\1\60\1\51\1\0\2\60\1\0\1\61" - + "\1\62\7\6\1\63\11\6\1\64\12\6\1\65\1\66" - + "\1\67\4\6\1\70\30\6\1\53\1\71\1\72\1\73" - + "\1\74\1\75\1\76\1\77\1\100\1\101\1\102\2\103" - + "\1\104\1\105\1\106\1\107\1\110\1\111\1\112\6\0" - + "\2\3\2\0\1\113\3\0\1\114\1\0\1\115\1\116" - + "\1\117\1\120\2\121\1\60\1\51\1\0\10\6\1\122" - + "\5\6\1\123\1\124\5\6\1\125\1\6\1\126\5\6" - + "\1\127\7\6\1\130\2\6\1\131\10\6\1\132\20\6" - + "\1\133\1\6\1\134\2\6\1\135\2\6\1\136\1\103" - + "\7\0\1\137\5\0\1\140\1\121\1\60\4\6\1\141" - + "\1\142\1\143\1\6\1\144\1\6\1\145\5\6\1\146" - + "\7\6\1\147\1\6\1\150\4\6\1\151\22\6\1\152" - + "\7\6\1\153\4\6\1\154\7\6\1\41\1\0\1\155" - + "\12\0\1\121\1\60\1\156\4\6\1\157\1\160\1\6" - + "\1\161\5\6\1\162\5\6\1\163\3\6\1\164\14\6" - + "\1\165\6\6\1\166\2\6\1\167\3\6\1\170\1\6" - + "\1\171\10\6\10\0\1\121\1\60\1\172\1\6\1\173" - + "\3\6\1\174\2\6\1\175\1\176\7\6\1\177\4\6" - + "\1\200\4\6\1\201\5\6\1\202\10\6\1\203\2\6" - + "\1\204\3\6\1\205\1\206\1\6\2\0\1\114\1\121" - + "\1\60\1\6\1\207\5\6\1\210\14\6\1\211\1\6" - + "\1\212\1\6\1\213\7\6\1\214\1\215\6\6\1\41" - + "\1\121\1\60\1\6\1\216\2\6\1\217\1\220\6\6" - + "\1\221\7\6\1\222\5\6\1\223\1\6\1\224\1\225" - + "\3\6\1\226\1\121\1\60\1\6\1\227\1\6\1\230" - + "\1\231\4\6\1\232\2\6\1\233\2\6\1\234\1\235" - + "\1\6\1\236\1\237\5\6\1\121\1\60\2\6\1\240" - + "\1\241\1\6\1\242\1\6\1\243\6\6\1\244\2\6" - + "\1\60\4\6\1\245\4\6\1\246\1\247\1\250\1\60" - + "\6\6\1\251\2\6\1\60\1\6\1\252\1\6\1\253" - + "\2\6\1\254\1\255\1\60\2\6\1\256\3\6\1\60" - + "\1\257\4\6\1\60\2\6\1\260\1\261\1\262\1\6" - + "\1\263"; + private static final String ZZ_ACTION_PACKED_0 = + "\6\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\10\1\11\1\12\1\13\1\14\2\15\1\16\1\17"+ + "\1\20\26\6\1\21\1\22\1\23\1\24\1\25\1\26"+ + "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36"+ + "\1\37\1\40\1\41\1\42\2\43\1\44\1\1\1\42"+ + "\2\45\1\42\1\1\1\46\4\42\1\1\1\47\1\3"+ + "\1\0\1\50\1\51\1\52\2\0\1\53\1\0\1\54"+ + "\1\55\1\56\1\57\1\60\1\61\1\62\1\53\1\0"+ + "\2\62\1\0\1\63\1\64\7\6\1\65\11\6\1\66"+ + "\12\6\1\67\1\70\1\71\4\6\1\72\30\6\1\55"+ + "\1\73\1\74\1\75\1\76\1\77\1\100\1\101\1\102"+ + "\1\103\1\104\2\105\1\106\1\107\1\110\1\111\1\112"+ + "\1\113\1\114\6\0\1\115\2\3\2\0\1\116\3\0"+ + "\1\117\1\0\1\120\1\121\1\122\1\123\2\124\1\62"+ + "\1\53\1\0\10\6\1\125\5\6\1\126\1\127\5\6"+ + "\1\130\1\6\1\131\5\6\1\132\7\6\1\133\2\6"+ + "\1\134\10\6\1\135\20\6\1\136\1\6\1\137\2\6"+ + "\1\140\2\6\1\141\1\105\7\0\1\142\5\0\1\143"+ + "\1\124\1\62\4\6\1\144\1\145\1\146\1\6\1\147"+ + "\1\6\1\150\5\6\1\151\7\6\1\152\1\6\1\153"+ + "\4\6\1\154\22\6\1\155\7\6\1\156\4\6\1\157"+ + "\7\6\1\42\1\0\1\160\12\0\1\124\1\62\1\161"+ + "\4\6\1\162\1\163\1\6\1\164\5\6\1\165\5\6"+ + "\1\166\3\6\1\167\14\6\1\170\6\6\1\171\2\6"+ + "\1\172\3\6\1\173\1\6\1\174\10\6\10\0\1\124"+ + "\1\62\1\175\1\6\1\176\3\6\1\177\2\6\1\200"+ + "\1\201\7\6\1\202\4\6\1\203\4\6\1\204\5\6"+ + "\1\205\10\6\1\206\2\6\1\207\3\6\1\210\1\211"+ + "\1\6\2\0\1\117\1\124\1\62\1\6\1\212\5\6"+ + "\1\213\14\6\1\214\1\6\1\215\1\6\1\216\7\6"+ + "\1\217\1\220\6\6\1\42\1\124\1\62\1\6\1\221"+ + "\2\6\1\222\1\223\6\6\1\224\7\6\1\225\5\6"+ + "\1\226\1\6\1\227\1\230\3\6\1\231\1\124\1\62"+ + "\1\6\1\232\1\6\1\233\1\234\4\6\1\235\2\6"+ + "\1\236\2\6\1\237\1\240\1\6\1\241\1\242\5\6"+ + "\1\124\1\62\2\6\1\243\1\244\1\6\1\245\1\6"+ + "\1\246\6\6\1\247\2\6\1\62\4\6\1\250\4\6"+ + "\1\251\1\252\1\253\1\62\6\6\1\254\2\6\1\62"+ + "\1\6\1\255\1\6\1\256\2\6\1\257\1\260\1\62"+ + "\2\6\1\261\3\6\1\62\1\262\4\6\1\62\2\6"+ + "\1\263\1\264\1\265\1\6\1\266"; - private static int[] zzUnpackAction() { - int[] result = new int[687]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + private static int [] zzUnpackAction() { + int [] result = new int[693]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\124\0\250\0\374\0\u0150\0\u01a4\0\u01f8\0\u024c"+ + "\0\u01f8\0\u02a0\0\u02f4\0\u0348\0\u039c\0\u03f0\0\u0444\0\u0498"+ + "\0\u04ec\0\u0540\0\u01f8\0\u0594\0\u05e8\0\u063c\0\u01f8\0\u01f8"+ + "\0\u0690\0\u06e4\0\u0738\0\u078c\0\u07e0\0\u0834\0\u0888\0\u08dc"+ + "\0\u0930\0\u0984\0\u09d8\0\u0a2c\0\u0a80\0\u0ad4\0\u0b28\0\u0b7c"+ + "\0\u0bd0\0\u0c24\0\u0c78\0\u0ccc\0\u0d20\0\u0d74\0\u01f8\0\u01f8"+ + "\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u0dc8\0\u01f8"+ + "\0\u01f8\0\u0e1c\0\u0e70\0\u0ec4\0\u0f18\0\u0f6c\0\u01f8\0\u0fc0"+ + "\0\u1014\0\u01f8\0\u01f8\0\u1068\0\u10bc\0\u1110\0\u01f8\0\u1164"+ + "\0\u11b8\0\u01f8\0\u120c\0\u01f8\0\u1260\0\u12b4\0\u1308\0\u01f8"+ + "\0\u135c\0\u13b0\0\u01f8\0\u01f8\0\u01f8\0\u1404\0\u1458\0\u14ac"+ + "\0\u1500\0\u1554\0\u01f8\0\u01f8\0\u15a8\0\u01f8\0\u15fc\0\u1650"+ + "\0\u16a4\0\u16f8\0\u174c\0\u17a0\0\u17f4\0\u01f8\0\u01f8\0\u1848"+ + "\0\u189c\0\u18f0\0\u1944\0\u1998\0\u19ec\0\u1a40\0\u039c\0\u1a94"+ + "\0\u1ae8\0\u1b3c\0\u1b90\0\u1be4\0\u1c38\0\u1c8c\0\u1ce0\0\u1d34"+ + "\0\u1d88\0\u1ddc\0\u1e30\0\u1e84\0\u1ed8\0\u1f2c\0\u1f80\0\u1fd4"+ + "\0\u2028\0\u207c\0\u20d0\0\u039c\0\u2124\0\u2178\0\u21cc\0\u2220"+ + "\0\u2274\0\u22c8\0\u039c\0\u231c\0\u2370\0\u23c4\0\u2418\0\u246c"+ + "\0\u24c0\0\u2514\0\u2568\0\u25bc\0\u2610\0\u2664\0\u26b8\0\u270c"+ + "\0\u2760\0\u27b4\0\u2808\0\u285c\0\u28b0\0\u2904\0\u2958\0\u29ac"+ + "\0\u2a00\0\u2a54\0\u2aa8\0\u2afc\0\u01f8\0\u01f8\0\u01f8\0\u01f8"+ + "\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u2b50\0\u2ba4"+ + "\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u01f8\0\u11b8"+ + "\0\u2bf8\0\u2c4c\0\u2ca0\0\u2cf4\0\u2d48\0\u01f8\0\u2d9c\0\u01f8"+ + "\0\u2df0\0\u2e44\0\u01f8\0\u2e98\0\u2eec\0\u2f40\0\u01f8\0\u2f94"+ + "\0\u01f8\0\u2fe8\0\u01f8\0\u01f8\0\u16f8\0\u303c\0\u3090\0\u30e4"+ + "\0\u30e4\0\u3138\0\u318c\0\u31e0\0\u3234\0\u3288\0\u32dc\0\u3330"+ + "\0\u3384\0\u039c\0\u33d8\0\u342c\0\u3480\0\u34d4\0\u3528\0\u039c"+ + "\0\u039c\0\u357c\0\u35d0\0\u3624\0\u3678\0\u36cc\0\u039c\0\u3720"+ + "\0\u3774\0\u37c8\0\u381c\0\u3870\0\u38c4\0\u3918\0\u039c\0\u396c"+ + "\0\u39c0\0\u3a14\0\u3a68\0\u3abc\0\u3b10\0\u3b64\0\u3bb8\0\u3c0c"+ + "\0\u3c60\0\u039c\0\u3cb4\0\u3d08\0\u3d5c\0\u3db0\0\u3e04\0\u3e58"+ + "\0\u3eac\0\u3f00\0\u039c\0\u3f54\0\u3fa8\0\u3ffc\0\u4050\0\u40a4"+ + "\0\u40f8\0\u414c\0\u41a0\0\u41f4\0\u4248\0\u429c\0\u42f0\0\u4344"+ + "\0\u4398\0\u43ec\0\u4440\0\u039c\0\u4494\0\u44e8\0\u453c\0\u4590"+ + "\0\u039c\0\u45e4\0\u4638\0\u01f8\0\u01f8\0\u468c\0\u46e0\0\u4734"+ + "\0\u4788\0\u47dc\0\u4830\0\u4884\0\u01f8\0\u48d8\0\u492c\0\u4980"+ + "\0\u49d4\0\u4a28\0\u01f8\0\u4a7c\0\u4ad0\0\u4b24\0\u4b78\0\u4bcc"+ + "\0\u4c20\0\u039c\0\u039c\0\u039c\0\u4c74\0\u039c\0\u4cc8\0\u039c"+ + "\0\u4d1c\0\u4d70\0\u4dc4\0\u4e18\0\u4e6c\0\u4ec0\0\u4f14\0\u4f68"+ + "\0\u4fbc\0\u5010\0\u5064\0\u50b8\0\u510c\0\u039c\0\u5160\0\u039c"+ + "\0\u51b4\0\u5208\0\u525c\0\u52b0\0\u039c\0\u5304\0\u5358\0\u53ac"+ + "\0\u5400\0\u5454\0\u54a8\0\u54fc\0\u5550\0\u55a4\0\u55f8\0\u564c"+ + "\0\u56a0\0\u56f4\0\u5748\0\u579c\0\u57f0\0\u5844\0\u5898\0\u039c"+ + "\0\u58ec\0\u5940\0\u5994\0\u59e8\0\u5a3c\0\u5a90\0\u5ae4\0\u039c"+ + "\0\u5b38\0\u5b8c\0\u5be0\0\u5c34\0\u039c\0\u5c88\0\u5cdc\0\u5d30"+ + "\0\u5d84\0\u5dd8\0\u5e2c\0\u5e80\0\u5ed4\0\u5f28\0\u01f8\0\u5f7c"+ + "\0\u5fd0\0\u6024\0\u6078\0\u60cc\0\u6120\0\u6174\0\u61c8\0\u621c"+ + "\0\u6270\0\u62c4\0\u6318\0\u039c\0\u636c\0\u63c0\0\u6414\0\u6468"+ + "\0\u039c\0\u039c\0\u64bc\0\u039c\0\u6510\0\u6564\0\u65b8\0\u660c"+ + "\0\u6660\0\u039c\0\u66b4\0\u6708\0\u675c\0\u67b0\0\u6804\0\u039c"+ + "\0\u6858\0\u68ac\0\u6900\0\u039c\0\u6954\0\u69a8\0\u69fc\0\u6a50"+ + "\0\u6aa4\0\u6af8\0\u6b4c\0\u6ba0\0\u6bf4\0\u6c48\0\u6c9c\0\u6cf0"+ + "\0\u039c\0\u6d44\0\u6d98\0\u6dec\0\u6e40\0\u6e94\0\u6ee8\0\u039c"+ + "\0\u6f3c\0\u6f90\0\u6fe4\0\u7038\0\u708c\0\u70e0\0\u039c\0\u7134"+ + "\0\u039c\0\u7188\0\u71dc\0\u7230\0\u7284\0\u72d8\0\u732c\0\u7380"+ + "\0\u73d4\0\u7428\0\u747c\0\u74d0\0\u7524\0\u7578\0\u75cc\0\u7620"+ + "\0\u7674\0\u76c8\0\u771c\0\u039c\0\u7770\0\u039c\0\u77c4\0\u7818"+ + "\0\u786c\0\u039c\0\u78c0\0\u7914\0\u039c\0\u039c\0\u7968\0\u79bc"+ + "\0\u7a10\0\u7a64\0\u7ab8\0\u7b0c\0\u7b60\0\u039c\0\u7bb4\0\u7c08"+ + "\0\u7c5c\0\u7cb0\0\u039c\0\u7d04\0\u7d58\0\u7dac\0\u7e00\0\u039c"+ + "\0\u7e54\0\u7ea8\0\u7efc\0\u7f50\0\u7fa4\0\u039c\0\u7ff8\0\u804c"+ + "\0\u80a0\0\u80f4\0\u8148\0\u819c\0\u81f0\0\u8244\0\u039c\0\u8298"+ + "\0\u82ec\0\u039c\0\u8340\0\u8394\0\u83e8\0\u039c\0\u039c\0\u843c"+ + "\0\u8490\0\u84e4\0\u6174\0\u8538\0\u858c\0\u85e0\0\u039c\0\u8634"+ + "\0\u8688\0\u86dc\0\u8730\0\u8784\0\u039c\0\u87d8\0\u882c\0\u8880"+ + "\0\u88d4\0\u8928\0\u897c\0\u89d0\0\u8a24\0\u8a78\0\u8acc\0\u8b20"+ + "\0\u8b74\0\u039c\0\u8bc8\0\u039c\0\u8c1c\0\u039c\0\u8c70\0\u8cc4"+ + "\0\u8d18\0\u8d6c\0\u8dc0\0\u8e14\0\u8e68\0\u039c\0\u039c\0\u8ebc"+ + "\0\u8f10\0\u8f64\0\u8fb8\0\u900c\0\u9060\0\u74d0\0\u90b4\0\u9108"+ + "\0\u915c\0\u039c\0\u91b0\0\u9204\0\u039c\0\u039c\0\u9258\0\u92ac"+ + "\0\u9300\0\u9354\0\u93a8\0\u93fc\0\u039c\0\u9450\0\u94a4\0\u94f8"+ + "\0\u954c\0\u95a0\0\u95f4\0\u9648\0\u039c\0\u969c\0\u96f0\0\u9744"+ + "\0\u9798\0\u97ec\0\u039c\0\u9840\0\u039c\0\u039c\0\u9894\0\u98e8"+ + "\0\u993c\0\u039c\0\u9990\0\u99e4\0\u9a38\0\u039c\0\u9a8c\0\u039c"+ + "\0\u039c\0\u9ae0\0\u9b34\0\u9b88\0\u9bdc\0\u039c\0\u9c30\0\u9c84"+ + "\0\u039c\0\u9cd8\0\u9d2c\0\u039c\0\u9d80\0\u9dd4\0\u039c\0\u039c"+ + "\0\u9e28\0\u9e7c\0\u9ed0\0\u9f24\0\u9f78\0\u01f8\0\u9fcc\0\ua020"+ + "\0\ua074\0\u039c\0\u039c\0\ua0c8\0\u039c\0\ua11c\0\u039c\0\ua170"+ + "\0\ua1c4\0\ua218\0\ua26c\0\ua2c0\0\ua314\0\u039c\0\ua368\0\ua3bc"+ + "\0\ua410\0\ua464\0\ua4b8\0\ua50c\0\ua560\0\ua5b4\0\ua608\0\ua65c"+ + "\0\ua6b0\0\ua704\0\u039c\0\u039c\0\u039c\0\ua758\0\ua7ac\0\ua800"+ + "\0\ua854\0\ua8a8\0\ua8fc\0\ua950\0\u039c\0\ua9a4\0\ua9f8\0\uaa4c"+ + "\0\uaaa0\0\u039c\0\uaaf4\0\u039c\0\uab48\0\uab9c\0\uabf0\0\uac44"+ + "\0\uac98\0\uacec\0\uad40\0\u039c\0\uad94\0\uade8\0\uae3c\0\uae90"+ + "\0\u039c\0\uaee4\0\uaf38\0\uaf8c\0\uafe0\0\u16a4\0\ub034\0\ub088"+ + "\0\u039c\0\u039c\0\u039c\0\ub0dc\0\u039c"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[693]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } + return j; + } - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); - private static final String ZZ_ROWMAP_PACKED_0 - = "\0\0\0\123\0\246\0\371\0\u014c\0\u019f\0\u01f2\0\u019f" - + "\0\u0245\0\u0298\0\u02eb\0\u033e\0\u0391\0\u03e4\0\u0437\0\u048a" - + "\0\u04dd\0\u019f\0\u0530\0\u0583\0\u05d6\0\u019f\0\u0629\0\u067c" - + "\0\u06cf\0\u0722\0\u0775\0\u07c8\0\u081b\0\u086e\0\u08c1\0\u0914" - + "\0\u0967\0\u09ba\0\u0a0d\0\u0a60\0\u0ab3\0\u0b06\0\u0b59\0\u0bac" - + "\0\u0bff\0\u0c52\0\u0ca5\0\u0cf8\0\u019f\0\u019f\0\u019f\0\u019f" - + "\0\u019f\0\u019f\0\u019f\0\u019f\0\u0d4b\0\u019f\0\u019f\0\u0d9e" - + "\0\u0df1\0\u0e44\0\u0e97\0\u0eea\0\u019f\0\u0f3d\0\u0f90\0\u019f" - + "\0\u019f\0\u0fe3\0\u1036\0\u1089\0\u019f\0\u10dc\0\u112f\0\u019f" - + "\0\u1182\0\u019f\0\u11d5\0\u1228\0\u127b\0\u019f\0\u019f\0\u019f" - + "\0\u12ce\0\u1321\0\u1374\0\u13c7\0\u141a\0\u019f\0\u019f\0\u146d" - + "\0\u019f\0\u14c0\0\u1513\0\u1566\0\u15b9\0\u160c\0\u165f\0\u16b2" - + "\0\u019f\0\u019f\0\u1705\0\u1758\0\u17ab\0\u17fe\0\u1851\0\u18a4" - + "\0\u18f7\0\u033e\0\u194a\0\u199d\0\u19f0\0\u1a43\0\u1a96\0\u1ae9" - + "\0\u1b3c\0\u1b8f\0\u1be2\0\u1c35\0\u1c88\0\u1cdb\0\u1d2e\0\u1d81" - + "\0\u1dd4\0\u1e27\0\u1e7a\0\u1ecd\0\u1f20\0\u1f73\0\u033e\0\u1fc6" - + "\0\u2019\0\u206c\0\u20bf\0\u2112\0\u2165\0\u033e\0\u21b8\0\u220b" - + "\0\u225e\0\u22b1\0\u2304\0\u2357\0\u23aa\0\u23fd\0\u2450\0\u24a3" - + "\0\u24f6\0\u2549\0\u259c\0\u25ef\0\u2642\0\u2695\0\u26e8\0\u273b" - + "\0\u278e\0\u27e1\0\u2834\0\u2887\0\u28da\0\u292d\0\u2980\0\u019f" - + "\0\u019f\0\u019f\0\u019f\0\u019f\0\u019f\0\u019f\0\u019f\0\u019f" - + "\0\u019f\0\u29d3\0\u2a26\0\u019f\0\u019f\0\u019f\0\u019f\0\u019f" - + "\0\u019f\0\u019f\0\u112f\0\u2a79\0\u2acc\0\u2b1f\0\u2b72\0\u2bc5" - + "\0\u2c18\0\u019f\0\u2c6b\0\u2cbe\0\u019f\0\u2d11\0\u2d64\0\u2db7" - + "\0\u019f\0\u2e0a\0\u019f\0\u2e5d\0\u019f\0\u019f\0\u15b9\0\u2eb0" - + "\0\u2f03\0\u2f56\0\u2f56\0\u2fa9\0\u2ffc\0\u304f\0\u30a2\0\u30f5" - + "\0\u3148\0\u319b\0\u31ee\0\u033e\0\u3241\0\u3294\0\u32e7\0\u333a" - + "\0\u338d\0\u033e\0\u033e\0\u33e0\0\u3433\0\u3486\0\u34d9\0\u352c" - + "\0\u033e\0\u357f\0\u35d2\0\u3625\0\u3678\0\u36cb\0\u371e\0\u3771" - + "\0\u033e\0\u37c4\0\u3817\0\u386a\0\u38bd\0\u3910\0\u3963\0\u39b6" - + "\0\u3a09\0\u3a5c\0\u3aaf\0\u033e\0\u3b02\0\u3b55\0\u3ba8\0\u3bfb" - + "\0\u3c4e\0\u3ca1\0\u3cf4\0\u3d47\0\u033e\0\u3d9a\0\u3ded\0\u3e40" - + "\0\u3e93\0\u3ee6\0\u3f39\0\u3f8c\0\u3fdf\0\u4032\0\u4085\0\u40d8" - + "\0\u412b\0\u417e\0\u41d1\0\u4224\0\u4277\0\u033e\0\u42ca\0\u431d" - + "\0\u4370\0\u43c3\0\u033e\0\u4416\0\u4469\0\u019f\0\u019f\0\u44bc" - + "\0\u450f\0\u4562\0\u45b5\0\u4608\0\u465b\0\u46ae\0\u019f\0\u4701" - + "\0\u4754\0\u47a7\0\u47fa\0\u484d\0\u019f\0\u48a0\0\u48f3\0\u4946" - + "\0\u4999\0\u49ec\0\u4a3f\0\u033e\0\u033e\0\u033e\0\u4a92\0\u033e" - + "\0\u4ae5\0\u033e\0\u4b38\0\u4b8b\0\u4bde\0\u4c31\0\u4c84\0\u4cd7" - + "\0\u4d2a\0\u4d7d\0\u4dd0\0\u4e23\0\u4e76\0\u4ec9\0\u4f1c\0\u033e" - + "\0\u4f6f\0\u033e\0\u4fc2\0\u5015\0\u5068\0\u50bb\0\u033e\0\u510e" - + "\0\u5161\0\u51b4\0\u5207\0\u525a\0\u52ad\0\u5300\0\u5353\0\u53a6" - + "\0\u53f9\0\u544c\0\u549f\0\u54f2\0\u5545\0\u5598\0\u55eb\0\u563e" - + "\0\u5691\0\u033e\0\u56e4\0\u5737\0\u578a\0\u57dd\0\u5830\0\u5883" - + "\0\u58d6\0\u033e\0\u5929\0\u597c\0\u59cf\0\u5a22\0\u033e\0\u5a75" - + "\0\u5ac8\0\u5b1b\0\u5b6e\0\u5bc1\0\u5c14\0\u5c67\0\u5cba\0\u5d0d" - + "\0\u019f\0\u5d60\0\u5db3\0\u5e06\0\u5e59\0\u5eac\0\u5eff\0\u5f52" - + "\0\u5fa5\0\u5ff8\0\u604b\0\u609e\0\u60f1\0\u033e\0\u6144\0\u6197" - + "\0\u61ea\0\u623d\0\u033e\0\u033e\0\u6290\0\u033e\0\u62e3\0\u6336" - + "\0\u6389\0\u63dc\0\u642f\0\u033e\0\u6482\0\u64d5\0\u6528\0\u657b" - + "\0\u65ce\0\u033e\0\u6621\0\u6674\0\u66c7\0\u033e\0\u671a\0\u676d" - + "\0\u67c0\0\u6813\0\u6866\0\u68b9\0\u690c\0\u695f\0\u69b2\0\u6a05" - + "\0\u6a58\0\u6aab\0\u033e\0\u6afe\0\u6b51\0\u6ba4\0\u6bf7\0\u6c4a" - + "\0\u6c9d\0\u033e\0\u6cf0\0\u6d43\0\u6d96\0\u6de9\0\u6e3c\0\u6e8f" - + "\0\u033e\0\u6ee2\0\u033e\0\u6f35\0\u6f88\0\u6fdb\0\u702e\0\u7081" - + "\0\u70d4\0\u7127\0\u717a\0\u71cd\0\u7220\0\u7273\0\u72c6\0\u7319" - + "\0\u736c\0\u73bf\0\u7412\0\u7465\0\u74b8\0\u033e\0\u750b\0\u033e" - + "\0\u755e\0\u75b1\0\u7604\0\u033e\0\u7657\0\u76aa\0\u033e\0\u033e" - + "\0\u76fd\0\u7750\0\u77a3\0\u77f6\0\u7849\0\u789c\0\u78ef\0\u033e" - + "\0\u7942\0\u7995\0\u79e8\0\u7a3b\0\u033e\0\u7a8e\0\u7ae1\0\u7b34" - + "\0\u7b87\0\u033e\0\u7bda\0\u7c2d\0\u7c80\0\u7cd3\0\u7d26\0\u033e" - + "\0\u7d79\0\u7dcc\0\u7e1f\0\u7e72\0\u7ec5\0\u7f18\0\u7f6b\0\u7fbe" - + "\0\u033e\0\u8011\0\u8064\0\u033e\0\u80b7\0\u810a\0\u815d\0\u033e" - + "\0\u033e\0\u81b0\0\u8203\0\u8256\0\u5f52\0\u82a9\0\u82fc\0\u834f" - + "\0\u033e\0\u83a2\0\u83f5\0\u8448\0\u849b\0\u84ee\0\u033e\0\u8541" - + "\0\u8594\0\u85e7\0\u863a\0\u868d\0\u86e0\0\u8733\0\u8786\0\u87d9" - + "\0\u882c\0\u887f\0\u88d2\0\u033e\0\u8925\0\u033e\0\u8978\0\u033e" - + "\0\u89cb\0\u8a1e\0\u8a71\0\u8ac4\0\u8b17\0\u8b6a\0\u8bbd\0\u033e" - + "\0\u033e\0\u8c10\0\u8c63\0\u8cb6\0\u8d09\0\u8d5c\0\u8daf\0\u7273" - + "\0\u8e02\0\u8e55\0\u8ea8\0\u033e\0\u8efb\0\u8f4e\0\u033e\0\u033e" - + "\0\u8fa1\0\u8ff4\0\u9047\0\u909a\0\u90ed\0\u9140\0\u033e\0\u9193" - + "\0\u91e6\0\u9239\0\u928c\0\u92df\0\u9332\0\u9385\0\u033e\0\u93d8" - + "\0\u942b\0\u947e\0\u94d1\0\u9524\0\u033e\0\u9577\0\u033e\0\u033e" - + "\0\u95ca\0\u961d\0\u9670\0\u033e\0\u96c3\0\u9716\0\u9769\0\u033e" - + "\0\u97bc\0\u033e\0\u033e\0\u980f\0\u9862\0\u98b5\0\u9908\0\u033e" - + "\0\u995b\0\u99ae\0\u033e\0\u9a01\0\u9a54\0\u033e\0\u9aa7\0\u9afa" - + "\0\u033e\0\u033e\0\u9b4d\0\u9ba0\0\u9bf3\0\u9c46\0\u9c99\0\u019f" - + "\0\u9cec\0\u9d3f\0\u9d92\0\u033e\0\u033e\0\u9de5\0\u033e\0\u9e38" - + "\0\u033e\0\u9e8b\0\u9ede\0\u9f31\0\u9f84\0\u9fd7\0\ua02a\0\u033e" - + "\0\ua07d\0\ua0d0\0\ua123\0\ua176\0\ua1c9\0\ua21c\0\ua26f\0\ua2c2" - + "\0\ua315\0\ua368\0\ua3bb\0\ua40e\0\u033e\0\u033e\0\u033e\0\ua461" - + "\0\ua4b4\0\ua507\0\ua55a\0\ua5ad\0\ua600\0\ua653\0\u033e\0\ua6a6" - + "\0\ua6f9\0\ua74c\0\ua79f\0\u033e\0\ua7f2\0\u033e\0\ua845\0\ua898" - + "\0\ua8eb\0\ua93e\0\ua991\0\ua9e4\0\uaa37\0\u033e\0\uaa8a\0\uaadd" - + "\0\uab30\0\uab83\0\u033e\0\uabd6\0\uac29\0\uac7c\0\uaccf\0\u1566" - + "\0\uad22\0\uad75\0\u033e\0\u033e\0\u033e\0\uadc8\0\u033e"; + private static final String ZZ_TRANS_PACKED_0 = + "\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\7"+ + "\1\16\1\17\1\20\1\21\1\12\1\22\1\23\1\24"+ + "\1\25\2\15\2\25\1\15\1\26\1\7\1\27\1\30"+ + "\1\31\1\32\1\33\1\34\1\15\1\35\1\36\1\37"+ + "\1\40\1\41\1\42\1\43\1\44\1\45\1\46\1\47"+ + "\1\15\1\50\1\15\1\51\1\52\1\15\1\53\2\15"+ + "\1\54\12\15\1\55\1\56\1\57\1\60\1\61\1\62"+ + "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72"+ + "\1\73\1\74\1\75\1\76\1\77\1\0\1\12\1\0"+ + "\1\100\1\101\1\102\13\100\1\103\10\100\1\104\74\100"+ + "\1\105\1\101\1\102\24\105\1\104\1\103\73\105\1\7"+ + "\1\106\1\107\1\110\2\7\1\111\4\7\1\112\1\113"+ + "\4\7\2\111\2\7\1\111\4\7\46\111\21\7\1\0"+ + "\1\110\1\0\1\114\1\106\1\107\7\114\1\115\106\114"+ + "\3\0\1\116\1\101\1\102\24\116\1\117\1\116\1\120"+ + "\72\116\126\0\1\11\124\0\1\12\10\0\1\12\105\0"+ + "\1\12\5\0\1\121\1\122\7\0\1\123\123\0\1\124"+ + "\114\0\2\15\7\0\7\15\4\0\46\15\23\0\1\15"+ + "\10\0\1\125\124\0\1\126\1\127\4\0\2\130\2\0"+ + "\2\130\105\0\1\131\3\0\1\132\1\133\1\0\1\134"+ + "\3\0\2\131\2\0\1\131\4\0\46\131\37\0\1\135"+ + "\1\0\1\136\123\0\1\137\117\0\1\130\5\0\1\140"+ + "\1\141\1\142\1\0\1\143\1\144\1\145\6\0\1\145"+ + "\22\0\1\142\55\0\1\130\5\0\2\25\2\0\2\25"+ + "\1\145\6\0\1\145\104\0\1\146\10\0\1\147\103\0"+ + "\2\15\7\0\7\15\4\0\1\15\1\150\44\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\2\15\1\151"+ + "\1\152\42\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\3\15\1\153\12\15\1\154\5\15\1\155\1\156"+ + "\20\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\6\15\1\157\1\15\1\160\35\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\3\15\1\161\3\15\1\162"+ + "\6\15\1\163\1\15\1\164\25\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\2\15\1\165\6\15\1\166"+ + "\1\15\1\167\3\15\1\170\26\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\1\15\1\171\22\15\1\172"+ + "\21\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\2\15\1\173\1\174\7\15\1\175\32\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\1\15\1\176\1\177"+ + "\1\200\3\15\1\201\10\15\1\202\1\15\1\203\23\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\6\15"+ + "\1\204\1\15\1\205\4\15\1\206\5\15\1\207\22\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\6\15"+ + "\1\210\1\15\1\211\35\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\212\4\15\1\213\3\15"+ + "\1\214\6\15\1\215\23\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\3\15\1\216\2\15\1\217\1\220"+ + "\2\15\1\221\1\222\32\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\223\4\15\1\224\36\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\12\15"+ + "\1\225\5\15\1\226\25\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\1\15\1\227\1\15\1\230\7\15"+ + "\1\231\2\15\1\232\27\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\1\233\45\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\3\15\1\234\3\15\1\235"+ + "\36\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\2\15\1\236\4\15\1\237\36\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\11\15\1\240\34\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\3\15\1\241"+ + "\7\15\1\242\32\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\10\15\1\243\35\15\23\0\1\15\15\0"+ + "\1\244\123\0\1\245\75\0\1\246\25\0\1\247\76\0"+ + "\1\250\24\0\1\251\77\0\1\252\23\0\1\253\123\0"+ + "\1\254\106\0\1\100\2\0\13\100\1\0\10\100\1\0"+ + "\74\100\2\0\1\102\121\0\1\255\2\0\13\255\1\256"+ + "\1\257\3\255\1\257\1\260\2\255\1\261\1\262\1\255"+ + "\1\263\1\264\6\255\1\265\1\266\3\255\1\267\51\255"+ + "\3\0\1\105\2\0\24\105\2\0\73\105\2\0\1\107"+ + "\124\0\1\110\10\0\1\110\105\0\1\110\7\0\2\270"+ + "\1\271\3\0\1\272\1\273\1\0\7\270\4\0\46\270"+ + "\23\0\1\270\3\0\1\110\2\0\1\270\5\0\1\113"+ + "\4\0\2\270\2\0\1\270\4\0\46\270\22\0\1\110"+ + "\5\0\1\274\1\0\1\275\12\0\2\275\2\0\1\275"+ + "\4\0\46\275\24\0\1\116\2\0\24\116\1\0\1\116"+ + "\1\0\72\116\1\255\2\0\24\255\1\261\1\255\1\276"+ + "\1\263\1\264\6\255\1\265\1\266\3\255\1\267\51\255"+ + "\3\0\1\121\1\277\1\300\121\121\5\301\1\302\116\301"+ + "\11\0\1\303\120\0\1\304\12\0\2\304\2\0\1\304"+ + "\4\0\46\304\43\0\2\130\2\0\2\130\1\145\6\0"+ + "\1\145\75\0\1\305\1\131\1\306\2\0\1\307\1\310"+ + "\2\0\2\131\2\305\2\131\1\305\4\0\46\305\23\0"+ + "\1\131\15\0\1\311\121\0\1\312\1\0\1\313\123\0"+ + "\1\314\117\0\1\130\5\0\1\140\1\141\2\0\1\143"+ + "\1\144\1\145\6\0\1\145\100\0\1\130\5\0\2\141"+ + "\2\0\2\141\1\145\6\0\1\145\106\0\1\315\1\316"+ + "\1\0\4\316\4\0\1\316\1\0\2\316\1\0\1\316"+ + "\6\0\2\316\12\0\1\316\1\0\1\316\5\0\2\316"+ + "\41\0\1\130\5\0\1\144\1\141\2\0\2\144\1\145"+ + "\6\0\1\145\100\0\1\130\5\0\1\317\1\141\2\0"+ + "\2\317\1\145\6\0\1\145\106\0\2\320\2\0\2\320"+ + "\1\0\1\321\66\0\1\321\14\0\2\15\7\0\7\15"+ + "\4\0\2\15\1\322\43\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\11\15\1\323\11\15\1\324\22\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\10\15"+ + "\1\325\35\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\5\15\1\326\40\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\6\15\1\327\37\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\3\15\1\330\42\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\11\15"+ + "\1\331\34\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\14\15\1\332\31\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\6\15\1\333\2\15\1\334\4\15"+ + "\1\335\27\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\10\15\1\336\35\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\3\15\1\337\42\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\1\15\1\340\44\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\11\15"+ + "\1\341\34\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\3\15\1\342\3\15\1\343\36\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\1\344\20\15\1\345"+ + "\24\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\12\15\1\346\33\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\14\15\1\347\31\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\2\15\1\350\43\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\17\15\1\351"+ + "\5\15\1\352\20\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\23\15\1\353\22\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\16\15\1\354\27\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\3\15\1\355"+ + "\7\15\1\356\6\15\1\357\23\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\16\15\1\360\27\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\1\15\1\361"+ + "\44\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\26\15\1\362\17\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\1\15\1\363\10\15\1\364\33\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\21\15\1\365"+ + "\24\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\6\15\1\366\2\15\1\367\34\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\32\15\1\370\13\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\21\15\1\371"+ + "\24\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\2\15\1\372\43\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\14\15\1\373\1\15\1\374\27\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\15\15\1\375"+ + "\1\376\27\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\21\15\1\377\24\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\10\15\1\u0100\35\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\16\15\1\u0101\27\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\5\15"+ + "\1\u0102\40\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\1\15\1\u0103\44\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\10\15\1\u0104\35\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\10\15\1\u0105\35\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\10\15"+ + "\1\u0106\35\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\3\15\1\u0107\42\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\11\15\1\u0108\34\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\12\15\1\u0109\33\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\2\15"+ + "\1\u010a\4\15\1\u010b\2\15\1\u010c\33\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\5\15\1\u010d\40\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\1\u010e"+ + "\45\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\3\15\1\u010f\42\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\5\15\1\u0110\1\u0111\1\u0112\6\15\1\u0113"+ + "\27\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\1\15\1\u0114\44\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\12\15\1\u0115\33\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\11\15\1\u0116\34\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\11\15\1\u0117"+ + "\34\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\1\15\1\u0118\44\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\44\15\1\u0119\1\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\23\15\1\u011a\22\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\15\15\1\u011b"+ + "\30\15\23\0\1\15\15\0\1\u011c\125\0\1\260\3\0"+ + "\2\260\116\0\1\u011d\3\0\2\u011d\105\0\1\u011e\12\0"+ + "\2\u011e\2\0\1\u011e\4\0\46\u011e\40\0\1\272\1\273"+ + "\122\0\1\273\1\0\1\u011f\113\0\1\u0120\12\0\2\u0120"+ + "\2\0\1\u0120\4\0\46\u0120\32\0\1\u0121\1\275\1\u0122"+ + "\2\0\1\114\1\u0123\2\0\2\275\2\u0121\2\275\1\u0121"+ + "\4\0\46\u0121\23\0\1\275\2\0\1\300\121\0\5\301"+ + "\1\u0124\116\301\4\0\1\300\1\302\124\0\2\304\3\0"+ + "\1\u0125\3\0\7\304\4\0\46\304\23\0\1\304\6\0"+ + "\2\305\1\u0126\2\0\1\307\1\u0127\1\u0128\1\0\7\305"+ + "\4\0\46\305\23\0\1\305\6\0\1\u0129\12\0\2\u0129"+ + "\2\0\1\u0129\4\0\46\u0129\32\0\1\u012a\5\0\1\310"+ + "\4\0\2\u012a\2\0\1\u012a\4\0\46\u012a\41\0\1\u012b"+ + "\125\0\2\u012c\1\0\4\u012c\4\0\1\u012c\1\0\2\u012c"+ + "\1\0\1\u012c\6\0\2\u012c\12\0\1\u012c\1\0\1\u012c"+ + "\5\0\2\u012c\41\0\1\130\5\0\1\u012d\1\141\2\0"+ + "\2\u012d\1\145\6\0\1\145\106\0\2\320\2\0\2\320"+ + "\105\0\2\15\7\0\7\15\4\0\3\15\1\u012e\42\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\13\15"+ + "\1\u012f\32\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\7\15\1\u0130\36\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\14\15\1\u0131\31\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\20\15\1\u0132\25\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\2\15"+ + "\1\u0133\43\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\16\15\1\u0134\27\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\u0135\43\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\2\15\1\u0136\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\5\15"+ + "\1\u0137\40\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\16\15\1\u0138\27\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\6\15\1\u0139\2\15\1\u013a\34\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\6\15"+ + "\1\u013b\37\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\1\15\1\u013c\7\15\1\u013d\34\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\21\15\1\u013e\24\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\6\15"+ + "\1\u013f\37\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\2\15\1\u0140\43\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\11\15\1\u0141\34\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\1\15\1\u0142\44\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\16\15"+ + "\1\u0143\27\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\11\15\1\u0144\34\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\u0145\43\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\16\15\1\u0146\27\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\5\15"+ + "\1\u0147\40\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\2\15\1\u0148\43\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\16\15\1\u0149\27\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\26\15\1\u014a\17\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\26\15"+ + "\1\u014b\17\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\7\15\1\u014c\36\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\6\15\1\u014d\37\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\2\15\1\u014e\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\11\15"+ + "\1\u014f\34\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\2\15\1\u0150\43\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\1\15\1\u0151\44\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\7\15\1\u0152\6\15"+ + "\1\u0153\27\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\2\15\1\u0154\43\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\7\15\1\u0155\36\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\3\15\1\u0156\42\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\2\15"+ + "\1\u0157\43\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\16\15\1\u0158\27\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\3\15\1\u0159\42\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\6\15\1\u015a\37\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\7\15"+ + "\1\u015b\36\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\3\15\1\u015c\42\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\5\15\1\u015d\40\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\26\15\1\u015e\17\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\14\15"+ + "\1\u015f\31\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\20\15\1\u0160\25\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\16\15\1\u0161\27\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\24\15\1\u0162\21\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\11\15"+ + "\1\u0163\34\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\10\15\1\u0164\13\15\1\u0165\21\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\4\15\1\u0166\41\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\16\15"+ + "\1\u0167\27\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\22\15\1\u0168\23\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\20\15\1\u0169\25\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\13\15\1\u016a\32\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\1\15"+ + "\1\u016b\44\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\2\15\1\u016c\43\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\14\15\1\u016d\31\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\27\15\1\u016e\3\15"+ + "\1\u016f\6\15\1\u0170\3\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\7\15\1\u0171\36\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\12\15\1\u0172\33\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\1\u0173"+ + "\45\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\12\15\1\u0174\33\15\23\0\1\15\6\0\2\u011e\4\0"+ + "\1\272\1\273\1\0\7\u011e\4\0\46\u011e\23\0\1\u011e"+ + "\1\u011f\2\0\13\u011f\1\u0175\105\u011f\6\0\2\u0120\1\u0176"+ + "\2\0\1\u0177\3\0\7\u0120\4\0\46\u0120\23\0\1\u0120"+ + "\6\0\2\u0121\1\u0178\2\0\1\114\1\u0179\1\u017a\1\0"+ + "\7\u0121\4\0\46\u0121\23\0\1\u0121\6\0\1\u017b\12\0"+ + "\2\u017b\2\0\1\u017b\4\0\46\u017b\32\0\1\u017c\5\0"+ + "\1\u0123\4\0\2\u017c\2\0\1\u017c\4\0\46\u017c\24\0"+ + "\4\301\1\300\1\u0124\116\301\6\0\1\u017d\12\0\2\u017d"+ + "\2\0\1\u017d\4\0\46\u017d\32\0\1\u012a\5\0\1\u0127"+ + "\1\u0128\3\0\2\u012a\2\0\1\u012a\4\0\46\u012a\40\0"+ + "\1\u0128\1\0\1\u017e\113\0\1\u017f\1\u0129\3\0\1\307"+ + "\1\310\2\0\2\u0129\2\u017f\2\u0129\1\u017f\4\0\46\u017f"+ + "\23\0\1\u0129\6\0\2\u012a\1\u0180\3\0\1\u0181\1\u0128"+ + "\1\0\7\u012a\4\0\46\u012a\23\0\1\u012a\17\0\2\u0182"+ + "\1\0\4\u0182\4\0\1\u0182\1\0\2\u0182\1\0\1\u0182"+ + "\6\0\2\u0182\12\0\1\u0182\1\0\1\u0182\5\0\2\u0182"+ + "\41\0\1\130\5\0\1\u0183\1\141\2\0\2\u0183\1\145"+ + "\6\0\1\145\75\0\2\15\7\0\7\15\4\0\4\15"+ + "\1\u0184\41\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\1\15\1\u0185\44\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\24\15\1\u0186\21\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\7\15\1\u0187\36\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\10\15"+ + "\1\u0188\35\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\20\15\1\u0189\25\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\11\15\1\u018a\34\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\12\15\1\u018b\33\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\6\15"+ + "\1\u018c\37\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\11\15\1\u018d\34\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\12\15\1\u018e\33\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\30\15\1\u018f\10\15"+ + "\1\u0190\4\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\11\15\1\u0191\34\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\1\15\1\u0192\44\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\5\15\1\u0193\40\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\1\15"+ + "\1\u0194\44\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\12\15\1\u0195\33\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\32\15\1\u0196\13\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\6\15\1\u0197\37\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\2\15"+ + "\1\u0198\43\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\33\15\1\u0199\12\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\u019a\43\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\16\15\1\u019b\27\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\17\15"+ + "\1\u019c\26\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\7\15\1\u019d\36\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\3\15\1\u019e\42\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\1\15\1\u019f\44\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\3\15"+ + "\1\u01a0\42\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\1\15\1\u01a1\44\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\u01a2\43\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\15\15\1\u01a3\30\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\3\15"+ + "\1\u01a4\42\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\13\15\1\u01a5\32\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\11\15\1\u01a6\34\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\12\15\1\u01a7\33\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\23\15"+ + "\1\u01a8\22\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\2\15\1\u01a9\43\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\23\15\1\u01aa\22\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\16\15\1\u01ab\27\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\11\15"+ + "\1\u01ac\34\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\11\15\1\u01ad\34\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\37\15\1\u01ae\2\15\1\u01af\3\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\2\15"+ + "\1\u01b0\43\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\32\15\1\u01b1\13\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\u01b2\43\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\11\15\1\u01b3\34\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\3\15"+ + "\1\u01b4\42\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\3\15\1\u01b5\42\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\12\15\1\u01b6\33\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\1\15\1\u01b7\44\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\1\u01b8"+ + "\45\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\14\15\1\u01b9\31\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\10\15\1\u01ba\35\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\1\15\1\u01bb\44\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\12\15\1\u01bc"+ + "\33\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\2\15\1\u01bd\43\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\30\15\1\u01be\15\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\10\15\1\u01bf\35\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\2\15\1\u01c0"+ + "\43\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\10\15\1\u01c1\35\15\23\0\1\15\1\u011f\2\0\11\u011f"+ + "\1\u0175\1\u011f\1\u0175\105\u011f\6\0\1\u01c2\12\0\2\u01c2"+ + "\2\0\1\u01c2\4\0\46\u01c2\32\0\1\u01c3\12\0\2\u01c3"+ + "\2\0\1\u01c3\4\0\46\u01c3\32\0\1\u017c\5\0\1\u0179"+ + "\1\u017a\3\0\2\u017c\2\0\1\u017c\4\0\46\u017c\40\0"+ + "\1\u017a\1\0\1\u01c4\113\0\1\u01c5\1\u017b\3\0\1\114"+ + "\1\u0123\2\0\2\u017b\2\u01c5\2\u017b\1\u01c5\4\0\46\u01c5"+ + "\23\0\1\u017b\6\0\2\u017c\1\u01c6\3\0\1\u01c7\1\u017a"+ + "\1\0\7\u017c\4\0\46\u017c\23\0\1\u017c\6\0\1\u017f"+ + "\1\u017d\3\0\1\307\1\u0127\1\u0128\1\0\2\u017d\2\u017f"+ + "\2\u017d\1\u017f\4\0\46\u017f\23\0\1\u017d\1\u017e\2\0"+ + "\13\u017e\1\u01c8\105\u017e\6\0\2\u017f\1\u0180\2\0\1\307"+ + "\1\u0127\1\u0128\1\0\7\u017f\4\0\46\u017f\23\0\1\u017f"+ + "\6\0\1\u01c9\12\0\2\u01c9\2\0\1\u01c9\4\0\46\u01c9"+ + "\40\0\1\u0181\1\u0128\125\0\2\u01ca\1\0\4\u01ca\4\0"+ + "\1\u01ca\1\0\2\u01ca\1\0\1\u01ca\6\0\2\u01ca\12\0"+ + "\1\u01ca\1\0\1\u01ca\5\0\2\u01ca\41\0\1\130\5\0"+ + "\1\u01cb\1\141\2\0\2\u01cb\1\145\6\0\1\145\75\0"+ + "\2\15\7\0\7\15\4\0\10\15\1\u01cc\35\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\2\15\1\u01cd"+ + "\43\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\23\15\1\u01ce\22\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\14\15\1\u01cf\31\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\10\15\1\u01d0\35\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\41\15\1\u01d1"+ + "\4\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\5\15\1\u01d2\40\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\16\15\1\u01d3\27\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\1\15\1\u01d4\44\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\1\15\1\u01d5"+ + "\44\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\20\15\1\u01d6\25\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\12\15\1\u01d7\33\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\10\15\1\u01d8\35\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\1\15\1\u01d9"+ + "\44\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\21\15\1\u01da\24\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\3\15\1\u01db\42\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\11\15\1\u01dc\34\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\2\15\1\u01dd"+ + "\43\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\15\15\1\u01de\30\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\10\15\1\u01df\35\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\10\15\1\u01e0\4\15\1\u01e1"+ + "\30\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\23\15\1\u01e2\22\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\11\15\1\u01e3\34\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\23\15\1\u01e4\22\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\12\15\1\u01e5"+ + "\33\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\14\15\1\u01e6\31\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\16\15\1\u01e7\27\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\2\15\1\u01e8\43\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\5\15\1\u01e9"+ + "\40\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\12\15\1\u01ea\33\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\23\15\1\u01eb\22\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\16\15\1\u01ec\27\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\12\15\1\u01ed"+ + "\33\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\20\15\1\u01ee\25\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\7\15\1\u01ef\36\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\3\15\1\u01f0\42\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\1\15\1\u01f1"+ + "\44\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\5\15\1\u01f2\40\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\30\15\1\u01f3\13\15\1\u01f4\1\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\11\15\1\u01f5"+ + "\34\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\26\15\1\u01f6\17\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\5\15\1\u01f7\40\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\6\15\1\u01f8\37\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\26\15\1\u01f9"+ + "\17\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\16\15\1\u01fa\27\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\23\15\1\u01fb\22\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\1\15\1\u01fc\44\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\10\15\1\u01fd"+ + "\35\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\26\15\1\u01fe\17\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\1\15\1\u01ff\44\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\12\15\1\u0200\33\15\23\0"+ + "\1\15\6\0\2\u01c2\3\0\1\u0177\3\0\7\u01c2\4\0"+ + "\46\u01c2\23\0\1\u01c2\6\0\1\u01c5\1\u01c3\3\0\1\114"+ + "\1\u0179\1\u017a\1\0\2\u01c3\2\u01c5\2\u01c3\1\u01c5\4\0"+ + "\46\u01c5\23\0\1\u01c3\1\u01c4\2\0\13\u01c4\1\u0201\105\u01c4"+ + "\6\0\2\u01c5\1\u01c6\2\0\1\114\1\u0179\1\u017a\1\0"+ + "\7\u01c5\4\0\46\u01c5\23\0\1\u01c5\6\0\1\u0202\12\0"+ + "\2\u0202\2\0\1\u0202\4\0\46\u0202\40\0\1\u01c7\1\u017a"+ + "\106\0\1\u017e\2\0\10\u017e\1\u0203\1\u01c8\1\u017e\1\u01c8"+ + "\105\u017e\6\0\2\u01c9\4\0\1\u0181\1\u0128\1\0\7\u01c9"+ + "\4\0\46\u01c9\23\0\1\u01c9\17\0\2\u0204\1\0\4\u0204"+ + "\4\0\1\u0204\1\0\2\u0204\1\0\1\u0204\6\0\2\u0204"+ + "\12\0\1\u0204\1\0\1\u0204\5\0\2\u0204\41\0\1\130"+ + "\5\0\1\u0205\1\141\2\0\2\u0205\1\145\6\0\1\145"+ + "\75\0\2\15\7\0\7\15\4\0\37\15\1\u0206\6\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\6\15"+ + "\1\u0207\37\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\13\15\1\u0208\32\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\1\15\1\u0209\44\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\16\15\1\u020a\27\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\3\15"+ + "\1\u020b\42\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\14\15\1\u020c\31\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\u020d\43\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\3\15\1\u020e\42\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\3\15"+ + "\1\u020f\42\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\1\15\1\u0210\44\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\43\15\1\u0211\2\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\34\15\1\u0212\11\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\5\15"+ + "\1\u0213\40\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\3\15\1\u0214\42\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\3\15\1\u0215\42\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\2\15\1\u0216\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\2\15"+ + "\1\u0217\43\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\10\15\1\u0218\35\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\37\15\1\u0219\6\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\11\15\1\u021a\34\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\3\15"+ + "\1\u021b\42\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\5\15\1\u021c\40\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\3\15\1\u021d\42\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\22\15\1\u021e\23\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\7\15"+ + "\1\u021f\36\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\24\15\1\u0220\21\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\1\15\1\u0221\44\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\3\15\1\u0222\42\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\11\15"+ + "\1\u0223\34\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\6\15\1\u0224\37\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\13\15\1\u0225\32\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\2\15\1\u0226\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\2\15"+ + "\1\u0227\43\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\11\15\1\u0228\34\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\11\15\1\u0229\34\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\2\15\1\u022a\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\6\15"+ + "\1\u022b\37\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\14\15\1\u022c\31\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\11\15\1\u022d\34\15\23\0\1\15"+ + "\1\u01c4\2\0\10\u01c4\1\u022e\1\u0201\1\u01c4\1\u0201\105\u01c4"+ + "\6\0\2\u0202\4\0\1\u01c7\1\u017a\1\0\7\u0202\4\0"+ + "\46\u0202\23\0\1\u0202\17\0\2\u022f\1\0\4\u022f\4\0"+ + "\1\u022f\1\0\2\u022f\1\0\1\u022f\6\0\2\u022f\12\0"+ + "\1\u022f\1\0\1\u022f\5\0\2\u022f\41\0\1\130\5\0"+ + "\1\u0230\1\141\2\0\2\u0230\1\145\6\0\1\145\75\0"+ + "\2\15\7\0\7\15\4\0\7\15\1\u0231\36\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\2\15\1\u0232"+ + "\43\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\3\15\1\u0233\42\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\31\15\1\u0234\14\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\26\15\1\u0235\17\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\2\15\1\u0236"+ + "\43\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\23\15\1\u0237\22\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\5\15\1\u0238\40\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\26\15\1\u0239\17\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\3\15\1\u023a"+ + "\42\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\12\15\1\u023b\33\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\2\15\1\u023c\43\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\16\15\1\u023d\27\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\5\15\1\u023e"+ + "\40\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\36\15\1\u023f\7\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\10\15\1\u0240\35\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\2\15\1\u0241\43\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\7\15\1\u0242"+ + "\36\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\11\15\1\u0243\34\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\10\15\1\u0244\35\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\10\15\1\u0245\35\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\12\15\1\u0246"+ + "\33\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\12\15\1\u0247\33\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\23\15\1\u0248\22\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\2\15\1\u0249\43\15\23\0"+ + "\1\15\6\0\2\15\7\0\3\15\1\u024a\3\15\4\0"+ + "\46\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\23\15\1\u024b\22\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\1\15\1\u024c\44\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\20\15\1\u024d\25\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\1\15\1\u024e"+ + "\44\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\12\15\1\u024f\33\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\31\15\1\u0250\11\15\1\u0251\2\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\22\15\1\u0252"+ + "\23\15\23\0\1\15\17\0\2\u0253\1\0\4\u0253\4\0"+ + "\1\u0253\1\0\2\u0253\1\0\1\u0253\6\0\2\u0253\12\0"+ + "\1\u0253\1\0\1\u0253\5\0\2\u0253\41\0\1\130\5\0"+ + "\1\u0254\1\141\2\0\2\u0254\1\145\6\0\1\145\75\0"+ + "\2\15\7\0\7\15\4\0\24\15\1\u0255\21\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\26\15\1\u0256"+ + "\17\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\7\15\1\u0257\36\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\2\15\1\u0258\43\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\2\15\1\u0259\43\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\2\15\1\u025a"+ + "\43\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\11\15\1\u025b\34\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\26\15\1\u025c\17\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\7\15\1\u025d\36\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\2\15\1\u025e"+ + "\43\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\7\15\1\u025f\36\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\11\15\1\u0260\34\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\14\15\1\u0261\31\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\24\15\1\u0262"+ + "\21\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\2\15\1\u0263\43\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\14\15\1\u0264\31\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\2\15\1\u0265\43\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\3\15\1\u0266"+ + "\42\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\2\15\1\u0267\43\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\14\15\1\u0268\31\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\12\15\1\u0269\33\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\12\15\1\u026a"+ + "\33\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\7\15\1\u026b\36\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\11\15\1\u026c\34\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\16\15\1\u026d\27\15\23\0"+ + "\1\15\17\0\2\u026e\1\0\4\u026e\4\0\1\u026e\1\0"+ + "\2\u026e\1\0\1\u026e\6\0\2\u026e\12\0\1\u026e\1\0"+ + "\1\u026e\5\0\2\u026e\41\0\1\130\5\0\1\u026f\1\141"+ + "\2\0\2\u026f\1\145\6\0\1\145\75\0\2\15\7\0"+ + "\7\15\4\0\12\15\1\u0270\33\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\13\15\1\u0271\32\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\11\15\1\u0272"+ + "\34\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\20\15\1\u0273\25\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\20\15\1\u0274\25\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\15\15\1\u0275\30\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\3\15\1\u0276"+ + "\42\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\6\15\1\u0277\37\15\23\0\1\15\6\0\2\15\7\0"+ + "\7\15\4\0\12\15\1\u0278\33\15\23\0\1\15\6\0"+ + "\2\15\7\0\7\15\4\0\37\15\1\u0279\6\15\23\0"+ + "\1\15\6\0\2\15\7\0\7\15\4\0\44\15\1\u027a"+ + "\1\15\23\0\1\15\6\0\2\15\7\0\7\15\4\0"+ + "\1\u027b\45\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\11\15\1\u027c\34\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\10\15\1\u027d\35\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\10\15\1\u027e\35\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\7\15"+ + "\1\u027f\36\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\3\15\1\u0280\42\15\23\0\1\15\11\0\1\130"+ + "\5\0\1\u0281\1\141\2\0\2\u0281\1\145\6\0\1\145"+ + "\75\0\2\15\7\0\7\15\4\0\2\15\1\u0282\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\10\15"+ + "\1\u0283\35\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\35\15\1\u0284\10\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\14\15\1\u0285\31\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\2\15\1\u0286\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\7\15"+ + "\1\u0287\36\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\13\15\1\u0288\32\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\16\15\1\u0289\27\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\23\15\1\u028a\22\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\26\15"+ + "\1\u028b\17\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\21\15\1\u028c\24\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\22\15\1\u028d\23\15\23\0\1\15"+ + "\11\0\1\130\5\0\1\u028e\1\141\2\0\2\u028e\1\145"+ + "\6\0\1\145\75\0\2\15\7\0\7\15\4\0\40\15"+ + "\1\u028f\5\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\14\15\1\u0290\31\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\13\15\1\u0291\32\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\2\15\1\u0292\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\44\15"+ + "\1\u0293\1\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\24\15\1\u0294\21\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\23\15\1\u0295\22\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\2\15\1\u0296\43\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\3\15"+ + "\1\u0297\42\15\23\0\1\15\11\0\1\130\5\0\1\u0298"+ + "\1\141\2\0\2\u0298\1\145\6\0\1\145\75\0\2\15"+ + "\7\0\7\15\4\0\16\15\1\u0299\27\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\6\15\1\u029a\37\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\3\15"+ + "\1\u029b\42\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\14\15\1\u029c\31\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\13\15\1\u029d\32\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\12\15\1\u029e\33\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\6\15"+ + "\1\u029f\37\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\21\15\1\u02a0\24\15\23\0\1\15\11\0\1\130"+ + "\5\0\1\u02a1\1\141\2\0\2\u02a1\1\145\6\0\1\145"+ + "\75\0\2\15\7\0\7\15\4\0\12\15\1\u02a2\33\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\16\15"+ + "\1\u02a3\27\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\23\15\1\u02a4\22\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\2\15\1\u02a5\43\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\44\15\1\u02a6\1\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\44\15"+ + "\1\u02a7\1\15\23\0\1\15\11\0\1\130\5\0\1\u02a8"+ + "\1\141\2\0\2\u02a8\1\145\6\0\1\145\75\0\2\15"+ + "\7\0\7\15\4\0\21\15\1\u02a9\24\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\12\15\1\u02aa\33\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\40\15"+ + "\1\u02ab\5\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\13\15\1\u02ac\32\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\13\15\1\u02ad\32\15\23\0\1\15"+ + "\11\0\1\130\5\0\1\u02ae\1\141\2\0\2\u02ae\1\145"+ + "\6\0\1\145\75\0\2\15\7\0\7\15\4\0\11\15"+ + "\1\u02af\34\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\16\15\1\u02b0\27\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\23\15\1\u02b1\22\15\23\0\1\15"+ + "\6\0\2\15\7\0\7\15\4\0\23\15\1\u02b2\22\15"+ + "\23\0\1\15\6\0\2\15\7\0\7\15\4\0\22\15"+ + "\1\u02b3\23\15\23\0\1\15\6\0\2\15\7\0\7\15"+ + "\4\0\12\15\1\u02b4\33\15\23\0\1\15\6\0\2\15"+ + "\7\0\7\15\4\0\21\15\1\u02b5\24\15\23\0\1\15"; - private static int[] zzUnpackRowMap() { - int[] result = new int[687]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + private static int [] zzUnpackTrans() { + int [] result = new int[45360]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\1\11\1\1\1\11\11\1\1\11\3\1\2\11"+ + "\26\1\10\11\1\1\2\11\5\1\1\11\2\1\2\11"+ + "\3\1\1\11\2\1\1\11\1\1\1\11\3\1\1\11"+ + "\1\1\1\0\3\11\2\0\1\1\1\0\1\1\2\11"+ + "\1\1\1\11\3\1\1\0\2\1\1\0\2\11\75\1"+ + "\12\11\2\1\7\11\6\0\1\11\1\1\1\11\2\0"+ + "\1\11\3\0\1\11\1\0\1\11\1\1\2\11\4\1"+ + "\1\0\112\1\2\11\7\0\1\11\5\0\1\11\112\1"+ + "\1\0\1\11\12\0\100\1\10\0\67\1\2\0\153\1"+ + "\1\11\107\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[693]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); + /** the input device */ + private java.io.Reader zzReader; - private static final String ZZ_TRANS_PACKED_0 - = "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\6" - + "\1\15\1\16\1\17\1\20\1\11\1\21\1\22\1\23" - + "\1\24\2\14\2\24\1\14\1\25\1\6\1\26\1\27" - + "\1\30\1\31\1\32\1\14\1\33\1\34\1\35\1\36" - + "\1\37\1\40\1\41\1\42\1\43\1\44\1\45\1\14" - + "\1\46\1\14\1\47\1\50\1\14\1\51\2\14\1\52" - + "\12\14\1\53\1\54\1\55\1\56\1\57\1\60\1\61" - + "\1\62\1\63\1\64\1\65\1\66\1\67\1\70\1\71" - + "\1\72\1\73\1\74\1\75\1\0\1\11\1\0\1\76" - + "\1\77\1\100\13\76\1\101\10\76\1\102\73\76\1\103" - + "\1\77\1\100\24\103\1\102\1\101\72\103\1\6\1\104" - + "\1\105\1\106\2\6\1\107\4\6\1\110\1\111\4\6" - + "\2\107\2\6\1\107\3\6\46\107\21\6\1\0\1\106" - + "\1\0\1\112\1\104\1\105\7\112\1\113\105\112\130\0" - + "\1\10\123\0\1\11\10\0\1\11\104\0\1\11\5\0" - + "\1\114\1\115\7\0\1\116\122\0\1\117\113\0\2\14" - + "\7\0\7\14\3\0\46\14\23\0\1\14\10\0\1\120" - + "\123\0\1\121\1\122\4\0\2\123\2\0\2\123\104\0" - + "\1\124\3\0\1\125\1\126\1\0\1\127\3\0\2\124" - + "\2\0\1\124\3\0\46\124\37\0\1\130\1\0\1\131" - + "\122\0\1\132\116\0\1\123\5\0\1\133\1\134\1\135" - + "\1\0\1\136\1\137\1\140\5\0\1\140\22\0\1\135" - + "\55\0\1\123\5\0\2\24\2\0\2\24\1\140\5\0" - + "\1\140\104\0\1\141\10\0\1\142\102\0\2\14\7\0" - + "\7\14\3\0\1\14\1\143\44\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\144\1\145\42\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14" - + "\1\146\12\14\1\147\5\14\1\150\1\151\20\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\6\14\1\152" - + "\1\14\1\153\35\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\3\14\1\154\3\14\1\155\6\14\1\156" - + "\1\14\1\157\25\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\2\14\1\160\6\14\1\161\1\14\1\162" - + "\3\14\1\163\26\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\1\14\1\164\22\14\1\165\21\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\166" - + "\1\167\7\14\1\170\32\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\1\14\1\171\1\172\1\173\3\14" - + "\1\174\10\14\1\175\1\14\1\176\23\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\6\14\1\177\1\14" - + "\1\200\4\14\1\201\5\14\1\202\22\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\6\14\1\203\1\14" - + "\1\204\35\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\2\14\1\205\4\14\1\206\3\14\1\207\6\14" - + "\1\210\23\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\3\14\1\211\2\14\1\212\1\213\2\14\1\214" - + "\1\215\32\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\2\14\1\216\4\14\1\217\36\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\12\14\1\220\5\14" - + "\1\221\25\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\1\14\1\222\1\14\1\223\7\14\1\224\2\14" - + "\1\225\27\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\1\226\45\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\3\14\1\227\3\14\1\230\36\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\231" - + "\4\14\1\232\36\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\11\14\1\233\34\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\3\14\1\234\7\14\1\235" - + "\32\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\10\14\1\236\35\14\23\0\1\14\15\0\1\237\122\0" - + "\1\240\74\0\1\241\25\0\1\242\75\0\1\243\24\0" - + "\1\244\76\0\1\245\23\0\1\246\122\0\1\247\105\0" - + "\1\76\2\0\13\76\1\0\10\76\1\0\73\76\2\0" - + "\1\100\120\0\1\250\2\0\13\250\1\251\1\252\3\250" - + "\1\252\1\253\2\250\1\254\1\255\1\256\1\257\6\250" - + "\1\260\1\261\3\250\1\262\51\250\3\0\1\103\2\0" - + "\24\103\2\0\72\103\2\0\1\105\123\0\1\106\10\0" - + "\1\106\104\0\1\106\7\0\2\263\1\264\3\0\1\265" - + "\1\266\1\0\7\263\3\0\46\263\23\0\1\263\3\0" - + "\1\106\2\0\1\263\5\0\1\111\4\0\2\263\2\0" - + "\1\263\3\0\46\263\22\0\1\106\5\0\1\267\1\0" - + "\1\270\12\0\2\270\2\0\1\270\3\0\46\270\24\0" - + "\1\114\1\271\1\272\120\114\5\273\1\274\115\273\11\0" - + "\1\275\117\0\1\276\12\0\2\276\2\0\1\276\3\0" - + "\46\276\43\0\2\123\2\0\2\123\1\140\5\0\1\140" - + "\75\0\1\277\1\124\1\300\2\0\1\301\1\302\2\0" - + "\2\124\2\277\2\124\1\277\3\0\46\277\23\0\1\124" - + "\15\0\1\303\120\0\1\304\1\0\1\305\122\0\1\306" - + "\116\0\1\123\5\0\1\133\1\134\2\0\1\136\1\137" - + "\1\140\5\0\1\140\100\0\1\123\5\0\2\134\2\0" - + "\2\134\1\140\5\0\1\140\106\0\1\307\1\310\1\0" - + "\4\310\3\0\1\310\1\0\2\310\1\0\1\310\6\0" - + "\2\310\12\0\1\310\1\0\1\310\5\0\2\310\41\0" - + "\1\123\5\0\1\137\1\134\2\0\2\137\1\140\5\0" - + "\1\140\100\0\1\123\5\0\1\311\1\134\2\0\2\311" - + "\1\140\5\0\1\140\106\0\2\312\2\0\2\312\1\0" - + "\1\313\65\0\1\313\14\0\2\14\7\0\7\14\3\0" - + "\2\14\1\314\43\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\11\14\1\315\11\14\1\316\22\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\10\14\1\317" - + "\35\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\5\14\1\320\40\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\6\14\1\321\37\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\3\14\1\322\42\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\11\14\1\323" - + "\34\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\14\14\1\324\31\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\6\14\1\325\2\14\1\326\4\14\1\327" - + "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\10\14\1\330\35\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\3\14\1\331\42\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\1\14\1\332\44\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\11\14\1\333" - + "\34\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\3\14\1\334\3\14\1\335\36\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\1\336\20\14\1\337\24\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\12\14" - + "\1\340\33\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\14\14\1\341\31\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\2\14\1\342\43\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\17\14\1\343\5\14" - + "\1\344\20\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\23\14\1\345\22\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\16\14\1\346\27\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\3\14\1\347\7\14" - + "\1\350\6\14\1\351\23\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\16\14\1\352\27\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\1\14\1\353\44\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\26\14" - + "\1\354\17\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\1\14\1\355\10\14\1\356\33\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\21\14\1\357\24\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14" - + "\1\360\2\14\1\361\34\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\32\14\1\362\13\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\21\14\1\363\24\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" - + "\1\364\43\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\14\14\1\365\1\14\1\366\27\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\15\14\1\367\1\370" - + "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\21\14\1\371\24\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\10\14\1\372\35\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\16\14\1\373\27\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\374" - + "\40\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\1\14\1\375\44\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\10\14\1\376\35\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\10\14\1\377\35\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\10\14\1\u0100" - + "\35\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\3\14\1\u0101\42\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\11\14\1\u0102\34\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\12\14\1\u0103\33\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u0104" - + "\4\14\1\u0105\2\14\1\u0106\33\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\5\14\1\u0107\40\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\1\u0108\45\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14" - + "\1\u0109\42\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\5\14\1\u010a\1\u010b\1\u010c\6\14\1\u010d\27\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\1\14" - + "\1\u010e\44\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u010f\33\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\11\14\1\u0110\34\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\11\14\1\u0111\34\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\1\14" - + "\1\u0112\44\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\44\14\1\u0113\1\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\23\14\1\u0114\22\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\15\14\1\u0115\30\14" - + "\23\0\1\14\15\0\1\u0116\124\0\1\253\3\0\2\253" - + "\115\0\1\u0117\3\0\2\u0117\104\0\1\u0118\12\0\2\u0118" - + "\2\0\1\u0118\3\0\46\u0118\40\0\1\265\1\266\121\0" - + "\1\266\1\0\1\u0119\112\0\1\u011a\12\0\2\u011a\2\0" - + "\1\u011a\3\0\46\u011a\32\0\1\u011b\1\270\1\u011c\2\0" - + "\1\112\1\u011d\2\0\2\270\2\u011b\2\270\1\u011b\3\0" - + "\46\u011b\23\0\1\270\2\0\1\272\120\0\5\273\1\u011e" - + "\115\273\4\0\1\272\1\274\123\0\2\276\3\0\1\u011f" - + "\3\0\7\276\3\0\46\276\23\0\1\276\6\0\2\277" - + "\1\u0120\2\0\1\301\1\u0121\1\u0122\1\0\7\277\3\0" - + "\46\277\23\0\1\277\6\0\1\u0123\12\0\2\u0123\2\0" - + "\1\u0123\3\0\46\u0123\32\0\1\u0124\5\0\1\302\4\0" - + "\2\u0124\2\0\1\u0124\3\0\46\u0124\41\0\1\u0125\124\0" - + "\2\u0126\1\0\4\u0126\3\0\1\u0126\1\0\2\u0126\1\0" - + "\1\u0126\6\0\2\u0126\12\0\1\u0126\1\0\1\u0126\5\0" - + "\2\u0126\41\0\1\123\5\0\1\u0127\1\134\2\0\2\u0127" - + "\1\140\5\0\1\140\106\0\2\312\2\0\2\312\104\0" - + "\2\14\7\0\7\14\3\0\3\14\1\u0128\42\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\13\14\1\u0129" - + "\32\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\7\14\1\u012a\36\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\14\14\1\u012b\31\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\20\14\1\u012c\25\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u012d" - + "\43\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\16\14\1\u012e\27\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u012f\43\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u0130\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\u0131" - + "\40\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\16\14\1\u0132\27\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\6\14\1\u0133\2\14\1\u0134\34\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\6\14\1\u0135" - + "\37\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\1\14\1\u0136\7\14\1\u0137\34\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\21\14\1\u0138\24\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\6\14\1\u0139" - + "\37\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\2\14\1\u013a\43\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\11\14\1\u013b\34\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\1\14\1\u013c\44\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\16\14\1\u013d" - + "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\11\14\1\u013e\34\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u013f\43\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\16\14\1\u0140\27\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\u0141" - + "\40\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\2\14\1\u0142\43\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\16\14\1\u0143\27\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\26\14\1\u0144\17\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\26\14\1\u0145" - + "\17\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\7\14\1\u0146\36\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\6\14\1\u0147\37\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u0148\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\11\14\1\u0149" - + "\34\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\2\14\1\u014a\43\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\1\14\1\u014b\44\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\7\14\1\u014c\6\14\1\u014d" - + "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\2\14\1\u014e\43\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\7\14\1\u014f\36\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\3\14\1\u0150\42\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u0151" - + "\43\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\16\14\1\u0152\27\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\3\14\1\u0153\42\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\6\14\1\u0154\37\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\7\14\1\u0155" - + "\36\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\3\14\1\u0156\42\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\5\14\1\u0157\40\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\26\14\1\u0158\17\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\14\14\1\u0159" - + "\31\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\20\14\1\u015a\25\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\16\14\1\u015b\27\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\24\14\1\u015c\21\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\11\14\1\u015d" - + "\34\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\10\14\1\u015e\13\14\1\u015f\21\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\4\14\1\u0160\41\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\16\14\1\u0161" - + "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\22\14\1\u0162\23\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\20\14\1\u0163\25\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\13\14\1\u0164\32\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\1\14\1\u0165" - + "\44\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\2\14\1\u0166\43\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\14\14\1\u0167\31\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\27\14\1\u0168\3\14\1\u0169" - + "\6\14\1\u016a\3\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\7\14\1\u016b\36\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\12\14\1\u016c\33\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\1\u016d\45\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\12\14" - + "\1\u016e\33\14\23\0\1\14\6\0\2\u0118\4\0\1\265" - + "\1\266\1\0\7\u0118\3\0\46\u0118\23\0\1\u0118\1\u0119" - + "\2\0\13\u0119\1\u016f\104\u0119\6\0\2\u011a\1\u0170\2\0" - + "\1\u0171\3\0\7\u011a\3\0\46\u011a\23\0\1\u011a\6\0" - + "\2\u011b\1\u0172\2\0\1\112\1\u0173\1\u0174\1\0\7\u011b" - + "\3\0\46\u011b\23\0\1\u011b\6\0\1\u0175\12\0\2\u0175" - + "\2\0\1\u0175\3\0\46\u0175\32\0\1\u0176\5\0\1\u011d" - + "\4\0\2\u0176\2\0\1\u0176\3\0\46\u0176\24\0\4\273" - + "\1\272\1\u011e\115\273\6\0\1\u0177\12\0\2\u0177\2\0" - + "\1\u0177\3\0\46\u0177\32\0\1\u0124\5\0\1\u0121\1\u0122" - + "\3\0\2\u0124\2\0\1\u0124\3\0\46\u0124\40\0\1\u0122" - + "\1\0\1\u0178\112\0\1\u0179\1\u0123\3\0\1\301\1\302" - + "\2\0\2\u0123\2\u0179\2\u0123\1\u0179\3\0\46\u0179\23\0" - + "\1\u0123\6\0\2\u0124\1\u017a\3\0\1\u017b\1\u0122\1\0" - + "\7\u0124\3\0\46\u0124\23\0\1\u0124\17\0\2\u017c\1\0" - + "\4\u017c\3\0\1\u017c\1\0\2\u017c\1\0\1\u017c\6\0" - + "\2\u017c\12\0\1\u017c\1\0\1\u017c\5\0\2\u017c\41\0" - + "\1\123\5\0\1\u017d\1\134\2\0\2\u017d\1\140\5\0" - + "\1\140\75\0\2\14\7\0\7\14\3\0\4\14\1\u017e" - + "\41\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\1\14\1\u017f\44\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\24\14\1\u0180\21\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\7\14\1\u0181\36\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\10\14\1\u0182" - + "\35\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\20\14\1\u0183\25\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\11\14\1\u0184\34\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\12\14\1\u0185\33\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\6\14\1\u0186" - + "\37\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\11\14\1\u0187\34\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\12\14\1\u0188\33\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\30\14\1\u0189\10\14\1\u018a" - + "\4\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\11\14\1\u018b\34\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\1\14\1\u018c\44\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\5\14\1\u018d\40\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\1\14\1\u018e" - + "\44\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\12\14\1\u018f\33\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\32\14\1\u0190\13\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\6\14\1\u0191\37\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u0192" - + "\43\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\33\14\1\u0193\12\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u0194\43\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\16\14\1\u0195\27\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\17\14\1\u0196" - + "\26\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\7\14\1\u0197\36\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\3\14\1\u0198\42\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\1\14\1\u0199\44\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\u019a" - + "\42\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\1\14\1\u019b\44\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u019c\43\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\15\14\1\u019d\30\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\u019e" - + "\42\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\13\14\1\u019f\32\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\11\14\1\u01a0\34\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\12\14\1\u01a1\33\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\23\14\1\u01a2" - + "\22\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\2\14\1\u01a3\43\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\23\14\1\u01a4\22\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\16\14\1\u01a5\27\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\11\14\1\u01a6" - + "\34\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\11\14\1\u01a7\34\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\37\14\1\u01a8\2\14\1\u01a9\3\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u01aa" - + "\43\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\32\14\1\u01ab\13\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u01ac\43\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\11\14\1\u01ad\34\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\u01ae" - + "\42\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\3\14\1\u01af\42\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\12\14\1\u01b0\33\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\1\14\1\u01b1\44\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\1\u01b2\45\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\14\14" - + "\1\u01b3\31\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\10\14\1\u01b4\35\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\1\14\1\u01b5\44\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\12\14\1\u01b6\33\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" - + "\1\u01b7\43\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\30\14\1\u01b8\15\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\10\14\1\u01b9\35\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u01ba\43\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\10\14" - + "\1\u01bb\35\14\23\0\1\14\1\u0119\2\0\11\u0119\1\u016f" - + "\1\u0119\1\u016f\104\u0119\6\0\1\u01bc\12\0\2\u01bc\2\0" - + "\1\u01bc\3\0\46\u01bc\32\0\1\u01bd\12\0\2\u01bd\2\0" - + "\1\u01bd\3\0\46\u01bd\32\0\1\u0176\5\0\1\u0173\1\u0174" - + "\3\0\2\u0176\2\0\1\u0176\3\0\46\u0176\40\0\1\u0174" - + "\1\0\1\u01be\112\0\1\u01bf\1\u0175\3\0\1\112\1\u011d" - + "\2\0\2\u0175\2\u01bf\2\u0175\1\u01bf\3\0\46\u01bf\23\0" - + "\1\u0175\6\0\2\u0176\1\u01c0\3\0\1\u01c1\1\u0174\1\0" - + "\7\u0176\3\0\46\u0176\23\0\1\u0176\6\0\1\u0179\1\u0177" - + "\3\0\1\301\1\u0121\1\u0122\1\0\2\u0177\2\u0179\2\u0177" - + "\1\u0179\3\0\46\u0179\23\0\1\u0177\1\u0178\2\0\13\u0178" - + "\1\u01c2\104\u0178\6\0\2\u0179\1\u017a\2\0\1\301\1\u0121" - + "\1\u0122\1\0\7\u0179\3\0\46\u0179\23\0\1\u0179\6\0" - + "\1\u01c3\12\0\2\u01c3\2\0\1\u01c3\3\0\46\u01c3\40\0" - + "\1\u017b\1\u0122\124\0\2\u01c4\1\0\4\u01c4\3\0\1\u01c4" - + "\1\0\2\u01c4\1\0\1\u01c4\6\0\2\u01c4\12\0\1\u01c4" - + "\1\0\1\u01c4\5\0\2\u01c4\41\0\1\123\5\0\1\u01c5" - + "\1\134\2\0\2\u01c5\1\140\5\0\1\140\75\0\2\14" - + "\7\0\7\14\3\0\10\14\1\u01c6\35\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u01c7\43\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\23\14" - + "\1\u01c8\22\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\14\14\1\u01c9\31\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\10\14\1\u01ca\35\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\41\14\1\u01cb\4\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\5\14" - + "\1\u01cc\40\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\16\14\1\u01cd\27\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\1\14\1\u01ce\44\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\1\14\1\u01cf\44\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\20\14" - + "\1\u01d0\25\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u01d1\33\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\10\14\1\u01d2\35\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\1\14\1\u01d3\44\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\21\14" - + "\1\u01d4\24\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\3\14\1\u01d5\42\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\11\14\1\u01d6\34\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u01d7\43\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\15\14" - + "\1\u01d8\30\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\10\14\1\u01d9\35\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\10\14\1\u01da\4\14\1\u01db\30\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\23\14" - + "\1\u01dc\22\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u01dd\34\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\23\14\1\u01de\22\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\12\14\1\u01df\33\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\14\14" - + "\1\u01e0\31\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\16\14\1\u01e1\27\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\2\14\1\u01e2\43\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\5\14\1\u01e3\40\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\12\14" - + "\1\u01e4\33\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\23\14\1\u01e5\22\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\16\14\1\u01e6\27\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\12\14\1\u01e7\33\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\20\14" - + "\1\u01e8\25\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\7\14\1\u01e9\36\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\3\14\1\u01ea\42\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\1\14\1\u01eb\44\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\5\14" - + "\1\u01ec\40\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\30\14\1\u01ed\13\14\1\u01ee\1\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\11\14\1\u01ef\34\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\26\14" - + "\1\u01f0\17\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\5\14\1\u01f1\40\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\6\14\1\u01f2\37\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\26\14\1\u01f3\17\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\16\14" - + "\1\u01f4\27\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\23\14\1\u01f5\22\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\1\14\1\u01f6\44\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\10\14\1\u01f7\35\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\26\14" - + "\1\u01f8\17\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\1\14\1\u01f9\44\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\12\14\1\u01fa\33\14\23\0\1\14" - + "\6\0\2\u01bc\3\0\1\u0171\3\0\7\u01bc\3\0\46\u01bc" - + "\23\0\1\u01bc\6\0\1\u01bf\1\u01bd\3\0\1\112\1\u0173" - + "\1\u0174\1\0\2\u01bd\2\u01bf\2\u01bd\1\u01bf\3\0\46\u01bf" - + "\23\0\1\u01bd\1\u01be\2\0\13\u01be\1\u01fb\104\u01be\6\0" - + "\2\u01bf\1\u01c0\2\0\1\112\1\u0173\1\u0174\1\0\7\u01bf" - + "\3\0\46\u01bf\23\0\1\u01bf\6\0\1\u01fc\12\0\2\u01fc" - + "\2\0\1\u01fc\3\0\46\u01fc\40\0\1\u01c1\1\u0174\105\0" - + "\1\u0178\2\0\10\u0178\1\u01fd\1\u01c2\1\u0178\1\u01c2\104\u0178" - + "\6\0\2\u01c3\4\0\1\u017b\1\u0122\1\0\7\u01c3\3\0" - + "\46\u01c3\23\0\1\u01c3\17\0\2\u01fe\1\0\4\u01fe\3\0" - + "\1\u01fe\1\0\2\u01fe\1\0\1\u01fe\6\0\2\u01fe\12\0" - + "\1\u01fe\1\0\1\u01fe\5\0\2\u01fe\41\0\1\123\5\0" - + "\1\u01ff\1\134\2\0\2\u01ff\1\140\5\0\1\140\75\0" - + "\2\14\7\0\7\14\3\0\37\14\1\u0200\6\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\6\14\1\u0201" - + "\37\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\13\14\1\u0202\32\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\1\14\1\u0203\44\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\16\14\1\u0204\27\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\u0205" - + "\42\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\14\14\1\u0206\31\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u0207\43\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\3\14\1\u0208\42\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\u0209" - + "\42\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\1\14\1\u020a\44\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\43\14\1\u020b\2\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\34\14\1\u020c\11\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\u020d" - + "\40\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\3\14\1\u020e\42\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\3\14\1\u020f\42\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u0210\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u0211" - + "\43\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\10\14\1\u0212\35\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\37\14\1\u0213\6\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\11\14\1\u0214\34\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\u0215" - + "\42\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\5\14\1\u0216\40\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\3\14\1\u0217\42\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\22\14\1\u0218\23\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\7\14\1\u0219" - + "\36\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\24\14\1\u021a\21\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\1\14\1\u021b\44\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\3\14\1\u021c\42\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\11\14\1\u021d" - + "\34\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\6\14\1\u021e\37\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\13\14\1\u021f\32\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u0220\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u0221" - + "\43\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\11\14\1\u0222\34\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\11\14\1\u0223\34\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u0224\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\6\14\1\u0225" - + "\37\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\14\14\1\u0226\31\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\11\14\1\u0227\34\14\23\0\1\14\1\u01be" - + "\2\0\10\u01be\1\u0228\1\u01fb\1\u01be\1\u01fb\104\u01be\6\0" - + "\2\u01fc\4\0\1\u01c1\1\u0174\1\0\7\u01fc\3\0\46\u01fc" - + "\23\0\1\u01fc\17\0\2\u0229\1\0\4\u0229\3\0\1\u0229" - + "\1\0\2\u0229\1\0\1\u0229\6\0\2\u0229\12\0\1\u0229" - + "\1\0\1\u0229\5\0\2\u0229\41\0\1\123\5\0\1\u022a" - + "\1\134\2\0\2\u022a\1\140\5\0\1\140\75\0\2\14" - + "\7\0\7\14\3\0\7\14\1\u022b\36\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u022c\43\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14" - + "\1\u022d\42\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\31\14\1\u022e\14\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\26\14\1\u022f\17\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0230\43\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\23\14" - + "\1\u0231\22\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\5\14\1\u0232\40\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\26\14\1\u0233\17\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\3\14\1\u0234\42\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\12\14" - + "\1\u0235\33\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u0236\43\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\16\14\1\u0237\27\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\5\14\1\u0238\40\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\36\14" - + "\1\u0239\7\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\10\14\1\u023a\35\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\2\14\1\u023b\43\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\7\14\1\u023c\36\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14" - + "\1\u023d\34\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\10\14\1\u023e\35\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\10\14\1\u023f\35\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\12\14\1\u0240\33\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\12\14" - + "\1\u0241\33\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\23\14\1\u0242\22\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\2\14\1\u0243\43\14\23\0\1\14" - + "\6\0\2\14\7\0\3\14\1\u0244\3\14\3\0\46\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\23\14" - + "\1\u0245\22\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\1\14\1\u0246\44\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\20\14\1\u0247\25\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\1\14\1\u0248\44\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\12\14" - + "\1\u0249\33\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\31\14\1\u024a\11\14\1\u024b\2\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\22\14\1\u024c\23\14" - + "\23\0\1\14\17\0\2\u024d\1\0\4\u024d\3\0\1\u024d" - + "\1\0\2\u024d\1\0\1\u024d\6\0\2\u024d\12\0\1\u024d" - + "\1\0\1\u024d\5\0\2\u024d\41\0\1\123\5\0\1\u024e" - + "\1\134\2\0\2\u024e\1\140\5\0\1\140\75\0\2\14" - + "\7\0\7\14\3\0\24\14\1\u024f\21\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\26\14\1\u0250\17\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\7\14" - + "\1\u0251\36\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u0252\43\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\2\14\1\u0253\43\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0254\43\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14" - + "\1\u0255\34\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\26\14\1\u0256\17\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\7\14\1\u0257\36\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0258\43\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\7\14" - + "\1\u0259\36\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u025a\34\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\14\14\1\u025b\31\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\24\14\1\u025c\21\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" - + "\1\u025d\43\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\14\14\1\u025e\31\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\2\14\1\u025f\43\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\3\14\1\u0260\42\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" - + "\1\u0261\43\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\14\14\1\u0262\31\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\12\14\1\u0263\33\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\12\14\1\u0264\33\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\7\14" - + "\1\u0265\36\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u0266\34\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\16\14\1\u0267\27\14\23\0\1\14" - + "\17\0\2\u0268\1\0\4\u0268\3\0\1\u0268\1\0\2\u0268" - + "\1\0\1\u0268\6\0\2\u0268\12\0\1\u0268\1\0\1\u0268" - + "\5\0\2\u0268\41\0\1\123\5\0\1\u0269\1\134\2\0" - + "\2\u0269\1\140\5\0\1\140\75\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u026a\33\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\13\14\1\u026b\32\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\11\14\1\u026c\34\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\20\14" - + "\1\u026d\25\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\20\14\1\u026e\25\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\15\14\1\u026f\30\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\3\14\1\u0270\42\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14" - + "\1\u0271\37\14\23\0\1\14\6\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u0272\33\14\23\0\1\14\6\0\2\14" - + "\7\0\7\14\3\0\37\14\1\u0273\6\14\23\0\1\14" - + "\6\0\2\14\7\0\7\14\3\0\44\14\1\u0274\1\14" - + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\1\u0275" - + "\45\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\11\14\1\u0276\34\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\10\14\1\u0277\35\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\10\14\1\u0278\35\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\7\14\1\u0279" - + "\36\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\3\14\1\u027a\42\14\23\0\1\14\11\0\1\123\5\0" - + "\1\u027b\1\134\2\0\2\u027b\1\140\5\0\1\140\75\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u027c\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\10\14\1\u027d" - + "\35\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\35\14\1\u027e\10\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\14\14\1\u027f\31\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u0280\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\7\14\1\u0281" - + "\36\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\13\14\1\u0282\32\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\16\14\1\u0283\27\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\23\14\1\u0284\22\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\26\14\1\u0285" - + "\17\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\21\14\1\u0286\24\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\22\14\1\u0287\23\14\23\0\1\14\11\0" - + "\1\123\5\0\1\u0288\1\134\2\0\2\u0288\1\140\5\0" - + "\1\140\75\0\2\14\7\0\7\14\3\0\40\14\1\u0289" - + "\5\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\14\14\1\u028a\31\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\13\14\1\u028b\32\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u028c\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\44\14\1\u028d" - + "\1\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\24\14\1\u028e\21\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\23\14\1\u028f\22\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\2\14\1\u0290\43\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\u0291" - + "\42\14\23\0\1\14\11\0\1\123\5\0\1\u0292\1\134" - + "\2\0\2\u0292\1\140\5\0\1\140\75\0\2\14\7\0" - + "\7\14\3\0\16\14\1\u0293\27\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\6\14\1\u0294\37\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\u0295" - + "\42\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\14\14\1\u0296\31\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\13\14\1\u0297\32\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\12\14\1\u0298\33\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\6\14\1\u0299" - + "\37\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\21\14\1\u029a\24\14\23\0\1\14\11\0\1\123\5\0" - + "\1\u029b\1\134\2\0\2\u029b\1\140\5\0\1\140\75\0" - + "\2\14\7\0\7\14\3\0\12\14\1\u029c\33\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\16\14\1\u029d" - + "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\23\14\1\u029e\22\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u029f\43\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\44\14\1\u02a0\1\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\44\14\1\u02a1" - + "\1\14\23\0\1\14\11\0\1\123\5\0\1\u02a2\1\134" - + "\2\0\2\u02a2\1\140\5\0\1\140\75\0\2\14\7\0" - + "\7\14\3\0\21\14\1\u02a3\24\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\12\14\1\u02a4\33\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\40\14\1\u02a5" - + "\5\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\13\14\1\u02a6\32\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\13\14\1\u02a7\32\14\23\0\1\14\11\0" - + "\1\123\5\0\1\u02a8\1\134\2\0\2\u02a8\1\140\5\0" - + "\1\140\75\0\2\14\7\0\7\14\3\0\11\14\1\u02a9" - + "\34\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\16\14\1\u02aa\27\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\23\14\1\u02ab\22\14\23\0\1\14\6\0" - + "\2\14\7\0\7\14\3\0\23\14\1\u02ac\22\14\23\0" - + "\1\14\6\0\2\14\7\0\7\14\3\0\22\14\1\u02ad" - + "\23\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" - + "\12\14\1\u02ae\33\14\23\0\1\14\6\0\2\14\7\0" - + "\7\14\3\0\21\14\1\u02af\24\14\23\0\1\14"; + /** the current state of the DFA */ + private int zzState; - private static int[] zzUnpackTrans() { - int[] result = new int[44571]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - int j = offset; /* index in unpacked array */ + /** the textposition at the last accepting state */ + private int zzMarkedPos; - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /** the current text position in the buffer */ + private int zzCurrentPos; + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; + /** number of newlines encountered up to the start of the matched text */ + private int yyline; - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); + /** the number of characters up to the start of the matched text */ + private int yychar; - private static final String ZZ_ATTRIBUTE_PACKED_0 - = "\5\0\1\11\1\1\1\11\11\1\1\11\3\1\1\11" - + "\26\1\10\11\1\1\2\11\5\1\1\11\2\1\2\11" - + "\3\1\1\11\2\1\1\11\1\1\1\11\2\1\1\0" - + "\3\11\2\0\1\1\1\0\1\1\2\11\1\1\1\11" - + "\3\1\1\0\2\1\1\0\2\11\75\1\12\11\2\1" - + "\7\11\6\0\1\1\1\11\2\0\1\11\3\0\1\11" - + "\1\0\1\11\1\1\2\11\4\1\1\0\112\1\2\11" - + "\7\0\1\11\5\0\1\11\112\1\1\0\1\11\12\0" - + "\100\1\10\0\67\1\2\0\153\1\1\11\107\1"; + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; - private static int[] zzUnpackAttribute() { - int[] result = new int[687]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; - int j = offset; /* index in unpacked array */ + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /* user code: */ - /** - * the input device - */ - private java.io.Reader zzReader; - - /** - * the current state of the DFA - */ - private int zzState; - - /** - * the current lexical state - */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of - * the yytext() string - */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** - * the textposition at the last accepting state - */ - private int zzMarkedPos; - - /** - * the current text position in the buffer - */ - private int zzCurrentPos; - - /** - * startRead marks the beginning of the yytext() string in the buffer - */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from - * input - */ - private int zzEndRead; - - /** - * number of newlines encountered up to the start of the matched text - */ - private int yyline; - - /** - * the number of characters up to the start of the matched text - */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** - * zzAtEOF == true <=> the scanner is at the EOF - */ - private boolean zzAtEOF; - - /** - * denotes if the user-EOF-code has already been executed - */ - private boolean zzEOFDone; - - /* user code: */ StringBuffer string = new StringBuffer(); - private static String xmlTagName = ""; + private static String xmlTagName=""; public int yychar() { return yychar; } - private Stack pushedBack = new Stack<>(); + private Stack pushedBack=new Stack(); public int yyline() { - return yyline + 1; + return yyline+1; } - private List listeners = new ArrayList<>(); + private List listeners=new ArrayList<>(); - public void addListener(LexListener listener) { + public void addListener(LexListener listener){ listeners.add(listener); } - public void removeListener(LexListener listener) { + public void removeListener(LexListener listener){ listeners.remove(listener); } - public void informListenersLex(ParsedSymbol s) { - for (LexListener l : listeners) { + public void informListenersLex(ParsedSymbol s){ + for(LexListener l:listeners){ l.onLex(s); } } - public void informListenersPushBack(ParsedSymbol s) { - for (LexListener l : listeners) { + public void informListenersPushBack(ParsedSymbol s){ + for(LexListener l:listeners){ l.onPushBack(s); } } @@ -1236,1261 +1201,1092 @@ public final class ActionScriptLexer { informListenersPushBack(symb); } ParsedSymbol last; - - public ParsedSymbol lex() throws java.io.IOException, ParseException { - ParsedSymbol ret = null; - if (!pushedBack.isEmpty()) { + public ParsedSymbol lex() throws java.io.IOException, ParseException{ + ParsedSymbol ret=null; + if(!pushedBack.isEmpty()){ ret = last = pushedBack.pop(); - } else { + }else{ ret = last = yylex(); } informListenersLex(ret); return ret; } - /** - * Creates a new scanner There is also a java.io.InputStream version of this - * constructor. - * - * @param in the java.io.Reader to read input from. - */ - public ActionScriptLexer(java.io.Reader in) { - this.zzReader = in; + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptLexer(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ActionScriptLexer(java.io.InputStream in) { + this(new java.io.InputStreamReader + (in, java.nio.charset.Charset.forName("UTF-8"))); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 2276) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; } - /** - * Creates a new scanner. There is also java.io.Reader version of this - * constructor. - * - * @param in the java.io.Inputstream to read input from. - */ - public ActionScriptLexer(java.io.InputStream in) { - this(new java.io.InputStreamReader(in, java.nio.charset.Charset.forName("UTF-8"))); + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; } - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length-zzEndRead); - int j = 0; /* index in unpacked array */ - - while (i < 2272) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do { - map[j++] = value; - } while (--count > 0); - } - return map; + if (numRead > 0) { + zzEndRead+= numRead; + return false; } - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead - zzStartRead); - - /* translate stored positions */ - zzEndRead -= zzStartRead; - zzCurrentPos -= zzStartRead; - zzMarkedPos -= zzStartRead; - zzStartRead = 0; - } - - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos * 2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length - zzEndRead); - - if (numRead > 0) { - zzEndRead += numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0 + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } } - /** - * Closes the input stream. - * - * @throws java.io.IOException - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ + // numRead < 0 + return true; + } - zzEndRead = zzStartRead; /* invalidate buffer */ + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ - if (zzReader != null) { - zzReader.close(); - } + if (zzReader != null) + zzReader.close(); + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Resets the scanner to read from a new input stream. Does not close the - * old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). Lexical - * state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has - * grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) { - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - } + throw new Error(message); + } - /** - * Returns the current lexical state. - * - * @return - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Returns the text matched by the current regular expression. - * - * @return - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + zzMarkedPos -= number; + } - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. A value from 0 to - * yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - /** - * Returns the length of the matched text region. - * - * @return - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException, ParseException { + int zzInput; + int zzAction; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and - * a match-all fallback rule) this method will only be called with things - * that "Can't Possibly Happen". If this method is called, something is - * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error - * fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - throw new Error(message); - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. This number must - * not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) { - zzScanError(ZZ_PUSHBACK_2BIG); - } + while (true) { + zzMarkedPosL = zzMarkedPos; - zzMarkedPos -= number; - } + yychar+= zzMarkedPosL-zzStartRead; - /** - * Resumes scanning until the next regular expression is matched, the end of - * input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - * @throws com.jpexs.decompiler.flash.action.parser.ParseException - */ - public ParsedSymbol yylex() throws java.io.IOException, ParseException { - int zzInput; - int zzAction; + zzAction = -1; - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar += zzMarkedPosL - zzStartRead; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; - - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - - zzForAction: - { - while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = zzBufferL[zzCurrentPosL++]; - } else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) { - break zzForAction; - } - zzState = zzNext; - - zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) { - break zzForAction; - } - } - - } + else { + zzInput = zzBufferL[zzCurrentPosL++]; } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; - // store back cached position - zzMarkedPos = zzMarkedPosL; + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: { - } - case 180: - break; - case 2: { - yyline++; - } - case 181: - break; - case 3: { /*ignore*/ - - } - case 182: - break; - case 4: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); - } - case 183: - break; - case 5: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); - } - case 184: - break; - case 6: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); - } - case 185: - break; - case 7: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); - } - case 186: - break; - case 8: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); - } - case 187: - break; - case 9: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); - } - case 188: - break; - case 10: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); - } - case 189: - break; - case 11: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); - } - case 190: - break; - case 12: { - string.setLength(0); - yybegin(STRING); - } - case 191: - break; - case 13: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong((yytext())))); - } - case 192: - break; - case 14: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); - } - case 193: - break; - case 15: { - string.setLength(0); - yybegin(CHARLITERAL); - } - case 194: - break; - case 16: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); - } - case 195: - break; - case 17: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); - } - case 196: - break; - case 18: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); - } - case 197: - break; - case 19: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); - } - case 198: - break; - case 20: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); - } - case 199: - break; - case 21: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); - } - case 200: - break; - case 22: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); - } - case 201: - break; - case 23: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); - } - case 202: - break; - case 24: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); - } - case 203: - break; - case 25: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); - } - case 204: - break; - case 26: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); - } - case 205: - break; - case 27: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); - } - case 206: - break; - case 28: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); - } - case 207: - break; - case 29: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); - } - case 208: - break; - case 30: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); - } - case 209: - break; - case 31: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); - } - case 210: - break; - case 32: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); - } - case 211: - break; - case 33: { - string.append(yytext()); - } - case 212: - break; - case 34: { - yybegin(YYINITIAL); - yyline++; - } - case 213: - break; - case 35: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); - } - case 214: - break; - case 36: { - string.append(yytext()); - yyline++; - } - case 215: - break; - case 37: { - yybegin(XML); - string.append(yytext()); - } - case 216: - break; - case 38: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); - } - case 217: - break; - case 39: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); - } - case 218: - break; - case 40: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); - } - case 219: - break; - case 41: { - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); - } - case 220: - break; - case 42: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); - } - case 221: - break; - case 43: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); - } - case 222: - break; - case 44: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); - } - case 223: - break; - case 45: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); - } - case 224: - break; - case 46: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); - } - case 225: - break; - case 47: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); - } - case 226: - break; - case 48: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); - } - case 227: - break; - case 49: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); - } - case 228: - break; - case 50: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); - } - case 229: - break; - case 51: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); - } - case 230: - break; - case 52: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FULLOR, yytext()); - } - case 231: - break; - case 53: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); - } - case 232: - break; - case 54: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); - } - case 233: - break; - case 55: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); - } - case 234: - break; - case 56: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); - } - case 235: - break; - case 57: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); - } - case 236: - break; - case 58: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); - } - case 237: - break; - case 59: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); - } - case 238: - break; - case 60: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); - } - case 239: - break; - case 61: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); - } - case 240: - break; - case 62: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); - } - case 241: - break; - case 63: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); - } - case 242: - break; - case 64: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); - } - case 243: - break; - case 65: { - throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 244: - break; - case 66: { - string.append('\"'); - } - case 245: - break; - case 67: { - char val = (char) Integer.parseInt(yytext().substring(1), 8); - string.append(val); - } - case 246: - break; - case 68: { - string.append('\\'); - } - case 247: - break; - case 69: { - string.append('\''); - } - case 248: - break; - case 70: { - string.append('\b'); - } - case 249: - break; - case 71: { - string.append('\r'); - } - case 250: - break; - case 72: { - string.append('\n'); - } - case 251: - break; - case 73: { - string.append('\t'); - } - case 252: - break; - case 74: { - string.append('\f'); - } - case 253: - break; - case 75: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); - } - case 254: - break; - case 76: { - string.setLength(0); - yybegin(XML); - String s = yytext(); - s = s.substring(1, s.length() - 1); - if (s.contains(" ")) { - s = s.substring(0, s.indexOf(' ')); - } - xmlTagName = s; - string.append(yytext()); - } - case 255: - break; - case 77: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); - } - case 256: - break; - case 78: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); - } - case 257: - break; - case 79: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); - } - case 258: - break; - case 80: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); - } - case 259: - break; - case 81: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); - } - case 260: - break; - case 82: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FULLAND, yytext()); - } - case 261: - break; - case 83: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.CHR, yytext()); - } - case 262: - break; - case 84: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); - } - case 263: - break; - case 85: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.ORD, yytext()); - } - case 264: - break; - case 86: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); - } - case 265: - break; - case 87: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); - } - case 266: - break; - case 88: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.INT, yytext()); - } - case 267: - break; - case 89: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); - } - case 268: - break; - case 90: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); - } - case 269: - break; - case 91: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); - } - case 270: - break; - case 92: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); - } - case 271: - break; - case 93: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); - } - case 272: - break; - case 94: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); - } - case 273: - break; - case 95: { - String t = yytext(); - return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, t.substring(2, t.length() - 1)); - } - case 274: - break; - case 96: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); - } - case 275: - break; - case 97: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EACH, yytext()); - } - case 276: - break; - case 98: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); - } - case 277: - break; - case 99: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.EVAL, yytext()); - } - case 278: - break; - case 100: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); - } - case 279: - break; - case 101: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.CALL, yytext()); - } - case 280: - break; - case 102: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STOP, yytext()); - } - case 281: - break; - case 103: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); - } - case 282: - break; - case 104: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); - } - case 283: - break; - case 105: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); - } - case 284: - break; - case 106: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); - } - case 285: - break; - case 107: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.PLAY, yytext()); - } - case 286: - break; - case 108: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); - } - case 287: - break; - case 109: { - string.append(yytext()); - String endtagname = yytext(); - endtagname = endtagname.substring(2, endtagname.length() - 1); - if (endtagname.equals(xmlTagName)) { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML, string.toString()); - } - } - case 288: - break; - case 110: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); - } - case 289: - break; - case 111: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); - } - case 290: - break; - case 112: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); - } - case 291: - break; - case 113: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); - } - case 292: - break; - case 114: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); - } - case 293: - break; - case 115: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.TRACE, yytext()); - } - case 294: - break; - case 116: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); - } - case 295: - break; - case 117: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); - } - case 296: - break; - case 118: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); - } - case 297: - break; - case 119: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.PRINT, yytext()); - } - case 298: - break; - case 120: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.MBCHR, yytext()); - } - case 299: - break; - case 121: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.MBORD, yytext()); - } - case 300: - break; - case 122: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); - } - case 301: - break; - case 123: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.RANDOM, yytext()); - } - case 302: - break; - case 124: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.STATIC, yytext()); - } - case 303: - break; - case 125: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.SUBSTR, yytext()); - } - case 304: - break; - case 126: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); - } - case 305: - break; - case 127: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); - } - case 306: - break; - case 128: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); - } - case 307: - break; - case 129: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); - } - case 308: - break; - case 130: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.LENGTH, yytext()); - } - case 309: - break; - case 131: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); - } - case 310: - break; - case 132: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GETURL, yytext()); - } - case 311: - break; - case 133: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STRING_OP, yytext()); - } - case 312: - break; - case 134: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.NUMBER_OP, yytext()); - } - case 313: - break; - case 135: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); - } - case 314: - break; - case 136: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NEWLINE, yytext()); - } - case 315: - break; - case 137: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); - } - case 316: - break; - case 138: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DYNAMIC, yytext()); - } - case 317: - break; - case 139: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); - } - case 318: - break; - case 140: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); - } - case 319: - break; - case 141: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); - } - case 320: - break; - case 142: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); - } - case 321: - break; - case 143: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STOPDRAG, yytext()); - } - case 322: - break; - case 144: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.OVERRIDE, yytext()); - } - case 323: - break; - case 145: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); - } - case 324: - break; - case 146: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); - } - case 325: - break; - case 147: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.PRINTNUM, yytext()); - } - case 326: - break; - case 148: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.MBLENGTH, yytext()); - } - case 327: - break; - case 149: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GETTIMER, yytext()); - } - case 328: - break; - case 150: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); - } - case 329: - break; - case 151: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STARTDRAG, yytext()); - } - case 330: - break; - case 152: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.NEXTFRAME, yytext()); - } - case 331: - break; - case 153: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NAMESPACE, yytext()); - } - case 332: - break; - case 154: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); - } - case 333: - break; - case 155: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); - } - case 334: - break; - case 156: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.FSCOMMAND, yytext()); - } - case 335: - break; - case 157: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.LOADMOVIE, yytext()); - } - case 336: - break; - case 158: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.PREVFRAME, yytext()); - } - case 337: - break; - case 159: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); - } - case 338: - break; - case 160: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.TELLTARGET, yytext()); - } - case 339: - break; - case 161: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.TARGETPATH, yytext()); - } - case 340: - break; - case 162: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); - } - case 341: - break; - case 163: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); - } - case 342: - break; - case 164: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GETVERSION, yytext()); - } - case 343: - break; - case 165: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.UNLOADMOVIE, yytext()); - } - case 344: - break; - case 166: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.MBSUBSTRING, yytext()); - } - case 345: - break; - case 167: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GOTOANDSTOP, yytext()); - } - case 346: - break; - case 168: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GOTOANDPLAY, yytext()); - } - case 347: - break; - case 169: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.LOADMOVIENUM, yytext()); - } - case 348: - break; - case 170: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STOPALLSOUNDS, yytext()); - } - case 349: - break; - case 171: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IFFRAMELOADED, yytext()); - } - case 350: - break; - case 172: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.LOADVARIABLES, yytext()); - } - case 351: - break; - case 173: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.PRINTASBITMAP, yytext()); - } - case 352: - break; - case 174: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.UNLOADMOVIENUM, yytext()); - } - case 353: - break; - case 175: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.REMOVEMOVIECLIP, yytext()); - } - case 354: - break; - case 176: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.LOADVARIABLESNUM, yytext()); - } - case 355: - break; - case 177: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.PRINTASBITMAPNUM, yytext()); - } - case 356: - break; - case 178: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.TOGGLEHIGHQUALITY, yytext()); - } - case 357: - break; - case 179: { - return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.DUPLICATEMOVIECLIP, yytext()); - } - case 358: - break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null); - } - } else { - zzScanError(ZZ_NO_MATCH); - } - } } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + case 183: break; + case 2: + { yyline++; + } + case 184: break; + case 3: + { /*ignore*/ + } + case 185: break; + case 4: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); + } + case 186: break; + case 5: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); + } + case 187: break; + case 6: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); + } + case 188: break; + case 7: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); + } + case 189: break; + case 8: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); + } + case 190: break; + case 9: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); + } + case 191: break; + case 10: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); + } + case 192: break; + case 11: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); + } + case 193: break; + case 12: + { string.setLength(0); + yybegin(STRING); + } + case 194: break; + case 13: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); + } + case 195: break; + case 14: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); + } + case 196: break; + case 15: + { string.setLength(0); + yybegin(CHARLITERAL); + } + case 197: break; + case 16: + { string.setLength(0); + yybegin(OIDENTIFIER); + } + case 198: break; + case 17: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); + } + case 199: break; + case 18: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); + } + case 200: break; + case 19: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); + } + case 201: break; + case 20: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); + } + case 202: break; + case 21: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); + } + case 203: break; + case 22: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); + } + case 204: break; + case 23: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); + } + case 205: break; + case 24: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); + } + case 206: break; + case 25: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); + } + case 207: break; + case 26: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); + } + case 208: break; + case 27: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); + } + case 209: break; + case 28: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); + } + case 210: break; + case 29: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); + } + case 211: break; + case 30: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); + } + case 212: break; + case 31: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); + } + case 213: break; + case 32: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); + } + case 214: break; + case 33: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); + } + case 215: break; + case 34: + { string.append( yytext() ); + } + case 216: break; + case 35: + { yybegin(YYINITIAL); yyline++; + } + case 217: break; + case 36: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); + } + case 218: break; + case 37: + { string.append( yytext() ); yyline++; + } + case 219: break; + case 38: + { yybegin(XML); string.append( yytext() ); + } + case 220: break; + case 39: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER,string.toString()); + } + case 221: break; + case 40: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); + } + case 222: break; + case 41: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); + } + case 223: break; + case 42: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); + } + case 224: break; + case 43: + { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); + } + case 225: break; + case 44: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); + } + case 226: break; + case 45: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); + } + case 227: break; + case 46: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); + } + case 228: break; + case 47: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); + } + case 229: break; + case 48: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); + } + case 230: break; + case 49: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); + } + case 231: break; + case 50: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); + } + case 232: break; + case 51: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); + } + case 233: break; + case 52: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); + } + case 234: break; + case 53: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); + } + case 235: break; + case 54: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FULLOR,yytext()); + } + case 236: break; + case 55: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); + } + case 237: break; + case 56: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); + } + case 238: break; + case 57: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); + } + case 239: break; + case 58: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); + } + case 240: break; + case 59: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); + } + case 241: break; + case 60: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); + } + case 242: break; + case 61: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); + } + case 243: break; + case 62: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); + } + case 244: break; + case 63: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); + } + case 245: break; + case 64: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); + } + case 246: break; + case 65: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); + } + case 247: break; + case 66: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); + } + case 248: break; + case 67: + { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); + } + case 249: break; + case 68: + { string.append( '\"' ); + } + case 250: break; + case 69: + { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); + } + case 251: break; + case 70: + { string.append( '\\' ); + } + case 252: break; + case 71: + { string.append( '\'' ); + } + case 253: break; + case 72: + { string.append( '\b' ); + } + case 254: break; + case 73: + { string.append( '\r' ); + } + case 255: break; + case 74: + { string.append( '\n' ); + } + case 256: break; + case 75: + { string.append( '\t' ); + } + case 257: break; + case 76: + { string.append( '\f' ); + } + case 258: break; + case 77: + { string.append( '\u00A7' ); + } + case 259: break; + case 78: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); + } + case 260: break; + case 79: + { string.setLength(0); + yybegin(XML); + String s=yytext(); + s=s.substring(1,s.length()-1); + if(s.contains(" ")){ + s=s.substring(0,s.indexOf(" ")); + } + xmlTagName = s; + string.append(yytext()); + } + case 261: break; + case 80: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); + } + case 262: break; + case 81: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); + } + case 263: break; + case 82: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); + } + case 264: break; + case 83: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); + } + case 265: break; + case 84: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); + } + case 266: break; + case 85: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FULLAND,yytext()); + } + case 267: break; + case 86: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.CHR,yytext()); + } + case 268: break; + case 87: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); + } + case 269: break; + case 88: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.ORD,yytext()); + } + case 270: break; + case 89: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); + } + case 271: break; + case 90: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); + } + case 272: break; + case 91: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.INT,yytext()); + } + case 273: break; + case 92: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); + } + case 274: break; + case 93: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); + } + case 275: break; + case 94: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); + } + case 276: break; + case 95: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); + } + case 277: break; + case 96: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); + } + case 278: break; + case 97: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); + } + case 279: break; + case 98: + { String t=yytext(); return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,t.substring(2,t.length()-1)); + } + case 280: break; + case 99: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); + } + case 281: break; + case 100: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); + } + case 282: break; + case 101: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); + } + case 283: break; + case 102: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.EVAL,yytext()); + } + case 284: break; + case 103: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); + } + case 285: break; + case 104: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.CALL,yytext()); + } + case 286: break; + case 105: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOP,yytext()); + } + case 287: break; + case 106: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); + } + case 288: break; + case 107: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); + } + case 289: break; + case 108: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); + } + case 290: break; + case 109: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); + } + case 291: break; + case 110: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PLAY,yytext()); + } + case 292: break; + case 111: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); + } + case 293: break; + case 112: + { string.append( yytext() ); + String endtagname=yytext(); + endtagname=endtagname.substring(2,endtagname.length()-1); + if(endtagname.equals(xmlTagName)){ + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML, string.toString()); + } + } + case 294: break; + case 113: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); + } + case 295: break; + case 114: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); + } + case 296: break; + case 115: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); + } + case 297: break; + case 116: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); + } + case 298: break; + case 117: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); + } + case 299: break; + case 118: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TRACE,yytext()); + } + case 300: break; + case 119: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); + } + case 301: break; + case 120: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); + } + case 302: break; + case 121: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); + } + case 303: break; + case 122: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINT,yytext()); + } + case 304: break; + case 123: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBCHR,yytext()); + } + case 305: break; + case 124: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBORD,yytext()); + } + case 306: break; + case 125: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); + } + case 307: break; + case 126: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.RANDOM,yytext()); + } + case 308: break; + case 127: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); + } + case 309: break; + case 128: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.SUBSTR,yytext()); + } + case 310: break; + case 129: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); + } + case 311: break; + case 130: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); + } + case 312: break; + case 131: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); + } + case 313: break; + case 132: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); + } + case 314: break; + case 133: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LENGTH,yytext()); + } + case 315: break; + case 134: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); + } + case 316: break; + case 135: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETURL,yytext()); + } + case 317: break; + case 136: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STRING_OP,yytext()); + } + case 318: break; + case 137: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.NUMBER_OP,yytext()); + } + case 319: break; + case 138: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); + } + case 320: break; + case 139: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NEWLINE,yytext()); + } + case 321: break; + case 140: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); + } + case 322: break; + case 141: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); + } + case 323: break; + case 142: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); + } + case 324: break; + case 143: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); + } + case 325: break; + case 144: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); + } + case 326: break; + case 145: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); + } + case 327: break; + case 146: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOPDRAG,yytext()); + } + case 328: break; + case 147: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); + } + case 329: break; + case 148: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); + } + case 330: break; + case 149: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); + } + case 331: break; + case 150: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTNUM,yytext()); + } + case 332: break; + case 151: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBLENGTH,yytext()); + } + case 333: break; + case 152: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETTIMER,yytext()); + } + case 334: break; + case 153: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); + } + case 335: break; + case 154: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STARTDRAG,yytext()); + } + case 336: break; + case 155: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.NEXTFRAME,yytext()); + } + case 337: break; + case 156: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); + } + case 338: break; + case 157: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); + } + case 339: break; + case 158: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); + } + case 340: break; + case 159: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.FSCOMMAND,yytext()); + } + case 341: break; + case 160: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADMOVIE,yytext()); + } + case 342: break; + case 161: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PREVFRAME,yytext()); + } + case 343: break; + case 162: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); + } + case 344: break; + case 163: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TELLTARGET,yytext()); + } + case 345: break; + case 164: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TARGETPATH,yytext()); + } + case 346: break; + case 165: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); + } + case 347: break; + case 166: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); + } + case 348: break; + case 167: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETVERSION,yytext()); + } + case 349: break; + case 168: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.UNLOADMOVIE,yytext()); + } + case 350: break; + case 169: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBSUBSTRING,yytext()); + } + case 351: break; + case 170: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GOTOANDSTOP,yytext()); + } + case 352: break; + case 171: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GOTOANDPLAY,yytext()); + } + case 353: break; + case 172: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADMOVIENUM,yytext()); + } + case 354: break; + case 173: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOPALLSOUNDS,yytext()); + } + case 355: break; + case 174: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IFFRAMELOADED,yytext()); + } + case 356: break; + case 175: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADVARIABLES,yytext()); + } + case 357: break; + case 176: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTASBITMAP,yytext()); + } + case 358: break; + case 177: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.UNLOADMOVIENUM,yytext()); + } + case 359: break; + case 178: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.REMOVEMOVIECLIP,yytext()); + } + case 360: break; + case 179: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADVARIABLESNUM,yytext()); + } + case 361: break; + case 180: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTASBITMAPNUM,yytext()); + } + case 362: break; + case 181: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TOGGLEHIGHQUALITY,yytext()); + } + case 363: break; + case 182: + { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.DUPLICATEMOVIECLIP,yytext()); + } + case 364: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex b/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex index 5c04c5b33..a5607f71e 100644 --- a/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex +++ b/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex @@ -1,421 +1,451 @@ -/* - * Copyright (C) 2010-2014 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.action.parser.script; -import com.jpexs.decompiler.flash.action.parser.ParseException; -import java.util.Stack; -import java.util.List; -import java.util.ArrayList; - -%% - -%public -%class ActionScriptLexer -%final -%unicode -%char -%type ParsedSymbol -%throws ParseException - -%{ - - StringBuffer string = new StringBuffer(); - - private static String xmlTagName=""; - - public int yychar() { - return yychar; - } - - private Stack pushedBack=new Stack(); - - public int yyline() { - return yyline+1; - } - private List listeners=new ArrayList<>(); - - public void addListener(LexListener listener){ - listeners.add(listener); - } - - public void removeListener(LexListener listener){ - listeners.remove(listener); - } - - public void informListenersLex(ParsedSymbol s){ - for(LexListener l:listeners){ - l.onLex(s); - } - } - - public void informListenersPushBack(ParsedSymbol s){ - for(LexListener l:listeners){ - l.onPushBack(s); - } - } - - public void pushback(ParsedSymbol symb) { - pushedBack.push(symb); - last = null; - informListenersPushBack(symb); - } - ParsedSymbol last; - public ParsedSymbol lex() throws java.io.IOException, ParseException{ - ParsedSymbol ret=null; - if(!pushedBack.isEmpty()){ - ret = last = pushedBack.pop(); - }else{ - ret = last = yylex(); - } - informListenersLex(ret); - return ret; - } - -%} - -/* main character classes */ -LineTerminator = \r|\n|\r\n -InputCharacter = [^\r\n] - -WhiteSpace = {LineTerminator} | [ \t\f]+ - -/* comments */ -Comment = {TraditionalComment} | {EndOfLineComment} - -TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" -EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? - - - -/* identifiers */ -Identifier = [:jletter:][:jletterdigit:]* - -IdentifierNs = {Identifier} ":" {Identifier} - -TypeNameSpec = ".<" {Identifier} ">" - -/* XML */ -XMLIdentifier = {Identifier} | {IdentifierNs} -XMLAttribute = " "* {XMLIdentifier} " "* "=" " "* \" {InputCharacter}* \" " "* -XMLBeginOneTag = "<" {XMLIdentifier} {XMLAttribute}* ">" -XMLEndTag = "" - -/* integer literals */ -DecIntegerLiteral = 0 | [1-9][0-9]* - -HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} -HexDigit = [0-9a-fA-F] - -OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} -OctDigit = [0-7] - -/* floating point literals */ -DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? - -FLit1 = [0-9]+ \. [0-9]* -FLit2 = \. [0-9]+ -FLit3 = [0-9]+ -Exponent = [eE] [+-]? [0-9]+ - -/* string and character literals */ -StringCharacter = [^\r\n\"\\] -SingleCharacter = [^\r\n\'\\] - -%state STRING, CHARLITERAL, XMLSTARTTAG, XML - -%% - - { - - /* keywords */ - "break" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); } - "case" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); } - "continue" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); } - "default" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); } - "do" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); } - "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } - "else" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); } - "for" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); } - "each" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); } - "in" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); } - "if" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); } - "return" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); } - "super" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); } - "switch" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); } - "throw" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); } - "try" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); } - "catch" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); } - "finally" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); } - "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } - "with" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); } - "dynamic" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); } - "internal" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); } - "override" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); } - "private" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); } - "protected" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); } - "public" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); } - "static" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); } - "class" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); } - "const" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); } - "extends" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); } - "function" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); } - "get" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); } - "implements" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); } - "interface" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); } - "namespace" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); } - "package" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); } - "set" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); } - "var" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); } - "import" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); } - "use" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); } - "false" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); } - "null" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); } - "this" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); } - "true" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); } - "getUrl" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETURL,yytext()); } - "trace" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TRACE,yytext()); } - "gotoAndStop" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GOTOANDSTOP,yytext()); } - "nextFrame" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.NEXTFRAME,yytext()); } - "play" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PLAY,yytext()); } - "prevFrame" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PREVFRAME,yytext()); } - "tellTarget" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TELLTARGET,yytext()); } - "stop" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOP,yytext()); } - "stopAllSounds" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOPALLSOUNDS,yytext()); } - "toggleHighQuality" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TOGGLEHIGHQUALITY,yytext()); } - "ifFrameLoaded" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IFFRAMELOADED,yytext()); } - "ord" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.ORD,yytext()); } - "chr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.CHR,yytext()); } - "duplicateMovieClip" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.DUPLICATEMOVIECLIP,yytext()); } - "stopDrag" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOPDRAG,yytext()); } - "getTimer" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETTIMER,yytext()); } - "loadVariables" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADVARIABLES,yytext()); } - "loadMovie" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADMOVIE,yytext()); } - "gotoAndPlay" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GOTOANDPLAY,yytext()); } - "mbord" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBORD,yytext()); } - "mbchr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBCHR,yytext()); } - "mblength" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBLENGTH,yytext()); } - "mbsubstring" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBSUBSTRING,yytext()); } - "random" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.RANDOM,yytext()); } - "removeMovieClip" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.REMOVEMOVIECLIP,yytext()); } - "startDrag" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STARTDRAG,yytext()); } - "substr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.SUBSTR,yytext()); } - "length" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LENGTH,yytext()); } - "int" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.INT,yytext()); } - "targetPath" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TARGETPATH,yytext()); } - "Number" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.NUMBER_OP,yytext()); } - "String" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STRING_OP,yytext()); } - "eval" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.EVAL,yytext()); } - "undefined" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); } - "newline" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NEWLINE,yytext()); } - "Infinity" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); } - "NaN" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); } - "getVersion" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETVERSION,yytext()); } - "call" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.CALL,yytext()); } - "loadMovieNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADMOVIENUM,yytext()); } - "loadVariablesNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADVARIABLESNUM,yytext()); } - "printAsBitmapNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTASBITMAPNUM,yytext()); } - "printNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTNUM,yytext()); } - "printAsBitmap" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTASBITMAP,yytext()); } - "print" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINT,yytext()); } - "unloadMovie" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.UNLOADMOVIE,yytext()); } - "unloadMovieNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.UNLOADMOVIENUM,yytext()); } - "fscommand" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.FSCOMMAND,yytext()); } - - - /* operators */ - - "(" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); } - ")" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); } - "{" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); } - "}" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); } - "[" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); } - "]" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); } - ";" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); } - "," { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); } - "..." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); } - "." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); } - "=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); } - ">" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); } - "<" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); } - "!" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); } - "~" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); } - "?" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); } - ":" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); } - "===" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); } - "==" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); } - "<=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); } - ">=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); } - "!==" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); } - "!=" | "<>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); } - "&&" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); } - "||" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); } - "++" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); } - "--" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); } - "+" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); } - "-" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); } - "*" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); } - "/" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); } - "&" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); } - "|" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); } - "^" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); } - "%" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); } - "<<" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); } - ">>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); } - ">>>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); } - "+=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); } - "-=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); } - "*=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); } - "/=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); } - "&=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); } - "|=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); } - "^=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); } - "%=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); } - "<<=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); } - ">>=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); } - ">>>=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); } - "as" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); } - "delete" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); } - "instanceof" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); } - "is" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); } - "::" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); } - "new" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); } - "typeof" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); } - "void" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); } - "@" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); } - "and" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FULLAND,yytext()); } - "or" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FULLOR,yytext()); } - - /* string literal */ - \" { - string.setLength(0); - yybegin(STRING); - } - - /* character literal */ - \' { - string.setLength(0); - yybegin(CHARLITERAL); - } - - /* numeric literals */ - - {DecIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); } - - {HexIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); } - - {OctIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); } - - {DoubleLiteral} { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); } - - /* comments */ - {Comment} { /*ignore*/ } - - {LineTerminator} { yyline++;} - /* whitespace */ - {WhiteSpace} { /*ignore*/ } - {TypeNameSpec} { String t=yytext(); return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,t.substring(2,t.length()-1)); } - {XMLBeginOneTag} {string.setLength(0); - yybegin(XML); - String s=yytext(); - s=s.substring(1,s.length()-1); - if(s.contains(" ")){ - s=s.substring(0,s.indexOf(" ")); - } - xmlTagName = s; - string.append(yytext()); - } - /* identifiers */ - {Identifier} { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); } -} - - { - {XMLAttribute} { string.append( yytext() );} - {LineTerminator} { string.append( yytext() ); yyline++;} - {WhiteSpace} { string.append( yytext() ); } - ">" { yybegin(XML); string.append( yytext() );} -} - { - {XMLBeginOneTag} { string.append( yytext() );} - {XMLEndTag} { string.append( yytext() ); - String endtagname=yytext(); - endtagname=endtagname.substring(2,endtagname.length()-1); - if(endtagname.equals(xmlTagName)){ - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML, string.toString()); - } - } - {LineTerminator} { string.append( yytext() ); yyline++;} - .|\n { string.append( yytext() ); } -} - - { - \" { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); - } - - {StringCharacter}+ { string.append( yytext() ); } - - /* escape sequences */ - "\\b" { string.append( '\b' ); } - "\\t" { string.append( '\t' ); } - "\\n" { string.append( '\n' ); } - "\\f" { string.append( '\f' ); } - "\\r" { string.append( '\r' ); } - "\\\"" { string.append( '\"' ); } - "\\'" { string.append( '\'' ); } - "\\\\" { string.append( '\\' ); } - \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); } - - /* escape sequences */ - - \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } - {LineTerminator} { yybegin(YYINITIAL); yyline++;} -} - - { - \' { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); - } - - {SingleCharacter}+ { string.append( yytext() ); } - - /* escape sequences */ -/* escape sequences */ - "\\b" { string.append( '\b' ); } - "\\t" { string.append( '\t' ); } - "\\n" { string.append( '\n' ); } - "\\f" { string.append( '\f' ); } - "\\r" { string.append( '\r' ); } - "\\\"" { string.append( '\"' ); } - "\\'" { string.append( '\'' ); } - "\\\\" { string.append( '\\' ); } - \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); } - - /* escape sequences */ - - \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } - {LineTerminator} { yybegin(YYINITIAL); yyline++;} -} - -/* error fallback */ -.|\n { } -<> { return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); } +/* + * Copyright (C) 2010-2014 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.parser.script; +import com.jpexs.decompiler.flash.action.parser.ParseException; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; + +%% + +%public +%class ActionScriptLexer +%final +%unicode +%char +%type ParsedSymbol +%throws ParseException + +%{ + + StringBuffer string = new StringBuffer(); + + private static String xmlTagName=""; + + public int yychar() { + return yychar; + } + + private Stack pushedBack=new Stack(); + + public int yyline() { + return yyline+1; + } + private List listeners=new ArrayList<>(); + + public void addListener(LexListener listener){ + listeners.add(listener); + } + + public void removeListener(LexListener listener){ + listeners.remove(listener); + } + + public void informListenersLex(ParsedSymbol s){ + for(LexListener l:listeners){ + l.onLex(s); + } + } + + public void informListenersPushBack(ParsedSymbol s){ + for(LexListener l:listeners){ + l.onPushBack(s); + } + } + + public void pushback(ParsedSymbol symb) { + pushedBack.push(symb); + last = null; + informListenersPushBack(symb); + } + ParsedSymbol last; + public ParsedSymbol lex() throws java.io.IOException, ParseException{ + ParsedSymbol ret=null; + if(!pushedBack.isEmpty()){ + ret = last = pushedBack.pop(); + }else{ + ret = last = yylex(); + } + informListenersLex(ret); + return ret; + } + +%} + +/* main character classes */ +LineTerminator = \r|\n|\r\n +InputCharacter = [^\r\n] + +WhiteSpace = {LineTerminator} | [ \t\f]+ + +/* comments */ +Comment = {TraditionalComment} | {EndOfLineComment} + +TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" +EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? + + + +/* identifiers */ +Identifier = [:jletter:][:jletterdigit:]* + +IdentifierNs = {Identifier} ":" {Identifier} + +TypeNameSpec = ".<" {Identifier} ">" + +/* XML */ +XMLIdentifier = {Identifier} | {IdentifierNs} +XMLAttribute = " "* {XMLIdentifier} " "* "=" " "* \" {InputCharacter}* \" " "* +XMLBeginOneTag = "<" {XMLIdentifier} {XMLAttribute}* ">" +XMLEndTag = "" + +/* integer literals */ +DecIntegerLiteral = 0 | [1-9][0-9]* + +HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} +HexDigit = [0-9a-fA-F] + +OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} +OctDigit = [0-7] + +/* floating point literals */ +DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? + +FLit1 = [0-9]+ \. [0-9]* +FLit2 = \. [0-9]+ +FLit3 = [0-9]+ +Exponent = [eE] [+-]? [0-9]+ + +/* string and character literals */ +StringCharacter = [^\r\n\"\\] +SingleCharacter = [^\r\n\'\\] +OIdentifierCharacter = [^\r\n\u00A7\\] + +%state STRING, CHARLITERAL, XMLSTARTTAG, XML, OIDENTIFIER + +%% + + { + + /* keywords */ + "break" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); } + "case" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); } + "continue" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); } + "default" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); } + "do" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); } + "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } + "else" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); } + "for" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); } + "each" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); } + "in" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); } + "if" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); } + "return" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); } + "super" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); } + "switch" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); } + "throw" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); } + "try" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); } + "catch" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); } + "finally" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); } + "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } + "with" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); } + "dynamic" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); } + "internal" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); } + "override" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); } + "private" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); } + "protected" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); } + "public" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); } + "static" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); } + "class" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); } + "const" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); } + "extends" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); } + "function" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); } + "get" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); } + "implements" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); } + "interface" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); } + "namespace" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); } + "package" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); } + "set" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); } + "var" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); } + "import" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); } + "use" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); } + "false" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); } + "null" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); } + "this" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); } + "true" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); } + "getUrl" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETURL,yytext()); } + "trace" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TRACE,yytext()); } + "gotoAndStop" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GOTOANDSTOP,yytext()); } + "nextFrame" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.NEXTFRAME,yytext()); } + "play" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PLAY,yytext()); } + "prevFrame" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PREVFRAME,yytext()); } + "tellTarget" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TELLTARGET,yytext()); } + "stop" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOP,yytext()); } + "stopAllSounds" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOPALLSOUNDS,yytext()); } + "toggleHighQuality" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TOGGLEHIGHQUALITY,yytext()); } + "ifFrameLoaded" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IFFRAMELOADED,yytext()); } + "ord" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.ORD,yytext()); } + "chr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.CHR,yytext()); } + "duplicateMovieClip" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.DUPLICATEMOVIECLIP,yytext()); } + "stopDrag" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOPDRAG,yytext()); } + "getTimer" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETTIMER,yytext()); } + "loadVariables" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADVARIABLES,yytext()); } + "loadMovie" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADMOVIE,yytext()); } + "gotoAndPlay" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GOTOANDPLAY,yytext()); } + "mbord" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBORD,yytext()); } + "mbchr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBCHR,yytext()); } + "mblength" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBLENGTH,yytext()); } + "mbsubstring" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBSUBSTRING,yytext()); } + "random" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.RANDOM,yytext()); } + "removeMovieClip" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.REMOVEMOVIECLIP,yytext()); } + "startDrag" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STARTDRAG,yytext()); } + "substr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.SUBSTR,yytext()); } + "length" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LENGTH,yytext()); } + "int" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.INT,yytext()); } + "targetPath" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TARGETPATH,yytext()); } + "Number" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.NUMBER_OP,yytext()); } + "String" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STRING_OP,yytext()); } + "eval" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.EVAL,yytext()); } + "undefined" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); } + "newline" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NEWLINE,yytext()); } + "Infinity" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); } + "NaN" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); } + "getVersion" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETVERSION,yytext()); } + "call" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.CALL,yytext()); } + "loadMovieNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADMOVIENUM,yytext()); } + "loadVariablesNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADVARIABLESNUM,yytext()); } + "printAsBitmapNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTASBITMAPNUM,yytext()); } + "printNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTNUM,yytext()); } + "printAsBitmap" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINTASBITMAP,yytext()); } + "print" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PRINT,yytext()); } + "unloadMovie" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.UNLOADMOVIE,yytext()); } + "unloadMovieNum" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.UNLOADMOVIENUM,yytext()); } + "fscommand" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.FSCOMMAND,yytext()); } + + + /* operators */ + + "(" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); } + ")" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); } + "{" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); } + "}" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); } + "[" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); } + "]" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); } + ";" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); } + "," { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); } + "..." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); } + "." { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); } + "=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); } + ">" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); } + "<" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); } + "!" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); } + "~" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); } + "?" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); } + ":" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); } + "===" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); } + "==" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); } + "<=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); } + ">=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); } + "!==" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); } + "!=" | "<>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); } + "&&" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); } + "||" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); } + "++" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); } + "--" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); } + "+" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); } + "-" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); } + "*" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); } + "/" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); } + "&" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); } + "|" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); } + "^" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); } + "%" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); } + "<<" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); } + ">>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); } + ">>>" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); } + "+=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); } + "-=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); } + "*=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); } + "/=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); } + "&=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); } + "|=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); } + "^=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); } + "%=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); } + "<<=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); } + ">>=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); } + ">>>=" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); } + "as" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); } + "delete" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); } + "instanceof" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); } + "is" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); } + "::" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); } + "new" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); } + "typeof" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); } + "void" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); } + "@" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); } + "and" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FULLAND,yytext()); } + "or" { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FULLOR,yytext()); } + + /* string literal */ + \" { + string.setLength(0); + yybegin(STRING); + } + "\u00A7" { + string.setLength(0); + yybegin(OIDENTIFIER); + } + + + /* character literal */ + \' { + string.setLength(0); + yybegin(CHARLITERAL); + } + + /* numeric literals */ + + {DecIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); } + + {HexIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); } + + {OctIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); } + + {DoubleLiteral} { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); } + + /* comments */ + {Comment} { /*ignore*/ } + + {LineTerminator} { yyline++;} + /* whitespace */ + {WhiteSpace} { /*ignore*/ } + {TypeNameSpec} { String t=yytext(); return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,t.substring(2,t.length()-1)); } + {XMLBeginOneTag} {string.setLength(0); + yybegin(XML); + String s=yytext(); + s=s.substring(1,s.length()-1); + if(s.contains(" ")){ + s=s.substring(0,s.indexOf(" ")); + } + xmlTagName = s; + string.append(yytext()); + } + /* identifiers */ + {Identifier} { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); } +} + + { + {XMLAttribute} { string.append( yytext() );} + {LineTerminator} { string.append( yytext() ); yyline++;} + {WhiteSpace} { string.append( yytext() ); } + ">" { yybegin(XML); string.append( yytext() );} +} + { + {XMLBeginOneTag} { string.append( yytext() );} + {XMLEndTag} { string.append( yytext() ); + String endtagname=yytext(); + endtagname=endtagname.substring(2,endtagname.length()-1); + if(endtagname.equals(xmlTagName)){ + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML, string.toString()); + } + } + {LineTerminator} { string.append( yytext() ); yyline++;} + .|\n { string.append( yytext() ); } +} + + { + "\u00A7" { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER,string.toString()); + } + + {OIdentifierCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\\u00A7" { string.append( '\u00A7' ); } + "\\r" { string.append( '\r' ); } + "\\\\" { string.append( '\\' ); } + + /* escape sequences */ + + \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + {LineTerminator} { yybegin(YYINITIAL); yyline++;} +} + + { + \" { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); + } + + {StringCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\r" { string.append( '\r' ); } + "\\\"" { string.append( '\"' ); } + "\\'" { string.append( '\'' ); } + "\\\\" { string.append( '\\' ); } + \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); } + + /* escape sequences */ + + \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + {LineTerminator} { yybegin(YYINITIAL); yyline++;} +} + + { + \' { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); + } + + {SingleCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ +/* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\r" { string.append( '\r' ); } + "\\\"" { string.append( '\"' ); } + "\\'" { string.append( '\'' ); } + "\\\\" { string.append( '\\' ); } + \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); } + + /* escape sequences */ + + \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + {LineTerminator} { yybegin(YYINITIAL); yyline++;} +} + +/* error fallback */ +.|\n { } +<> { return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); } diff --git a/src/com/jpexs/decompiler/flash/gui/QuickFindPanel.java b/src/com/jpexs/decompiler/flash/gui/QuickFindPanel.java index 948de4e7a..6795c1767 100644 --- a/src/com/jpexs/decompiler/flash/gui/QuickFindPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/QuickFindPanel.java @@ -44,7 +44,7 @@ import jsyntaxpane.components.Markers; * * @author JPEXS */ -public class QuickFindPanel extends JPanel implements ActionListener, jsyntaxpane.actions.QuickFindHandler { +public class QuickFindPanel extends JPanel implements ActionListener { public JTextField findTextField; public JButton prevButton, nextButton; @@ -163,7 +163,7 @@ public class QuickFindPanel extends JPanel implements ActionListener, jsyntaxpan } } - @Override + public void showQuickFind(final JTextComponent t, DocumentSearchData ds) { dsd = new WeakReference<>(ds); oldCaretPosition = t.getCaretPosition();