From c2aba5fc08f79f311bafae129b9ef1df6793af80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 3 Jan 2016 22:25:54 +0100 Subject: [PATCH] Issue #1118 Loading characters through ImportAssets - show as readonly icon --- .../src/com/jpexs/decompiler/flash/SWF.java | 158 +- .../jpexs/decompiler/flash/UrlResolver.java | 10 + .../avm2/parser/script/ActionScriptLexer.java | 4056 ++++++++--------- .../jpexs/decompiler/flash/action/Stage.java | 2 +- .../flash/tags/DefineEditTextTag.java | 23 +- .../flash/tags/ExportAssetsTag.java | 15 + .../decompiler/flash/tags/SymbolClassTag.java | 15 + .../com/jpexs/decompiler/flash/tags/Tag.java | 15 + .../decompiler/flash/tags/base/ImportTag.java | 3 +- .../flash/tags/base/SymbolClassTypeTag.java | 3 + .../decompiler/flash/timeline/Timeline.java | 3 + .../jpexs/decompiler/flash/gui/FontPanel.java | 3 + src/com/jpexs/decompiler/flash/gui/Main.java | 141 +- .../jpexs/decompiler/flash/gui/MainPanel.java | 24 +- .../jpexs/decompiler/flash/gui/TextPanel.java | 16 +- .../decompiler/flash/gui/graphics/icon16.png | Bin 864 -> 15796 bytes .../decompiler/flash/gui/graphics/icon256.png | Bin 27267 -> 28807 bytes .../decompiler/flash/gui/graphics/icon32.png | Bin 2040 -> 17609 bytes .../decompiler/flash/gui/graphics/icon48.png | Bin 3344 -> 19594 bytes .../flash/gui/locales/MainFrame.properties | 3 + .../decompiler/flash/gui/tagtree/TagTree.java | 18 +- 21 files changed, 2325 insertions(+), 2183 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/UrlResolver.java diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index a45a9bda8..73ba8bb9a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -107,12 +107,14 @@ import com.jpexs.decompiler.flash.tags.base.DrawableTag; import com.jpexs.decompiler.flash.tags.base.Exportable; import com.jpexs.decompiler.flash.tags.base.FontTag; import com.jpexs.decompiler.flash.tags.base.ImageTag; +import com.jpexs.decompiler.flash.tags.base.ImportTag; import com.jpexs.decompiler.flash.tags.base.MorphShapeTag; import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag; import com.jpexs.decompiler.flash.tags.base.RemoveTag; import com.jpexs.decompiler.flash.tags.base.RenderContext; import com.jpexs.decompiler.flash.tags.base.ShapeTag; import com.jpexs.decompiler.flash.tags.base.SoundTag; +import com.jpexs.decompiler.flash.tags.base.SymbolClassTypeTag; import com.jpexs.decompiler.flash.tags.base.TextTag; import com.jpexs.decompiler.flash.tags.enums.ImageFormat; import com.jpexs.decompiler.flash.timeline.AS2Package; @@ -161,6 +163,7 @@ import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -214,6 +217,9 @@ public final class SWF implements SWFContainerItem, Timelined { @Internal public ReadOnlyTagList readOnlyTags; + @Internal + public ReadOnlyTagList readOnlyLocalTags; + public boolean hasEndTag = true; /** @@ -494,6 +500,20 @@ public final class SWF implements SWFContainerItem, Timelined { return exportName; } + public FontTag getFontByClass(String fontClass) { + if (fontClass == null) { + return null; + } + for (Tag t : getTags()) { + if (t instanceof FontTag) { + if (fontClass.equals(((FontTag) t).getClassName())) { + return (FontTag) t; + } + } + } + return null; + } + public FontTag getFont(int fontId) { CharacterTag characterTag = getCharacters().get(fontId); if (characterTag instanceof FontTag) { @@ -593,7 +613,13 @@ public final class SWF implements SWFContainerItem, Timelined { public int getNextCharacterId() { int max = 0; - for (int characterId : getCharacters().keySet()) { + Set ids = new HashSet<>(getCharacters().keySet()); + for (Tag t : tags) { + if (t instanceof ImportTag) { + ids.addAll(((ImportTag) t).getAssets().keySet()); + } + } + for (int characterId : ids) { if (characterId > max) { max = characterId; } @@ -824,7 +850,7 @@ public final class SWF implements SWFContainerItem, Timelined { sos.writeFIXED8(frameRate); sos.writeUI16(frameCount); - sos.writeTags(getTags()); + sos.writeTags(getLocalTags()); if (hasEndTag) { sos.writeUI16(0); } @@ -1066,6 +1092,10 @@ public final class SWF implements SWFContainerItem, Timelined { decompress(is, new NulStream(), true); } + public SWF(InputStream is, String file, String fileTitle, ProgressListener listener, boolean parallelRead, boolean checkOnly, boolean lazy) throws IOException, InterruptedException { + this(is, file, fileTitle, listener, parallelRead, checkOnly, lazy, null); + } + /** * Construct SWF from stream * @@ -1076,10 +1106,11 @@ public final class SWF implements SWFContainerItem, Timelined { * @param parallelRead Use parallel threads? * @param checkOnly Check only file validity * @param lazy + * @param resolver Resolver for imported tags * @throws IOException * @throws java.lang.InterruptedException */ - public SWF(InputStream is, String file, String fileTitle, ProgressListener listener, boolean parallelRead, boolean checkOnly, boolean lazy) throws IOException, InterruptedException { + public SWF(InputStream is, String file, String fileTitle, ProgressListener listener, boolean parallelRead, boolean checkOnly, boolean lazy, UrlResolver resolver) throws IOException, InterruptedException { this.file = file; this.fileTitle = fileTitle; ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -1112,11 +1143,15 @@ public final class SWF implements SWFContainerItem, Timelined { } this.tags = tags; readOnlyTags = null; + readOnlyLocalTags = null; if (!checkOnly) { checkInvalidSprites(); updateCharacters(); assignExportNamesToSymbols(); assignClassesToSymbols(); + if (resolver != null) { + resolveImported(resolver); + } SWFDecompilerPlugin.fireSwfParsed(this); } else { boolean hasNonUnknownTag = false; @@ -1139,6 +1174,94 @@ public final class SWF implements SWFContainerItem, Timelined { getASMs(true); // Add scriptNames to ASMs } + private void resolveImported(UrlResolver resolver) { + for (int p = 0; p < tags.size(); p++) { + Tag t = tags.get(p); + if (t instanceof ImportTag) { + ImportTag importTag = (ImportTag) t; + + SWF iSwf = resolver.resolveUrl(importTag.getUrl()); + if (iSwf != null) { + Map exportedMap1 = new HashMap<>(); + Map classesMap1 = new HashMap<>(); + + for (Tag t2 : iSwf.tags) { + if (t2 instanceof ExportAssetsTag) { + ExportAssetsTag sc = (ExportAssetsTag) t2; + Map m2 = sc.getTagToNameMap(); + for (int key : m2.keySet()) { + if (!exportedMap1.containsKey(key)) { + exportedMap1.put(key, m2.get(key)); + } + } + } + if (t2 instanceof SymbolClassTag) { + SymbolClassTag sc = (SymbolClassTag) t2; + Map m2 = sc.getTagToNameMap(); + for (int key : m2.keySet()) { + if (!classesMap1.containsKey(key)) { + classesMap1.put(key, m2.get(key)); + } + } + } + } + Map exportedMap2 = new HashMap<>(); + for (int k : exportedMap1.keySet()) { + exportedMap2.put(exportedMap1.get(k), k); + } + + Map classesMap2 = new HashMap<>(); + for (int k : classesMap1.keySet()) { + classesMap2.put(classesMap1.get(k), k); + } + + Map importedMap1 = importTag.getAssets(); + Map importedMap2 = new HashMap<>(); + for (int k : importedMap1.keySet()) { + importedMap2.put(importedMap1.get(k), k); + } + + int pos = 0; + for (String key : importedMap2.keySet()) { + if (!exportedMap2.containsKey(key)) { + continue; //? + } + int exportedId = exportedMap2.get(key); + int importedId = importedMap2.get(key); + for (Tag cht : iSwf.tags) { + if ((cht instanceof CharacterIdTag) && (((CharacterIdTag) cht).getCharacterId() == exportedId) && !(cht instanceof PlaceObjectTypeTag) && !(cht instanceof RemoveTag)) { + CharacterIdTag ch = (CharacterIdTag) cht; + cht.setSwf(this); + ch.setCharacterId(importedId); + cht.setImported(true); + tags.add(p + 1 + pos, cht); + pos++; + } + } + } + + int newId = getNextCharacterId(); + pos = 0; + for (String key : classesMap2.keySet()) { + int exportedId = classesMap2.get(key); + int importedId = newId++; + for (Tag cht : iSwf.tags) { + if ((cht instanceof CharacterIdTag) && (((CharacterIdTag) cht).getCharacterId() == exportedId) && !(cht instanceof PlaceObjectTypeTag) && !(cht instanceof RemoveTag)) { + CharacterIdTag ch = (CharacterIdTag) cht; + cht.setSwf(this); + ch.setCharacterId(importedId); + cht.setImported(true); + tags.add(p + 1 + pos, cht); + pos++; + } + } + } + updateCharacters(); + } + } + } + } + @Override public SWF getSwf() { return this; @@ -2338,6 +2461,7 @@ public final class SWF implements SWFContainerItem, Timelined { public void clearReadOnlyListCache() { readOnlyTags = null; + readOnlyLocalTags = null; for (Tag tag : tags) { if (tag instanceof DefineSpriteTag) { ((DefineSpriteTag) tag).clearReadOnlyListCache(); @@ -3059,13 +3183,15 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); timelined.resetTimeline(); } else // timeline should be always the swf here - if (removeDependencies) { - removeTagWithDependenciesFromTimeline(tag, timelined.getTimeline()); - timelined.setModified(true); - } else { - boolean modified = removeTagFromTimeline(tag, timelined.getTimeline()); - if (modified) { + { + if (removeDependencies) { + removeTagWithDependenciesFromTimeline(tag, timelined.getTimeline()); timelined.setModified(true); + } else { + boolean modified = removeTagFromTimeline(tag, timelined.getTimeline()); + if (modified) { + timelined.setModified(true); + } } } } @@ -3079,6 +3205,20 @@ public final class SWF implements SWFContainerItem, Timelined { return readOnlyTags; } + public ReadOnlyTagList getLocalTags() { + if (readOnlyLocalTags == null) { + List localTags = new ArrayList<>(); + for (Tag t : tags) { + if (!t.isImported()) { + localTags.add(t); + } + } + readOnlyLocalTags = new ReadOnlyTagList(localTags); + } + + return readOnlyLocalTags; + } + /** * Adds a tag to the SWF * diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/UrlResolver.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/UrlResolver.java new file mode 100644 index 000000000..0dc8b138a --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/UrlResolver.java @@ -0,0 +1,10 @@ +package com.jpexs.decompiler.flash; + +/** + * + * @author JPEXS + */ +public interface UrlResolver { + + public SWF resolveUrl(String url); +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java index 61a9ff209..85eb0fdce 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java @@ -17,973 +17,920 @@ * License along with this library. */ package com.jpexs.decompiler.flash.abc.avm2.parser.script; - import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import java.util.Stack; + /** - * This class is a scanner generated by + * This class is a scanner generated by * JFlex 1.6.0 - * from the specification file - * C:/FFDec/jpexs-decompiler/libsrc/ffdec_lib/lexers/actionscript3_script.flex + * from the specification file D:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_script.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; + /** 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; - public static final int STRING = 2; + /** + * 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 + }; - public static final int CHARLITERAL = 4; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\13\1\2\1\112\1\3\1\1\22\0\1\13\1\14\1\33"+ + "\1\0\1\6\1\110\1\105\1\34\1\76\1\77\1\5\1\45\1\103"+ + "\1\15\1\11\1\4\1\35\3\41\4\42\2\21\1\17\1\102\1\12"+ + "\1\32\1\16\1\23\1\111\1\27\1\20\1\25\1\26\1\43\1\20"+ + "\2\10\1\74\4\10\1\75\5\10\1\30\3\10\1\37\2\10\1\24"+ + "\1\46\1\31\1\107\1\10\1\0\1\52\1\50\1\54\1\63\1\44"+ + "\1\40\1\73\1\66\1\61\1\10\1\53\1\64\1\71\1\57\1\56"+ + "\1\67\1\10\1\51\1\55\1\60\1\62\1\72\1\65\1\36\1\70"+ + "\1\10\1\100\1\106\1\101\1\104\6\0\1\112\41\0\1\47\2\0"+ + "\1\6\12\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\1\6"+ + "\6\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\246\6\1\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\35\0\13\7\5\0\53\6"+ + "\37\7\4\0\2\6\1\7\143\6\1\0\1\6\7\7\2\0\6\7"+ + "\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6\20\0"+ + "\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\104\0\23\6\61\0"+ + "\40\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0"+ + "\12\7\1\0\20\6\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\2\6\17\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\21\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\20\0\4\7\1\0\10\6\1\0\3\6"+ + "\1\0\27\6\1\0\20\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"+ + "\21\0\3\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\16\0\3\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\6\0\12\7\2\0\2\7"+ + "\15\0\60\6\1\7\2\6\7\7\5\0\7\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\4\6"+ + "\40\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\1\0"+ + "\1\6\5\0\1\6\2\0\53\6\1\0\u014d\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\7\10\6\7\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\4\0\1\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\37\6\1\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\10\0\16\7\102\0\5\7"+ + "\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0\3\7\36\6"+ + "\15\7\2\6\12\7\54\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\3\7\2\6\1\0\2\7\6\0\300\6\66\7\6\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\14\0\2\0"+ + "\32\0\1\112\1\112\25\0\2\7\23\0\1\7\33\0\1\0\1\6"+ + "\15\0\1\6\20\0\15\6\63\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\43\7\2\6\4\7"+ + "\7\0\u0a70\0\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\7"+ + "\2\6\14\0\46\6\1\0\1\6\5\0\1\6\2\0\70\6\7\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\2\6\1\7\31\0"+ + "\17\7\1\0\5\6\2\0\3\7\2\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\u51cd\6\63\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\4\0\12\7\1\0\37\6\1\0\1\7\106\6\14\7\45\0"+ + "\11\6\2\0\147\6\2\0\4\6\1\0\36\6\2\0\2\6\105\0"+ + "\13\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7\30\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\6\0\5\6\1\7"+ + "\12\6\12\7\5\6\1\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\3\7\62\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\2\0\13\6\5\7\2\0\3\6\2\7\12\0\6\6\2\0"+ + "\6\6\2\0\6\6\11\0\7\6\1\0\7\6\1\0\53\6\1\0"+ + "\4\6\4\0\2\6\132\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\u016e\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"+ + "\14\6\4\0\20\7\20\0\16\7\5\0\2\7\30\0\3\7\40\0"+ + "\5\6\1\0\207\6\23\0\12\7\7\0\32\6\4\0\1\7\1\0"+ + "\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0\6\6\2\0"+ + "\3\6\41\0\2\0\14\6\1\0\32\6\1\0\23\6\1\0\2\6"+ + "\1\0\17\6\2\0\16\6\42\0\173\6\105\0\65\7\210\0\1\7"+ + "\202\0\35\6\3\0\61\6\17\0\1\7\37\0\40\6\20\0\21\6"+ + "\1\7\10\6\1\7\5\0\46\6\5\7\5\0\36\6\2\0\44\6"+ + "\4\0\10\6\1\0\5\7\52\0\236\6\2\0\12\7\126\0\50\6"+ + "\10\0\64\6\234\0\u0137\6\11\0\26\6\12\0\10\6\230\0\6\6"+ + "\2\0\1\6\1\0\54\6\1\0\2\6\3\0\1\6\2\0\27\6"+ + "\12\0\27\6\11\0\37\6\141\0\26\6\12\0\32\6\106\0\70\6"+ + "\6\0\2\6\100\0\1\6\3\7\1\0\2\7\5\0\4\7\4\6"+ + "\1\0\3\6\1\0\33\6\4\0\3\7\4\0\1\7\40\0\35\6"+ + "\3\0\35\6\43\0\10\6\1\0\34\6\2\7\31\0\66\6\12\0"+ + "\26\6\12\0\23\6\15\0\22\6\156\0\111\6\u03b7\0\3\7\65\6"+ + "\17\7\37\0\12\7\17\0\4\7\55\6\13\7\25\0\31\6\7\0"+ + "\12\7\6\0\3\7\44\6\16\7\1\0\12\7\20\0\43\6\1\7"+ + "\2\0\1\6\11\0\3\7\60\6\16\7\4\6\13\0\12\7\1\6"+ + "\45\0\22\6\1\0\31\6\14\7\170\0\57\6\14\7\5\0\12\7"+ + "\7\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\11\0\1\7\5\0\5\6\2\7\2\0\7\7\3\0"+ + "\5\7\u010b\0\60\6\24\7\2\6\1\0\1\6\10\0\12\7\246\0"+ + "\57\6\7\7\2\0\11\7\77\0\60\6\21\7\3\0\1\6\13\0"+ + "\12\7\46\0\53\6\15\7\10\0\12\7\u01d6\0\100\6\12\7\25\0"+ + "\1\6\u01c0\0\71\6\u0507\0\u0399\6\147\0\157\7\u0b91\0\u042f\6\u33d1\0"+ + "\u0239\6\7\0\37\6\1\0\12\7\146\0\36\6\2\0\5\7\13\0"+ + "\60\6\7\7\11\0\4\6\14\0\12\7\11\0\25\6\5\0\23\6"+ + "\u0370\0\105\6\13\0\1\6\56\7\20\0\4\7\15\6\u4060\0\2\6"+ + "\u0bfe\0\153\6\5\0\15\6\3\0\11\6\7\0\12\6\3\0\2\7"+ + "\u14c6\0\5\7\3\0\6\7\10\0\10\7\2\0\7\7\36\0\4\7"+ + "\224\0\3\7\u01bb\0\125\6\1\0\107\6\1\0\2\6\2\0\1\6"+ + "\2\0\2\6\2\0\4\6\1\0\14\6\1\0\1\6\1\0\7\6"+ + "\1\0\101\6\1\0\4\6\2\0\10\6\1\0\7\6\1\0\34\6"+ + "\1\0\4\6\1\0\5\6\1\0\1\6\3\0\7\6\1\0\u0154\6"+ + "\2\0\31\6\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6"+ + "\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6\1\0\31\6"+ + "\1\0\10\6\2\0\62\7\u1000\0\305\6\13\0\7\7\u0529\0\4\6"+ + "\1\0\33\6\1\0\2\6\1\0\1\6\2\0\1\6\1\0\12\6"+ + "\1\0\4\6\1\0\1\6\1\0\1\6\6\0\1\6\4\0\1\6"+ + "\1\0\1\6\1\0\1\6\1\0\3\6\1\0\2\6\1\0\1\6"+ + "\2\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6"+ + "\1\0\2\6\1\0\1\6\2\0\4\6\1\0\7\6\1\0\4\6"+ + "\1\0\4\6\1\0\1\6\1\0\12\6\1\0\21\6\5\0\3\6"+ + "\1\0\5\6\1\0\21\6\u1144\0\ua6d7\6\51\0\u1035\6\13\0\336\6"+ + "\u3fe2\0\u021e\6\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u06ed\0"+ + "\360\7\uffff\0\uffff\0\ufe12\0"; - public static final int XMLOPENTAG = 6; + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - public static final int XMLOPENTAGATTRIB = 8; + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - public static final int XMLINSTROPENTAG = 10; + 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\2\46\1\42\2\1\1\47\1\50"+ + "\1\1\1\51\2\1\1\52\1\1\1\53\2\42\2\54"+ + "\2\42\1\55\1\42\1\1\1\56\1\3\1\0\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\0"+ + "\1\77\1\63\1\100\1\0\2\100\7\6\1\101\1\102"+ + "\1\0\2\6\1\103\16\6\1\104\1\105\1\106\4\6"+ + "\1\107\13\6\1\110\1\111\1\112\1\113\1\114\1\115"+ + "\1\116\1\117\1\120\1\116\1\121\1\122\1\123\1\124"+ + "\1\125\1\126\1\116\1\127\1\0\1\130\1\0\1\131"+ + "\1\0\1\132\1\133\1\0\1\134\4\0\1\135\2\0"+ + "\1\136\2\137\1\140\1\137\2\3\2\0\1\141\1\142"+ + "\1\143\1\144\1\145\1\0\1\63\1\146\2\147\1\100"+ + "\1\6\1\150\5\6\1\151\6\6\1\152\4\6\1\153"+ + "\4\6\1\154\6\6\1\155\12\6\1\156\1\6\1\157"+ + "\1\6\1\160\3\0\1\134\1\161\1\162\1\0\1\163"+ + "\2\0\1\164\1\165\1\0\1\166\1\147\1\100\4\6"+ + "\1\167\1\170\2\6\1\171\12\6\1\172\1\173\1\6"+ + "\1\174\11\6\1\175\5\6\1\176\1\6\1\177\2\0"+ + "\1\200\1\201\1\0\1\147\1\100\1\202\1\203\2\6"+ + "\1\204\1\6\1\205\1\206\1\6\1\207\1\6\1\210"+ + "\4\6\1\211\11\6\1\212\5\6\1\0\1\147\1\100"+ + "\3\6\1\213\1\6\1\214\1\215\1\6\1\216\1\6"+ + "\1\217\3\6\1\220\3\6\1\221\4\6\1\222\1\6"+ + "\1\0\1\147\1\100\1\223\1\6\1\224\10\6\1\225"+ + "\1\226\1\6\1\227\1\230\1\6\1\0\1\147\1\100"+ + "\1\231\1\232\1\233\3\6\1\234\3\6\1\235\1\0"+ + "\1\147\1\100\1\236\1\6\1\237\1\6\1\240\1\241"+ + "\1\242\1\147\1\100\1\243\1\244\6\100"; - public static final int XMLINSTRATTRIB = 12; + private static int [] zzUnpackAction() { + int [] result = new int[447]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } - 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, 10, 10 - }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED - = "\11\0\1\13\1\2\1\112\1\3\1\1\22\0\1\13\1\14\1\33" - + "\1\0\1\6\1\110\1\105\1\34\1\76\1\77\1\5\1\45\1\103" - + "\1\15\1\11\1\4\1\35\3\41\4\42\2\21\1\17\1\102\1\12" - + "\1\32\1\16\1\23\1\111\1\27\1\20\1\25\1\26\1\43\1\20" - + "\2\10\1\74\4\10\1\75\5\10\1\30\3\10\1\37\2\10\1\24" - + "\1\46\1\31\1\107\1\10\1\0\1\52\1\50\1\54\1\63\1\44" - + "\1\40\1\73\1\66\1\61\1\10\1\53\1\64\1\71\1\57\1\56" - + "\1\67\1\10\1\51\1\55\1\60\1\62\1\72\1\65\1\36\1\70" - + "\1\10\1\100\1\106\1\101\1\104\6\0\1\112\41\0\1\47\2\0" - + "\1\6\12\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\1\6" - + "\6\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\246\6\1\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\35\0\13\7\5\0\53\6" - + "\37\7\4\0\2\6\1\7\143\6\1\0\1\6\7\7\2\0\6\7" - + "\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6\20\0" - + "\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\104\0\23\6\61\0" - + "\40\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0" - + "\12\7\1\0\20\6\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\2\6\17\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\21\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\20\0\4\7\1\0\10\6\1\0\3\6" - + "\1\0\27\6\1\0\20\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" - + "\21\0\3\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\16\0\3\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\6\0\12\7\2\0\2\7" - + "\15\0\60\6\1\7\2\6\7\7\5\0\7\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\4\6" - + "\40\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\1\0" - + "\1\6\5\0\1\6\2\0\53\6\1\0\u014d\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\7\10\6\7\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\4\0\1\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\37\6\1\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\10\0\16\7\102\0\5\7" - + "\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0\3\7\36\6" - + "\15\7\2\6\12\7\54\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\3\7\2\6\1\0\2\7\6\0\300\6\66\7\6\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\14\0\2\0" - + "\32\0\1\112\1\112\25\0\2\7\23\0\1\7\33\0\1\0\1\6" - + "\15\0\1\6\20\0\15\6\63\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\43\7\2\6\4\7" - + "\7\0\u0a70\0\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\7" - + "\2\6\14\0\46\6\1\0\1\6\5\0\1\6\2\0\70\6\7\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\2\6\1\7\31\0" - + "\17\7\1\0\5\6\2\0\3\7\2\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\u51cd\6\63\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\4\0\12\7\1\0\37\6\1\0\1\7\106\6\14\7\45\0" - + "\11\6\2\0\147\6\2\0\4\6\1\0\36\6\2\0\2\6\105\0" - + "\13\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7\30\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\6\0\5\6\1\7" - + "\12\6\12\7\5\6\1\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\3\7\62\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\2\0\13\6\5\7\2\0\3\6\2\7\12\0\6\6\2\0" - + "\6\6\2\0\6\6\11\0\7\6\1\0\7\6\1\0\53\6\1\0" - + "\4\6\4\0\2\6\132\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\u016e\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" - + "\14\6\4\0\20\7\20\0\16\7\5\0\2\7\30\0\3\7\40\0" - + "\5\6\1\0\207\6\23\0\12\7\7\0\32\6\4\0\1\7\1\0" - + "\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0\6\6\2\0" - + "\3\6\41\0\2\0\14\6\1\0\32\6\1\0\23\6\1\0\2\6" - + "\1\0\17\6\2\0\16\6\42\0\173\6\105\0\65\7\210\0\1\7" - + "\202\0\35\6\3\0\61\6\17\0\1\7\37\0\40\6\20\0\21\6" - + "\1\7\10\6\1\7\5\0\46\6\5\7\5\0\36\6\2\0\44\6" - + "\4\0\10\6\1\0\5\7\52\0\236\6\2\0\12\7\126\0\50\6" - + "\10\0\64\6\234\0\u0137\6\11\0\26\6\12\0\10\6\230\0\6\6" - + "\2\0\1\6\1\0\54\6\1\0\2\6\3\0\1\6\2\0\27\6" - + "\12\0\27\6\11\0\37\6\141\0\26\6\12\0\32\6\106\0\70\6" - + "\6\0\2\6\100\0\1\6\3\7\1\0\2\7\5\0\4\7\4\6" - + "\1\0\3\6\1\0\33\6\4\0\3\7\4\0\1\7\40\0\35\6" - + "\3\0\35\6\43\0\10\6\1\0\34\6\2\7\31\0\66\6\12\0" - + "\26\6\12\0\23\6\15\0\22\6\156\0\111\6\u03b7\0\3\7\65\6" - + "\17\7\37\0\12\7\17\0\4\7\55\6\13\7\25\0\31\6\7\0" - + "\12\7\6\0\3\7\44\6\16\7\1\0\12\7\20\0\43\6\1\7" - + "\2\0\1\6\11\0\3\7\60\6\16\7\4\6\13\0\12\7\1\6" - + "\45\0\22\6\1\0\31\6\14\7\170\0\57\6\14\7\5\0\12\7" - + "\7\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\11\0\1\7\5\0\5\6\2\7\2\0\7\7\3\0" - + "\5\7\u010b\0\60\6\24\7\2\6\1\0\1\6\10\0\12\7\246\0" - + "\57\6\7\7\2\0\11\7\77\0\60\6\21\7\3\0\1\6\13\0" - + "\12\7\46\0\53\6\15\7\10\0\12\7\u01d6\0\100\6\12\7\25\0" - + "\1\6\u01c0\0\71\6\u0507\0\u0399\6\147\0\157\7\u0b91\0\u042f\6\u33d1\0" - + "\u0239\6\7\0\37\6\1\0\12\7\146\0\36\6\2\0\5\7\13\0" - + "\60\6\7\7\11\0\4\6\14\0\12\7\11\0\25\6\5\0\23\6" - + "\u0370\0\105\6\13\0\1\6\56\7\20\0\4\7\15\6\u4060\0\2\6" - + "\u0bfe\0\153\6\5\0\15\6\3\0\11\6\7\0\12\6\3\0\2\7" - + "\u14c6\0\5\7\3\0\6\7\10\0\10\7\2\0\7\7\36\0\4\7" - + "\224\0\3\7\u01bb\0\125\6\1\0\107\6\1\0\2\6\2\0\1\6" - + "\2\0\2\6\2\0\4\6\1\0\14\6\1\0\1\6\1\0\7\6" - + "\1\0\101\6\1\0\4\6\2\0\10\6\1\0\7\6\1\0\34\6" - + "\1\0\4\6\1\0\5\6\1\0\1\6\3\0\7\6\1\0\u0154\6" - + "\2\0\31\6\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6" - + "\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6\1\0\31\6" - + "\1\0\10\6\2\0\62\7\u1000\0\305\6\13\0\7\7\u0529\0\4\6" - + "\1\0\33\6\1\0\2\6\1\0\1\6\2\0\1\6\1\0\12\6" - + "\1\0\4\6\1\0\1\6\1\0\1\6\6\0\1\6\4\0\1\6" - + "\1\0\1\6\1\0\1\6\1\0\3\6\1\0\2\6\1\0\1\6" - + "\2\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6" - + "\1\0\2\6\1\0\1\6\2\0\4\6\1\0\7\6\1\0\4\6" - + "\1\0\4\6\1\0\1\6\1\0\12\6\1\0\21\6\5\0\3\6" - + "\1\0\5\6\1\0\21\6\u1144\0\ua6d7\6\51\0\u1035\6\13\0\336\6" - + "\u3fe2\0\u021e\6\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u06ed\0" - + "\360\7\uffff\0\uffff\0\ufe12\0"; - - /** - * 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(); - - 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\2\46\1\42\2\1\1\47\1\50" - + "\1\1\1\51\2\1\1\52\1\1\1\53\2\42\2\54" - + "\2\42\1\55\1\42\1\1\1\56\1\3\1\0\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\0" - + "\1\77\1\63\1\100\1\0\2\100\7\6\1\101\1\102" - + "\1\0\2\6\1\103\16\6\1\104\1\105\1\106\4\6" - + "\1\107\13\6\1\110\1\111\1\112\1\113\1\114\1\115" - + "\1\116\1\117\1\120\1\116\1\121\1\122\1\123\1\124" - + "\1\125\1\126\1\116\1\127\1\0\1\130\1\0\1\131" - + "\1\0\1\132\1\133\1\0\1\134\4\0\1\135\2\0" - + "\1\136\2\137\1\140\1\137\2\3\2\0\1\141\1\142" - + "\1\143\1\144\1\145\1\0\1\63\1\146\2\147\1\100" - + "\1\6\1\150\5\6\1\151\6\6\1\152\4\6\1\153" - + "\4\6\1\154\6\6\1\155\12\6\1\156\1\6\1\157" - + "\1\6\1\160\3\0\1\134\1\161\1\162\1\0\1\163" - + "\2\0\1\164\1\165\1\0\1\166\1\147\1\100\4\6" - + "\1\167\1\170\2\6\1\171\12\6\1\172\1\173\1\6" - + "\1\174\11\6\1\175\5\6\1\176\1\6\1\177\2\0" - + "\1\200\1\201\1\0\1\147\1\100\1\202\1\203\2\6" - + "\1\204\1\6\1\205\1\206\1\6\1\207\1\6\1\210" - + "\4\6\1\211\11\6\1\212\5\6\1\0\1\147\1\100" - + "\3\6\1\213\1\6\1\214\1\215\1\6\1\216\1\6" - + "\1\217\3\6\1\220\3\6\1\221\4\6\1\222\1\6" - + "\1\0\1\147\1\100\1\223\1\6\1\224\10\6\1\225" - + "\1\226\1\6\1\227\1\230\1\6\1\0\1\147\1\100" - + "\1\231\1\232\1\233\3\6\1\234\3\6\1\235\1\0" - + "\1\147\1\100\1\236\1\6\1\237\1\6\1\240\1\241" - + "\1\242\1\147\1\100\1\243\1\244\6\100"; - - private static int[] zzUnpackAction() { - int[] result = new int[447]; - 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\113\0\226\0\341\0\u012c\0\u0177\0\u01c2\0\u020d"+ + "\0\u0258\0\u02a3\0\u02ee\0\u0339\0\u0384\0\u0339\0\u03cf\0\u041a"+ + "\0\u0465\0\u04b0\0\u04fb\0\u0546\0\u0591\0\u05dc\0\u0627\0\u0672"+ + "\0\u06bd\0\u0339\0\u0339\0\u0339\0\u0708\0\u0339\0\u0339\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\u0d2f\0\u0d7a\0\u0339\0\u0339\0\u0339"+ + "\0\u0339\0\u0339\0\u0339\0\u0339\0\u0dc5\0\u0e10\0\u0e5b\0\u0ea6"+ + "\0\u0339\0\u0ef1\0\u0f3c\0\u0339\0\u0339\0\u0f87\0\u0fd2\0\u101d"+ + "\0\u0339\0\u1068\0\u0339\0\u10b3\0\u10fe\0\u1149\0\u0339\0\u0339"+ + "\0\u1194\0\u0339\0\u11df\0\u122a\0\u0339\0\u1275\0\u0339\0\u0339"+ + "\0\u12c0\0\u130b\0\u0339\0\u1356\0\u13a1\0\u0339\0\u13ec\0\u1437"+ + "\0\u0339\0\u1482\0\u14cd\0\u0339\0\u0339\0\u1518\0\u0339\0\u1563"+ + "\0\u0339\0\u15ae\0\u15f9\0\u0339\0\u0339\0\u1644\0\u0339\0\u0339"+ + "\0\u168f\0\u0339\0\u0339\0\u16da\0\u1725\0\u1770\0\u17bb\0\u1806"+ + "\0\u1851\0\u189c\0\u18e7\0\u1932\0\u197d\0\u19c8\0\u1a13\0\u1a5e"+ + "\0\u1aa9\0\u0339\0\u0339\0\u1af4\0\u1b3f\0\u1b8a\0\u04b0\0\u1bd5"+ + "\0\u1c20\0\u1c6b\0\u1cb6\0\u1d01\0\u1d4c\0\u1d97\0\u1de2\0\u1e2d"+ + "\0\u1e78\0\u1ec3\0\u1f0e\0\u1f59\0\u1fa4\0\u04b0\0\u04b0\0\u1fef"+ + "\0\u203a\0\u2085\0\u20d0\0\u211b\0\u04b0\0\u2166\0\u21b1\0\u21fc"+ + "\0\u2247\0\u2292\0\u22dd\0\u2328\0\u2373\0\u23be\0\u2409\0\u2454"+ + "\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339"+ + "\0\u0339\0\u249f\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339"+ + "\0\u24ea\0\u0339\0\u1149\0\u0339\0\u1194\0\u0339\0\u11df\0\u0339"+ + "\0\u0339\0\u1275\0\u2535\0\u2580\0\u25cb\0\u2616\0\u2661\0\u26ac"+ + "\0\u26f7\0\u2742\0\u0339\0\u0339\0\u249f\0\u0339\0\u24ea\0\u278d"+ + "\0\u0339\0\u27d8\0\u2823\0\u0339\0\u0339\0\u0339\0\u286e\0\u0339"+ + "\0\u28b9\0\u28b9\0\u0339\0\u2904\0\u1806\0\u294f\0\u299a\0\u04b0"+ + "\0\u29e5\0\u2a30\0\u2a7b\0\u2ac6\0\u2b11\0\u2b5c\0\u2ba7\0\u2bf2"+ + "\0\u2c3d\0\u2c88\0\u2cd3\0\u2d1e\0\u04b0\0\u2d69\0\u2db4\0\u2dff"+ + "\0\u2e4a\0\u04b0\0\u2e95\0\u2ee0\0\u2f2b\0\u2f76\0\u04b0\0\u2fc1"+ + "\0\u300c\0\u3057\0\u30a2\0\u30ed\0\u3138\0\u04b0\0\u3183\0\u31ce"+ + "\0\u3219\0\u3264\0\u32af\0\u32fa\0\u3345\0\u3390\0\u33db\0\u3426"+ + "\0\u04b0\0\u3471\0\u04b0\0\u34bc\0\u04b0\0\u3507\0\u3552\0\u2535"+ + "\0\u0339\0\u0339\0\u0339\0\u359d\0\u0339\0\u35e8\0\u3633\0\u367e"+ + "\0\u0339\0\u36c9\0\u0339\0\u3714\0\u375f\0\u37aa\0\u37f5\0\u3840"+ + "\0\u388b\0\u04b0\0\u04b0\0\u38d6\0\u3921\0\u04b0\0\u396c\0\u39b7"+ + "\0\u3a02\0\u3a4d\0\u3a98\0\u3ae3\0\u3b2e\0\u3b79\0\u3bc4\0\u3c0f"+ + "\0\u04b0\0\u04b0\0\u3c5a\0\u04b0\0\u3ca5\0\u3cf0\0\u3d3b\0\u3d86"+ + "\0\u3dd1\0\u3e1c\0\u3e67\0\u3eb2\0\u3efd\0\u04b0\0\u3f48\0\u3f93"+ + "\0\u3fde\0\u4029\0\u4074\0\u04b0\0\u40bf\0\u0339\0\u249f\0\u410a"+ + "\0\u0339\0\u0339\0\u4155\0\u41a0\0\u41eb\0\u04b0\0\u4236\0\u4281"+ + "\0\u42cc\0\u04b0\0\u4317\0\u04b0\0\u04b0\0\u4362\0\u04b0\0\u43ad"+ + "\0\u04b0\0\u43f8\0\u4443\0\u448e\0\u44d9\0\u04b0\0\u4524\0\u456f"+ + "\0\u45ba\0\u4605\0\u4650\0\u469b\0\u46e6\0\u4731\0\u477c\0\u04b0"+ + "\0\u47c7\0\u4812\0\u485d\0\u48a8\0\u48f3\0\u493e\0\u4989\0\u49d4"+ + "\0\u4a1f\0\u4a6a\0\u4ab5\0\u04b0\0\u4b00\0\u04b0\0\u04b0\0\u4b4b"+ + "\0\u04b0\0\u4b96\0\u04b0\0\u4be1\0\u4c2c\0\u4c77\0\u04b0\0\u4cc2"+ + "\0\u4d0d\0\u4d58\0\u04b0\0\u4da3\0\u4dee\0\u4e39\0\u4e84\0\u04b0"+ + "\0\u4ecf\0\u4f1a\0\u4f65\0\u4fb0\0\u04b0\0\u4ffb\0\u04b0\0\u5046"+ + "\0\u5091\0\u50dc\0\u5127\0\u5172\0\u51bd\0\u5208\0\u5253\0\u04b0"+ + "\0\u04b0\0\u529e\0\u04b0\0\u04b0\0\u52e9\0\u5334\0\u537f\0\u53ca"+ + "\0\u04b0\0\u04b0\0\u04b0\0\u5415\0\u5460\0\u54ab\0\u04b0\0\u54f6"+ + "\0\u5541\0\u558c\0\u04b0\0\u55d7\0\u5622\0\u566d\0\u04b0\0\u56b8"+ + "\0\u04b0\0\u5703\0\u04b0\0\u04b0\0\u0339\0\u0339\0\u574e\0\u04b0"+ + "\0\u04b0\0\u5799\0\u57e4\0\u582f\0\u587a\0\u58c5\0\u1770"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[447]; + 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\u0384\0\u0339\0\u03cf\0\u041a" - + "\0\u0465\0\u04b0\0\u04fb\0\u0546\0\u0591\0\u05dc\0\u0627\0\u0672" - + "\0\u06bd\0\u0339\0\u0339\0\u0339\0\u0708\0\u0339\0\u0339\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\u0d2f\0\u0d7a\0\u0339\0\u0339\0\u0339" - + "\0\u0339\0\u0339\0\u0339\0\u0339\0\u0dc5\0\u0e10\0\u0e5b\0\u0ea6" - + "\0\u0339\0\u0ef1\0\u0f3c\0\u0339\0\u0339\0\u0f87\0\u0fd2\0\u101d" - + "\0\u0339\0\u1068\0\u0339\0\u10b3\0\u10fe\0\u1149\0\u0339\0\u0339" - + "\0\u1194\0\u0339\0\u11df\0\u122a\0\u0339\0\u1275\0\u0339\0\u0339" - + "\0\u12c0\0\u130b\0\u0339\0\u1356\0\u13a1\0\u0339\0\u13ec\0\u1437" - + "\0\u0339\0\u1482\0\u14cd\0\u0339\0\u0339\0\u1518\0\u0339\0\u1563" - + "\0\u0339\0\u15ae\0\u15f9\0\u0339\0\u0339\0\u1644\0\u0339\0\u0339" - + "\0\u168f\0\u0339\0\u0339\0\u16da\0\u1725\0\u1770\0\u17bb\0\u1806" - + "\0\u1851\0\u189c\0\u18e7\0\u1932\0\u197d\0\u19c8\0\u1a13\0\u1a5e" - + "\0\u1aa9\0\u0339\0\u0339\0\u1af4\0\u1b3f\0\u1b8a\0\u04b0\0\u1bd5" - + "\0\u1c20\0\u1c6b\0\u1cb6\0\u1d01\0\u1d4c\0\u1d97\0\u1de2\0\u1e2d" - + "\0\u1e78\0\u1ec3\0\u1f0e\0\u1f59\0\u1fa4\0\u04b0\0\u04b0\0\u1fef" - + "\0\u203a\0\u2085\0\u20d0\0\u211b\0\u04b0\0\u2166\0\u21b1\0\u21fc" - + "\0\u2247\0\u2292\0\u22dd\0\u2328\0\u2373\0\u23be\0\u2409\0\u2454" - + "\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339" - + "\0\u0339\0\u249f\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339\0\u0339" - + "\0\u24ea\0\u0339\0\u1149\0\u0339\0\u1194\0\u0339\0\u11df\0\u0339" - + "\0\u0339\0\u1275\0\u2535\0\u2580\0\u25cb\0\u2616\0\u2661\0\u26ac" - + "\0\u26f7\0\u2742\0\u0339\0\u0339\0\u249f\0\u0339\0\u24ea\0\u278d" - + "\0\u0339\0\u27d8\0\u2823\0\u0339\0\u0339\0\u0339\0\u286e\0\u0339" - + "\0\u28b9\0\u28b9\0\u0339\0\u2904\0\u1806\0\u294f\0\u299a\0\u04b0" - + "\0\u29e5\0\u2a30\0\u2a7b\0\u2ac6\0\u2b11\0\u2b5c\0\u2ba7\0\u2bf2" - + "\0\u2c3d\0\u2c88\0\u2cd3\0\u2d1e\0\u04b0\0\u2d69\0\u2db4\0\u2dff" - + "\0\u2e4a\0\u04b0\0\u2e95\0\u2ee0\0\u2f2b\0\u2f76\0\u04b0\0\u2fc1" - + "\0\u300c\0\u3057\0\u30a2\0\u30ed\0\u3138\0\u04b0\0\u3183\0\u31ce" - + "\0\u3219\0\u3264\0\u32af\0\u32fa\0\u3345\0\u3390\0\u33db\0\u3426" - + "\0\u04b0\0\u3471\0\u04b0\0\u34bc\0\u04b0\0\u3507\0\u3552\0\u2535" - + "\0\u0339\0\u0339\0\u0339\0\u359d\0\u0339\0\u35e8\0\u3633\0\u367e" - + "\0\u0339\0\u36c9\0\u0339\0\u3714\0\u375f\0\u37aa\0\u37f5\0\u3840" - + "\0\u388b\0\u04b0\0\u04b0\0\u38d6\0\u3921\0\u04b0\0\u396c\0\u39b7" - + "\0\u3a02\0\u3a4d\0\u3a98\0\u3ae3\0\u3b2e\0\u3b79\0\u3bc4\0\u3c0f" - + "\0\u04b0\0\u04b0\0\u3c5a\0\u04b0\0\u3ca5\0\u3cf0\0\u3d3b\0\u3d86" - + "\0\u3dd1\0\u3e1c\0\u3e67\0\u3eb2\0\u3efd\0\u04b0\0\u3f48\0\u3f93" - + "\0\u3fde\0\u4029\0\u4074\0\u04b0\0\u40bf\0\u0339\0\u249f\0\u410a" - + "\0\u0339\0\u0339\0\u4155\0\u41a0\0\u41eb\0\u04b0\0\u4236\0\u4281" - + "\0\u42cc\0\u04b0\0\u4317\0\u04b0\0\u04b0\0\u4362\0\u04b0\0\u43ad" - + "\0\u04b0\0\u43f8\0\u4443\0\u448e\0\u44d9\0\u04b0\0\u4524\0\u456f" - + "\0\u45ba\0\u4605\0\u4650\0\u469b\0\u46e6\0\u4731\0\u477c\0\u04b0" - + "\0\u47c7\0\u4812\0\u485d\0\u48a8\0\u48f3\0\u493e\0\u4989\0\u49d4" - + "\0\u4a1f\0\u4a6a\0\u4ab5\0\u04b0\0\u4b00\0\u04b0\0\u04b0\0\u4b4b" - + "\0\u04b0\0\u4b96\0\u04b0\0\u4be1\0\u4c2c\0\u4c77\0\u04b0\0\u4cc2" - + "\0\u4d0d\0\u4d58\0\u04b0\0\u4da3\0\u4dee\0\u4e39\0\u4e84\0\u04b0" - + "\0\u4ecf\0\u4f1a\0\u4f65\0\u4fb0\0\u04b0\0\u4ffb\0\u04b0\0\u5046" - + "\0\u5091\0\u50dc\0\u5127\0\u5172\0\u51bd\0\u5208\0\u5253\0\u04b0" - + "\0\u04b0\0\u529e\0\u04b0\0\u04b0\0\u52e9\0\u5334\0\u537f\0\u53ca" - + "\0\u04b0\0\u04b0\0\u04b0\0\u5415\0\u5460\0\u54ab\0\u04b0\0\u54f6" - + "\0\u5541\0\u558c\0\u04b0\0\u55d7\0\u5622\0\u566d\0\u04b0\0\u56b8" - + "\0\u04b0\0\u5703\0\u04b0\0\u04b0\0\u0339\0\u0339\0\u574e\0\u04b0" - + "\0\u04b0\0\u5799\0\u57e4\0\u582f\0\u587a\0\u58c5\0\u1770"; + 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\22\1\23\1\24\1\17\1\25\1\26\1\27\1\30"+ + "\1\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\1\14\1\102\1\103\1\104"+ + "\30\102\1\105\12\102\1\106\44\102\1\107\1\110\1\111"+ + "\31\107\1\105\11\107\1\106\44\107\1\14\1\112\1\113"+ + "\1\114\1\115\3\14\1\116\2\14\1\114\2\14\1\117"+ + "\2\116\4\14\4\116\5\14\3\116\2\14\2\116\3\14"+ + "\26\116\2\14\1\120\45\14\1\121\44\14\1\122\13\14"+ + "\1\112\1\113\1\114\4\14\1\123\2\14\1\114\3\14"+ + "\2\123\2\14\1\124\1\14\4\123\5\14\3\123\2\14"+ + "\2\123\3\14\26\123\2\14\1\125\45\14\1\126\44\14"+ + "\1\127\12\14\1\130\1\112\1\113\26\130\1\131\62\130"+ + "\1\132\1\133\12\130\1\134\76\130\1\112\1\113\7\130"+ + "\1\135\65\130\1\136\12\130\1\137\1\110\1\111\43\137"+ + "\1\140\1\141\43\137\115\0\1\16\113\0\1\17\7\0"+ + "\1\17\103\0\1\142\1\143\24\0\1\144\112\0\1\145"+ + "\66\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\26\22\26\0\1\146\1\147\6\0\1\150\13\0"+ + "\1\150\3\0\2\150\33\0\1\151\24\0\1\152\1\0"+ + "\1\153\4\0\2\152\4\0\4\152\1\0\1\154\3\0"+ + "\3\152\2\0\2\152\3\0\26\152\2\0\1\155\44\0"+ + "\1\156\75\0\1\157\14\0\1\160\76\0\1\161\13\0"+ + "\1\162\77\0\1\163\104\0\1\150\7\0\1\31\13\0"+ + "\1\31\3\0\2\31\2\164\100\0\1\165\71\0\1\150"+ + "\7\0\1\166\13\0\1\167\2\170\1\0\1\171\1\172"+ + "\2\164\54\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\2\22\1\173\3\22\1\174\2\22\1\175"+ + "\1\176\13\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\1\22\1\177\6\22\3\0\2\22\1\200\11\22"+ + "\1\201\11\22\47\0\1\202\12\0\1\203\114\0\1\204"+ + "\51\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\1\22\1\205\24\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\7\22\1\206\3\0\26\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\5\22\1\207\20\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\2\22\1\210\3\22\1\211"+ + "\5\22\1\212\11\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\7\22\1\213\3\0\10\22\1\214\1\22"+ + "\1\215\2\22\1\216\10\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\22\22\1\217\3\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+ + "\1\220\3\0\2\22\1\221\7\22\1\222\13\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\1\22\1\223\14\22\1\224\1\22\1\225\5\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\3\22\1\226"+ + "\4\22\3\0\5\22\1\227\1\22\1\230\11\22\1\231"+ + "\4\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\232\1\22\1\233\16\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\234"+ + "\3\0\6\22\1\235\11\22\1\236\5\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\11\22"+ + "\1\237\4\22\1\240\7\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\1\22\1\241\1\242"+ + "\7\22\1\243\13\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\2\22\1\244\3\22\1\245"+ + "\17\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\7\22\1\246\3\0\26\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\7\22\1\247\16\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\250\23\22\47\0\1\251\52\0\1\252"+ + "\37\0\1\253\53\0\1\254\36\0\1\255\112\0\1\256"+ + "\60\0\1\102\2\0\30\102\1\0\12\102\1\0\44\102"+ + "\2\0\1\104\110\0\1\257\3\0\27\257\1\260\1\261"+ + "\1\257\1\262\1\257\1\263\5\257\1\264\1\257\1\265"+ + "\1\266\5\257\1\267\1\270\1\257\1\271\27\257\1\0"+ + "\1\107\2\0\31\107\1\0\11\107\1\0\44\107\2\0"+ + "\1\111\112\0\1\113\113\0\1\114\7\0\1\114\115\0"+ + "\1\272\104\0\2\273\3\0\1\273\1\0\4\273\2\0"+ + "\4\273\1\0\1\274\2\0\10\273\3\0\26\273\15\0"+ + "\1\275\2\0\30\275\1\276\57\275\10\0\2\277\3\0"+ + "\1\277\1\0\4\277\2\0\4\277\1\0\1\300\2\0"+ + "\10\277\3\0\26\277\33\0\1\301\74\0\1\302\2\0"+ + "\30\302\1\303\1\304\56\302\31\0\1\305\63\0\1\133"+ + "\125\0\1\306\101\0\1\307\3\0\1\310\3\0\1\311"+ + "\2\0\2\310\2\0\1\312\1\0\4\310\5\0\3\310"+ + "\2\0\2\310\3\0\26\310\2\0\1\313\12\0\1\137"+ + "\2\0\43\137\2\0\43\137\1\314\3\0\32\314\1\315"+ + "\1\314\1\263\5\314\1\264\1\316\1\265\1\266\5\314"+ + "\1\267\1\270\1\314\1\317\27\314\1\0\1\142\1\320"+ + "\1\321\110\142\5\322\1\323\105\322\11\0\1\324\122\0"+ + "\1\150\13\0\1\150\3\0\2\150\2\164\56\0\2\152"+ + "\3\0\1\152\1\0\4\152\2\0\4\152\4\0\10\152"+ + "\3\0\26\152\47\0\1\325\112\0\1\326\76\0\1\327"+ + "\13\0\1\330\75\0\1\331\3\0\1\332\13\0\1\332"+ + "\3\0\2\332\2\0\1\331\77\0\1\333\71\0\1\150"+ + "\7\0\1\166\13\0\1\166\3\0\2\166\2\164\57\0"+ + "\1\150\7\0\1\166\13\0\1\167\3\0\1\171\1\172"+ + "\2\164\66\0\2\334\3\0\3\334\5\0\1\335\2\0"+ + "\5\334\3\0\1\334\1\0\1\334\1\0\1\334\6\0"+ + "\1\334\40\0\1\150\7\0\1\166\13\0\1\172\3\0"+ + "\2\172\2\164\57\0\1\150\7\0\1\166\13\0\1\336"+ + "\3\0\2\336\2\164\54\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\14\22\1\337\11\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\1\22\1\340\24\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\7\22\1\341\16\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\7\22\1\342\16\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\10\22\1\343\15\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\4\22\1\344\21\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\5\22\1\345\20\22\23\0"+ + "\1\346\1\0\1\346\7\0\1\346\4\0\4\346\5\0"+ + "\3\346\2\0\2\346\3\0\26\346\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\7\22\1\347\3\0\26\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\10\22\1\350\15\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\5\22\1\351\2\22"+ + "\1\352\15\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\7\22\1\353\16\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\354\23\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\10\22\1\355\15\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\356\23\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\17\22\1\357\6\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\11\22"+ + "\1\360\14\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\7\22\1\361\3\0\26\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\15\22\1\362"+ + "\10\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\363\10\22\1\364\4\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\14\22\1\365\11\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\12\22\1\366\5\22\1\367"+ + "\5\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\370\7\22\1\371\14\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\17\22\1\372\6\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\5\22\1\373\2\22\1\374"+ + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\17\22\1\375\6\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\7\22\1\376\3\0\26\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\13\22\1\377\12\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\3\22\1\u0100\4\22\3\0\14\22"+ + "\1\u0101\11\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\7\22\1\u0102\16\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\10\22"+ + "\1\u0103\15\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\11\22\1\u0104\14\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\6\22"+ + "\1\u0105\2\22\1\u0106\14\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u0107\21\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\1\u0108\25\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\1\22\1\u0109\24\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\11\22\1\u010a\14\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\10\22\1\u010b\15\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\3\22\1\u010c"+ + "\4\22\3\0\26\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\25\22\1\u010d\35\0\2\u010e"+ + "\3\0\3\u010e\5\0\1\u010e\2\0\5\u010e\3\0\1\u010e"+ + "\1\0\1\u010e\1\0\1\u010e\6\0\1\u010e\47\0\2\u010f"+ + "\3\0\3\u010f\5\0\1\u010f\2\0\5\u010f\3\0\1\u010f"+ + "\1\0\1\u010f\1\0\1\u010f\6\0\1\u010f\27\0\1\u0110"+ + "\2\0\30\u0110\1\303\1\0\56\u0110\1\304\2\0\30\304"+ + "\1\u0111\57\304\16\0\1\u0112\112\0\1\u0113\104\0\1\u0114"+ + "\6\0\2\u0114\4\0\4\u0114\5\0\3\u0114\2\0\2\u0114"+ + "\3\0\26\u0114\2\0\1\u0115\22\0\2\310\3\0\1\310"+ + "\1\0\4\310\2\0\4\310\4\0\10\310\3\0\26\310"+ + "\32\0\1\u0116\6\0\1\u0117\76\0\1\u0118\6\0\2\u0118"+ + "\4\0\4\u0118\5\0\3\u0118\2\0\2\u0118\3\0\26\u0118"+ + "\2\0\1\u0119\14\0\1\321\110\0\5\322\1\u011a\105\322"+ + "\4\0\1\321\1\323\137\0\1\u011b\101\0\1\332\13\0"+ + "\1\332\3\0\2\332\70\0\2\u011c\3\0\3\u011c\5\0"+ + "\1\u011c\2\0\5\u011c\3\0\1\u011c\1\0\1\u011c\1\0"+ + "\1\u011c\6\0\1\u011c\40\0\1\150\7\0\1\166\13\0"+ + "\1\u011d\3\0\2\u011d\2\164\54\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\5\22\1\u011e\20\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\u011f\23\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u0120\21\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+ + "\1\u0121\3\0\26\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\16\22\1\u0122\7\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0123"+ + "\3\0\26\22\23\0\3\346\7\0\2\346\3\0\4\346"+ + "\4\0\10\346\3\0\26\346\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u0124\23\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\12\22\1\u0125\13\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\7\22\1\u0126\3\0\26\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\4\22\1\u0127\21\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\5\22\1\u0128\2\22\1\u0129"+ + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\u012a\20\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u012b"+ + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\7\22\1\u012c\3\0\26\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u012d\15\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\1\22\1\u012e\24\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\11\22\1\u012f\14\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+ + "\1\u0130\3\0\26\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\14\22\1\u0131\11\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0132"+ + "\3\0\26\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\6\22\1\u0133\17\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\5\22"+ + "\1\u0134\20\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\7\22\1\u0135\3\0\26\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u0136"+ + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\7\22\1\u0137\3\0\26\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\6\22\1\u0138\5\22"+ + "\1\u0139\11\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\7\22\1\u013a\3\0\26\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u013b"+ + "\23\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\7\22\1\u013c\3\0\26\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u013d\23\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\16\22\1\u013e\7\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u013f\11\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\10\22\1\u0140\15\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\22\22\1\u0141\3\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\3\22\1\u0142\22\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0143\11\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\13\22\1\u0144\12\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\11\22\1\u0145\14\22"+ + "\35\0\2\u0146\3\0\3\u0146\5\0\1\u0146\2\0\5\u0146"+ + "\3\0\1\u0146\1\0\1\u0146\1\0\1\u0146\6\0\1\u0146"+ + "\47\0\2\u0147\3\0\3\u0147\5\0\1\u0147\2\0\5\u0147"+ + "\3\0\1\u0147\1\0\1\u0147\1\0\1\u0147\6\0\1\u0147"+ + "\30\0\2\u0148\5\0\2\u0114\1\0\1\u0148\1\0\1\u0114"+ + "\1\u0149\4\u0114\2\0\4\u0114\4\0\10\u0114\3\0\26\u0114"+ + "\32\0\1\u014a\122\0\1\u014b\75\0\2\u0118\3\0\1\u0118"+ + "\1\0\4\u0118\2\0\4\u0118\4\0\10\u0118\3\0\26\u0118"+ + "\15\0\4\322\1\321\1\u011a\105\322\20\0\2\u014c\3\0"+ + "\3\u014c\5\0\1\u014c\2\0\5\u014c\3\0\1\u014c\1\0"+ + "\1\u014c\1\0\1\u014c\6\0\1\u014c\40\0\1\150\7\0"+ + "\1\166\13\0\1\u014d\3\0\2\u014d\2\164\54\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u014e\3\0"+ + "\26\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\14\22\1\u014f\11\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u0150"+ + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\7\22\1\u0151\16\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\3\22\1\u0152"+ + "\22\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\u0153\24\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0154"+ + "\7\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\u0155\15\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0156"+ + "\14\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\u0157\20\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0158"+ + "\14\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\u0159\24\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u015a"+ + "\21\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\u015b\24\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\22\22\1\u015c"+ + "\3\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\u015d\20\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\15\22\1\u015e"+ + "\10\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\6\22\1\u015f\17\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u0160"+ + "\23\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\u0161\24\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\1\22\1\u0162"+ + "\24\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\7\22\1\u0163\3\0\26\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\3\22\1\u0164\4\22\3\0\26\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\12\22\1\u0165\13\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u0166\15\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\21\22\1\u0167\4\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\7\22\1\u0168\3\0\26\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0169"+ + "\3\0\26\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\u016a\23\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\u016b\23\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\11\22\1\u016c\14\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\7\22"+ + "\1\u016d\16\22\16\0\2\u0148\10\0\1\u0148\2\0\1\u0149"+ + "\122\0\1\u016e\104\0\2\u016f\3\0\3\u016f\5\0\1\u016f"+ + "\2\0\5\u016f\3\0\1\u016f\1\0\1\u016f\1\0\1\u016f"+ + "\6\0\1\u016f\40\0\1\150\7\0\1\166\13\0\1\u0170"+ + "\3\0\2\u0170\2\164\54\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\14\22\1\u0171\11\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\11\22\1\u0172\14\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\13\22\1\u0173\12\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\7\22\1\u0174\16\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\7\22\1\u0175\16\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\4\22\1\u0176\21\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\16\22\1\u0177\7\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\11\22\1\u0178\14\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\7\22\1\u0179\3\0\26\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\17\22"+ + "\1\u017a\6\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\3\22\1\u017b\4\22\3\0\26\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\7\22"+ + "\1\u017c\16\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\3\22\1\u017d\4\22\3\0\7\22\1\u017e\16\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\10\22\1\u017f\15\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\21\22\1\u0180\4\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+ + "\3\0\11\22\1\u0181\14\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0182\11\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+ + "\1\u0183\3\0\26\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\11\22\1\u0184\14\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\4\22\1\u0185\21\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\10\22\1\u0186\15\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\23\22\1\u0187\2\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\4\22\1\u0188\21\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\11\22\1\u0189\14\22\44\0\1\u018a\103\0\2\u018b\3\0"+ + "\3\u018b\5\0\1\u018b\2\0\5\u018b\3\0\1\u018b\1\0"+ + "\1\u018b\1\0\1\u018b\6\0\1\u018b\40\0\1\150\7\0"+ + "\1\166\13\0\1\u018c\3\0\2\u018c\2\164\54\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\20\22"+ + "\1\u018d\5\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\6\22\1\u018e\17\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\5\22"+ + "\1\u018f\20\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\12\22\1\u0190\13\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\13\22"+ + "\1\u0191\12\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\u0192\23\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\4\22"+ + "\1\u0193\21\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\u0194\23\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\u0195\23\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\7\22\1\u0196\3\0\26\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u0197"+ + "\16\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\u0198\15\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u0199"+ + "\21\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\u019a\15\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\7\22\1\u019b\3\0\26\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+ + "\1\u019c\3\0\26\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\10\22\1\u019d\15\22\45\0"+ + "\1\u019e\102\0\2\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\40\0\1\150\7\0\1\166\13\0\1\u01a0\3\0"+ + "\2\u01a0\2\164\54\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\7\22\1\u01a1\16\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u01a2\3\0"+ + "\26\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\7\22\1\u01a3\3\0\26\22\23\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u01a4\21\22"+ + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+ + "\1\u01a5\3\0\26\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\4\22\1\u01a6\21\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\14\22\1\u01a7\11\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\10\22\3\0\7\22\1\u01a8\16\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u01a9"+ + "\3\0\26\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\7\22\1\u01aa\3\0\26\22\23\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\10\22\3\0\20\22\1\u01ab"+ + "\5\22\44\0\1\u01ac\103\0\2\u01ad\3\0\3\u01ad\5\0"+ + "\1\u01ad\2\0\5\u01ad\3\0\1\u01ad\1\0\1\u01ad\1\0"+ + "\1\u01ad\6\0\1\u01ad\40\0\1\150\7\0\1\166\13\0"+ + "\1\u01ae\3\0\2\u01ae\2\164\54\0\3\22\7\0\2\22"+ + "\3\0\4\22\4\0\7\22\1\u01af\3\0\26\22\23\0"+ + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+ + "\6\22\1\u01b0\17\22\23\0\3\22\7\0\2\22\3\0"+ + "\4\22\4\0\7\22\1\u01b1\3\0\26\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\10\22"+ + "\1\u01b2\15\22\23\0\3\22\7\0\2\22\3\0\4\22"+ + "\4\0\10\22\3\0\13\22\1\u01b3\12\22\23\0\3\22"+ + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\13\22"+ + "\1\u01b4\12\22\41\0\1\u01b5\106\0\2\u01b6\3\0\3\u01b6"+ + "\5\0\1\u01b6\2\0\5\u01b6\3\0\1\u01b6\1\0\1\u01b6"+ + "\1\0\1\u01b6\6\0\1\u01b6\40\0\1\150\7\0\1\166"+ + "\13\0\1\u01b7\3\0\2\u01b7\2\164\54\0\3\22\7\0"+ + "\2\22\3\0\4\22\4\0\3\22\1\u01b8\4\22\3\0"+ + "\26\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\u01b9\20\22\26\0\1\150\7\0"+ + "\1\166\13\0\1\u01ba\3\0\2\u01ba\2\164\57\0\1\150"+ + "\7\0\1\166\13\0\1\u01bb\3\0\2\u01bb\2\164\57\0"+ + "\1\150\7\0\1\166\13\0\1\u01bc\3\0\2\u01bc\2\164"+ + "\57\0\1\150\7\0\1\166\13\0\1\u01bd\3\0\2\u01bd"+ + "\2\164\57\0\1\150\7\0\1\166\13\0\1\u01be\3\0"+ + "\2\u01be\2\164\57\0\1\150\7\0\1\166\13\0\1\u01bf"+ + "\3\0\2\u01bf\2\164\46\0"; - private static int[] zzUnpackRowMap() { - int[] result = new int[447]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + private static int [] zzUnpackTrans() { + int [] result = new int[22800]; + 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"+ + "\26\1\7\11\4\1\1\11\2\1\2\11\3\1\1\11"+ + "\1\1\1\11\3\1\2\11\1\1\1\11\2\1\1\11"+ + "\1\1\2\11\2\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\1\0\44\1\11\11\1\1\6\11\1\1"+ + "\1\11\1\0\1\11\1\0\1\11\1\0\2\11\1\0"+ + "\1\1\4\0\1\1\2\0\2\11\1\1\1\11\2\1"+ + "\1\11\2\0\3\11\1\1\1\11\1\0\1\1\1\11"+ + "\62\1\3\0\3\11\1\0\1\11\2\0\1\1\1\11"+ + "\1\0\1\11\52\1\1\11\2\0\2\11\1\0\42\1"+ + "\1\0\33\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[447]; + 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\14\1\15\1\16\1\17\1\20\1\21\1\22\1\14" - + "\1\22\1\23\1\24\1\17\1\25\1\26\1\27\1\30" - + "\1\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\1\14\1\102\1\103\1\104" - + "\30\102\1\105\12\102\1\106\44\102\1\107\1\110\1\111" - + "\31\107\1\105\11\107\1\106\44\107\1\14\1\112\1\113" - + "\1\114\1\115\3\14\1\116\2\14\1\114\2\14\1\117" - + "\2\116\4\14\4\116\5\14\3\116\2\14\2\116\3\14" - + "\26\116\2\14\1\120\45\14\1\121\44\14\1\122\13\14" - + "\1\112\1\113\1\114\4\14\1\123\2\14\1\114\3\14" - + "\2\123\2\14\1\124\1\14\4\123\5\14\3\123\2\14" - + "\2\123\3\14\26\123\2\14\1\125\45\14\1\126\44\14" - + "\1\127\12\14\1\130\1\112\1\113\26\130\1\131\62\130" - + "\1\132\1\133\12\130\1\134\76\130\1\112\1\113\7\130" - + "\1\135\65\130\1\136\12\130\1\137\1\110\1\111\43\137" - + "\1\140\1\141\43\137\115\0\1\16\113\0\1\17\7\0" - + "\1\17\103\0\1\142\1\143\24\0\1\144\112\0\1\145" - + "\66\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\26\22\26\0\1\146\1\147\6\0\1\150\13\0" - + "\1\150\3\0\2\150\33\0\1\151\24\0\1\152\1\0" - + "\1\153\4\0\2\152\4\0\4\152\1\0\1\154\3\0" - + "\3\152\2\0\2\152\3\0\26\152\2\0\1\155\44\0" - + "\1\156\75\0\1\157\14\0\1\160\76\0\1\161\13\0" - + "\1\162\77\0\1\163\104\0\1\150\7\0\1\31\13\0" - + "\1\31\3\0\2\31\2\164\100\0\1\165\71\0\1\150" - + "\7\0\1\166\13\0\1\167\2\170\1\0\1\171\1\172" - + "\2\164\54\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\173\3\22\1\174\2\22\1\175" - + "\1\176\13\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\1\22\1\177\6\22\3\0\2\22\1\200\11\22" - + "\1\201\11\22\47\0\1\202\12\0\1\203\114\0\1\204" - + "\51\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\1\22\1\205\24\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\7\22\1\206\3\0\26\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\5\22\1\207\20\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\2\22\1\210\3\22\1\211" - + "\5\22\1\212\11\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\7\22\1\213\3\0\10\22\1\214\1\22" - + "\1\215\2\22\1\216\10\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\22\22\1\217\3\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22" - + "\1\220\3\0\2\22\1\221\7\22\1\222\13\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\1\22\1\223\14\22\1\224\1\22\1\225\5\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\3\22\1\226" - + "\4\22\3\0\5\22\1\227\1\22\1\230\11\22\1\231" - + "\4\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\5\22\1\232\1\22\1\233\16\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\234" - + "\3\0\6\22\1\235\11\22\1\236\5\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\11\22" - + "\1\237\4\22\1\240\7\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\1\22\1\241\1\242" - + "\7\22\1\243\13\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\2\22\1\244\3\22\1\245" - + "\17\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\7\22\1\246\3\0\26\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\7\22\1\247\16\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\2\22\1\250\23\22\47\0\1\251\52\0\1\252" - + "\37\0\1\253\53\0\1\254\36\0\1\255\112\0\1\256" - + "\60\0\1\102\2\0\30\102\1\0\12\102\1\0\44\102" - + "\2\0\1\104\110\0\1\257\3\0\27\257\1\260\1\261" - + "\1\257\1\262\1\257\1\263\5\257\1\264\1\257\1\265" - + "\1\266\5\257\1\267\1\270\1\257\1\271\27\257\1\0" - + "\1\107\2\0\31\107\1\0\11\107\1\0\44\107\2\0" - + "\1\111\112\0\1\113\113\0\1\114\7\0\1\114\115\0" - + "\1\272\104\0\2\273\3\0\1\273\1\0\4\273\2\0" - + "\4\273\1\0\1\274\2\0\10\273\3\0\26\273\15\0" - + "\1\275\2\0\30\275\1\276\57\275\10\0\2\277\3\0" - + "\1\277\1\0\4\277\2\0\4\277\1\0\1\300\2\0" - + "\10\277\3\0\26\277\33\0\1\301\74\0\1\302\2\0" - + "\30\302\1\303\1\304\56\302\31\0\1\305\63\0\1\133" - + "\125\0\1\306\101\0\1\307\3\0\1\310\3\0\1\311" - + "\2\0\2\310\2\0\1\312\1\0\4\310\5\0\3\310" - + "\2\0\2\310\3\0\26\310\2\0\1\313\12\0\1\137" - + "\2\0\43\137\2\0\43\137\1\314\3\0\32\314\1\315" - + "\1\314\1\263\5\314\1\264\1\316\1\265\1\266\5\314" - + "\1\267\1\270\1\314\1\317\27\314\1\0\1\142\1\320" - + "\1\321\110\142\5\322\1\323\105\322\11\0\1\324\122\0" - + "\1\150\13\0\1\150\3\0\2\150\2\164\56\0\2\152" - + "\3\0\1\152\1\0\4\152\2\0\4\152\4\0\10\152" - + "\3\0\26\152\47\0\1\325\112\0\1\326\76\0\1\327" - + "\13\0\1\330\75\0\1\331\3\0\1\332\13\0\1\332" - + "\3\0\2\332\2\0\1\331\77\0\1\333\71\0\1\150" - + "\7\0\1\166\13\0\1\166\3\0\2\166\2\164\57\0" - + "\1\150\7\0\1\166\13\0\1\167\3\0\1\171\1\172" - + "\2\164\66\0\2\334\3\0\3\334\5\0\1\335\2\0" - + "\5\334\3\0\1\334\1\0\1\334\1\0\1\334\6\0" - + "\1\334\40\0\1\150\7\0\1\166\13\0\1\172\3\0" - + "\2\172\2\164\57\0\1\150\7\0\1\166\13\0\1\336" - + "\3\0\2\336\2\164\54\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\14\22\1\337\11\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\1\22\1\340\24\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\7\22\1\341\16\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\7\22\1\342\16\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\10\22\1\343\15\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\4\22\1\344\21\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\5\22\1\345\20\22\23\0" - + "\1\346\1\0\1\346\7\0\1\346\4\0\4\346\5\0" - + "\3\346\2\0\2\346\3\0\26\346\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\7\22\1\347\3\0\26\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\10\22\1\350\15\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\5\22\1\351\2\22" - + "\1\352\15\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\7\22\1\353\16\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22" - + "\1\354\23\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\355\15\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22" - + "\1\356\23\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\17\22\1\357\6\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\11\22" - + "\1\360\14\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\7\22\1\361\3\0\26\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\15\22\1\362" - + "\10\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\363\10\22\1\364\4\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\14\22\1\365\11\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\12\22\1\366\5\22\1\367" - + "\5\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\1\22\1\370\7\22\1\371\14\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\17\22\1\372\6\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\5\22\1\373\2\22\1\374" - + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\17\22\1\375\6\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\7\22\1\376\3\0\26\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\13\22\1\377\12\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\3\22\1\u0100\4\22\3\0\14\22" - + "\1\u0101\11\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\7\22\1\u0102\16\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\10\22" - + "\1\u0103\15\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\11\22\1\u0104\14\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\6\22" - + "\1\u0105\2\22\1\u0106\14\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u0107\21\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\1\u0108\25\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\1\22\1\u0109\24\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\11\22\1\u010a\14\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\10\22\1\u010b\15\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\3\22\1\u010c" - + "\4\22\3\0\26\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\25\22\1\u010d\35\0\2\u010e" - + "\3\0\3\u010e\5\0\1\u010e\2\0\5\u010e\3\0\1\u010e" - + "\1\0\1\u010e\1\0\1\u010e\6\0\1\u010e\47\0\2\u010f" - + "\3\0\3\u010f\5\0\1\u010f\2\0\5\u010f\3\0\1\u010f" - + "\1\0\1\u010f\1\0\1\u010f\6\0\1\u010f\27\0\1\u0110" - + "\2\0\30\u0110\1\303\1\0\56\u0110\1\304\2\0\30\304" - + "\1\u0111\57\304\16\0\1\u0112\112\0\1\u0113\104\0\1\u0114" - + "\6\0\2\u0114\4\0\4\u0114\5\0\3\u0114\2\0\2\u0114" - + "\3\0\26\u0114\2\0\1\u0115\22\0\2\310\3\0\1\310" - + "\1\0\4\310\2\0\4\310\4\0\10\310\3\0\26\310" - + "\32\0\1\u0116\6\0\1\u0117\76\0\1\u0118\6\0\2\u0118" - + "\4\0\4\u0118\5\0\3\u0118\2\0\2\u0118\3\0\26\u0118" - + "\2\0\1\u0119\14\0\1\321\110\0\5\322\1\u011a\105\322" - + "\4\0\1\321\1\323\137\0\1\u011b\101\0\1\332\13\0" - + "\1\332\3\0\2\332\70\0\2\u011c\3\0\3\u011c\5\0" - + "\1\u011c\2\0\5\u011c\3\0\1\u011c\1\0\1\u011c\1\0" - + "\1\u011c\6\0\1\u011c\40\0\1\150\7\0\1\166\13\0" - + "\1\u011d\3\0\2\u011d\2\164\54\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\5\22\1\u011e\20\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\2\22\1\u011f\23\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u0120\21\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22" - + "\1\u0121\3\0\26\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\16\22\1\u0122\7\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0123" - + "\3\0\26\22\23\0\3\346\7\0\2\346\3\0\4\346" - + "\4\0\10\346\3\0\26\346\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u0124\23\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\12\22\1\u0125\13\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\7\22\1\u0126\3\0\26\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\4\22\1\u0127\21\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\5\22\1\u0128\2\22\1\u0129" - + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\5\22\1\u012a\20\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u012b" - + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\7\22\1\u012c\3\0\26\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u012d\15\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\1\22\1\u012e\24\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\11\22\1\u012f\14\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22" - + "\1\u0130\3\0\26\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\14\22\1\u0131\11\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0132" - + "\3\0\26\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\6\22\1\u0133\17\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\u0134\20\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\7\22\1\u0135\3\0\26\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u0136" - + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\7\22\1\u0137\3\0\26\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\6\22\1\u0138\5\22" - + "\1\u0139\11\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\7\22\1\u013a\3\0\26\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u013b" - + "\23\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\7\22\1\u013c\3\0\26\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u013d\23\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\16\22\1\u013e\7\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u013f\11\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\10\22\1\u0140\15\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\22\22\1\u0141\3\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\3\22\1\u0142\22\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0143\11\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\13\22\1\u0144\12\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\11\22\1\u0145\14\22" - + "\35\0\2\u0146\3\0\3\u0146\5\0\1\u0146\2\0\5\u0146" - + "\3\0\1\u0146\1\0\1\u0146\1\0\1\u0146\6\0\1\u0146" - + "\47\0\2\u0147\3\0\3\u0147\5\0\1\u0147\2\0\5\u0147" - + "\3\0\1\u0147\1\0\1\u0147\1\0\1\u0147\6\0\1\u0147" - + "\30\0\2\u0148\5\0\2\u0114\1\0\1\u0148\1\0\1\u0114" - + "\1\u0149\4\u0114\2\0\4\u0114\4\0\10\u0114\3\0\26\u0114" - + "\32\0\1\u014a\122\0\1\u014b\75\0\2\u0118\3\0\1\u0118" - + "\1\0\4\u0118\2\0\4\u0118\4\0\10\u0118\3\0\26\u0118" - + "\15\0\4\322\1\321\1\u011a\105\322\20\0\2\u014c\3\0" - + "\3\u014c\5\0\1\u014c\2\0\5\u014c\3\0\1\u014c\1\0" - + "\1\u014c\1\0\1\u014c\6\0\1\u014c\40\0\1\150\7\0" - + "\1\166\13\0\1\u014d\3\0\2\u014d\2\164\54\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u014e\3\0" - + "\26\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\14\22\1\u014f\11\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u0150" - + "\15\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\7\22\1\u0151\16\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\3\22\1\u0152" - + "\22\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\1\22\1\u0153\24\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0154" - + "\7\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u0155\15\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0156" - + "\14\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\5\22\1\u0157\20\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0158" - + "\14\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\1\22\1\u0159\24\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u015a" - + "\21\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\1\22\1\u015b\24\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\22\22\1\u015c" - + "\3\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\5\22\1\u015d\20\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\15\22\1\u015e" - + "\10\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\6\22\1\u015f\17\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u0160" - + "\23\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\1\22\1\u0161\24\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\1\22\1\u0162" - + "\24\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\7\22\1\u0163\3\0\26\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\3\22\1\u0164\4\22\3\0\26\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\12\22\1\u0165\13\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u0166\15\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\21\22\1\u0167\4\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\7\22\1\u0168\3\0\26\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0169" - + "\3\0\26\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\2\22\1\u016a\23\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22" - + "\1\u016b\23\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\11\22\1\u016c\14\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\u016d\16\22\16\0\2\u0148\10\0\1\u0148\2\0\1\u0149" - + "\122\0\1\u016e\104\0\2\u016f\3\0\3\u016f\5\0\1\u016f" - + "\2\0\5\u016f\3\0\1\u016f\1\0\1\u016f\1\0\1\u016f" - + "\6\0\1\u016f\40\0\1\150\7\0\1\166\13\0\1\u0170" - + "\3\0\2\u0170\2\164\54\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\14\22\1\u0171\11\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\11\22\1\u0172\14\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\13\22\1\u0173\12\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\7\22\1\u0174\16\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\7\22\1\u0175\16\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\4\22\1\u0176\21\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\16\22\1\u0177\7\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\11\22\1\u0178\14\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\7\22\1\u0179\3\0\26\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\17\22" - + "\1\u017a\6\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\3\22\1\u017b\4\22\3\0\26\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\u017c\16\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\3\22\1\u017d\4\22\3\0\7\22\1\u017e\16\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\10\22\1\u017f\15\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\21\22\1\u0180\4\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22" - + "\3\0\11\22\1\u0181\14\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0182\11\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22" - + "\1\u0183\3\0\26\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\11\22\1\u0184\14\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\4\22\1\u0185\21\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\10\22\1\u0186\15\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\23\22\1\u0187\2\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\4\22\1\u0188\21\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\11\22\1\u0189\14\22\44\0\1\u018a\103\0\2\u018b\3\0" - + "\3\u018b\5\0\1\u018b\2\0\5\u018b\3\0\1\u018b\1\0" - + "\1\u018b\1\0\1\u018b\6\0\1\u018b\40\0\1\150\7\0" - + "\1\166\13\0\1\u018c\3\0\2\u018c\2\164\54\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\20\22" - + "\1\u018d\5\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\6\22\1\u018e\17\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\u018f\20\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\12\22\1\u0190\13\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\13\22" - + "\1\u0191\12\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\2\22\1\u0192\23\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\4\22" - + "\1\u0193\21\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\2\22\1\u0194\23\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22" - + "\1\u0195\23\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\7\22\1\u0196\3\0\26\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u0197" - + "\16\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u0198\15\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u0199" - + "\21\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u019a\15\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\7\22\1\u019b\3\0\26\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22" - + "\1\u019c\3\0\26\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\10\22\1\u019d\15\22\45\0" - + "\1\u019e\102\0\2\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\40\0\1\150\7\0\1\166\13\0\1\u01a0\3\0" - + "\2\u01a0\2\164\54\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\7\22\1\u01a1\16\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u01a2\3\0" - + "\26\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\7\22\1\u01a3\3\0\26\22\23\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u01a4\21\22" - + "\23\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22" - + "\1\u01a5\3\0\26\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\4\22\1\u01a6\21\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\14\22\1\u01a7\11\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\10\22\3\0\7\22\1\u01a8\16\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u01a9" - + "\3\0\26\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\7\22\1\u01aa\3\0\26\22\23\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\10\22\3\0\20\22\1\u01ab" - + "\5\22\44\0\1\u01ac\103\0\2\u01ad\3\0\3\u01ad\5\0" - + "\1\u01ad\2\0\5\u01ad\3\0\1\u01ad\1\0\1\u01ad\1\0" - + "\1\u01ad\6\0\1\u01ad\40\0\1\150\7\0\1\166\13\0" - + "\1\u01ae\3\0\2\u01ae\2\164\54\0\3\22\7\0\2\22" - + "\3\0\4\22\4\0\7\22\1\u01af\3\0\26\22\23\0" - + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0" - + "\6\22\1\u01b0\17\22\23\0\3\22\7\0\2\22\3\0" - + "\4\22\4\0\7\22\1\u01b1\3\0\26\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\10\22" - + "\1\u01b2\15\22\23\0\3\22\7\0\2\22\3\0\4\22" - + "\4\0\10\22\3\0\13\22\1\u01b3\12\22\23\0\3\22" - + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\13\22" - + "\1\u01b4\12\22\41\0\1\u01b5\106\0\2\u01b6\3\0\3\u01b6" - + "\5\0\1\u01b6\2\0\5\u01b6\3\0\1\u01b6\1\0\1\u01b6" - + "\1\0\1\u01b6\6\0\1\u01b6\40\0\1\150\7\0\1\166" - + "\13\0\1\u01b7\3\0\2\u01b7\2\164\54\0\3\22\7\0" - + "\2\22\3\0\4\22\4\0\3\22\1\u01b8\4\22\3\0" - + "\26\22\23\0\3\22\7\0\2\22\3\0\4\22\4\0" - + "\10\22\3\0\5\22\1\u01b9\20\22\26\0\1\150\7\0" - + "\1\166\13\0\1\u01ba\3\0\2\u01ba\2\164\57\0\1\150" - + "\7\0\1\166\13\0\1\u01bb\3\0\2\u01bb\2\164\57\0" - + "\1\150\7\0\1\166\13\0\1\u01bc\3\0\2\u01bc\2\164" - + "\57\0\1\150\7\0\1\166\13\0\1\u01bd\3\0\2\u01bd" - + "\2\164\57\0\1\150\7\0\1\166\13\0\1\u01be\3\0" - + "\2\u01be\2\164\57\0\1\150\7\0\1\166\13\0\1\u01bf" - + "\3\0\2\u01bf\2\164\46\0"; + /** the current state of the DFA */ + private int zzState; - private static int[] zzUnpackTrans() { - int[] result = new int[22800]; - 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; + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; - private static final int ZZ_NO_MATCH = 1; + /** number of newlines encountered up to the start of the matched text */ + private int yyline; - private static final int ZZ_PUSHBACK_2BIG = 2; + /** the number of characters up to the start of the matched text */ + private int yychar; - /* 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" - }; + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; - private static final String ZZ_ATTRIBUTE_PACKED_0 - = "\13\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11" - + "\26\1\7\11\4\1\1\11\2\1\2\11\3\1\1\11" - + "\1\1\1\11\3\1\2\11\1\1\1\11\2\1\1\11" - + "\1\1\2\11\2\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\1\0\44\1\11\11\1\1\6\11\1\1" - + "\1\11\1\0\1\11\1\0\1\11\1\0\2\11\1\0" - + "\1\1\4\0\1\1\2\0\2\11\1\1\1\11\2\1" - + "\1\11\2\0\3\11\1\1\1\11\1\0\1\1\1\11" - + "\62\1\3\0\3\11\1\0\1\11\2\0\1\1\1\11" - + "\1\0\1\11\52\1\1\11\2\0\2\11\1\0\42\1" - + "\1\0\33\1\1\0\23\1\1\0\15\1\1\0\10\1" - + "\2\11\11\1"; + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; - private static int[] zzUnpackAttribute() { - int[] result = new int[447]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + /** + * The number of occupied positions in zzBuffer beyond zzEndRead. + * When a lead/high surrogate has been read from the input stream + * into the final zzBuffer position, this will have a value of 1; + * otherwise, it will have a value of 0. + */ + private int zzFinalHighSurrogate = 0; - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ + /* user code: */ - 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 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; - - /** - * The number of occupied positions in zzBuffer beyond zzEndRead. - * When a lead/high surrogate has been read from the input stream - * into the final zzBuffer position, this will have a value of 1; - * otherwise, it will have a value of 0. - */ - private int zzFinalHighSurrogate = 0; - - /* user code: */ private String sourceCode; - public ActionScriptLexer(String sourceCode) { + public ActionScriptLexer(String sourceCode){ this(new StringReader(sourceCode)); this.sourceCode = sourceCode; } - public void yypushbackstr(String s, int state) { + public void yypushbackstr(String s, int state) + { sourceCode = s + sourceCode.substring(yychar + yylength()); yyreset(new StringReader(sourceCode)); yybegin(state); } - public void yypushbackstr(String s) { + public void yypushbackstr(String s) + { yypushbackstr(s, YYINITIAL); } @@ -1001,24 +948,24 @@ public final class ActionScriptLexer { 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); } } @@ -1030,10 +977,9 @@ public final class ActionScriptLexer { } ParsedSymbol last; - - public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException { + public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException{ ParsedSymbol ret = null; - if (!pushedBack.isEmpty()) { + if (!pushedBack.isEmpty()){ ret = last = pushedBack.pop(); } else { ret = last = yylex(); @@ -1042,1264 +988,1094 @@ public final class ActionScriptLexer { return ret; } - /** - * Creates a new scanner - * - * @param in the java.io.Reader to read input from. - */ - public ActionScriptLexer(java.io.Reader in) { - this.zzReader = in; + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptLexer(java.io.Reader in) { + this.zzReader = in; + } + + + /** + * 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[0x110000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 3136) { + 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) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; } - /** - * 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[0x110000]; - int i = 0; /* index in packed string */ + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + } - int j = 0; /* index in unpacked array */ + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int totalRead = 0; + while (totalRead < requested) { + int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); + if (numRead == -1) { + break; + } + totalRead += numRead; + } - while (i < 3136) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do { - map[j++] = value; - } while (--count > 0); + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; } - return map; + } + 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 { + // totalRead = 0: End of stream + return true; + } - /* first: make room (if you can) */ - if (zzStartRead > 0) { - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead - zzStartRead); + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ - /* translate stored positions */ - zzEndRead -= zzStartRead; - zzCurrentPos -= zzStartRead; - zzMarkedPos -= zzStartRead; - zzStartRead = 0; - } + if (zzReader != null) + zzReader.close(); + } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { - /* if not: blow it up */ - char newBuffer[] = new char[zzBuffer.length * 2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - } - /* fill the buffer with new input */ - int requested = zzBuffer.length - zzEndRead; - int totalRead = 0; - while (totalRead < requested) { - int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); - if (numRead == -1) { - break; - } - totalRead += numRead; - } + /** + * 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; + zzFinalHighSurrogate = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) + zzBuffer = new char[ZZ_BUFFERSIZE]; + } - if (totalRead > 0) { - zzEndRead += totalRead; - if (totalRead == requested) { /* possibly more input available */ - if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { - --zzEndRead; - zzFinalHighSurrogate = 1; - } - } - return false; - } + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } - // totalRead = 0: End of stream - return true; + + /** + * 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]; } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ + throw new Error(message); + } - zzEndRead = zzStartRead; /* invalidate buffer */ - if (zzReader != null) { - zzReader.close(); - } - } + /** + * 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); - /** - * 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; - zzFinalHighSurrogate = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) { - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - } + zzMarkedPos -= number; + } - /** - * 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; - } + /** + * 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, AVM2ParseException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * 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]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * 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]; - } + yychar+= zzMarkedPosL-zzStartRead; - throw new Error(message); - } + zzAction = -1; - /** - * 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); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; - zzMarkedPos -= number; - } + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } - /** - * 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, AVM2ParseException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + 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 = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + 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 = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } 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 = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - } - 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 = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); } + } + 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 165: - break; - case 2: { - yyline++; - } - case 166: - break; - case 3: { /*ignore*/ - - } - case 167: - break; - case 4: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); - } - case 168: - break; - case 5: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); - } - case 169: - break; - case 6: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); - } - case 170: - break; - case 7: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); - } - case 171: - break; - case 8: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); - } - case 172: - break; - case 9: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); - } - case 173: - break; - case 10: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); - } - case 174: - break; - case 11: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); - } - case 175: - break; - case 12: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); - } - case 176: - break; - case 13: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong((yytext()))); - } - case 177: - break; - case 14: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); - } - case 178: - break; - case 15: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); - } - case 179: - break; - case 16: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); - } - case 180: - break; - case 17: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); - } - case 181: - break; - case 18: { - string.setLength(0); - yybegin(STRING); - } - case 182: - break; - case 19: { - string.setLength(0); - yybegin(CHARLITERAL); - } - case 183: - break; - case 20: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); - } - case 184: - break; - case 21: { - string.setLength(0); - yybegin(OIDENTIFIER); - } - case 185: - break; - case 22: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); - } - case 186: - break; - case 23: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); - } - case 187: - break; - case 24: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); - } - case 188: - break; - case 25: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); - } - case 189: - break; - case 26: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); - } - case 190: - break; - case 27: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); - } - case 191: - break; - case 28: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); - } - case 192: - break; - case 29: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); - } - case 193: - break; - case 30: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); - } - case 194: - break; - case 31: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); - } - case 195: - break; - case 32: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); - } - case 196: - break; - case 33: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); - } - case 197: - break; - case 34: { - string.append(yytext()); - } - case 198: - break; - case 35: { - yybegin(YYINITIAL); - yyline++; - } - case 199: - break; - case 36: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); - } - case 200: - break; - case 37: { - yybegin(YYINITIAL); - yyline++; - } - case 201: - break; - case 38: { - string.append(yytext()); - yyline++; - } - case 202: - break; - case 39: { - 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 203: - break; - case 40: { - 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 204: - break; - case 41: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); - } - case 205: - break; - case 42: { - 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 206: - break; - case 43: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); - } - case 207: - break; - case 44: { - string.append(yytext()); - yyline++; - } - case 208: - break; - case 45: { - 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 209: - break; - case 46: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString()); - } - case 210: - break; - case 47: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); - } - case 211: - break; - case 48: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); - } - case 212: - break; - case 49: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); - } - case 213: - break; - case 50: { - return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); - } - case 214: - break; - case 51: { - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble((yytext()))); - } - case 215: - break; - case 52: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); - } - case 216: - break; - case 53: { - yybegin(XMLOPENTAG); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()); - } - case 217: - break; - case 54: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); - } - case 218: - break; - case 55: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); - } - case 219: - break; - case 56: { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); - } - case 220: - break; - case 57: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); - } - case 221: - break; - case 58: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); - } - case 222: - break; - case 59: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); - } - case 223: - break; - case 60: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); - } - case 224: - break; - case 61: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); - } - case 225: - break; - case 62: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); - } - case 226: - break; - case 63: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); - } - case 227: - break; - case 64: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext(), 8)); - } - case 228: - break; - case 65: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); - } - case 229: - break; - case 66: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); - } - case 230: - break; - case 67: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); - } - case 231: - break; - case 68: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); - } - case 232: - break; - case 69: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); - } - case 233: - break; - case 70: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); - } - case 234: - break; - case 71: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); - } - case 235: - break; - case 72: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); - } - case 236: - break; - case 73: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); - } - case 237: - break; - case 74: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); - } - case 238: - break; - case 75: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); - } - case 239: - break; - case 76: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); - } - case 240: - break; - case 77: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); - } - case 241: - break; - case 78: { /* ignore illegal character escape */ - - } - case 242: - break; - case 79: { - string.append('\"'); - } - case 243: - break; - case 80: { - string.append('\''); - } - case 244: - break; - case 81: { - string.append('\f'); - } - case 245: - break; - case 82: { - string.append('\\'); - } - case 246: - break; - case 83: { - string.append('\b'); - } - case 247: - break; - case 84: { - string.append('\r'); - } - case 248: - break; - case 85: { - string.append('\n'); - } - case 249: - break; - case 86: { - string.append('\t'); - } - case 250: - 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 251: - 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 252: - break; - case 89: { - yybegin(XMLOPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 253: - 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 254: - 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 255: - break; - case 92: { - yybegin(XMLINSTROPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 256: - 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 257: - 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 258: - break; - case 95: { - throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 259: - break; - case 96: { - string.append('\u00A7'); - } - case 260: - break; - case 97: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); - } - case 261: - break; - case 98: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); - } - case 262: - break; - case 99: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); - } - case 263: - break; - case 100: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); - } - case 264: - break; - case 101: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); - } - case 265: - break; - case 102: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); - } - case 266: - break; - case 103: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext().substring(2), 16)); - } - case 267: - break; - case 104: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); - } - case 268: - break; - case 105: { - return new ParsedSymbol(SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2)); - } - case 269: - break; - case 106: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext()); - } - case 270: - break; - case 107: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); - } - case 271: - break; - case 108: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); - } - case 272: - break; - case 109: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); - } - case 273: - break; - case 110: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); - } - case 274: - break; - case 111: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext()); - } - case 275: - break; - case 112: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); - } - case 276: - break; - case 113: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); - } - case 277: - break; - case 114: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); - } - case 278: - break; - case 115: { - 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 279: - break; - case 116: { - 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 280: - break; - case 117: { - 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 281: - break; - case 118: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); - } - case 282: - break; - case 119: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext()); - } - case 283: - break; - case 120: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); - } - case 284: - break; - case 121: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); - } - case 285: - break; - case 122: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); - } - case 286: - break; - case 123: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); - } - case 287: - break; - case 124: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); - } - case 288: - break; - case 125: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); - } - case 289: - break; - case 126: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); - } - case 290: - break; - case 127: { - char val = (char) Integer.parseInt(yytext().substring(2), 16); - string.append(val); - } - case 291: - break; - case 128: { - 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 292: - break; - case 129: { - 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 293: - break; - case 130: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); - } - case 294: - break; - case 131: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext()); - } - case 295: - break; - case 132: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); - } - case 296: - break; - case 133: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); - } - case 297: - break; - case 134: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); - } - case 298: - break; - case 135: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); - } - case 299: - break; - case 136: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); - } - case 300: - break; - case 137: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); - } - case 301: - break; - case 138: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); - } - case 302: - break; - case 139: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); - } - case 303: - break; - case 140: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext()); - } - case 304: - break; - case 141: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); - } - case 305: - break; - case 142: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext()); - } - case 306: - break; - case 143: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); - } - case 307: - break; - case 144: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); - } - case 308: - break; - case 145: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); - } - case 309: - break; - case 146: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); - } - case 310: - break; - case 147: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); - } - case 311: - break; - case 148: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); - } - case 312: - break; - case 149: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); - } - case 313: - break; - case 150: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext()); - } - case 314: - break; - case 151: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); - } - case 315: - break; - case 152: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); - } - case 316: - break; - case 153: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); - } - case 317: - break; - case 154: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); - } - case 318: - break; - case 155: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext()); - } - case 319: - break; - case 156: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); - } - case 320: - break; - case 157: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); - } - case 321: - break; - case 158: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext()); - } - case 322: - break; - case 159: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); - } - case 323: - break; - case 160: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); - } - case 324: - break; - case 161: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); - } - case 325: - break; - case 162: { - 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 326: - break; - case 163: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); - } - case 327: - break; - case 164: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); - } - case 328: - 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 165: break; + case 2: + { yyline++; + } + case 166: break; + case 3: + { /*ignore*/ + } + case 167: break; + case 4: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); + } + case 168: break; + case 5: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); + } + case 169: break; + case 6: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); + } + case 170: break; + case 7: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); + } + case 171: break; + case 8: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); + } + case 172: break; + case 9: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); + } + case 173: break; + case 10: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); + } + case 174: break; + case 11: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); + } + case 175: break; + case 12: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); + } + case 176: break; + case 13: + { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong((yytext()))); + } + case 177: break; + case 14: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); + } + case 178: break; + case 15: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); + } + case 179: break; + case 16: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); + } + case 180: break; + case 17: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); + } + case 181: break; + case 18: + { string.setLength(0); + yybegin(STRING); + } + case 182: break; + case 19: + { string.setLength(0); + yybegin(CHARLITERAL); + } + case 183: break; + case 20: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); + } + case 184: break; + case 21: + { string.setLength(0); + yybegin(OIDENTIFIER); + } + case 185: break; + case 22: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); + } + case 186: break; + case 23: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); + } + case 187: break; + case 24: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); + } + case 188: break; + case 25: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); + } + case 189: break; + case 26: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); + } + case 190: break; + case 27: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); + } + case 191: break; + case 28: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); + } + case 192: break; + case 29: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); + } + case 193: break; + case 30: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); + } + case 194: break; + case 31: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); + } + case 195: break; + case 32: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); + } + case 196: break; + case 33: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); + } + case 197: break; + case 34: + { string.append(yytext()); + } + case 198: break; + case 35: + { yybegin(YYINITIAL); yyline++; + } + case 199: break; + case 36: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); + } + case 200: break; + case 37: + { yybegin(YYINITIAL); yyline++; + } + case 201: break; + case 38: + { string.append(yytext()); yyline++; + } + case 202: break; + case 39: + { 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 203: break; + case 40: + { 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 204: break; + case 41: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); + } + case 205: break; + case 42: + { 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 206: break; + case 43: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); + } + case 207: break; + case 44: + { string.append(yytext()); yyline++; + } + case 208: break; + case 45: + { 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 209: break; + case 46: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString()); + } + case 210: break; + case 47: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); + } + case 211: break; + case 48: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); + } + case 212: break; + case 49: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); + } + case 213: break; + case 50: + { return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); + } + case 214: break; + case 51: + { return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble((yytext()))); + } + case 215: break; + case 52: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); + } + case 216: break; + case 53: + { yybegin(XMLOPENTAG); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()); + } + case 217: break; + case 54: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); + } + case 218: break; + case 55: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); + } + case 219: break; + case 56: + { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); + } + case 220: break; + case 57: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); + } + case 221: break; + case 58: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); + } + case 222: break; + case 59: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); + } + case 223: break; + case 60: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); + } + case 224: break; + case 61: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); + } + case 225: break; + case 62: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); + } + case 226: break; + case 63: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); + } + case 227: break; + case 64: + { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext(), 8)); + } + case 228: break; + case 65: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); + } + case 229: break; + case 66: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); + } + case 230: break; + case 67: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); + } + case 231: break; + case 68: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); + } + case 232: break; + case 69: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); + } + case 233: break; + case 70: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); + } + case 234: break; + case 71: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); + } + case 235: break; + case 72: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); + } + case 236: break; + case 73: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); + } + case 237: break; + case 74: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); + } + case 238: break; + case 75: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); + } + case 239: break; + case 76: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); + } + case 240: break; + case 77: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); + } + case 241: break; + case 78: + { /* ignore illegal character escape */ + } + case 242: break; + case 79: + { string.append('\"'); + } + case 243: break; + case 80: + { string.append('\''); + } + case 244: break; + case 81: + { string.append('\f'); + } + case 245: break; + case 82: + { string.append('\\'); + } + case 246: break; + case 83: + { string.append('\b'); + } + case 247: break; + case 84: + { string.append('\r'); + } + case 248: break; + case 85: + { string.append('\n'); + } + case 249: break; + case 86: + { string.append('\t'); + } + case 250: 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 251: 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 252: break; + case 89: + { yybegin(XMLOPENTAG); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 253: 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 254: 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 255: break; + case 92: + { yybegin(XMLINSTROPENTAG); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 256: 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 257: 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 258: break; + case 95: + { throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 259: break; + case 96: + { string.append('\u00A7'); + } + case 260: break; + case 97: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); + } + case 261: break; + case 98: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); + } + case 262: break; + case 99: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); + } + case 263: break; + case 100: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); + } + case 264: break; + case 101: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); + } + case 265: break; + case 102: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); + } + case 266: break; + case 103: + { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext().substring(2), 16)); + } + case 267: break; + case 104: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); + } + case 268: break; + case 105: + { return new ParsedSymbol(SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2)); + } + case 269: break; + case 106: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext()); + } + case 270: break; + case 107: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); + } + case 271: break; + case 108: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); + } + case 272: break; + case 109: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); + } + case 273: break; + case 110: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); + } + case 274: break; + case 111: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext()); + } + case 275: break; + case 112: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); + } + case 276: break; + case 113: + { string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); + } + case 277: break; + case 114: + { string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); + } + case 278: break; + case 115: + { 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 279: break; + case 116: + { 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 280: break; + case 117: + { 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 281: break; + case 118: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); + } + case 282: break; + case 119: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext()); + } + case 283: break; + case 120: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); + } + case 284: break; + case 121: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); + } + case 285: break; + case 122: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); + } + case 286: break; + case 123: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); + } + case 287: break; + case 124: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); + } + case 288: break; + case 125: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); + } + case 289: break; + case 126: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); + } + case 290: break; + case 127: + { char val = (char) Integer.parseInt(yytext().substring(2), 16); + string.append(val); + } + case 291: break; + case 128: + { 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 292: break; + case 129: + { 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 293: break; + case 130: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); + } + case 294: break; + case 131: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext()); + } + case 295: break; + case 132: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); + } + case 296: break; + case 133: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); + } + case 297: break; + case 134: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); + } + case 298: break; + case 135: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); + } + case 299: break; + case 136: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); + } + case 300: break; + case 137: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); + } + case 301: break; + case 138: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); + } + case 302: break; + case 139: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); + } + case 303: break; + case 140: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext()); + } + case 304: break; + case 141: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); + } + case 305: break; + case 142: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext()); + } + case 306: break; + case 143: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); + } + case 307: break; + case 144: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); + } + case 308: break; + case 145: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); + } + case 309: break; + case 146: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); + } + case 310: break; + case 147: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); + } + case 311: break; + case 148: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); + } + case 312: break; + case 149: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); + } + case 313: break; + case 150: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext()); + } + case 314: break; + case 151: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); + } + case 315: break; + case 152: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); + } + case 316: break; + case 153: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); + } + case 317: break; + case 154: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); + } + case 318: break; + case 155: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext()); + } + case 319: break; + case 156: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); + } + case 320: break; + case 157: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); + } + case 321: break; + case 158: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext()); + } + case 322: break; + case 159: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); + } + case 323: break; + case 160: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); + } + case 324: break; + case 161: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); + } + case 325: break; + case 162: + { 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 326: break; + case 163: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); + } + case 327: break; + case 164: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); + } + case 328: 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/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Stage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Stage.java index d0a0c2d66..8a643db5a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Stage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Stage.java @@ -27,7 +27,7 @@ public class Stage extends DisplayObject { startTime = System.currentTimeMillis(); this.timelined = timelined; this.timeline = timelined != null ? timelined.getTimeline() : null; - this.frame = timelined != null ? this.timeline.getFrame(0) : null; + this.frame = timelined != null && this.timeline.getFrameCount() > 0 ? this.timeline.getFrame(0) : null; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java index 54b0301ab..e3e7764b1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java @@ -359,7 +359,11 @@ public class DefineEditTextTag extends TextTag { private List getTextWithStyle() { String str = ""; TextStyle style = new TextStyle(); - style.font = swf.getFont(fontId); + if (fontClass != null) { + style.font = swf.getFontByClass(fontClass); + } else { + style.font = swf.getFont(fontId); + } style.fontHeight = fontHeight; style.fontLeading = leading; if (hasTextColor) { @@ -991,10 +995,8 @@ public class DefineEditTextTag extends TextTag { if (Character.isWhitespace(c)) { lastWasWhiteSpace = true; } - } else { - if (multiline) { - textModel.newParagraph(); - } + } else if (multiline) { + textModel.newParagraph(); } prevChar = c; } @@ -1096,8 +1098,15 @@ public class DefineEditTextTag extends TextTag { } for (SameStyleTextRecord tr : line) { TEXTRECORD tr2 = new TEXTRECORD(); - tr2.styleFlagsHasFont = fontId != 0; - tr2.fontId = fontId; + int fid = fontId; + if (fontClass != null) { + FontTag ft = swf.getFontByClass(fontClass); + if (ft != null) { + fid = ft.getFontId(); + } + } + tr2.styleFlagsHasFont = fid != 0; + tr2.fontId = fid; tr2.textHeight = tr.style.fontHeight; if (tr.style.textColor != null) { tr2.styleFlagsHasColor = true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java index fb6e3b21c..4180314e2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java @@ -28,7 +28,9 @@ import com.jpexs.decompiler.flash.types.annotations.Table; import com.jpexs.helpers.ByteArrayRange; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * Makes portions of a SWF file available for import by other SWF files @@ -65,6 +67,19 @@ public class ExportAssetsTag extends SymbolClassTypeTag { names = new ArrayList<>(); } + @Override + public Map getTagToNameMap() { + Map exportNames = new HashMap<>(); + for (int i = 0; i < tags.size(); i++) { + int tagId = tags.get(i); + String name = names.get(i); + if ((!exportNames.containsKey(tagId)) && (!exportNames.containsValue(name))) { + exportNames.put(tagId, name); + } + } + return exportNames; + } + /** * Constructor * diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SymbolClassTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SymbolClassTag.java index 24c56b068..6cf24e4be 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SymbolClassTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SymbolClassTag.java @@ -28,7 +28,9 @@ import com.jpexs.decompiler.flash.types.annotations.Table; import com.jpexs.helpers.ByteArrayRange; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @@ -50,6 +52,19 @@ public class SymbolClassTag extends SymbolClassTypeTag { @Table(value = "symbols", itemName = "symbol") public List names; + @Override + public Map getTagToNameMap() { + Map exportNames = new HashMap<>(); + for (int i = 0; i < tags.size(); i++) { + int tagId = tags.get(i); + String name = names.get(i); + if ((!exportNames.containsKey(tagId)) && (!exportNames.containsValue(name))) { + exportNames.put(tagId, name); + } + } + return exportNames; + } + /** * Constructor * diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java index 1b10b7130..218d5b178 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java @@ -84,6 +84,17 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { @Internal private boolean modified; + @Internal + protected boolean imported = false; + + public void setImported(boolean imported) { + this.imported = imported; + } + + public boolean isImported() { + return imported; + } + /** * Original tag data */ @@ -573,6 +584,10 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { return modified; } + public boolean isReadOnly() { + return isImported(); + } + @Override public void getNeededCharacters(Set needed) { } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImportTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImportTag.java index c5222778c..2255ed3e3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImportTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImportTag.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.tags.base; import java.util.Map; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SymbolClassTypeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SymbolClassTypeTag.java index e305ead38..f30518908 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SymbolClassTypeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SymbolClassTypeTag.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.tags.base; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.helpers.ByteArrayRange; +import java.util.Map; /** * @@ -29,4 +30,6 @@ public abstract class SymbolClassTypeTag extends Tag { public SymbolClassTypeTag(SWF swf, int id, String name, ByteArrayRange data) { super(swf, id, name, data); } + + public abstract Map getTagToNameMap(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java index 401e77d27..681fcca6a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java @@ -109,6 +109,9 @@ public class Timeline { public Frame getFrame(int index) { ensureInitialized(); + if (index >= frames.size()) { + return null; + } return frames.get(index); } diff --git a/src/com/jpexs/decompiler/flash/gui/FontPanel.java b/src/com/jpexs/decompiler/flash/gui/FontPanel.java index 984b5b781..6ad19b0bc 100644 --- a/src/com/jpexs/decompiler/flash/gui/FontPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/FontPanel.java @@ -219,6 +219,9 @@ public class FontPanel extends JPanel { setAllowSave(true); setEditable(false); + boolean readOnly = ((Tag) ft).isReadOnly(); + addCharsPanel.setVisible(!readOnly); + buttonEdit.setVisible(!readOnly); } private void initComponents() { diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index 70d494ee3..a0086f15d 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -26,8 +26,10 @@ import com.jpexs.decompiler.flash.SWFBundle; import com.jpexs.decompiler.flash.SWFSourceInfo; import com.jpexs.decompiler.flash.SearchMode; import com.jpexs.decompiler.flash.SwfOpenException; +import com.jpexs.decompiler.flash.UrlResolver; import com.jpexs.decompiler.flash.Version; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.configuration.SwfSpecificConfiguration; import com.jpexs.decompiler.flash.console.CommandLineArgumentParser; @@ -653,18 +655,149 @@ public class Main { } } else { InputStream fInputStream = inputStream; + + final String[] yesno = new String[]{AppStrings.translate("button.yes"), AppStrings.translate("button.no"), AppStrings.translate("button.yes.all"), AppStrings.translate("button.no.all")}; + CancellableWorker worker = new CancellableWorker() { - @Override - public SWF doInBackground() throws Exception { + + private boolean yestoall = false; + private boolean notoall = false; + + private SWF open(InputStream is, String file, String fileTitle) throws IOException, InterruptedException { final CancellableWorker worker = this; - SWF swf = new SWF(fInputStream, sourceInfo.getFile(), sourceInfo.getFileTitle(), new ProgressListener() { + + SWF swf = new SWF(is, file, fileTitle, new ProgressListener() { @Override public void progress(int p) { startWork(AppStrings.translate("work.reading.swf"), p, worker); } - }, Configuration.parallelSpeedUp.get()); + }, Configuration.parallelSpeedUp.get(), false, true, new UrlResolver() { + @Override + public SWF resolveUrl(final String url) { + int opt = -1; + if (!(yestoall || notoall)) { + opt = View.showOptionDialog(null, AppStrings.translate("message.imported.swf").replace("%url%", url), AppStrings.translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, yesno, AppStrings.translate("button.yes")); + if (opt == 2) { + yestoall = true; + } + if (opt == 3) { + notoall = true; + } + } + + if (yestoall) { + opt = 0; // yes + } else if (notoall) { + opt = 1; // no + } + + if (opt == 1) //no + { + return null; + } + + if (url.startsWith("http://") || url.startsWith("https://")) { + try { + URL u = new URL(url); + return open(u.openStream(), null, url); //? + } catch (Exception ex) { + //ignore + } + } else { + File f = new File(new File(file).getParentFile(), url); + if (f.exists()) { + try { + return open(new FileInputStream(f), f.getAbsolutePath(), f.getName()); + } catch (Exception ex) { + //ignore + } + } + } + Reference ret = new Reference<>(null); + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + + while (JOptionPane.YES_OPTION == View.showConfirmDialog(null, AppStrings.translate("message.imported.swf.manually").replace("%url%", url), AppStrings.translate("error"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE)) { + + JFileChooser fc = new JFileChooser(); + fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); + FileFilter allSupportedFilter = new FileFilter() { + private final String[] supportedExtensions = new String[]{".swf", ".gfx"}; + + @Override + public boolean accept(File f) { + String name = f.getName().toLowerCase(); + for (String ext : supportedExtensions) { + if (name.endsWith(ext)) { + return true; + } + } + return f.isDirectory(); + } + + @Override + public String getDescription() { + String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); + return AppStrings.translate("filter.supported") + " (" + exts + ")"; + } + }; + fc.setFileFilter(allSupportedFilter); + FileFilter swfFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swf"); + } + }; + fc.addChoosableFileFilter(swfFilter); + + FileFilter gfxFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.gfx"); + } + }; + fc.addChoosableFileFilter(gfxFilter); + fc.setAcceptAllFileFilterUsed(false); + JFrame f = new JFrame(); + View.setWindowIcon(f); + int returnVal = fc.showOpenDialog(f); + if (returnVal == JFileChooser.APPROVE_OPTION) { + Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); + File selFile = Helper.fixDialogFile(fc.getSelectedFile()); + try { + ret.setVal(open(new FileInputStream(selFile), selFile.getAbsolutePath(), selFile.getName())); + break; + } catch (Exception ex) { + //ignore; + } + } else { + break; + } + } + } + }); + return ret.getVal(); + } + }); return swf; } + + @Override + + public SWF doInBackground() throws Exception { + return open(fInputStream, sourceInfo.getFile(), sourceInfo.getFileTitle()); + } }; if (loadingDialog != null) { loadingDialog.setWroker(worker); diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index ac584586d..0915baace 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -833,10 +833,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se if (View.showConfirmDialog(this, translate("message.confirm.closeAll"), translate("message.warning"), JOptionPane.OK_CANCEL_OPTION, Configuration.showCloseConfirmation, JOptionPane.OK_OPTION) != JOptionPane.OK_OPTION) { return false; } - } else { - if (View.showConfirmDialog(this, translate("message.confirm.close").replace("{swfName}", swfList.toString()), translate("message.warning"), JOptionPane.OK_CANCEL_OPTION, Configuration.showCloseConfirmation, JOptionPane.OK_OPTION) != JOptionPane.OK_OPTION) { - return false; - } + } else if (View.showConfirmDialog(this, translate("message.confirm.close").replace("{swfName}", swfList.toString()), translate("message.warning"), JOptionPane.OK_CANCEL_OPTION, Configuration.showCloseConfirmation, JOptionPane.OK_OPTION) != JOptionPane.OK_OPTION) { + return false; } return true; @@ -1556,6 +1554,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se actionPanel.editor.refreshMarkers(); } } + /* public void debuggerBreakAt(SWF swf, String cls, int line) { View.execInEventDispatchLater(new Runnable() { @@ -1570,7 +1569,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se }); }*/ - public void gotoScriptName(SWF swf, String scriptName) { if (swf == null) { return; @@ -2166,10 +2164,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se List sel = tagTree.getAllSelected(); if (!onlySel) { sel = null; - } else { - if (sel.isEmpty()) { - return; - } + } else if (sel.isEmpty()) { + return; } final ExportDialog export = new ExportDialog(sel); if (export.showExportDialog() == AppDialog.OK_OPTION) { @@ -2818,10 +2814,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se if (detailPanel.isVisible()) { detailPanel.setVisible(false); } - } else { - if (!detailPanel.isVisible()) { - detailPanel.setVisible(true); - } + } else if (!detailPanel.isVisible()) { + detailPanel.setVisible(true); } } @@ -3194,7 +3188,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se showCard(CARDACTIONSCRIPTPANEL); } else if (treeItem instanceof ImageTag) { ImageTag imageTag = (ImageTag) treeItem; - previewPanel.setImageReplaceButtonVisible(imageTag.importSupported(), imageTag instanceof DefineBitsJPEG3Tag || imageTag instanceof DefineBitsJPEG4Tag); + previewPanel.setImageReplaceButtonVisible(!((Tag) imageTag).isReadOnly() && imageTag.importSupported(), imageTag instanceof DefineBitsJPEG3Tag || imageTag instanceof DefineBitsJPEG4Tag); previewPanel.showImagePanel(imageTag.getImage()); showCard(CARDPREVIEWPANEL); } else if ((treeItem instanceof DrawableTag) && (!(treeItem instanceof TextTag)) && (!(treeItem instanceof FontTag)) && internalViewer) { @@ -3227,7 +3221,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se showCard(CARDPREVIEWPANEL); } else if ((treeItem instanceof SoundTag)) { //&& isInternalFlashViewerSelected() && (Arrays.asList("mp3", "wav").contains(((SoundTag) tagObj).getExportFormat())))) { previewPanel.showImagePanel(new SerializableImage(View.loadImage("sound32"))); - previewPanel.setImageReplaceButtonVisible(treeItem instanceof DefineSoundTag, false); + previewPanel.setImageReplaceButtonVisible(((Tag) treeItem).isReadOnly() && (treeItem instanceof DefineSoundTag), false); try { SoundTagPlayer soundThread = new SoundTagPlayer((SoundTag) treeItem, Configuration.loopMedia.get() ? Integer.MAX_VALUE : 1, true); previewPanel.setMedia(soundThread); diff --git a/src/com/jpexs/decompiler/flash/gui/TextPanel.java b/src/com/jpexs/decompiler/flash/gui/TextPanel.java index c24655e46..abed42584 100644 --- a/src/com/jpexs/decompiler/flash/gui/TextPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/TextPanel.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.HighlightedText; import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.flash.tags.DefineEditTextTag; +import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.tags.base.FontTag; import com.jpexs.decompiler.flash.tags.base.MissingCharacterHandler; import com.jpexs.decompiler.flash.tags.base.TextTag; @@ -59,6 +60,8 @@ public class TextPanel extends JPanel implements TagEditorPanel { private final LineMarkedEditorPane textValue; + private final JPanel buttonsPanel; + private final JButton textEditButton; private final JButton textSaveButton; @@ -132,7 +135,7 @@ public class TextPanel extends JPanel implements TagEditorPanel { topPanel.add(textButtonsPanel); add(topPanel, BorderLayout.NORTH); - JPanel buttonsPanel = new JPanel(new FlowLayout()); + buttonsPanel = new JPanel(new FlowLayout()); textEditButton = createButton("button.edit", "edit16", null, e -> editText()); textSaveButton = createButton("button.save", "save16", null, e -> saveText(true)); textCancelButton = createButton("button.cancel", "cancel16", null, e -> cancelText()); @@ -174,6 +177,17 @@ public class TextPanel extends JPanel implements TagEditorPanel { textValue.setCaretPosition(0); setModified(false); setEditText(false); + boolean readOnly = ((Tag) textTag).isReadOnly(); + textValue.setEditable(!readOnly); + buttonsPanel.setVisible(!readOnly); + textAlignLeftButton.setVisible(!readOnly); + textAlignCenterButton.setVisible(!readOnly); + textAlignRightButton.setVisible(!readOnly); + textAlignJustifyButton.setVisible(!readOnly); + decreaseTranslateXButton.setVisible(!readOnly); + increaseTranslateXButton.setVisible(!readOnly); + changeCaseButton.setVisible(!readOnly); + undoChangesButton.setVisible(!readOnly); } private boolean isModified() { diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/icon16.png b/src/com/jpexs/decompiler/flash/gui/graphics/icon16.png index 83a00ff0883c30f1dc765fc0f034429c76d7a1f4..1bf80d92b7dc44d4658948b83f4824da0dd06c8c 100644 GIT binary patch literal 15796 zcmeI3X>=3U6~~7rERit*2MPoNLO_mLq?yrbsj>hsU=zzRMg|cKW;8RBrj|598XpX~|fBt88y zI!DWW|99`5_j~VN&6g?5%A67_cwPWOP;7cyN;do5H}LM&gZ&)d)Pk{J&p6X&xgn_E z?!dd-I(+vXmo3`WMN&(PqsU4jv`iIn*4PIfi~X(#xc7@kiuLKA7B9Eqaadk=_& z6p<*Jsn8>OXEJG}(h6PV^ukO7UYL)o3DE?dK#cpih^-9?C-!Z zED{E%F!_n1Nr8kyqdrTROuI;-LZTGoh*Bj~sU@gFrIM@03#ACEfDsuiL&Q>$q!X~ev@XJ|$xfNvnvS&+MOKD!YGByw^-8=l3GK4Ls9LRt5h*N{irE=rcY%Y! zd}4=tWGF~moD|ZHyC^3^(GFoCE@q-VOrl5>NECjxuFLKWCvv!3*|8L1ALfKn2?BTK zMBrf`r^jUrUK)YJq>Z$b4#v&;p`H3Utu#Zst#lVD!*Z92**($g!?`=XUc0^1)NUqq z0gIp&X{VlULxGcovq?AYap7d@0(L1QJ6kb}0^4dus)rDI?3AqK2LTHDy z>{>O+E)rvCmw~2jy3i@hYC|YYP7aHFBj!hK@r}4T3}k3C#pz=xKs77jzOsA=Su~(J`WCf-%_oAutAeqA1aGqv8;_ z#!S2H7^9=?n1zI$4vQ9!3`WfipDIlLB`}p4Q!0ZH_4;V{4xv+M+!Lr4Hgu@5 z5H!w)k6e}vCCqq20xC91rKlK1Nrl*?Rx8CMDP!|XRZ>|(I8juv4vAiNQEcDCY*BLp zYa!TVIDslmawRENNKI<7DM6kf#xRvaY&I+87)Bs+X#&=^mQKQSNR>vp+0$AOb&A=u z9PDh<$@%R^+XNdG>`+e3vHylr^0s``1`(5^%M|F$7=ig7FEu#kifZactj15dVdq5W)MS#8zYu@bd` zKPL@a#q5c~g4Kg+;SOVw%%Sc%Wsg`rXQwvWBzgu}O-9SStu$9~Blkrn-tQGr-|5&#Id$>ZYY1E@SM z00_6qZYY1E@SM00_6qZYY1E@SM00_6qZYY1E@SM00_6qZYY1E@SM00_6qK%Fm9oP>HgA=9{8K-*v+lO zKXL54sqA~s|J8!agZ{O7$eFt_@R1!y;@^Mn-{Uo=rT@zdMa)AuZkZ#ezOxDPhRIr6t$D%|>&>+UCGyHDL| zteX4hylF$<^N$%2|DV@SCw<>*z5BL*t)kY|=fS<^X*q9J_(khq60F&97W#X+GVfzcL5_IE@!upa z#s&>E5; zvi5s?@#e38?Km8N4!JjO#w~h{UwVH?@#!i-(}5G#YsR_9E*UO2FN@EfYHQGKHLmew z<>ah>)YCZk;WMSTPHp_vyp}uS@)F%d$A>oyc1ub!uJ3=bes1isU46zj7Y|FF20i<2 zadUTg^2mp1QKhB${uh?N)OCMc*Cc~-j=uQLxeMQn+&JaCy2oed56w7LwXM2h6}{nX ztYkd&^_cZvR|O-_mXNj|mX__OBXO z{JSf$AH>9HmmZ~Z^N!wV+PQy!=Gb@EyESP_U0*;?0c$uhzbhKDw|E$y9ol#P9`)-Y;+gaOhuVn4~yrpsY3)l8uzT9Y)7v@guuicc@ zOMhxb(vpi68RRmgjZINNId*Q;2rOTJEzW$HQWf$tpZq)tW zIR35GD_wgsBx|=A#}Dh4*=XW|f delta 841 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 literal 27267 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 b8sVN2)q`Z=#aQr#QGm9_BlRjZyYT-3n!+Gz diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/icon32.png b/src/com/jpexs/decompiler/flash/gui/graphics/icon32.png index 21788e287a934f37253d057aed36d5a44cf53a04..d4117e847f96ab4619cacf52187e4989a39726ec 100644 GIT binary patch literal 17609 zcmeI4eLPfo`^Qh#ZbK5KvejnHmQv<<7$%J87>OpeN@5<)FkxoQ14Aq+YK0ypDpI#> z4@Rw$NU~zm6QU@UiW<^}Wmhe69~Aaf^V`?!zJIU#pPAQdoVmW&_xfDtyuaV;I_IC` zCy$lOr)tj81OQ;Fi?ahAIwFU^h;N|3qKJrI=%68RUMB(o-HXHDN$ITBO98;*4cF64 z?B%wC!r}*G7;HWh#7Kh$&};y(q)G)0Rv;)wGC_YX&kEI9T#7<+*;c3@Oxl`5jS4XV$WJLtBEZ8WjwWg(%0tp0zVg^zg9K;h*q*kaAT?+Jjco>U9j!Y2;TA^%* z6C%CbJdpN$A&4}^n4wuXGcuBFfx(-S$t1D~l7PdTVsS()5r-xaDI^?)L_mJ{psY2a zUzS2PheCI7`j8H?tWW`Bv4DcbhJ}S;!iX5Y&>xGpu&}`52v`CE4b4D{!g*qb6wMQT zKPvK3#{m?vgj|7`%jY47bs0>)L~MmZ4JR7=e7LS)!B`@m=mR^5B38-}VDT6n_H#jO z)>w={A`BWiH8u+i27$pKPb`As@Slwn1n|XtQ2_r7DaYJjObo4wo7-6K&z^5^@Mlwt z#Ezj5f)7YP8!7S(7l2qgDB??mEYL9&x|HufclBZ}XMAz~rZnvN;<bG zTVZsCETLGs0W@sE9jU#&ENfeS9g@|8@!&7j$2_mC2VH$3HHkT9rISn!eZ$43D!c4dZR6lHn znDLKPCeEFp!)8%9d|@y{Y|Ra3_=8vh&)*U|J~(0K*sh}3^Mm+8=(Ip;%_IJJs{TC;E^mn)z83^>{~s1Y#0dS*mf@dO)ql7Q6Fb!ZZW+dR zF)M(<^9R}1*pD0d#xzY9fdu4sB)=w+Za`@&%fvOnVQH+u5!CPWK85_?$I^S!! z8iORG^YNy5a|;|6kAprRVki3HvFrYi*ol64?0D!J9#?El_>c}ZJRxfM9y;3KS3{3` zptYH)Dbdst3m=9@cyOg)ke34&>cpbqjzWYojl{qmpAB61rN9Y}4}qhLHQ~W*qzXqz zp~pVxi4!~a$oWZuj`gws=8y3!`fsYjv{Xr8K$M#*T*~>tyeeEUAj(Y@F6De+UKK7F z5ap%{mvTNZuL>6oh;mbfOF18ySA`1(M7gQLrJN7UtHK2XqTE#BQqBkFRpEjGQEsYm zDdz+8s&K)8C^uEOl=FdkRk&b4l$$DC%K5;&DqJui%1sq6<$PdX6)qSM<)#Xkay~Gx z3KtBBa#Mv%IUkr;g$o8mxv9dXoDa;a!UY4O+*ILG&IjgI;er8CZmMu8=L7SqaKV5m zH&wWl^MQF)xL`n(n<`w&`M|s?TreQYO%*QXd|+M`E*KEyrV5vGJ}|Ee7YvAUQz%PQ6)rWSXMQqIzg(!xIInva-^PN;4MwEJ|C!TsJG85oB2; z3v)IuReLn$wfbK%1B*&!YWY|DuSQ=BiKJ+iXCo1aSfIJDJ1W!ZxUHTe!q5yS8N8)y zhul`U%2-m<_dd#QM%)hvCd6SV=6)Z~^S~^BujlA&Ot#G0k4k2d+`d1uvaYt)HY|*6 zhj{hJU&QniR>sZ?xoEDa+omD7qzss?UqMg*p_WUI` zHz_Xe>k~OSE;)7Q3ksO&Mny7~e&ta67Km86PIKSMwWrOK%kSrU8|!I$o?Zj|KnveW z-xT`2x~zj|Brww|XZ!mvdLc|>au3Yy*X%vdarV;Cs#B{|_xZ}ucE;1Cv#cC<&SwSa zO5I{PGqA@QO|z!FFkUdV;JjGCy^?-j>-`z}tN5vE8H!x_;0{H2`H>?>8VhbedNhyR zE5Z902&!C|6|!O86A?IXUZ8p$;AR&Tl2dd&?XlZnVAb&_0Y^Lj0zB%i zs_hZodt1!Uc;|Ic;trUcj!2lM@b{}Se9Ws&z5BC#x}jtT>Fzr7!V9yVyUL!c)%)Dq zR%wGeCL`_F`PmE5ZDuA2OSX#5Zax~YY#0BPZJu0ud~-(X)bg$>F(pYSc73jsxA)w* z4e>6sUvg+?Jr%S2nr~e!HQ&(@k1*Du9lfcKZq~jk|TLnUv*pRfvociLse&^3)0o&fi7Zxekm<=52NCW8_3 zSJM}vz@c)`)LdJRI%sp zlXX0qtv)H9p`$*jT|CFW!7z;_Yl;VpS8@L|JIMG zc?xtkKH#4aD5P(veHY%hcH8-y^QJY66L4Bz0gz0u)A2pG6+IodCmX7_d+xoLGP829 z-)eDE_b%#NW9q>D=2a(6jx!zgmcPEtXmdBzH`sbJRrvn3P5MtBR(IVWbYJMF?|3=7 z+v;cE7ku8MJA$EEjSFVIn}08TEB)1+L{9!s9YxnU`P`-gH~n~op$9GNTO)(yUAD(H z?Q(KXcND#ke13!UXK`nYF0p1!SAs2ehGhP=D7n44ZGyZQV% z3JQM3(7!^ZQlkU2=~+2B+t=qpZRYjcTmI6nvdIrh0%xZeaD&Xlr_&ZnUl{{`6&Fie z_bhLF-JW&YqY?0(oZNB{r=?N8o0IQiotfihLRhxUb@_66KePEtl>333FQUWSvbHxC zhhgjL>ds%hm>=9^wtoG3Wb(NbR2H`_^IFXeHC?&a(9O9t<83+)Hh{Wpr*B?MA*LWW z|Lj?t=xFL9_l(y1ldF4sdn3L3EIY|nYC}$lGGJO_WJRjOJ;iJ|8(zOoO=Cr z#JLlbo<{Z+p9cyt-JQ|9F1H)Cb=V_p^&O?9@6oh|RTm${=5>$`xmi|2y*aj(XAT;zypT}zK6I^tG^V2e4NG^2 z_B@*u+J@gc{a?;)_KUbV>#|6J_;vS#GTVe*R+TAvKc>9sQD_J)(r+6rUAhz!B2Xwd zAXWMe-|!57*Xo`C(j4j?PX4@Qp@~ovD=IEtx6Y>`IJjb&ASRAFxaXZn5irl{20>@0 z<}K==Ihg%(=>P%rdy_;y__#FlZZGN8k+2<4BBm7QOy)6a@>y_m!y~rTM@arx%wydF8rji*8Q+wx2x~5p8MV|o=ZF@RNvFbLs%DqQO@#efIS?Zwj|&SZ%H$CDAS=GW4PQiSTU~gO)u#o-y!9 z^7vRsQ9~lzJxn68ig;Cj^4VuSFsEWl zFDE{DNRuB4yW1Cs?J_(o95BCu^Qc-7`M#s=Kt)ZBPBnGNGRHlWBTxQrUvi6OiT0@% zJ@1kNr>mEhX4kbFWLStQ3n^szlSLUePkvm+TD0S6J-bn_H?_kX*8C!8yLR`VO?+sVuXbNBJ(;0sIR>j2}}{O z(QZcjHe-CQJd!;Bqe1toBJ}mso{|#1_3Q7)-+2LQ)h$SK_N%}j;NHz}u4!mkp1Zas zb@{H}>&v#TShuf{Gb~WQm~ci{NI#z(jwDqcA-WwvPed!kU*A z(Z@B4APLH><6^*wAt0+8B80`kHq+D7ZQr}=whwmIR*$zKy9W+cMOA(0f6n=T=bTUQ zJdcG)Hk(y|?Z7@@HIV5lK)$OFfh)jdE|+UBWL@D+0J7O^2ABX2%Ca0&RTV{1kY$-j zB!VCac%FyjI9Pv{MZ4Xm)oN8O%en}h%H?wT-vl6=&8omS@R_dbx@npihJmJOJpe>e z#C6>s0L^BTdc97qR%FW zLhz60d3c@|0I1b!RI62Lq?R4T>o+qZFD7hTr_FT)azM!9g|0;8j&T)TD+&+{-0qlXvaZ!?(;yLRouah%~! zr!&rTf0r_*{SlVS1V#q8Lz14)wDy?cK*BO@aihS3v#Q51>CiowA_ z6h&dro;~c}zaK?WdeY!H4yvk>PN$ijoh6^oHwuNq@?0*L_aiW&>$=|8*GD3eK-07! z^s!is4I4I)OeT>e2}zO=MX`sFz9bR}wrtsgrfJx=9jIklSe6w$HyRDSUawC8f0nux z?x25Zn#5wUfb9WE1OZ8skYzal5Q#*B`!I>a--c7+x^BRYcsx$ETE#TYgV}6$R06ik zvK%uE1Jg7ErUSIwZLVIu%I({?dzfz+24~NnW!<`U$g&JTtJUJtrAtgrP4#R|!!XF@ zax7c6ELgi+)MBzMZx?}ms;Z)C8k(jB;SGPYzf!6A1%*ZDu4O0T$k1Ck^K z6;YBT9LEVF5neMAiDbm^kMoVs&+q>t^PLMyIgs~jIKa!g<3fj)*NMMI`09CHUIg-f zwFc*Q_hVWH{Om$qnrG2`^88Q1Qw5u@()$z z-um^t<$3(;$rDz6^by{dUvhu3(;=~YH?z{sLSD3g=mdEC8tk;S5j_s%({ZeS^8y}M}vd>dw7`PZQBqIA4ZiV z9;+K%r2Wo|&21eB#837l+aih_$9^UQ2(c(}Rl^Eh3dlp=lb$ z@4v@fvINhvSoH3@2wjpE?%l&}x9Q)s2|<#uTP^b6eFu>Usf`-GA@TCH}J80vaE;gcKb@J)ta1`m{`#9{6Fggp1tsz)hhr1002ov JPDHLkV1i0=?kE5N diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/icon48.png b/src/com/jpexs/decompiler/flash/gui/graphics/icon48.png index 2e0833837f8eda20bddbad3f47642729d0981da7..a0a1261a0996f6eabf0e613b438b88a2c8f4dbea 100644 GIT binary patch literal 19594 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 delta 3342 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 Y|JgWoX|EVE00000Nks-uM6N<$f~+P-X#fBK diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index 9cd548c10..1b08517d5 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -702,3 +702,6 @@ menu.file.start.debugpcode = Debug P-code #after 7.1.2 button.replaceNoFill = Replace - Update bounds... message.warning.svgImportExperimental = Not all SVG features are supported. Only solid color fill mode is supported. Please check the log after import. + +message.imported.swf = The SWF file uses assets from an imported SWF file:\n%url%\nDo you want the assets to be loaded from that URL? +message.imported.swf.manually = Cannot load imported SWF\n%url%\nThe file or URL does not exist.\nDo you want to select local file? \ No newline at end of file diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java index 6c42d2618..78268b8f7 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java @@ -206,19 +206,27 @@ public class TagTree extends JTree { isModified = true; } }*/ + boolean isReadOnly = false; + if (val instanceof Tag) { + isReadOnly = ((Tag) val).isReadOnly(); + } + boolean isModified = val.isModified(); if (isModified) { if (boldFont == null) { Font font = getFont(); boldFont = font.deriveFont(Font.BOLD); } - } else { - if (plainFont == null) { - Font font = getFont(); - plainFont = font.deriveFont(Font.PLAIN); - } + } else if (plainFont == null) { + Font font = getFont(); + plainFont = font.deriveFont(Font.PLAIN); } setFont(isModified ? boldFont : plainFont); + if (isReadOnly) { + setForeground(new Color(0xcc, 0xcc, 0xcc)); + } else { + setForeground(Color.BLACK); + } return this; }