diff --git a/lib/jsyntaxpane-0.9.5.jar b/lib/jsyntaxpane-0.9.5.jar index b5b1885f4..a3b4bf1a7 100644 Binary files a/lib/jsyntaxpane-0.9.5.jar and b/lib/jsyntaxpane-0.9.5.jar differ diff --git a/libsrc/ffdec_lib/lexers/actionscript3_pcode.flex b/libsrc/ffdec_lib/lexers/actionscript3_pcode.flex index 6d6c2a984..d9f404d55 100644 --- a/libsrc/ffdec_lib/lexers/actionscript3_pcode.flex +++ b/libsrc/ffdec_lib/lexers/actionscript3_pcode.flex @@ -166,6 +166,7 @@ ExceptionTarget = "exceptiontarget "{PositiveNumberLiteral}":" "dispid" { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_DISPID, yytext());} "slotid" { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_SLOTID, yytext());} "value" { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_VALUE, yytext());} + "type" { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TYPE, yytext());} diff --git a/libsrc/ffdec_lib/lexers/actionscript3_script.flex b/libsrc/ffdec_lib/lexers/actionscript3_script.flex index 50a03c8af..c26d4b760 100644 --- a/libsrc/ffdec_lib/lexers/actionscript3_script.flex +++ b/libsrc/ffdec_lib/lexers/actionscript3_script.flex @@ -203,6 +203,8 @@ SingleCharacter = [^\r\n\'\\] OIdentifierCharacter = [^\r\n\u00A7\\] Preprocessor = \u00A7\u00A7 {Identifier} +NamespaceSuffix = "#" {DecIntegerLiteral} + RegExp = \/([^\r\n/]|\\\/)+\/[a-z]* %state STRING, CHARLITERAL,XMLOPENTAG,XMLOPENTAGATTRIB,XMLINSTROPENTAG,XMLINSTRATTRIB,XMLCDATA,XMLCOMMENT,XML,OIDENTIFIER @@ -371,6 +373,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]* {Identifier} { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); } /* regexp */ {RegExp} { return new ParsedSymbol(SymbolGroup.REGEXP, SymbolType.REGEXP, yytext()); } + {NamespaceSuffix} { return new ParsedSymbol(SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1))); } } { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/IdentifiersDeobfuscation.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/IdentifiersDeobfuscation.java index 622c6520b..943468d12 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/IdentifiersDeobfuscation.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/IdentifiersDeobfuscation.java @@ -209,7 +209,7 @@ public class IdentifiersDeobfuscation { } public String deobfuscateNameWithPackage(boolean as3, String n, HashMap namesMap, RenameType renameType, Map selected) { - DottedChain nChain = DottedChain.parse(n); + DottedChain nChain = DottedChain.parseWithSuffix(n); DottedChain pkg = nChain.getWithoutLast(); String name = nChain.getLast(); @@ -288,7 +288,7 @@ public class IdentifiersDeobfuscation { usageType = "name"; } - DottedChain sChain = DottedChain.parse(s); + DottedChain sChain = DottedChain.parseWithSuffix(s); if (selected != null) { if (selected.containsKey(sChain)) { return selected.get(sChain).toRawString(); @@ -314,14 +314,14 @@ public class IdentifiersDeobfuscation { ret = fooString(firstUppercase, rndSize); if (allVariableNamesStr.contains(ret) || isReservedWord(ret, as3) - || namesMap.containsValue(DottedChain.parse(ret))) { + || namesMap.containsValue(DottedChain.parseWithSuffix(ret))) { found = true; rndSize++; } } } while (found); - namesMap.put(DottedChain.parse(s), DottedChain.parse(ret)); + namesMap.put(DottedChain.parseWithSuffix(s), DottedChain.parseWithSuffix(ret)); return ret; } } 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 1c4880084..7dafe48e1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -2204,7 +2204,7 @@ public final class SWF implements SWFContainerItem, Timelined { public void renameAS2Identifier(String identifier, String newname) throws InterruptedException { Map selected = new HashMap<>(); - selected.put(DottedChain.parse(identifier), DottedChain.parse(newname)); + selected.put(DottedChain.parseWithSuffix(identifier), DottedChain.parseWithSuffix(newname)); renameAS2Identifiers(null, selected); } @@ -2276,7 +2276,7 @@ public final class SWF implements SWFContainerItem, Timelined { String fname = dvf.toStringNoH(null); String changed = deobfuscation.deobfuscateName(false, fname, false, "method", deobfuscated, renameType, selected); if (changed != null) { - deobfuscated.put(DottedChain.parse(fname), DottedChain.parse(changed)); + deobfuscated.put(DottedChain.parseWithSuffix(fname), DottedChain.parseWithSuffix(changed)); } } } @@ -2295,7 +2295,7 @@ public final class SWF implements SWFContainerItem, Timelined { String vname = dvf.toStringNoH(null); String changed = deobfuscation.deobfuscateName(false, vname, false, "attribute", deobfuscated, renameType, selected); if (changed != null) { - deobfuscated.put(DottedChain.parse(vname), DottedChain.parse(changed)); + deobfuscated.put(DottedChain.parseWithSuffix(vname), DottedChain.parseWithSuffix(changed)); } } } @@ -2331,7 +2331,7 @@ public final class SWF implements SWFContainerItem, Timelined { changedNameStr = changedNameStr2; } ret++; - deobfuscated.put(DottedChain.parse(nameStr), DottedChain.parse(changedNameStr)); + deobfuscated.put(DottedChain.parseWithSuffix(nameStr), DottedChain.parseWithSuffix(changedNameStr)); pos++; } name = mem.object; @@ -2355,7 +2355,7 @@ public final class SWF implements SWFContainerItem, Timelined { changedNameStr = changedNameStr2; } ret++; - deobfuscated.put(DottedChain.parse(nameStr), DottedChain.parse(changedNameStr)); + deobfuscated.put(DottedChain.parseWithSuffix(nameStr), DottedChain.parseWithSuffix(changedNameStr)); pos++; } } @@ -2899,7 +2899,8 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); timelined.resetTimeline(); } else // timeline should be always the swf here - if (removeDependencies) { + { + if (removeDependencies) { removeTagWithDependenciesFromTimeline(tag, timelined.getTimeline()); timelined.setModified(true); } else { @@ -2908,6 +2909,7 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); } } + } } @Override @@ -3538,10 +3540,10 @@ public final class SWF implements SWFContainerItem, Timelined { if (firstTrait instanceof TraitClass) { int cindex = ((TraitClass) firstTrait).class_info; Multiname superName = documentPack.abc.constants.getMultiname(documentPack.abc.instance_info.get(cindex).super_index); - String parentClass = superName.getNameWithNamespace(documentPack.abc.constants).toRawString(); + String parentClass = superName.getNameWithNamespace(documentPack.abc.constants, true).toRawString(); if ("mx.managers.SystemManager".equals(parentClass)) { for (Trait t : documentPack.abc.instance_info.get(cindex).instance_traits.traits) { - if ((t instanceof TraitMethodGetterSetter) && "info".equals(t.getName(documentPack.abc).getName(documentPack.abc.constants, new ArrayList<>(), true))) { + if ((t instanceof TraitMethodGetterSetter) && "info".equals(t.getName(documentPack.abc).getName(documentPack.abc.constants, new ArrayList<>(), true, true))) { int mi = ((TraitMethodGetterSetter) t).method_info; try { @@ -3627,7 +3629,7 @@ public final class SWF implements SWFContainerItem, Timelined { if (cit instanceof SetPropertyAVM2Item) { if (cit.value instanceof GetLexAVM2Item) { GetLexAVM2Item gl = (GetLexAVM2Item) cit.value; - ignoredClasses.add(gl.propertyName.getNameWithNamespace(p.abc.constants).toRawString()); + ignoredClasses.add(gl.propertyName.getNameWithNamespace(p.abc.constants, true).toRawString()); } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java index 75d13f0ad..422905d25 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java @@ -50,7 +50,7 @@ public class SourceGeneratorLocalData implements Serializable { public int finallyRegister = -1; - public String currentClass; + public String currentClass; //FIXME! Suffixed or not? public String superClass = null; @@ -79,7 +79,7 @@ public class SourceGeneratorLocalData implements Serializable { public boolean isStatic = false; public String getFullClass() { - return pkg == null ? currentClass : pkg.add(currentClass).toRawString(); + return pkg == null ? currentClass : pkg.addWithSuffix(currentClass).toRawString(); } public SourceGeneratorLocalData(HashMap registerVars, Integer inFunction, Boolean inMethod, Integer forInLevel) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java index d4d106bca..15e33e5ee 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java @@ -42,6 +42,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitFunction; import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.abc.types.traits.Traits; +import com.jpexs.decompiler.flash.abc.usages.ClassNameInTraitMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.ClassNameMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.ConstVarNameMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.ConstVarTypeMultinameUsage; @@ -53,6 +54,7 @@ import com.jpexs.decompiler.flash.abc.usages.MethodNameMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.MethodParamsMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.MethodReturnTypeMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.MultinameUsage; +import com.jpexs.decompiler.flash.abc.usages.TraitMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.TypeNameMultinameUsage; import com.jpexs.decompiler.flash.dumpview.DumpInfo; import com.jpexs.decompiler.flash.dumpview.DumpInfoSpecial; @@ -391,7 +393,7 @@ public class ABC { int mIndex = body.getCode().code.get(ip).operands[0]; if (mIndex > 0) { Multiname m = constants.getMultiname(mIndex); - if (m.getNameWithNamespace(constants).toRawString().equals("flash.utils.getDefinitionByName")) { + if (m.getNameWithNamespace(constants, true).toRawString().equals("flash.utils.getDefinitionByName")) { if (ip > 0) { if (body.getCode().code.get(ip - 1).definition instanceof PushStringIns) { int strIndex = body.getCode().code.get(ip - 1).operands[0]; @@ -691,19 +693,9 @@ public class ABC { SWFDecompilerPlugin.fireMethodBodyParsed(this, mb, swf); } + refreshMultinameNamespaceSuffixes(); getMethodIndexing(); - /*for(int i=0;i()); - } catch (InterruptedException ex) { - Logger.getLogger(ABC.class.getName()).log(Level.SEVERE, null, ex); - } - System.out.println(""+t.toString()); - } - //System.exit(0);*/ SWFDecompilerPlugin.fireAbcParsed(this, swf); } @@ -836,9 +828,9 @@ public class ABC { return getMethodIndexing().findMethodBodyIndex(methodInfo); } - public MethodBody findBodyClassInitializerByClass(String className) { + public MethodBody findBodyClassInitializerByClass(String classNameWithSuffix) { for (int i = 0; i < instance_info.size(); i++) { - if (className.equals(constants.getMultiname(instance_info.get(i).name_index).getName(constants, null, true))) { + if (classNameWithSuffix.equals(constants.getMultiname(instance_info.get(i).name_index).getName(constants, null, true, true))) { MethodBody body = findBody(class_info.get(i).cinit_index); if (body != null) { return body; @@ -849,9 +841,9 @@ public class ABC { return null; } - public MethodBody findBodyInstanceInitializerByClass(String className) { + public MethodBody findBodyInstanceInitializerByClass(String classNameWithSuffix) { for (int i = 0; i < instance_info.size(); i++) { - if (className.equals(constants.getMultiname(instance_info.get(i).name_index).getName(constants, null, true))) { + if (classNameWithSuffix.equals(constants.getMultiname(instance_info.get(i).name_index).getName(constants, null, true, true))) { MethodBody body = findBody(instance_info.get(i).iinit_index); if (body != null) { return body; @@ -862,13 +854,13 @@ public class ABC { return null; } - public MethodBody findBodyByClassAndName(String className, String methodName) { + public MethodBody findBodyByClassAndName(String classNameWithSuffix, String methodNameWithSuffix) { for (int i = 0; i < instance_info.size(); i++) { - if (className.equals(constants.getMultiname(instance_info.get(i).name_index).getName(constants, null, true))) { + if (classNameWithSuffix.equals(constants.getMultiname(instance_info.get(i).name_index).getName(constants, null, true, true))) { for (Trait t : instance_info.get(i).instance_traits.traits) { if (t instanceof TraitMethodGetterSetter) { TraitMethodGetterSetter t2 = (TraitMethodGetterSetter) t; - if (methodName.equals(t2.getName(this).getName(constants, null, true))) { + if (methodNameWithSuffix.equals(t2.getName(this).getName(constants, null, true, true))) { MethodBody body = findBody(t2.method_info); if (body != null) { return body; @@ -880,7 +872,7 @@ public class ABC { for (Trait t : class_info.get(i).static_traits.traits) { if (t instanceof TraitMethodGetterSetter) { TraitMethodGetterSetter t2 = (TraitMethodGetterSetter) t; - if (methodName.equals(t2.getName(this).getName(constants, null, true))) { + if (methodNameWithSuffix.equals(t2.getName(this).getName(constants, null, true, true))) { MethodBody body = findBody(t2.method_info); if (body != null) { return body; @@ -965,7 +957,7 @@ public class ABC { TraitSlotConst s = ((TraitSlotConst) t); if (s.isNamespace()) { String key = constants.getNamespace(s.value_index).getName(constants).toRawString(); // assume not null - DottedChain val = constants.getMultiname(s.name_index).getNameWithNamespace(constants); + DottedChain val = constants.getMultiname(s.name_index).getNameWithNamespace(constants, true); map.put(key, val); } } @@ -1044,22 +1036,22 @@ public class ABC { } } - private void checkMultinameUsedInMethod(int multinameIndex, int methodInfo, List ret, int classIndex, int traitIndex, boolean isStatic, boolean isInitializer, Traits traits, int parentTraitIndex) { + private void checkMultinameUsedInMethod(int multinameIndex, int methodInfo, List ret, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { for (int p = 0; p < method_info.get(methodInfo).param_types.length; p++) { if (method_info.get(methodInfo).param_types[p] == multinameIndex) { - ret.add(new MethodParamsMultinameUsage(this, multinameIndex, classIndex, traitIndex, isStatic, isInitializer, traits, parentTraitIndex)); + ret.add(new MethodParamsMultinameUsage(this, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex)); break; } } if (method_info.get(methodInfo).ret_type == multinameIndex) { - ret.add(new MethodReturnTypeMultinameUsage(this, multinameIndex, classIndex, traitIndex, isStatic, isInitializer, traits, parentTraitIndex)); + ret.add(new MethodReturnTypeMultinameUsage(this, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex)); } MethodBody body = findBody(methodInfo); if (body != null) { - findMultinameUsageInTraits(body.traits, multinameIndex, isStatic, classIndex, ret, traitIndex); + findMultinameUsageInTraits(body.traits, multinameIndex, traitsType, scriptIndex, classIndex, ret, traitIndex); for (ABCException e : body.exceptions) { if ((e.name_index == multinameIndex) || (e.type_index == multinameIndex)) { - ret.add(new MethodBodyMultinameUsage(this, multinameIndex, classIndex, traitIndex, isStatic, isInitializer, traits, parentTraitIndex)); + ret.add(new MethodBodyMultinameUsage(this, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex)); return; } } @@ -1067,7 +1059,7 @@ public class ABC { for (int o = 0; o < ins.definition.operands.length; o++) { if (ins.definition.operands[o] == AVM2Code.DAT_MULTINAME_INDEX) { if (ins.operands[o] == multinameIndex) { - ret.add(new MethodBodyMultinameUsage(this, multinameIndex, classIndex, traitIndex, isStatic, isInitializer, traits, parentTraitIndex)); + ret.add(new MethodBodyMultinameUsage(this, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex)); return; } } @@ -1076,23 +1068,30 @@ public class ABC { } } - private void findMultinameUsageInTraits(Traits traits, int multinameIndex, boolean isStatic, int classIndex, List ret, int parentTraitIndex) { + private void findMultinameUsageInTraits(Traits traits, int multinameIndex, int traitsType, int scriptIndex, int classIndex, List ret, int parentTraitIndex) { for (int t = 0; t < traits.traits.size(); t++) { + //Assuming instance_info.name_index has same multiname as in the class trait + /*if (traits.traits.get(t) instanceof TraitClass) { + TraitClass tc = (TraitClass) traits.traits.get(t); + if (tc.name_index == multinameIndex) { + ret.add(new ClassNameInTraitMultinameUsage(this, multinameIndex, tc.class_info)); + } + }*/ if (traits.traits.get(t) instanceof TraitSlotConst) { TraitSlotConst tsc = (TraitSlotConst) traits.traits.get(t); if (tsc.name_index == multinameIndex) { - ret.add(new ConstVarNameMultinameUsage(this, multinameIndex, classIndex, t, isStatic, traits, parentTraitIndex)); + ret.add(new ConstVarNameMultinameUsage(this, multinameIndex, scriptIndex, classIndex, t, traitsType, traits, parentTraitIndex)); } if (tsc.type_index == multinameIndex) { - ret.add(new ConstVarTypeMultinameUsage(this, multinameIndex, classIndex, t, isStatic, traits, parentTraitIndex)); + ret.add(new ConstVarTypeMultinameUsage(this, multinameIndex, scriptIndex, classIndex, t, traitsType, traits, parentTraitIndex)); } } if (traits.traits.get(t) instanceof TraitMethodGetterSetter) { TraitMethodGetterSetter tmgs = (TraitMethodGetterSetter) traits.traits.get(t); if (tmgs.name_index == multinameIndex) { - ret.add(new MethodNameMultinameUsage(this, multinameIndex, classIndex, t, isStatic, false, traits, parentTraitIndex)); + ret.add(new MethodNameMultinameUsage(this, multinameIndex, scriptIndex, classIndex, t, traitsType, false, traits, parentTraitIndex)); } - checkMultinameUsedInMethod(multinameIndex, tmgs.method_info, ret, classIndex, t, isStatic, false, traits, parentTraitIndex); + checkMultinameUsedInMethod(multinameIndex, tmgs.method_info, ret, scriptIndex, classIndex, t, traitsType, false, traits, parentTraitIndex); } } } @@ -1108,11 +1107,92 @@ public class ABC { return ret; } + public List findMultinameUsageOfNamespace(int namespaceIndex) { + List ret = new ArrayList<>(); + for (int multinameIndex = 1; multinameIndex < constants.getMultinameCount(); multinameIndex++) { + if (constants.getMultiname(multinameIndex).namespace_index == namespaceIndex) { + ret.addAll(findMultinameUsage(multinameIndex)); + } + } + return ret; + } + + /** + * Gets colliding usages of multinames. For example same name + * consts/vars/methods or same class names. Mostly in obfuscated files. + */ + public Set getCollidingMultinameUsages() { + //Reset + for (int multinameIndex = 1; multinameIndex < constants.getMultinameCount(); multinameIndex++) { + constants.getMultiname(multinameIndex).setDisplayNamespace(false); + } + + //group qnames with same name + Map> nameToQNameIndices = new HashMap<>(); + for (int multinameIndex = 1; multinameIndex < constants.getMultinameCount(); multinameIndex++) { + Multiname m = constants.getMultiname(multinameIndex); + if (m.kind == Multiname.QNAME || m.kind == Multiname.QNAMEA) { + String name = m.getName(constants, new ArrayList<>(), true, false); + if (!nameToQNameIndices.containsKey(name)) { + nameToQNameIndices.put(name, new ArrayList<>()); + } + nameToQNameIndices.get(name).add(multinameIndex); + } + } + Set collidingUsages = new HashSet<>(); + + //find context of names with count 2 or more + for (String name : nameToQNameIndices.keySet()) { + List multinameIndices = nameToQNameIndices.get(name); + if (multinameIndices.size() > 1) { + List> allUsages = new ArrayList<>(); + for (int multinameIndex : multinameIndices) { + List usages = findMultinameUsage(multinameIndex); + for (MultinameUsage usage : usages) { + for (List prevUsages : allUsages) { + for (MultinameUsage prevUsage : prevUsages) { + if (prevUsage.collides(usage)) { + collidingUsages.add(usage); + collidingUsages.add(prevUsage); + } + } + } + } + allUsages.add(usages); + } + } + } + return collidingUsages; + } + + /** + * Appends namespace (#123) suffix to multinames which collide with each + * other. For example same name consts/vars/methods or same class names. + */ + public void refreshMultinameNamespaceSuffixes() { + + Set collidingMultinameUsages = getCollidingMultinameUsages(); + + Set collidingMultinameIndices = new HashSet<>(); + + for (MultinameUsage col : collidingMultinameUsages) { + //System.err.println("collides " + col); + collidingMultinameIndices.add(col.multinameIndex); + } + + for (int multinameIndex : collidingMultinameIndices) { + constants.getMultiname(multinameIndex).setDisplayNamespace(true); + } + } + public List findMultinameUsage(int multinameIndex) { List ret = new ArrayList<>(); if (multinameIndex == 0) { return ret; } + for (int s = 0; s < script_info.size(); s++) { + findMultinameUsageInTraits(script_info.get(s).traits, multinameIndex, TraitMultinameUsage.TRAITS_TYPE_SCRIPT, s, -1, ret, -1); + } for (int c = 0; c < instance_info.size(); c++) { if (instance_info.get(c).name_index == multinameIndex) { ret.add(new ClassNameMultinameUsage(this, multinameIndex, c)); @@ -1125,21 +1205,21 @@ public class ABC { ret.add(new ImplementsMultinameUsage(this, multinameIndex, c)); } } - checkMultinameUsedInMethod(multinameIndex, instance_info.get(c).iinit_index, ret, c, 0, false, true, null, -1); - checkMultinameUsedInMethod(multinameIndex, class_info.get(c).cinit_index, ret, c, 0, true, true, null, -1); - findMultinameUsageInTraits(instance_info.get(c).instance_traits, multinameIndex, false, c, ret, -1); - findMultinameUsageInTraits(class_info.get(c).static_traits, multinameIndex, true, c, ret, -1); + checkMultinameUsedInMethod(multinameIndex, instance_info.get(c).iinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, true, null, -1); + checkMultinameUsedInMethod(multinameIndex, class_info.get(c).cinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_CLASS, true, null, -1); + findMultinameUsageInTraits(instance_info.get(c).instance_traits, multinameIndex, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, -1/*FIXME*/, c, ret, -1); + findMultinameUsageInTraits(class_info.get(c).static_traits, multinameIndex, TraitMultinameUsage.TRAITS_TYPE_CLASS, -1/*FIXME*/, c, ret, -1); } loopm: - for (int m = 1; m < constants.getMultinameCount(); m++) { - if (constants.getMultiname(m).kind == Multiname.TYPENAME) { - if (constants.getMultiname(m).qname_index == multinameIndex) { - ret.add(new TypeNameMultinameUsage(this, m)); + for (int t = 1; t < constants.getMultinameCount(); t++) { + if (constants.getMultiname(t).kind == Multiname.TYPENAME) { + if (constants.getMultiname(t).qname_index == multinameIndex) { + ret.add(new TypeNameMultinameUsage(this, multinameIndex, t)); continue; } - for (int mp : constants.getMultiname(m).params) { + for (int mp : constants.getMultiname(t).params) { if (mp == multinameIndex) { - ret.add(new TypeNameMultinameUsage(this, m)); + ret.add(new TypeNameMultinameUsage(this, multinameIndex, t)); continue loopm; } } @@ -1148,11 +1228,11 @@ public class ABC { return ret; } - public int findMethodInfoByName(int classId, String methodName) { + public int findMethodInfoByName(int classId, String methodNameWithSuffix) { if (classId > -1) { for (Trait t : instance_info.get(classId).instance_traits.traits) { if (t instanceof TraitMethodGetterSetter) { - if (t.getName(this).getName(constants, null, true).equals(methodName)) { + if (t.getName(this).getName(constants, null, true, true).equals(methodNameWithSuffix)) { return ((TraitMethodGetterSetter) t).method_info; } } @@ -1161,11 +1241,11 @@ public class ABC { return -1; } - public int findMethodBodyByName(int classId, String methodName) { + public int findMethodBodyByName(int classId, String methodNameWithSuffix) { if (classId > -1) { for (Trait t : instance_info.get(classId).instance_traits.traits) { if (t instanceof TraitMethodGetterSetter) { - if (t.getName(this).getName(constants, null, true).equals(methodName)) { + if (t.getName(this).getName(constants, null, true, true).equals(methodNameWithSuffix)) { return findBodyIndex(((TraitMethodGetterSetter) t).method_info); } } @@ -1184,10 +1264,10 @@ public class ABC { return findClassByName(str); } - public int findClassByName(String name) { + public int findClassByName(String nameWithSuffix) { for (int c = 0; c < instance_info.size(); c++) { - DottedChain s = constants.getMultiname(instance_info.get(c).name_index).getNameWithNamespace(constants); - if (name.equals(s.toRawString())) { + DottedChain s = constants.getMultiname(instance_info.get(c).name_index).getNameWithNamespace(constants, true); + if (nameWithSuffix.equals(s.toRawString())) { return c; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ClassPath.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ClassPath.java index 4ad52a171..7c0bc9e22 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ClassPath.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ClassPath.java @@ -29,30 +29,37 @@ public class ClassPath { public final String className; - public ClassPath(DottedChain packageStr, String className) { + public final String namespaceSuffix; + + public ClassPath(DottedChain packageStr, String className, String namespaceSuffix) { this.packageStr = packageStr == null ? DottedChain.TOPLEVEL : packageStr; this.className = className; + this.namespaceSuffix = namespaceSuffix; } @Override public String toString() { - return packageStr.add(className).toPrintableString(true); + return packageStr.add(className, namespaceSuffix).toPrintableString(true); } public String toRawString() { - return packageStr.add(className).toRawString(); + return packageStr.add(className, namespaceSuffix).toRawString(); } @Override public int hashCode() { - int hash = 7; - hash = 37 * hash + Objects.hashCode(packageStr); - hash = 37 * hash + Objects.hashCode(className); + int hash = 3; + hash = 31 * hash + Objects.hashCode(this.packageStr); + hash = 31 * hash + Objects.hashCode(this.className); + hash = 31 * hash + Objects.hashCode(this.namespaceSuffix); return hash; } @Override public boolean equals(Object obj) { + if (this == obj) { + return true; + } if (obj == null) { return false; } @@ -60,9 +67,16 @@ public class ClassPath { return false; } final ClassPath other = (ClassPath) obj; - if (!Objects.equals(packageStr, other.packageStr)) { + if (!Objects.equals(this.className, other.className)) { return false; } - return Objects.equals(className, other.className); + if (!Objects.equals(this.namespaceSuffix, other.namespaceSuffix)) { + return false; + } + if (!Objects.equals(this.packageStr, other.packageStr)) { + return false; + } + return true; } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java index 55317afe1..cb19d825a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java @@ -98,7 +98,7 @@ public class ScriptPack extends AS3ClassTreeItem { } public ScriptPack(ClassPath path, ABC abc, List allAbcs, int scriptIndex, List traitIndices) { - super(path.className, path); + super(path.className, path.namespaceSuffix, path); this.abc = abc; this.scriptIndex = scriptIndex; this.traitIndices = traitIndices; @@ -124,7 +124,7 @@ public class ScriptPack extends AS3ClassTreeItem { Multiname name = abc.script_info.get(scriptIndex).traits.traits.get(t).getName(abc); Namespace ns = name.getNamespace(abc.constants); if ((ns.kind == Namespace.KIND_PACKAGE) || (ns.kind == Namespace.KIND_PACKAGE_INTERNAL)) { - scriptName = name.getName(abc.constants, null, false); + scriptName = name.getName(abc.constants, null, false, true); } } return scriptName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 23bda7014..911626f6f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -1754,7 +1754,7 @@ public class AVM2Code implements Cloneable { if (code.get(ip + plus + 2).definition instanceof SwapIns) { if (code.get(ip + plus + 4).definition instanceof PopScopeIns) { if (code.get(ip + plus + 3).definition instanceof SetPropertyIns) { - functionName = abc.constants.getMultiname(code.get(ip + plus + 3).operands[0]).getName(abc.constants, fullyQualifiedNames, true); + functionName = abc.constants.getMultiname(code.get(ip + plus + 3).operands[0]).getName(abc.constants, fullyQualifiedNames, true, true); scopeStack.pop();// with output.remove(output.size() - 1); // with ip = ip + plus + 4; // +1 below @@ -2040,7 +2040,7 @@ public class AVM2Code implements Cloneable { if (value instanceof NewFunctionAVM2Item) { NewFunctionAVM2Item f = (NewFunctionAVM2Item) value; - f.functionName = tsc.getName(abc).getName(abc.constants, fullyQualifiedNames, true); + f.functionName = tsc.getName(abc).getName(abc.constants, fullyQualifiedNames, true, true); } AssignedValue av = new AssignedValue(value, initializerType, methodIndex); convertData.assignedValues.put(tsc, av); @@ -2085,7 +2085,7 @@ public class AVM2Code implements Cloneable { if (param_types[i] == 0) { type = TypeItem.UNBOUNDED; } else { - type = new TypeItem(abc.constants.getMultiname(param_types[i]).getNameWithNamespace(abc.constants)); + type = new TypeItem(abc.constants.getMultiname(param_types[i]).getNameWithNamespace(abc.constants, true)); } if (d.length > r) { d[r] = new DeclarationAVM2Item(new SetLocalAVM2Item(null, null, r, new NullAVM2Item(null, null)), type); @@ -2174,8 +2174,7 @@ public class AVM2Code implements Cloneable { ins.operands[j] = updater.updateOperandOffset(target, ins.operands[j]); } }*/ //Faster, but not so universal - { - if (ins.definition instanceof IfTypeIns) { + if (ins.definition instanceof IfTypeIns) { long target = ins.getTargetAddress(); try { ins.operands[0] = updater.updateOperandOffset(ins.getAddress(), target, ins.operands[0]); @@ -2183,7 +2182,6 @@ public class AVM2Code implements Cloneable { throw new ConvertException("Invalid offset (" + ins + ")", i); } } - } ins.setAddress(updater.updateInstructionOffset(ins.getAddress())); //Note: changing operands here does not change instruction byte length as offsets are always S24 (not variable length) } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2ConstantPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2ConstantPool.java index 4a51f9ff2..b492487d2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2ConstantPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2ConstantPool.java @@ -34,8 +34,10 @@ import com.jpexs.helpers.HashArrayList; import com.jpexs.helpers.utf8.Utf8PrintWriter; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -662,7 +664,7 @@ public class AVM2ConstantPool implements Cloneable { String str = getString(index); DottedChain chain = dottedChainCache.get(str); if (chain == null) { - chain = DottedChain.parse(str); + chain = DottedChain.parseWithSuffix(str); dottedChainCache.put(str, chain); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Deobfuscation.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Deobfuscation.java index e51616a1f..0bd79b685 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Deobfuscation.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Deobfuscation.java @@ -48,9 +48,9 @@ public class AVM2Deobfuscation { private final Map usageTypesCount = new HashMap<>(); - public static final DottedChain FLASH_PROXY = new DottedChain("flash", "utils", "flash_proxy"); + public static final DottedChain FLASH_PROXY = new DottedChain(new String[]{"flash", "utils", "flash_proxy"}, ""); - public static final DottedChain BUILTIN = new DottedChain("-"); + public static final DottedChain BUILTIN = new DottedChain(new String[]{"-"}, ""); public AVM2Deobfuscation(SWF swf, AVM2ConstantPool constants) { this.swf = swf; @@ -111,12 +111,12 @@ public class AVM2Deobfuscation { } if (swf.as3StringConstantExists(ret) || IdentifiersDeobfuscation.isReservedWord2(ret) - || deobfuscated.containsValue(DottedChain.parse(ret))) { + || deobfuscated.containsValue(DottedChain.parseWithSuffix(ret))) { found = true; rndSize++; } } while (found); - deobfuscated.put(DottedChain.parse(orig), DottedChain.parse(ret)); + deobfuscated.put(DottedChain.parseWithSuffix(orig), DottedChain.parseWithSuffix(ret)); return ret; } @@ -130,7 +130,7 @@ public class AVM2Deobfuscation { } boolean isValid = isValidNSPart(s); if (!isValid) { - DottedChain sChain = DottedChain.parse(s); + DottedChain sChain = DottedChain.parseWithSuffix(s); DottedChain newName; if (namesMap.containsKey(sChain)) { newName = namesMap.get(sChain); @@ -186,19 +186,19 @@ public class AVM2Deobfuscation { if (!isValid) { DottedChain newname; - DottedChain sChain = DottedChain.parse(s); + DottedChain sChain = DottedChain.parseWithSuffix(s); if (namesMap.containsKey(sChain)) { newname = namesMap.get(sChain); } else { String str = fooString(namesMap, constants.getString(strIndex), firstUppercase, stringUsageTypes.get(strIndex), renameType); - newname = DottedChain.parse(str); + newname = DottedChain.parseWithSuffix(str); } if (stringUsages.contains(strIndex) || namespaceUsages.contains(strIndex)) { // this name is already referenced as String strIndex = constants.addString(s); // add new index } constants.setString(strIndex, newname.toRawString()); if (!namesMap.containsKey(sChain)) { - namesMap.put(sChain, DottedChain.parse(constants.getString(strIndex))); + namesMap.put(sChain, DottedChain.parseWithSuffix(constants.getString(strIndex))); } } return strIndex; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AbcMultiNameCollisionFixer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AbcMultiNameCollisionFixer.java new file mode 100644 index 000000000..aa1fdf839 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AbcMultiNameCollisionFixer.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.abc.avm2.deobfuscation; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.NamespaceSet; +import com.jpexs.decompiler.flash.abc.usages.MultinameUsage; +import com.jpexs.decompiler.flash.tags.ABCContainerTag; +import com.jpexs.decompiler.flash.tags.Tag; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +public class AbcMultiNameCollisionFixer { + + public int fixCollisions(SWF swf) { + int ret = 0; + for (ABCContainerTag tag : swf.getAbcList()) { + ret += this.fixCollisions(tag.getABC()); + } + return ret; + } + + public int fixCollisions(ABC abc) { + Set collidingUsages = abc.getCollidingMultinameUsages(); + Set collidingMultinameIndices = new HashSet<>(); + for (MultinameUsage usage : collidingUsages) { + collidingMultinameIndices.add(usage.getMultinameIndex()); + } + Set newNames = new HashSet<>(); + int ret = 0; + for (int multiNameIndex : collidingMultinameIndices) { + Multiname multiName = abc.constants.getMultiname(multiNameIndex); + int namespace = multiName.namespace_index; + String oldName = abc.constants.getString(multiName.name_index); + String selectedBaseName = oldName + "_" + multiName.namespace_index; + String selectedName = selectedBaseName; + int cnt = 0; + while (!newNames.contains(selectedName) && abc.constants.getStringId(selectedName, false) > -1) { //already exists such name, but was not added during this collisionFixes + cnt++; + selectedName = selectedBaseName + "_" + cnt; + } + newNames.add(selectedName); + int newNameIndex = abc.constants.getStringId(selectedName, true); + multiName.name_index = newNameIndex; + + //Find other names with same name and namespace which are not listed as colliding, but are related + for (int m = 1; m < abc.constants.getMultinameCount(); m++) { + if (collidingMultinameIndices.contains(m)) { + continue; + } + Multiname other = abc.constants.getMultiname(m); + if (other.hasOwnName() && other.hasOwnNamespace()) { + int otherNamespace = other.namespace_index; + if (namespace == otherNamespace) { + if (Objects.equals(oldName, abc.constants.getString(other.name_index))) { + other.name_index = newNameIndex; + ret++; + } + } + } else if (other.hasOwnName() && other.hasOwnNamespaceSet()) { + NamespaceSet otherNamespaceSet = abc.constants.getNamespaceSet(other.namespace_set_index); + //NamespaceSet with only one namespace - this one + if (otherNamespaceSet.namespaces.length == 1) { + int otherNamespace = otherNamespaceSet.namespaces[0]; + if (namespace == otherNamespace) { + if (Objects.equals(oldName, abc.constants.getString(other.name_index))) { + other.name_index = newNameIndex; + ret++; + } + } + } + //What if there are more namespaces in the set and how about runtime resolved names? + } + } + + ret++; + } + if (ret > 0) { + ((Tag) abc.parentTag).setModified(true); + } + return ret; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java index 3db5c3f90..566490ee4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java @@ -214,7 +214,7 @@ public abstract class InstructionDefinition implements Serializable { } } - return new FullMultinameAVM2Item(property, ins, localData.lineStartInstruction, multinameIndex, localData.abc.constants.getMultiname(multinameIndex).getName(localData.getConstants(), new ArrayList<>(), true), name, ns); + return new FullMultinameAVM2Item(property, ins, localData.lineStartInstruction, multinameIndex, localData.abc.constants.getMultiname(multinameIndex).getName(localData.getConstants(), new ArrayList<>(), true, true), name, ns); } protected int getMultinameRequiredStackSize(AVM2ConstantPool constants, int multinameIndex) { @@ -258,7 +258,7 @@ public abstract class InstructionDefinition implements Serializable { if (constants.getMultiname(multinameIndex).needsName()) { name = stack.get(pos).toString(); } else { - name = GraphTextWriter.hilighOffset(constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames, false), ins.getAddress()); + name = GraphTextWriter.hilighOffset(constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames, false, true), ins.getAddress()); } return name + ns; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/alchemy/AlchemyTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/alchemy/AlchemyTypeIns.java index 9d31839da..eef64361b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/alchemy/AlchemyTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/alchemy/AlchemyTypeIns.java @@ -24,5 +24,5 @@ import com.jpexs.decompiler.graph.DottedChain; */ public interface AlchemyTypeIns { - public static final DottedChain ALCHEMY_PACKAGE = new DottedChain("avm2", "intrinsics", "memory"); + public static final DottedChain ALCHEMY_PACKAGE = new DottedChain(new String[]{"avm2", "intrinsics", "memory"}, DottedChain.NO_SUFFIX); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructIns.java index 16af04d1e..5d83071e0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructIns.java @@ -101,7 +101,7 @@ public class ConstructIns extends InstructionDefinition { } if (obj instanceof GetLexAVM2Item) { GetLexAVM2Item glt = (GetLexAVM2Item) obj; - isXML = glt.propertyName.getName(localData.getConstants(), localData.fullyQualifiedNames, true).equals("XML"); + isXML = glt.propertyName.getName(localData.getConstants(), localData.fullyQualifiedNames, true, true).equals("XML"); } if (isXML) { @@ -129,7 +129,7 @@ public class ConstructIns extends InstructionDefinition { } if (obj instanceof GetLexAVM2Item) { GetLexAVM2Item glt = (GetLexAVM2Item) obj; - isRegExp = glt.propertyName.getName(localData.getConstants(), localData.fullyQualifiedNames, true).equals("RegExp"); + isRegExp = glt.propertyName.getName(localData.getConstants(), localData.fullyQualifiedNames, true, true).equals("RegExp"); } if (isRegExp && (args.size() >= 1) && (args.get(0) instanceof StringAVM2Item) && (args.size() == 1 || (args.size() == 2 && args.get(1) instanceof StringAVM2Item))) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java index bab047939..785309f82 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java @@ -46,7 +46,7 @@ public class NewClassIns extends InstructionDefinition { stack.pop().toString(writer, LocalData.create(localData.getConstants(), localData.localRegNames, localData.fullyQualifiedNames)); String baseType = writer.toString(); ABC abc = localData.abc; - stack.push(new UnparsedAVM2Item(ins, localData.lineStartInstruction, "new " + abc.constants.getMultiname(abc.instance_info.get(clsIndex).name_index).getName(localData.getConstants(), localData.fullyQualifiedNames, false) + ".class extends " + baseType)); + stack.push(new UnparsedAVM2Item(ins, localData.lineStartInstruction, "new " + abc.constants.getMultiname(abc.instance_info.get(clsIndex).name_index).getName(localData.getConstants(), localData.fullyQualifiedNames, false, true) + ".class extends " + baseType)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/GetLocalTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/GetLocalTypeIns.java index a9ca920cc..56b4df551 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/GetLocalTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/GetLocalTypeIns.java @@ -68,7 +68,7 @@ public abstract class GetLocalTypeIns extends InstructionDefinition { List ts = localData.getInstanceInfo().get(localData.classIndex).instance_traits.traits; boolean isBasicObject = localData.thisHasDefaultToPrimitive; Multiname m = localData.getInstanceInfo().get(localData.classIndex).getName(localData.getConstants()); - stack.push(new ThisAVM2Item(ins, localData.lineStartInstruction, m, m.getNameWithNamespace(localData.getConstants()), isBasicObject)); + stack.push(new ThisAVM2Item(ins, localData.lineStartInstruction, m, m.getNameWithNamespace(localData.getConstants(), true), isBasicObject)); } return; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java index 6dfa5870a..37c4f75c5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java @@ -104,7 +104,7 @@ public class SetSlotIns extends InstructionDefinition implements SetTypeIns { if (slotname != null) { if (value instanceof LocalRegAVM2Item) { LocalRegAVM2Item lr = (LocalRegAVM2Item) value; - String slotNameStr = slotname.getName(localData.getConstants(), localData.fullyQualifiedNames, true); + String slotNameStr = slotname.getName(localData.getConstants(), localData.fullyQualifiedNames, true, true); if (localData.localRegNames.containsKey(lr.regIndex)) { if (localData.localRegNames.get(lr.regIndex).equals(slotNameStr)) { return; //Register with same name to slot @@ -179,7 +179,7 @@ public class SetSlotIns extends InstructionDefinition implements SetTypeIns { for (int t = 0; t < body.traits.traits.size(); t++) { if (body.traits.traits.get(t) instanceof TraitSlotConst) { if (((TraitSlotConst) body.traits.traits.get(t)).slot_id == slotIndex) { - slotname = body.traits.traits.get(t).getName(abc).getName(abc.constants, fullyQualifiedNames, true); + slotname = body.traits.traits.get(t).getName(abc).getName(abc.constants, fullyQualifiedNames, true, true); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeIns.java index 97a85c446..4d2ebec49 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeIns.java @@ -56,7 +56,7 @@ public class AsTypeIns extends InstructionDefinition { public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { GraphTargetItem val = stack.pop(); - stack.push(new AsTypeAVM2Item(ins, localData.lineStartInstruction, val, new FullMultinameAVM2Item(false, ins, localData.lineStartInstruction, ins.operands[0], localData.abc.constants.getMultiname(ins.operands[0]).getName(localData.getConstants(), new ArrayList<>(), true)))); + stack.push(new AsTypeAVM2Item(ins, localData.lineStartInstruction, val, new FullMultinameAVM2Item(false, ins, localData.lineStartInstruction, ins.operands[0], localData.abc.constants.getMultiname(ins.operands[0]).getName(localData.getConstants(), new ArrayList<>(), true, true)))); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/IsTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/IsTypeIns.java index b50019d7a..299425165 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/IsTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/IsTypeIns.java @@ -42,7 +42,7 @@ public class IsTypeIns extends InstructionDefinition { public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int multinameIndex = ins.operands[0]; GraphTargetItem value = stack.pop(); - stack.push(new IsTypeAVM2Item(ins, localData.lineStartInstruction, value, new FullMultinameAVM2Item(false, ins, localData.lineStartInstruction, multinameIndex, localData.abc.constants.getMultiname(multinameIndex).getName(localData.getConstants(), new ArrayList<>(), true)))); + stack.push(new IsTypeAVM2Item(ins, localData.lineStartInstruction, value, new FullMultinameAVM2Item(false, ins, localData.lineStartInstruction, multinameIndex, localData.abc.constants.getMultiname(multinameIndex).getName(localData.getConstants(), new ArrayList<>(), true, true)))); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java index ab762c49b..d0e781b37 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java @@ -37,7 +37,7 @@ public class ClassAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { - return writer.append(className.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false)); + return writer.append(className.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java index c0e12d4dc..2020ccfac 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java @@ -80,7 +80,7 @@ public class FullMultinameAVM2Item extends AVM2Item { if (name != null) { cname = name.toString(LocalData.create(constants, localRegNames, fullyQualifiedNames)); } else { - cname = (constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames, true)); + cname = (constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames, true, true)); } String cns = ""; if (namespace != null) { @@ -121,7 +121,7 @@ public class FullMultinameAVM2Item extends AVM2Item { AVM2ConstantPool constants = localData.constantsAvm2; List fullyQualifiedNames = property ? new ArrayList<>() : localData.fullyQualifiedNames; if (multinameIndex > 0 && multinameIndex < constants.getMultinameCount()) { - writer.append(constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames, false)); + writer.append(constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames, false, true)); } else { writer.append("§§multiname(").append(multinameIndex).append(")"); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java index 00c7516e6..dc49bdbf8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java @@ -38,7 +38,7 @@ public class GetLexAVM2Item extends AVM2Item { public GetLexAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, Multiname propertyName, AVM2ConstantPool constants) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); this.propertyName = propertyName; - this.fullPropertyName = propertyName.getNameWithNamespace(constants); + this.fullPropertyName = propertyName.getNameWithNamespace(constants, true); } public String getRawPropertyName() { @@ -47,9 +47,9 @@ public class GetLexAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { - String localName = propertyName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false); + String localName = propertyName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true); getSrcData().localName = localName; - return writer.append(propertyName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false)); + return writer.append(propertyName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java index e7fa4b1f2..801bbec63 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java @@ -46,18 +46,18 @@ public class GetSlotAVM2Item extends AVM2Item { } getSrcData().localName = getNameAsStr(localData); - return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false)); + return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true)); } public String getNameAsStr(LocalData localData) { - return slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false); + return slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true); } public GraphTextWriter getName(GraphTextWriter writer, LocalData localData) { if (slotName == null) { return writer.append("/*UnknownSlot*/"); } - return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false)); + return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitVectorAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitVectorAVM2Item.java index 6e77a22dd..3b0e065d5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitVectorAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitVectorAVM2Item.java @@ -42,17 +42,17 @@ import java.util.List; */ public class InitVectorAVM2Item extends AVM2Item { - public static final DottedChain VECTOR_PACKAGE = new DottedChain("__AS3__", "vec"); + public static final DottedChain VECTOR_PACKAGE = new DottedChain(new String[]{"__AS3__", "vec"}, ""); - public static final DottedChain VECTOR_FQN = new DottedChain("__AS3__", "vec", "Vector"); + public static final DottedChain VECTOR_FQN = new DottedChain(new String[]{"__AS3__", "vec", "Vector"}, ""); - public static final DottedChain VECTOR_INT = new DottedChain("__AS3__", "vec", "Vector$int"); + public static final DottedChain VECTOR_INT = new DottedChain(new String[]{"__AS3__", "vec", "Vector$int"}, ""); - public static final DottedChain VECTOR_DOUBLE = new DottedChain("__AS3__", "vec", "Vector$double"); + public static final DottedChain VECTOR_DOUBLE = new DottedChain(new String[]{"__AS3__", "vec", "Vector$double"}, ""); - public static final DottedChain VECTOR_UINT = new DottedChain("__AS3__", "vec", "Vector$uint"); + public static final DottedChain VECTOR_UINT = new DottedChain(new String[]{"__AS3__", "vec", "Vector$uint"}, ""); - public static final DottedChain VECTOR_OBJECT = new DottedChain("__AS3__", "vec", "Vector$object"); + public static final DottedChain VECTOR_OBJECT = new DottedChain(new String[]{"__AS3__", "vec", "Vector$object"}, ""); public GraphTargetItem subtype; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java index da45cc47c..006395145 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java @@ -61,7 +61,7 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - getSrcData().localName = slotName == null ? "/*UnknownSlot*/" : slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false); + getSrcData().localName = slotName == null ? "/*UnknownSlot*/" : slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true); if (getSrcData().localName.equals(value.toString(localData))) { //assigning parameters to activation reg return writer; @@ -75,14 +75,14 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign } public String getNameAsStr(LocalData localData) { - return slotName == null ? "/*UnknownSlot*/" : slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false); + return slotName == null ? "/*UnknownSlot*/" : slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true); } public GraphTextWriter getName(GraphTextWriter writer, LocalData localData) { if (slotName == null) { return writer.append("/*UnknownSlot*/"); } - return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false)); + return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java index 89bff8a6f..8136f0e18 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java @@ -97,7 +97,7 @@ public class TryAVM2Item extends AVM2Item implements Block { int eti = catchExceptions.get(e).type_index; - data.declaredType = eti <= 0 ? DottedChain.ALL : localData.constantsAvm2.getMultiname(eti).getNameWithNamespace(localData.constantsAvm2); + data.declaredType = eti <= 0 ? DottedChain.ALL : localData.constantsAvm2.getMultiname(eti).getNameWithNamespace(localData.constantsAvm2, true); writer.hilightSpecial(localName, HighlightSpecialType.TRY_NAME, e, data); writer.append(":"); writer.hilightSpecial(catchExceptions.get(e).getTypeName(localData.constantsAvm2, localData.fullyQualifiedNames), HighlightSpecialType.TRY_TYPE, e); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java index 5197aed6b..3326b34cd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java @@ -1129,6 +1129,7 @@ public class ASM3Parser { info.optional[i] = optional.get(i); } } + abc.refreshMultinameNamespaceSuffixes(); return code; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/Flasm3Lexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/Flasm3Lexer.java index f59b231d9..d9b09c680 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/Flasm3Lexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/Flasm3Lexer.java @@ -219,49 +219,49 @@ public final class Flasm3Lexer { "\1\12\1\13\2\10\1\12\2\1\17\10\1\14\1\10"+ "\1\15\1\16\1\17\1\20\1\21\1\0\1\22\2\0"+ "\2\3\2\0\2\3\1\0\1\3\1\0\1\3\1\0"+ - "\1\3\1\0\1\3\2\0\2\3\1\0\1\3\1\0"+ + "\1\3\2\0\2\3\2\0\2\3\1\0\1\3\1\0"+ "\1\3\1\0\1\3\1\0\1\3\1\0\1\3\1\0"+ "\1\3\1\0\1\3\1\0\1\3\1\23\1\24\1\25"+ "\1\23\1\26\1\27\1\30\1\31\1\23\1\32\1\33"+ "\2\10\1\34\2\0\1\34\1\0\5\10\1\35\34\10"+ "\2\0\2\3\1\0\1\36\1\3\1\36\1\0\1\3"+ - "\1\0\1\3\1\0\1\3\1\0\1\37\1\3\1\37"+ - "\2\0\2\3\1\0\1\3\1\0\1\3\1\0\1\3"+ + "\1\0\1\3\1\0\1\3\1\0\1\37\1\0\1\3"+ + "\1\37\1\3\2\0\2\3\1\0\1\3\1\0\1\3"+ "\1\0\1\3\1\0\1\3\1\0\1\3\1\0\1\3"+ - "\1\0\1\3\2\0\2\10\1\34\2\0\42\10\3\0"+ - "\3\3\1\0\1\3\2\40\2\41\1\0\1\3\1\0"+ - "\1\3\1\42\1\0\1\42\1\3\1\0\1\3\2\43"+ - "\1\0\1\3\1\0\1\3\1\0\1\3\2\44\1\0"+ - "\1\3\1\0\1\3\1\45\1\0\3\10\1\0\7\10"+ - "\1\46\1\47\4\10\1\50\1\51\3\10\1\52\7\10"+ - "\1\53\1\44\1\10\1\54\5\10\4\0\4\3\1\0"+ - "\1\3\2\55\2\56\1\0\1\3\1\0\1\3\1\0"+ - "\1\3\1\0\1\3\1\0\1\3\1\0\1\3\2\57"+ - "\3\10\1\60\1\10\1\61\1\62\23\10\1\63\1\64"+ - "\5\10\1\57\1\65\1\0\1\66\2\0\1\3\1\66"+ - "\2\3\1\0\1\3\1\0\1\3\1\0\1\3\1\0"+ - "\1\3\2\67\1\0\1\3\2\70\1\0\1\3\1\10"+ - "\1\66\5\10\1\71\10\10\1\72\1\10\1\67\2\10"+ - "\1\70\1\73\1\74\5\10\1\75\3\0\3\3\1\0"+ - "\1\3\1\0\1\3\1\0\1\3\1\0\1\3\2\76"+ - "\1\0\1\3\7\10\1\77\10\10\1\100\1\101\5\10"+ - "\1\102\1\0\1\103\1\102\1\3\1\103\1\0\1\3"+ - "\1\0\1\3\1\0\1\3\2\104\1\0\1\3\1\105"+ - "\1\10\1\106\4\10\1\107\1\10\1\110\4\10\1\111"+ - "\1\10\1\112\1\113\1\114\1\115\3\10\1\0\1\3"+ - "\1\0\1\3\2\116\1\0\1\3\1\0\1\3\1\117"+ - "\10\10\1\120\1\121\1\10\1\122\1\123\2\10\1\0"+ - "\1\3\3\0\3\3\1\0\1\3\2\124\1\125\1\126"+ - "\13\10\1\0\1\3\3\0\3\3\1\0\1\3\1\127"+ - "\5\10\1\130\5\10\1\0\1\3\3\0\3\3\1\0"+ - "\1\3\11\10\1\131\2\132\3\0\2\3\1\0\1\3"+ - "\11\10\4\0\2\3\2\133\6\10\1\134\2\10\1\135"+ - "\2\0\1\3\5\10\1\136\1\10\1\137\3\0\2\10"+ - "\1\140\1\141\2\10\2\0\1\142\1\143\1\144\1\10"+ - "\1\145\1\146\1\147"; + "\1\0\1\3\1\0\1\3\2\0\2\10\1\34\2\0"+ + "\42\10\3\0\3\3\1\0\1\3\2\40\2\41\1\0"+ + "\1\3\1\0\1\42\1\3\1\42\1\43\1\0\1\43"+ + "\1\3\1\0\1\3\2\44\1\0\1\3\1\0\1\3"+ + "\1\0\1\3\2\45\1\0\1\3\1\0\1\3\1\46"+ + "\1\0\3\10\1\0\7\10\1\47\1\50\4\10\1\51"+ + "\1\52\3\10\1\53\7\10\1\54\1\45\1\10\1\55"+ + "\5\10\4\0\4\3\1\0\1\3\2\56\2\57\1\0"+ + "\1\3\1\0\1\3\1\0\1\3\1\0\1\3\1\0"+ + "\1\3\1\0\1\3\2\60\3\10\1\61\1\10\1\62"+ + "\1\63\23\10\1\64\1\65\5\10\1\60\1\66\1\0"+ + "\1\67\2\0\1\3\1\67\2\3\1\0\1\3\1\0"+ + "\1\3\1\0\1\3\1\0\1\3\2\70\1\0\1\3"+ + "\2\71\1\0\1\3\1\10\1\67\5\10\1\72\10\10"+ + "\1\73\1\10\1\70\2\10\1\71\1\74\1\75\5\10"+ + "\1\76\3\0\3\3\1\0\1\3\1\0\1\3\1\0"+ + "\1\3\1\0\1\3\2\77\1\0\1\3\7\10\1\100"+ + "\10\10\1\101\1\102\5\10\1\103\1\0\1\104\1\103"+ + "\1\3\1\104\1\0\1\3\1\0\1\3\1\0\1\3"+ + "\2\105\1\0\1\3\1\106\1\10\1\107\4\10\1\110"+ + "\1\10\1\111\4\10\1\112\1\10\1\113\1\114\1\115"+ + "\1\116\3\10\1\0\1\3\1\0\1\3\2\117\1\0"+ + "\1\3\1\0\1\3\1\120\10\10\1\121\1\122\1\10"+ + "\1\123\1\124\2\10\1\0\1\3\3\0\3\3\1\0"+ + "\1\3\2\125\1\126\1\127\13\10\1\0\1\3\3\0"+ + "\3\3\1\0\1\3\1\130\5\10\1\131\5\10\1\0"+ + "\1\3\3\0\3\3\1\0\1\3\11\10\1\132\2\133"+ + "\3\0\2\3\1\0\1\3\11\10\4\0\2\3\2\134"+ + "\6\10\1\135\2\10\1\136\2\0\1\3\5\10\1\137"+ + "\1\10\1\140\3\0\2\10\1\141\1\142\2\10\2\0"+ + "\1\143\1\144\1\145\1\10\1\146\1\147\1\150"; private static int [] zzUnpackAction() { - int [] result = new int[677]; + int [] result = new int[683]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -300,80 +300,81 @@ public final class Flasm3Lexer { "\0\u1644\0\u1690\0\u16dc\0\u1728\0\u1774\0\u17c0\0\u180c\0\u1858"+ "\0\u18a4\0\u18f0\0\u193c\0\u1988\0\u19d4\0\u1a20\0\u1a6c\0\u1ab8"+ "\0\u1b04\0\u1b50\0\u1b9c\0\u1be8\0\u1c34\0\u1c80\0\u1ccc\0\u1d18"+ - "\0\u1d64\0\u1db0\0\344\0\344\0\344\0\u1dfc\0\344\0\344"+ - "\0\344\0\344\0\u1e48\0\344\0\344\0\u1e94\0\u1ee0\0\u1f2c"+ - "\0\u1f78\0\u1fc4\0\u0da8\0\u0e40\0\u2010\0\u205c\0\u20a8\0\u20f4"+ - "\0\u2140\0\u0d10\0\u218c\0\u21d8\0\u2224\0\u2270\0\u22bc\0\u2308"+ + "\0\u1d64\0\u1db0\0\u1dfc\0\u1e48\0\344\0\344\0\344\0\u1e94"+ + "\0\344\0\344\0\344\0\344\0\u1ee0\0\344\0\344\0\u1f2c"+ + "\0\u1f78\0\u1fc4\0\u2010\0\u205c\0\u0da8\0\u0e40\0\u20a8\0\u20f4"+ + "\0\u2140\0\u218c\0\u21d8\0\u0d10\0\u2224\0\u2270\0\u22bc\0\u2308"+ "\0\u2354\0\u23a0\0\u23ec\0\u2438\0\u2484\0\u24d0\0\u251c\0\u2568"+ "\0\u25b4\0\u2600\0\u264c\0\u2698\0\u26e4\0\u2730\0\u277c\0\u27c8"+ "\0\u2814\0\u2860\0\u28ac\0\u28f8\0\u2944\0\u2990\0\u29dc\0\u2a28"+ - "\0\u2a74\0\u2ac0\0\u2b0c\0\u0214\0\u2b58\0\u02ac\0\u2ba4\0\u2bf0"+ - "\0\u2c3c\0\u2c88\0\u2cd4\0\u2d20\0\u2d6c\0\u0214\0\u2db8\0\u02ac"+ - "\0\u2e04\0\u2e50\0\u2e9c\0\u2ee8\0\u2f34\0\u2f80\0\u2fcc\0\u3018"+ + "\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4\0\u0214\0\u2bf0\0\u02ac"+ + "\0\u2c3c\0\u2c88\0\u2cd4\0\u2d20\0\u2d6c\0\u2db8\0\u2e04\0\u0214"+ + "\0\u2e50\0\u2e9c\0\u02ac\0\u2ee8\0\u2f34\0\u2f80\0\u2fcc\0\u3018"+ "\0\u3064\0\u30b0\0\u30fc\0\u3148\0\u3194\0\u31e0\0\u322c\0\u3278"+ "\0\u32c4\0\u3310\0\u335c\0\u33a8\0\u33f4\0\u3440\0\u348c\0\u34d8"+ - "\0\u3524\0\u3524\0\u3570\0\u35bc\0\u3608\0\u3654\0\u36a0\0\u36ec"+ + "\0\u3524\0\u3570\0\u35bc\0\u3608\0\u3654\0\u3654\0\u36a0\0\u36ec"+ "\0\u3738\0\u3784\0\u37d0\0\u381c\0\u3868\0\u38b4\0\u3900\0\u394c"+ "\0\u3998\0\u39e4\0\u3a30\0\u3a7c\0\u3ac8\0\u3b14\0\u3b60\0\u3bac"+ "\0\u3bf8\0\u3c44\0\u3c90\0\u3cdc\0\u3d28\0\u3d74\0\u3dc0\0\u3e0c"+ "\0\u3e58\0\u3ea4\0\u3ef0\0\u3f3c\0\u3f88\0\u3fd4\0\u4020\0\u406c"+ - "\0\u40b8\0\u4104\0\u4150\0\u419c\0\u41e8\0\u0214\0\u02ac\0\u0214"+ - "\0\u02ac\0\u4234\0\u4280\0\u42cc\0\u4318\0\u0214\0\u4364\0\u02ac"+ - "\0\u43b0\0\u43fc\0\u4448\0\u0214\0\u02ac\0\u4494\0\u44e0\0\u452c"+ - "\0\u4578\0\u45c4\0\u4610\0\u0214\0\u02ac\0\u465c\0\u46a8\0\u46f4"+ - "\0\u4740\0\344\0\u1dfc\0\u478c\0\u47d8\0\u4824\0\u4870\0\u48bc"+ - "\0\u4908\0\u4954\0\u49a0\0\u49ec\0\u4a38\0\u4a84\0\u0d10\0\u4ad0"+ - "\0\u4b1c\0\u4b68\0\u4bb4\0\u4c00\0\u4c4c\0\u0d10\0\u4c98\0\u4ce4"+ - "\0\u4d30\0\u4d7c\0\u4dc8\0\u4e14\0\u4e60\0\u4eac\0\u4ef8\0\u4f44"+ - "\0\u4f90\0\u0d10\0\u0d10\0\u4fdc\0\u0d10\0\u5028\0\u5074\0\u50c0"+ - "\0\u510c\0\u5158\0\u51a4\0\u51f0\0\u523c\0\u5288\0\u52d4\0\u5320"+ - "\0\u536c\0\u53b8\0\u5404\0\u5450\0\u549c\0\u54e8\0\u0214\0\u02ac"+ - "\0\u5534\0\u5580\0\u55cc\0\u5618\0\u5664\0\u56b0\0\u56fc\0\u5748"+ - "\0\u5794\0\u57e0\0\u582c\0\u5878\0\u0214\0\u02ac\0\u58c4\0\u5910"+ - "\0\u595c\0\344\0\u59a8\0\u0d10\0\u0d10\0\u59f4\0\u5a40\0\u5a8c"+ - "\0\u5ad8\0\u5b24\0\u5b70\0\u5bbc\0\u5c08\0\u5c54\0\u5ca0\0\u5cec"+ - "\0\u5d38\0\u5d84\0\u5dd0\0\u5e1c\0\u5e68\0\u5eb4\0\u5f00\0\u5f4c"+ - "\0\u0d10\0\u0d10\0\u5f98\0\u5fe4\0\u6030\0\u607c\0\u60c8\0\u0d10"+ - "\0\u6114\0\u6160\0\u0214\0\u61ac\0\u61f8\0\u6244\0\u02ac\0\u6290"+ - "\0\u62dc\0\u6328\0\u6374\0\u63c0\0\u640c\0\u6458\0\u64a4\0\u64f0"+ - "\0\u653c\0\u0214\0\u02ac\0\u6588\0\u65d4\0\u0214\0\u02ac\0\u6620"+ - "\0\u666c\0\u66b8\0\u0d10\0\u6704\0\u6750\0\u679c\0\u67e8\0\u6834"+ - "\0\u0d10\0\u6880\0\u68cc\0\u6918\0\u6964\0\u69b0\0\u69fc\0\u6a48"+ - "\0\u6a94\0\u0d10\0\u6ae0\0\u0d10\0\u6b2c\0\u6b78\0\u0d10\0\u0d10"+ - "\0\u0d10\0\u6bc4\0\u6c10\0\u6c5c\0\u6ca8\0\u6cf4\0\u0d10\0\u6d40"+ - "\0\u6d8c\0\u6dd8\0\u6e24\0\u6e70\0\u6ebc\0\u6f08\0\u6f54\0\u6fa0"+ - "\0\u6fec\0\u7038\0\u7084\0\u70d0\0\u711c\0\u0214\0\u02ac\0\u7168"+ - "\0\u71b4\0\u7200\0\u724c\0\u7298\0\u72e4\0\u7330\0\u737c\0\u73c8"+ - "\0\u0d10\0\u7414\0\u7460\0\u74ac\0\u74f8\0\u7544\0\u7590\0\u75dc"+ - "\0\u7628\0\u7674\0\u0d10\0\u76c0\0\u770c\0\u7758\0\u77a4\0\u77f0"+ - "\0\u0214\0\u783c\0\u0214\0\u02ac\0\u7888\0\u02ac\0\u78d4\0\u7920"+ - "\0\u796c\0\u79b8\0\u7a04\0\u7a50\0\u0214\0\u02ac\0\u7a9c\0\u7ae8"+ - "\0\u0d10\0\u7b34\0\u7b80\0\u7bcc\0\u7c18\0\u7c64\0\u7cb0\0\u0d10"+ - "\0\u7cfc\0\u0d10\0\u7d48\0\u7d94\0\u7de0\0\u7e2c\0\u0d10\0\u7e78"+ - "\0\u0d10\0\u7ec4\0\u0d10\0\u0d10\0\u7f10\0\u7f5c\0\u7fa8\0\u7ff4"+ - "\0\u8040\0\u808c\0\u80d8\0\u0214\0\u02ac\0\u8124\0\u8170\0\u81bc"+ - "\0\u8208\0\u8254\0\u82a0\0\u82ec\0\u8338\0\u8384\0\u83d0\0\u841c"+ - "\0\u8468\0\u84b4\0\u0d10\0\u0d10\0\u8500\0\u0d10\0\u0d10\0\u854c"+ - "\0\u8598\0\u85e4\0\u8630\0\u867c\0\u86c8\0\u8714\0\u8760\0\u87ac"+ - "\0\u87f8\0\u8844\0\u8890\0\u0214\0\u02ac\0\u0d10\0\u88dc\0\u8928"+ - "\0\u8974\0\u89c0\0\u8a0c\0\u8a58\0\u8aa4\0\u8af0\0\u8b3c\0\u8b88"+ - "\0\u8bd4\0\u8c20\0\u8c6c\0\u8cb8\0\u8d04\0\u8d50\0\u8d9c\0\u8de8"+ - "\0\u8e34\0\u8e80\0\u8ecc\0\u8f18\0\u0d10\0\u8f64\0\u8fb0\0\u8ffc"+ - "\0\u9048\0\u9094\0\u0d10\0\u90e0\0\u912c\0\u9178\0\u91c4\0\u9210"+ - "\0\u925c\0\u92a8\0\u92f4\0\u9340\0\u938c\0\u93d8\0\u9424\0\u9470"+ - "\0\u94bc\0\u9508\0\u9554\0\u95a0\0\u95ec\0\u9638\0\u9684\0\u96d0"+ - "\0\u971c\0\u9768\0\u97b4\0\u0d10\0\u0214\0\u02ac\0\u9800\0\u984c"+ - "\0\u9898\0\u98e4\0\u9930\0\u997c\0\u99c8\0\u9a14\0\u9a60\0\u9aac"+ - "\0\u9af8\0\u9b44\0\u9b90\0\u9bdc\0\u9c28\0\u9c74\0\u9cc0\0\u9d0c"+ - "\0\u9d58\0\u9da4\0\u9df0\0\u9e3c\0\u0214\0\u02ac\0\u9e88\0\u9ed4"+ - "\0\u9f20\0\u9f6c\0\u9fb8\0\ua004\0\u0d10\0\ua050\0\ua09c\0\344"+ - "\0\ua0e8\0\ua134\0\ua180\0\ua1cc\0\ua218\0\ua264\0\ua2b0\0\ua2fc"+ - "\0\u0d10\0\ua348\0\u0d10\0\ua394\0\ua3e0\0\ua42c\0\ua478\0\ua4c4"+ - "\0\u0d10\0\u0d10\0\ua510\0\ua55c\0\ua5a8\0\ua5f4\0\344\0\u0d10"+ - "\0\u0d10\0\ua640\0\u0d10\0\344\0\u0d10"; + "\0\u40b8\0\u4104\0\u4150\0\u419c\0\u41e8\0\u4234\0\u4280\0\u42cc"+ + "\0\u4318\0\u0214\0\u02ac\0\u0214\0\u02ac\0\u4364\0\u43b0\0\u43fc"+ + "\0\u0214\0\u4448\0\u02ac\0\u0214\0\u4494\0\u02ac\0\u44e0\0\u452c"+ + "\0\u4578\0\u0214\0\u02ac\0\u45c4\0\u4610\0\u465c\0\u46a8\0\u46f4"+ + "\0\u4740\0\u0214\0\u02ac\0\u478c\0\u47d8\0\u4824\0\u4870\0\344"+ + "\0\u1e94\0\u48bc\0\u4908\0\u4954\0\u49a0\0\u49ec\0\u4a38\0\u4a84"+ + "\0\u4ad0\0\u4b1c\0\u4b68\0\u4bb4\0\u0d10\0\u4c00\0\u4c4c\0\u4c98"+ + "\0\u4ce4\0\u4d30\0\u4d7c\0\u0d10\0\u4dc8\0\u4e14\0\u4e60\0\u4eac"+ + "\0\u4ef8\0\u4f44\0\u4f90\0\u4fdc\0\u5028\0\u5074\0\u50c0\0\u0d10"+ + "\0\u0d10\0\u510c\0\u0d10\0\u5158\0\u51a4\0\u51f0\0\u523c\0\u5288"+ + "\0\u52d4\0\u5320\0\u536c\0\u53b8\0\u5404\0\u5450\0\u549c\0\u54e8"+ + "\0\u5534\0\u5580\0\u55cc\0\u5618\0\u0214\0\u02ac\0\u5664\0\u56b0"+ + "\0\u56fc\0\u5748\0\u5794\0\u57e0\0\u582c\0\u5878\0\u58c4\0\u5910"+ + "\0\u595c\0\u59a8\0\u0214\0\u02ac\0\u59f4\0\u5a40\0\u5a8c\0\344"+ + "\0\u5ad8\0\u0d10\0\u0d10\0\u5b24\0\u5b70\0\u5bbc\0\u5c08\0\u5c54"+ + "\0\u5ca0\0\u5cec\0\u5d38\0\u5d84\0\u5dd0\0\u5e1c\0\u5e68\0\u5eb4"+ + "\0\u5f00\0\u5f4c\0\u5f98\0\u5fe4\0\u6030\0\u607c\0\u0d10\0\u0d10"+ + "\0\u60c8\0\u6114\0\u6160\0\u61ac\0\u61f8\0\u0d10\0\u6244\0\u6290"+ + "\0\u0214\0\u62dc\0\u6328\0\u6374\0\u02ac\0\u63c0\0\u640c\0\u6458"+ + "\0\u64a4\0\u64f0\0\u653c\0\u6588\0\u65d4\0\u6620\0\u666c\0\u0214"+ + "\0\u02ac\0\u66b8\0\u6704\0\u0214\0\u02ac\0\u6750\0\u679c\0\u67e8"+ + "\0\u0d10\0\u6834\0\u6880\0\u68cc\0\u6918\0\u6964\0\u0d10\0\u69b0"+ + "\0\u69fc\0\u6a48\0\u6a94\0\u6ae0\0\u6b2c\0\u6b78\0\u6bc4\0\u0d10"+ + "\0\u6c10\0\u0d10\0\u6c5c\0\u6ca8\0\u0d10\0\u0d10\0\u0d10\0\u6cf4"+ + "\0\u6d40\0\u6d8c\0\u6dd8\0\u6e24\0\u0d10\0\u6e70\0\u6ebc\0\u6f08"+ + "\0\u6f54\0\u6fa0\0\u6fec\0\u7038\0\u7084\0\u70d0\0\u711c\0\u7168"+ + "\0\u71b4\0\u7200\0\u724c\0\u0214\0\u02ac\0\u7298\0\u72e4\0\u7330"+ + "\0\u737c\0\u73c8\0\u7414\0\u7460\0\u74ac\0\u74f8\0\u0d10\0\u7544"+ + "\0\u7590\0\u75dc\0\u7628\0\u7674\0\u76c0\0\u770c\0\u7758\0\u77a4"+ + "\0\u0d10\0\u77f0\0\u783c\0\u7888\0\u78d4\0\u7920\0\u0214\0\u796c"+ + "\0\u0214\0\u02ac\0\u79b8\0\u02ac\0\u7a04\0\u7a50\0\u7a9c\0\u7ae8"+ + "\0\u7b34\0\u7b80\0\u0214\0\u02ac\0\u7bcc\0\u7c18\0\u0d10\0\u7c64"+ + "\0\u7cb0\0\u7cfc\0\u7d48\0\u7d94\0\u7de0\0\u0d10\0\u7e2c\0\u0d10"+ + "\0\u7e78\0\u7ec4\0\u7f10\0\u7f5c\0\u0d10\0\u7fa8\0\u0d10\0\u7ff4"+ + "\0\u0d10\0\u0d10\0\u8040\0\u808c\0\u80d8\0\u8124\0\u8170\0\u81bc"+ + "\0\u8208\0\u0214\0\u02ac\0\u8254\0\u82a0\0\u82ec\0\u8338\0\u8384"+ + "\0\u83d0\0\u841c\0\u8468\0\u84b4\0\u8500\0\u854c\0\u8598\0\u85e4"+ + "\0\u0d10\0\u0d10\0\u8630\0\u0d10\0\u0d10\0\u867c\0\u86c8\0\u8714"+ + "\0\u8760\0\u87ac\0\u87f8\0\u8844\0\u8890\0\u88dc\0\u8928\0\u8974"+ + "\0\u89c0\0\u0214\0\u02ac\0\u0d10\0\u8a0c\0\u8a58\0\u8aa4\0\u8af0"+ + "\0\u8b3c\0\u8b88\0\u8bd4\0\u8c20\0\u8c6c\0\u8cb8\0\u8d04\0\u8d50"+ + "\0\u8d9c\0\u8de8\0\u8e34\0\u8e80\0\u8ecc\0\u8f18\0\u8f64\0\u8fb0"+ + "\0\u8ffc\0\u9048\0\u0d10\0\u9094\0\u90e0\0\u912c\0\u9178\0\u91c4"+ + "\0\u0d10\0\u9210\0\u925c\0\u92a8\0\u92f4\0\u9340\0\u938c\0\u93d8"+ + "\0\u9424\0\u9470\0\u94bc\0\u9508\0\u9554\0\u95a0\0\u95ec\0\u9638"+ + "\0\u9684\0\u96d0\0\u971c\0\u9768\0\u97b4\0\u9800\0\u984c\0\u9898"+ + "\0\u98e4\0\u0d10\0\u0214\0\u02ac\0\u9930\0\u997c\0\u99c8\0\u9a14"+ + "\0\u9a60\0\u9aac\0\u9af8\0\u9b44\0\u9b90\0\u9bdc\0\u9c28\0\u9c74"+ + "\0\u9cc0\0\u9d0c\0\u9d58\0\u9da4\0\u9df0\0\u9e3c\0\u9e88\0\u9ed4"+ + "\0\u9f20\0\u9f6c\0\u0214\0\u02ac\0\u9fb8\0\ua004\0\ua050\0\ua09c"+ + "\0\ua0e8\0\ua134\0\u0d10\0\ua180\0\ua1cc\0\344\0\ua218\0\ua264"+ + "\0\ua2b0\0\ua2fc\0\ua348\0\ua394\0\ua3e0\0\ua42c\0\u0d10\0\ua478"+ + "\0\u0d10\0\ua4c4\0\ua510\0\ua55c\0\ua5a8\0\ua5f4\0\u0d10\0\u0d10"+ + "\0\ua640\0\ua68c\0\ua6d8\0\ua724\0\344\0\u0d10\0\u0d10\0\ua770"+ + "\0\u0d10\0\344\0\u0d10"; private static int [] zzUnpackRowMap() { - int [] result = new int[677]; + int [] result = new int[683]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -478,272 +479,283 @@ public final class Flasm3Lexer { "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\22\115\2\135\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\135\1\136"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\6\115"+ - "\2\137\4\115\2\140\6\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\137\1\141\1\115\1\12\1\115\1\12"+ - "\1\140\1\142\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\4\115"+ - "\2\143\16\115\1\0\22\115\1\0\2\115\5\0\1\115"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\143\1\144"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\20\115\2\145\2\115"+ - "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\145\1\146\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\24\115\1\0\10\115\2\147\10\115"+ + "\2\115\1\0\22\115\2\135\1\0\4\115\2\136\14\115"+ "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\147\1\150\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\151\1\0\2\115"+ - "\1\0\24\115\1\0\22\115\1\0\2\115\5\0\1\115"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\151\1\152\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\10\115\2\153\12\115"+ - "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\153\1\154\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\24\115\1\0\10\115\2\155\10\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\155\1\156\1\115\1\12\1\115"+ + "\1\135\1\137\1\0\1\115\1\12\1\115\1\12\1\136"+ + "\1\140\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\12\115\2\157\10\115\1\0\22\115\1\0\2\115"+ + "\1\0\6\115\2\141\4\115\2\142\6\115\1\0\22\115"+ + "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ + "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\141\1\143\1\115\1\12"+ + "\1\115\1\12\1\142\1\144\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ + "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ + "\1\0\4\115\2\145\16\115\1\0\22\115\1\0\2\115"+ "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\157\1\160"+ + "\1\145\1\146\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\20\115"+ - "\2\161\2\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\2\147\2\115\1\0\22\115\1\0\2\115\5\0\1\115"+ "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\161\1\162\1\115\1\12\1\0\1\115"+ + "\1\115\1\12\1\147\1\150\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\1\47\2\0\24\47\1\0\47\47\1\0\14\47\2\0"+ - "\1\51\111\0\1\163\2\0\22\163\2\164\1\165\1\163"+ - "\1\166\4\163\2\167\4\163\2\170\4\163\2\171\7\163"+ - "\2\172\3\163\1\173\6\163\1\174\10\163\1\175\5\0"+ - "\1\55\116\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\176\1\0\2\62\1\0\24\62\1\0"+ - "\12\62\2\177\6\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\7\0\1\60\7\0\1\60\1\0\1\200\2\201"+ - "\63\0\1\60\11\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\202\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\176\1\0\2\62\1\0\24\62\1\0\12\62"+ - "\2\177\6\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\7\0\1\203\7\0\1\203\1\0\1\200\2\201\63\0"+ - "\1\203\13\0\1\60\7\0\1\203\1\0\1\204\65\0"+ - "\1\60\13\0\1\200\7\0\1\200\67\0\1\200\11\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\2\205\22\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\12\62\2\206\10\62\1\0\10\62"+ - "\2\207\10\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\20\62\2\210\2\211"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\12\62\2\212\4\62"+ - "\2\213\2\214\1\0\4\62\2\215\14\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\24\115\1\0\10\115"+ + "\2\151\10\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\151\1\152\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\153"+ + "\1\0\2\115\1\0\24\115\1\0\22\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\153\1\154"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\10\115"+ + "\2\155\12\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\155\1\156\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\24\115\1\0\10\115"+ + "\2\157\10\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\157\1\160\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ + "\1\0\2\115\1\0\12\115\2\161\10\115\1\0\22\115"+ + "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ + "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\161\1\162\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ + "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ + "\1\0\20\115\2\163\2\115\1\0\22\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\163\1\164\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\1\47\2\0\24\47\1\0\47\47\1\0"+ + "\14\47\2\0\1\51\111\0\1\165\2\0\22\165\2\166"+ + "\1\167\1\165\1\170\4\165\2\171\4\165\2\172\4\165"+ + "\2\173\7\165\2\174\3\165\1\175\6\165\1\176\10\165"+ + "\1\177\5\0\1\55\116\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\200\1\0\2\62\1\0"+ + "\24\62\1\0\12\62\2\201\6\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\7\0\1\60\7\0\1\60\1\0"+ + "\1\202\2\203\63\0\1\60\11\0\1\62\1\0\1\62"+ "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\14\62\2\216\6\62\1\0\2\62\2\217\16\62"+ + "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\204\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\200\1\0\2\62\1\0\24\62"+ + "\1\0\12\62\2\201\6\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\7\0\1\205\7\0\1\205\1\0\1\202"+ + "\2\203\63\0\1\205\13\0\1\60\7\0\1\205\1\0"+ + "\1\206\65\0\1\60\13\0\1\202\7\0\1\202\67\0"+ + "\1\202\11\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\2\207\22\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\12\62\2\210\10\62"+ + "\1\0\10\62\2\211\10\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\212\2\213\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\12\62"+ + "\2\214\4\62\2\215\2\216\1\0\4\62\2\217\14\62"+ "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\24\62\1\0\20\62\2\220\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\221\1\0"+ - "\2\62\1\0\20\62\2\222\2\62\1\0\12\62\2\223"+ + "\1\0\2\62\1\0\14\62\2\220\6\62\1\0\2\62"+ + "\2\221\16\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\20\62"+ + "\2\222\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\223\1\0\2\62\1\0\20\62\2\224\2\62\1\0"+ + "\12\62\2\225\6\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\226\1\0\2\62\1\0\6\62\2\227"+ + "\14\62\1\0\10\62\2\230\10\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\6\62\2\231\14\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\232\1\0\2\62\1\0"+ + "\10\62\2\233\2\234\10\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\235\1\0\2\62"+ + "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\10\62"+ + "\2\236\6\62\2\237\2\240\1\0\10\62\2\241\2\242"+ "\6\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\224\1\0\2\62\1\0\6\62\2\225\14\62\1\0"+ - "\10\62\2\226\10\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\227"+ - "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\230\1\0\2\62\1\0\10\62\2\231"+ - "\2\232\10\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\2\62\1\0\2\62\1\0\6\62\2\243\2\244\2\62"+ + "\2\245\6\62\1\0\22\62\1\0\2\62\5\0\1\62"+ "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\233\1\0\2\62\1\0\24\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\10\62\2\234\6\62"+ - "\2\235\2\236\1\0\10\62\2\237\2\240\6\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\6\62\2\241\2\242\2\62\2\243\6\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\20\62\2\244\2\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\20\62\2\245\2\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\14\62\2\246\6\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\6\115\2\247\14\115"+ - "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\2\250\22\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\246\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\247\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\14\62"+ + "\2\250\6\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\6\115"+ + "\2\251\14\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\2\252"+ + "\22\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\251"+ + "\1\253\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ - "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\247\1\251\1\115"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\252"+ + "\1\254\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ - "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\0\1\250\1\252\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ - "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ - "\2\115\2\253\20\115\1\0\22\115\1\0\2\115\5\0"+ - "\1\115\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ - "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ - "\24\115\1\0\2\254\20\115\1\0\2\115\5\0\1\115"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\253\1\255\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\254\1\256\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\24\115\1\0\2\257\20\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\2\115\2\255\20\115\1\0\22\115\1\0"+ "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\257\1\260\1\115\1\12\1\115\1\12"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\24\115\1\0\2\256\20\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\255\1\257"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ - "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ - "\24\115\1\0\2\261\20\115\1\0\2\115\5\0\1\115"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\261"+ - "\1\262\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\256"+ + "\1\260\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\22\115\2\263\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\2\0\2\115\1\0\2\115\1\0\24\115\1\0\2\261"+ + "\20\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\263\1\264\1\0\1\115\1\12\1\115\1\12"+ + "\1\12\1\115\1\12\1\0\1\261\1\262\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\20\115\2\265\2\115\1\0\4\115\2\266"+ - "\14\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\2\115\1\0\24\115\1\0\2\263\20\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\263\1\264\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\22\115"+ + "\2\265\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\265\1\266\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ + "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ + "\2\115\1\0\2\115\1\0\20\115\2\267\2\115\1\0"+ + "\4\115\2\270\14\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\4\115\2\271"+ + "\16\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\267\1\272\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\270\1\273\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\271\1\274\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\265"+ - "\1\267\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\266\1\270\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ - "\1\115\1\0\5\115\1\116\1\115\2\0\2\271\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\275\1\0"+ "\2\115\1\0\24\115\1\0\22\115\1\0\2\115\5\0"+ "\1\115\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ - "\10\115\2\272\12\115\1\0\22\115\1\0\2\115\5\0"+ + "\10\115\2\276\12\115\1\0\22\115\1\0\2\115\5\0"+ "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\271\1\273\1\0"+ + "\2\115\3\12\1\116\1\12\2\0\1\275\1\277\1\0"+ "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ @@ -753,26 +765,26 @@ public final class Flasm3Lexer { "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\272\1\274\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\276\1\300\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\6\115\2\275\14\115\1\0"+ + "\2\115\1\0\2\115\1\0\6\115\2\301\14\115\1\0"+ "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\275\1\276\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\301\1\302\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\5\0\1\12\3\0\1\115\5\0\1\277\1\0"+ - "\1\115\1\0\2\115\1\277\2\115\1\116\1\115\2\0"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\303\1\0"+ + "\1\115\1\0\2\115\1\303\2\115\1\116\1\115\2\0"+ "\2\115\1\0\2\115\1\0\24\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\277\1\0"+ - "\1\12\1\0\2\115\1\300\2\12\1\116\1\12\2\0"+ + "\2\115\5\0\1\115\3\0\1\115\5\0\1\303\1\0"+ + "\1\12\1\0\2\115\1\304\2\12\1\116\1\12\2\0"+ "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ @@ -781,53 +793,53 @@ public final class Flasm3Lexer { "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\12\115\2\301\10\115\1\0\22\115\1\0\2\115"+ + "\1\0\12\115\2\305\10\115\1\0\22\115\1\0\2\115"+ "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\301\1\302"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\305\1\306"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\6\115"+ - "\2\303\14\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\2\307\14\115\1\0\22\115\1\0\2\115\5\0\1\115"+ "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\303\1\304\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\307\1\310\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\16\115\2\305\4\115"+ + "\2\0\2\115\1\0\2\115\1\0\16\115\2\311\4\115"+ "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\305\1\306"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\311\1\312"+ "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\20\115\2\307\2\115\1\0\22\115"+ + "\1\0\2\115\1\0\20\115\2\313\2\115\1\0\22\115"+ "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\307\1\310"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\313\1\314"+ "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\2\115\2\311\20\115\1\0\22\115\1\0\2\115"+ + "\1\0\2\115\2\315\20\115\1\0\22\115\1\0\2\115"+ "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\311\1\312"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\315\1\316"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ @@ -835,153 +847,153 @@ public final class Flasm3Lexer { "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\24\115"+ - "\1\0\10\115\2\313\10\115\1\0\2\115\5\0\1\115"+ + "\1\0\10\115\2\317\10\115\1\0\2\115\5\0\1\115"+ "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\313"+ - "\1\314\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\317"+ + "\1\320\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\7\0\1\315\7\0\1\315\2\0\2\315\1\0\2\315"+ - "\3\0\2\315\14\0\2\315\3\0\2\315\4\0\2\315"+ - "\22\0\1\315\13\0\1\316\7\0\1\316\2\0\2\316"+ - "\1\0\2\316\3\0\2\316\14\0\2\316\3\0\2\316"+ - "\4\0\2\316\22\0\1\316\11\0\1\62\1\0\1\62"+ + "\7\0\1\321\7\0\1\321\2\0\2\321\1\0\2\321"+ + "\3\0\2\321\14\0\2\321\3\0\2\321\4\0\2\321"+ + "\22\0\1\321\13\0\1\322\7\0\1\322\2\0\2\322"+ + "\1\0\2\322\3\0\2\322\14\0\2\322\3\0\2\322"+ + "\4\0\2\322\22\0\1\322\11\0\1\62\1\0\1\62"+ "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\6\62\2\317\14\62\1\0\22\62\1\0\2\62"+ + "\1\0\6\62\2\323\14\62\1\0\22\62\1\0\2\62"+ "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\24\62\1\0\10\62\2\320\10\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\7\0\1\200\7\0\1\200"+ - "\2\0\2\201\63\0\1\200\13\0\1\321\7\0\1\321"+ - "\1\322\3\0\1\322\62\0\1\321\13\0\1\323\7\0"+ - "\1\323\67\0\1\323\11\0\1\62\1\0\1\62\1\0"+ + "\1\0\24\62\1\0\10\62\2\324\10\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\7\0\1\202\7\0\1\202"+ + "\2\0\2\203\63\0\1\202\13\0\1\325\7\0\1\325"+ + "\1\326\3\0\1\326\62\0\1\325\13\0\1\327\7\0"+ + "\1\327\67\0\1\327\11\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\4\62\2\324\16\62\1\0\22\62\1\0\2\62\5\0"+ + "\4\62\2\330\16\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\14\62\2\325\6\62\1\0\22\62\1\0\2\62\5\0"+ + "\14\62\2\331\6\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\20\62\2\326\2\62\1\0\22\62\1\0\2\62\5\0"+ + "\20\62\2\332\2\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\2\62\2\327\20\62\1\0\22\62\1\0\2\62\5\0"+ + "\2\62\2\333\20\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\10\62\2\330\2\331\10\62\1\0\22\62\1\0\2\62"+ + "\10\62\2\334\2\335\10\62\1\0\22\62\1\0\2\62"+ "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\22\62\2\332\1\0\22\62\1\0\2\62\5\0"+ + "\1\0\22\62\2\336\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\12\62\2\333\6\62\1\0\2\62\5\0"+ + "\24\62\1\0\12\62\2\337\6\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\4\62\2\334\16\62\1\0\22\62\1\0\2\62\5\0"+ + "\4\62\2\340\16\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\6\62\2\335\14\62\1\0\22\62\1\0\2\62\5\0"+ + "\6\62\2\341\14\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\14\62\2\336\6\62\1\0\22\62\1\0\2\62\5\0"+ + "\14\62\2\342\6\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\337\1\0\2\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\343\1\0\2\62\1\0"+ "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\340\1\0\2\62\1\0\24\62\1\0"+ + "\1\62\2\0\2\344\1\0\2\62\1\0\24\62\1\0"+ "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\341\1\0\1\62\1\0\2\62\1\341\2\62\1\0"+ + "\1\345\1\0\1\62\1\0\2\62\1\345\2\62\1\0"+ "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\24\62\1\0\10\62\2\342"+ + "\2\62\1\0\2\62\1\0\24\62\1\0\10\62\2\346"+ "\10\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\6\62\2\343\14\62\1\0"+ + "\2\62\1\0\2\62\1\0\6\62\2\347\14\62\1\0"+ "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\20\62\2\344\2\62\1\0"+ + "\2\62\1\0\2\62\1\0\20\62\2\350\2\62\1\0"+ "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\12\62\2\345\10\62\1\0"+ + "\2\62\1\0\2\62\1\0\12\62\2\351\10\62\1\0"+ "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ "\2\62\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ - "\2\346\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\2\352\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\2\62\2\347\20\62\1\0\22\62\1\0"+ + "\2\62\1\0\2\62\2\353\20\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\16\62\2\350\4\62\1\0\22\62\1\0"+ + "\2\62\1\0\16\62\2\354\4\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\24\62\1\0\12\62\2\351\6\62\1\0"+ + "\2\62\1\0\24\62\1\0\12\62\2\355\6\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\6\62\2\352\14\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\14\62\2\353\6\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\24\62\1\0\10\62\2\354\10\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\12\62\2\355\10\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\20\62\2\356\2\62\1\0\22\62\1\0"+ + "\2\62\1\0\6\62\2\356\14\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ "\2\62\1\0\14\62\2\357\6\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\24\62\1\0\6\62\2\360\12\62\1\0"+ + "\2\62\1\0\24\62\1\0\10\62\2\360\10\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\14\62\2\361\6\62\1\0\22\62\1\0"+ + "\2\62\1\0\12\62\2\361\10\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\24\62\1\0\2\362\20\62\1\0\2\62"+ + "\2\62\1\0\20\62\2\362\2\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\14\62\2\363\6\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\24\62\1\0\6\62\2\364\12\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\14\62\2\365\6\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\24\62\1\0\2\366\20\62\1\0\2\62"+ "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\16\62\2\363\4\62\1\0\22\62\1\0\2\62"+ + "\1\0\16\62\2\367\4\62\1\0\22\62\1\0\2\62"+ "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\24\62\1\0\10\62\2\364\10\62\1\0\2\62"+ + "\1\0\24\62\1\0\10\62\2\370\10\62\1\0\2\62"+ "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\20\62\2\365\2\62\1\0\22\62\1\0\2\62"+ + "\1\0\20\62\2\371\2\62\1\0\22\62\1\0\2\62"+ "\5\0\1\62\3\0\1\62\5\0\1\115\1\0\1\115"+ "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\20\115\2\366\2\115\1\0\16\115\2\367\2\115"+ + "\1\0\20\115\2\372\2\115\1\0\16\115\2\373\2\115"+ "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\16\115\2\370\4\115\1\0\22\115"+ + "\1\0\2\115\1\0\16\115\2\374\4\115\1\0\22\115"+ "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\366\1\371"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\372\1\375"+ "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\367\1\372\1\115\1\12\1\0\1\115\1\12"+ + "\1\12\1\373\1\376\1\115\1\12\1\0\1\115\1\12"+ "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\12"+ "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\370\1\373\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\374\1\377\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\374\1\0\2\115\1\0\24\115"+ + "\1\116\1\115\2\0\2\u0100\1\0\2\115\1\0\24\115"+ "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\374\1\375\1\0\1\115\1\12\1\0"+ + "\1\12\2\0\1\u0100\1\u0101\1\0\1\115\1\12\1\0"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ @@ -989,20 +1001,20 @@ public final class Flasm3Lexer { "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\24\115\1\0\4\115\2\376\14\115"+ + "\1\0\2\115\1\0\24\115\1\0\4\115\2\u0102\14\115"+ "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\376"+ - "\1\377\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\u0102"+ + "\1\u0103\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\u0100\1\0\2\115"+ + "\1\0\5\115\1\116\1\115\2\0\2\u0104\1\0\2\115"+ "\1\0\24\115\1\0\22\115\1\0\2\115\5\0\1\115"+ "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\u0100\1\u0101\1\0\1\115"+ + "\3\12\1\116\1\12\2\0\1\u0104\1\u0105\1\0\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ @@ -1010,1043 +1022,563 @@ public final class Flasm3Lexer { "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\20\115\2\u0102\2\115"+ + "\2\0\2\115\1\0\2\115\1\0\20\115\2\u0106\2\115"+ "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\u0102\1\u0103\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\u0106\1\u0107\1\115\1\12\1\0\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\10\115\2\u0104\12\115\1\0\22\115"+ + "\1\0\2\115\1\0\10\115\2\u0108\12\115\1\0\22\115"+ "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u0104\1\u0105"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\u0106\1\0\1\115"+ - "\1\0\2\115\1\u0106\2\115\1\116\1\115\2\0\2\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\u0109"+ "\1\0\2\115\1\0\24\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\6\115\2\u0107\14\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\u0106\1\0\1\12"+ - "\1\0\2\115\1\u0108\2\12\1\116\1\12\2\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\u0108\1\u010a\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\u0107\1\u0109\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\10\115\2\u010a"+ - "\12\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ - "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ - "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\u010a\1\u010b\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\u010c\1\0\2\115\1\0\24\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\u010c"+ - "\1\u010d\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ - "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ - "\6\115\2\u010e\14\115\1\0\22\115\1\0\2\115\5\0"+ - "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\u010e\1\u010f\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\24\115\1\0"+ - "\12\115\2\u0110\6\115\1\0\2\115\5\0\1\115\3\0"+ - "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ - "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\u0110\1\u0111\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\4\115\2\u0112\16\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ - "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ - "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\u0112\1\u0113\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\u0109\1\u010b\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ - "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\24\115\1\0\2\115\2\u0114\16\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\1\u0114\1\u0115\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ - "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ - "\20\115\2\u0116\2\115\1\0\22\115\1\0\2\115\5\0"+ - "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\u0116\1\u0117\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\24\115\1\0"+ - "\12\115\2\u0118\6\115\1\0\2\115\5\0\1\115\3\0"+ - "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ - "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\u0118\1\u0119\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\7\0"+ - "\1\u011a\7\0\1\u011a\2\0\2\u011a\1\0\2\u011a\3\0"+ - "\2\u011a\14\0\2\u011a\3\0\2\u011a\4\0\2\u011a\22\0"+ - "\1\u011a\13\0\1\u011b\7\0\1\u011b\2\0\2\u011b\1\0"+ - "\2\u011b\3\0\2\u011b\14\0\2\u011b\3\0\2\u011b\4\0"+ - "\2\u011b\22\0\1\u011b\11\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\20\62\2\u011c\2\62\1\0\16\62\2\u011d\2\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\6\62\2\u011e\14\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\7\0\1\321\7\0"+ - "\1\321\67\0\1\321\13\0\1\323\1\u011f\6\0\1\323"+ - "\67\0\1\323\11\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\10\62\2\u0120\10\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\16\62"+ - "\2\u0121\4\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\16\62"+ - "\2\u0122\4\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\14\62\2\u0123\4\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\20\62\2\u0124\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\u0125"+ - "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ - "\2\62\2\u0126\16\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u0127\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\u0128\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\u0129\1\0"+ - "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\12\62\2\u012a\10\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\22\62\2\u012b\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\2\u012c\20\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u012d\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\24\62\1\0\10\62\2\u012e"+ - "\10\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\4\62\1\u012f\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\6\62\2\u0130\14\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\6\62\2\u0131\14\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\6\62\2\u0132\14\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\14\62\2\u0133\6\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\10\62\2\u0134\12\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\4\62\2\u0135\16\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\u0136\1\0\24\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\6\62\2\u0137\14\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\20\62\2\u0138\2\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\16\62\2\u0139\4\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\u013a"+ - "\1\0\1\62\1\0\2\62\1\u013a\2\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\24\62\1\0\2\62\2\u013b\16\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\2\62\2\u013c\20\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\u013d\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\6\62\2\u013e\14\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\u013f\1\0\2\62"+ - "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\4\62"+ - "\1\u0140\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ - "\12\62\2\u0141\6\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\u0142\1\0\1\62\1\0\2\62\1\u0142"+ - "\2\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\24\115\1\0"+ - "\2\u0143\20\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\12\115\2\u0144\10\115"+ - "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\2\115\2\u0145\2\115"+ - "\2\u0146\14\115\1\0\22\115\1\0\2\115\5\0\1\115"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\u0143"+ - "\1\u0147\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\u0144\1\u0148\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\u0145\1\u0149\1\115\1\12\1\u0146\1\u014a\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\4\115\2\u014b\16\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\u014b\1\u014c\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\5\0\1\u010c\1\0\1\115\1\0\2\115\1\u010c\2\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\24\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\6\115\2\u010d\14\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\u010c\1\0\1\12\1\0\2\115\1\u010e\2\12"+ + "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\u014d\1\0\1\115\1\0\2\115"+ - "\1\u014d\2\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\24\115\1\0\22\115\1\0\2\115\5\0\1\115"+ - "\3\0\1\115\5\0\1\u014d\1\0\1\12\1\0\2\115"+ - "\1\u014e\2\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\6\115\2\u014f"+ - "\14\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ - "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ - "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\u014f"+ - "\1\u0150\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\16\115\2\u0151\4\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\u010d\1\u010f\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\u0151\1\u0152\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\12\115\2\u0153\10\115\1\0\22\115\1\0"+ + "\2\115\1\0\10\115\2\u0110\12\115\1\0\22\115\1\0"+ "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\u0153"+ - "\1\u0154\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\u0110\1\u0111\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\u0112\1\0\2\115\1\0"+ + "\24\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\u0112\1\u0113\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ + "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ + "\2\115\1\0\2\115\1\0\6\115\2\u0114\14\115\1\0"+ + "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\u0114\1\u0115\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\24\115\1\0\12\115\2\u0116\6\115\1\0"+ + "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ + "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\u0116\1\u0117\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ + "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ - "\10\115\2\u0155\12\115\1\0\22\115\1\0\2\115\5\0"+ + "\4\115\2\u0118\16\115\1\0\22\115\1\0\2\115\5\0"+ "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\u0155\1\u0156\1\115\1\12\1\115"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\u0118"+ + "\1\u0119\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\22\115\2\u0157"+ - "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\u0157\1\u0158\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\10\115\2\u0159\12\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u0159\1\u015a"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\24\115\1\0"+ + "\2\115\2\u011a\16\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\24\115\1\0\10\115\2\u015b\10\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\u011a\1\u011b\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\u015b\1\u015c\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\u015d\1\0\2\115\1\0\24\115"+ - "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\u015d\1\u015e\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ + "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ + "\2\115\1\0\2\115\1\0\20\115\2\u011c\2\115\1\0"+ + "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\62"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\u011c"+ + "\1\u011d\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\24\115\1\0\12\115\2\u011e\6\115\1\0"+ + "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ + "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\u011e\1\u011f\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ + "\1\12\3\0\1\115\7\0\1\u0120\7\0\1\u0120\2\0"+ + "\2\u0120\1\0\2\u0120\3\0\2\u0120\14\0\2\u0120\3\0"+ + "\2\u0120\4\0\2\u0120\22\0\1\u0120\13\0\1\u0121\7\0"+ + "\1\u0121\2\0\2\u0121\1\0\2\u0121\3\0\2\u0121\14\0"+ + "\2\u0121\3\0\2\u0121\4\0\2\u0121\22\0\1\u0121\11\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\20\62\2\u0122\2\62\1\0"+ + "\16\62\2\u0123\2\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\u0124"+ + "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\7\0\1\325\7\0\1\325\67\0\1\325\13\0"+ + "\1\327\1\u0125\6\0\1\327\67\0\1\327\11\0\1\62"+ "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\24\62\1\0\2\u015f\20\62\1\0"+ + "\1\0\2\62\1\0\24\62\1\0\10\62\2\u0126\10\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\16\62\2\u0127\4\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\16\62\2\u0128\4\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\14\62\2\u0129\4\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\20\62\2\u012a\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\12\62\2\u0160\10\62\1\0\22\62\1\0"+ + "\2\62\1\0\6\62\2\u012b\14\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\10\62\2\u0161\12\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\77\0\1\u0162\21\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\10\62\2\u0163\12\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\6\62\2\u0164\14\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\16\62\2\u0165\4\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\20\62\2\u0166\2\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\20\62\2\u0167\2\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\u0168\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\1\0\24\62\1\0\2\62\2\u012c\16\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\u0169\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u012d\1\0"+ + "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\u012e\1\0\2\62\1\0"+ + "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\u012f\1\0\2\62\1\0\24\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\12\62\2\u0130\10\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\22\62\2\u0131\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\2\u0132\20\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u0133\1\0"+ "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\14\62\2\u016a\6\62\1\0\22\62\1\0\2\62\5\0"+ + "\24\62\1\0\10\62\2\u0134\10\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\2\62\2\u016b\16\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\22\62\2\u016c\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\4\62\1\u0135\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\6\62\2\u0136\14\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\6\62\2\u0137\14\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\6\62\2\u0138\14\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\14\62\2\u0139\6\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\10\62\2\u013a\12\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\4\62\2\u013b\16\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\u013c"+ + "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\6\62"+ + "\2\u013d\14\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\u013e\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\16\62"+ + "\2\u013f\4\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\u0140\1\0\1\62\1\0\2\62"+ + "\1\u0140\2\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\22\62"+ - "\2\u016d\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\4\62\1\u016e"+ "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ + "\1\0\2\62\2\u0141\16\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\2\62"+ + "\2\u0142\20\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\u0143\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\6\62\2\u0144\14\62"+ "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\16\62\2\u016f\4\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\2\u0170"+ - "\20\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\u0171\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\10\62\2\u0172\12\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\10\62\2\u0173\12\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\20\62\2\u0174\2\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\u0175\1\0"+ - "\1\62\1\0\2\62\1\u0175\2\62\1\0\1\62\2\0"+ + "\2\0\2\u0145\1\0\2\62\1\0\24\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\4\62\1\u0146\1\0\1\62\2\0"+ "\2\62\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\10\62\2\u0176\12\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\24\62\1\0\10\62\2\u0177\10\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\u0178\1\0"+ - "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\10\62\2\u0179\10\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\u017a\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\u017b"+ - "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u017c\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\24\62\1\0\6\62\2\u017d"+ - "\12\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\4\62\2\u017e\4\62\2\u017f"+ - "\10\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u0180\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\u0181\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\1\0\24\62\1\0\12\62\2\u0147\6\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\u0148\1\0"+ + "\1\62\1\0\2\62\1\u0148\2\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\115\1\0"+ "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\20\115\2\u0182\2\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\24\115\1\0\2\u0183\20\115\1\0\2\115"+ + "\2\115\1\0\24\115\1\0\2\u0149\20\115\1\0\2\115"+ "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\115"+ "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\12\115\2\u0184\10\115\1\0\22\115\1\0\2\115"+ + "\1\0\12\115\2\u014a\10\115\1\0\22\115\1\0\2\115"+ "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\115"+ "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\20\115\2\u0185\2\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\u0182\1\u0186\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\u0183"+ - "\1\u0187\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\u0184\1\u0188\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\2\115\2\u014b\2\115\2\u014c\14\115\1\0\22\115"+ + "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u0185\1\u0189"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\u0149\1\u014d\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\6\115\2\u018a\14\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\12"+ "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\u018a\1\u018b\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\u014a\1\u014e"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\14\115"+ - "\2\u018c\6\115\1\0\22\115\1\0\2\115\5\0\1\115"+ "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u018c\1\u018d"+ + "\1\12\1\0\1\115\1\12\1\u014b\1\u014f\1\115\1\12"+ + "\1\u014c\1\u0150\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\2\115\2\u018e\20\115"+ + "\2\0\2\115\1\0\2\115\1\0\4\115\2\u0151\16\115"+ "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\u018e\1\u018f\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\u0151\1\u0152\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\14\115\2\u0190\6\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\u0190\1\u0191\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\u0153"+ + "\1\0\1\115\1\0\2\115\1\u0153\2\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\24\115\1\0\22\115"+ + "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\u0153"+ + "\1\0\1\12\1\0\2\115\1\u0154\2\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\24\115\1\0\2\u0192\20\115\1\0\2\115\5\0"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\6\115\2\u0155\14\115\1\0\22\115\1\0"+ + "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ + "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\u0155\1\u0156\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ + "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\16\115\2\u0157\4\115\1\0\22\115\1\0\2\115\5\0"+ "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\u0192\1\u0193\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\12\1\u0157\1\u0158\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\14\115\2\u0194"+ - "\6\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\12\115\2\u0159"+ + "\10\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\u0194\1\u0195\1\115"+ + "\1\12\1\115\1\12\1\u0159\1\u015a\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\24\115\1\0\2\u0196\20\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ + "\2\115\1\0\2\115\1\0\10\115\2\u015b\12\115\1\0"+ + "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\u015b"+ + "\1\u015c\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\u0196\1\u0197\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\2\115\2\u0198\20\115\1\0\22\115\1\0\2\115"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\22\115\2\u015d\1\0\22\115\1\0\2\115"+ "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\u0198\1\u0199"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\u015d\1\u015e"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\10\115"+ + "\2\u015f\12\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\u015f\1\u0160\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\24\115\1\0\10\115"+ + "\2\u0161\10\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\u0161\1\u0162\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\u0163"+ + "\1\0\2\115\1\0\24\115\1\0\22\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\u0163\1\u0164"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ "\3\0\1\115\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ - "\2\u019a\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\2\u019b\20\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\0\2\u0165\20\62\1\0\2\62\5\0\1\62\3\0"+ "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\14\62\2\u019c"+ - "\6\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\12\62\2\u0166"+ + "\10\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\2\62\2\u019d"+ - "\20\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\10\62\2\u0167"+ + "\12\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\77\0\1\u0168\21\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\10\62\2\u0169\12\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\6\62\2\u016a\14\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\16\62\2\u016b\4\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\20\62\2\u016c\2\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\20\62\2\u016d\2\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\u016e\1\0\2\62\1\0"+ + "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ - "\2\62\2\u019e\16\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\u019f"+ - "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\2\62\2\u01a0"+ - "\20\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\u01a1"+ - "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u01a2"+ - "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u01a3\1\0\2\62\1\0\24\62\1\0"+ + "\1\62\2\0\2\u016f\1\0\2\62\1\0\24\62\1\0"+ "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\u01a4\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\1\0\2\62\1\0\14\62\2\u0170\6\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\24\62\1\0\2\62\2\u0171"+ + "\16\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\22\62\2\u0172\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\22\62\2\u0173\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\10\62\2\u01a5\12\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\20\62\2\u01a6\2\u01a7\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\4\62\2\u01a8\16\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\2\u01a9\22\62\1\0\22\62\1\0\2\62"+ + "\1\62\1\0\4\62\1\u0174\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\22\62\2\u01aa\1\0\22\62\1\0\2\62\5\0"+ + "\1\0\16\62\2\u0175\4\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\24\62\1\0\2\u0176\20\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\2\62\2\u01ab\20\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\2\u01ac\20\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\u01ad\1\0\1\62\1\0\2\62"+ - "\1\u01ad\2\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ - "\2\u01ae\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\2\u01af\20\62\1\0\2\62\5\0\1\62\3\0"+ + "\5\62\1\0\1\62\2\0\2\u0177\1\0\2\62\1\0"+ + "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u01b0\1\0\2\62\1\0\24\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\10\62\2\u0178"+ + "\12\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\10\62\2\u0179"+ + "\12\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u017a"+ + "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\u017b\1\0\1\62\1\0\2\62\1\u017b"+ + "\2\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\10\62\2\u017c"+ + "\12\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ + "\10\62\2\u017d\10\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\u017e\1\0\2\62\1\0\24\62\1\0"+ "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\22\62\2\u01b1\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\10\62\2\u01b2\12\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\24\62\1\0\2\62\2\u01b3\16\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\10\62\2\u01b4\12\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\20\62\2\u01b5\2\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\4\62\2\u01b6\16\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\20\62\2\u01b7\2\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\6\115\2\u01b8\14\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\4\115\2\u01b9\16\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\2\115\2\u01ba\20\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ + "\2\62\1\0\2\62\1\0\24\62\1\0\10\62\2\u017f"+ + "\10\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\u0180\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\6\62\2\u0181\14\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u0182\1\0"+ + "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\24\62\1\0\6\62\2\u0183\12\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\4\62\2\u0184\4\62\2\u0185\10\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u0186\1\0"+ + "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\u0187\1\0\2\62\1\0"+ + "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\20\115\2\u0188"+ + "\2\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\24\115\1\0"+ + "\2\u0189\20\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\12\115\2\u018a\10\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\20\115\2\u018b\2\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\u0188\1\u018c\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\u01b8\1\u01bb\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\u0189\1\u018d\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\12"+ "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\u01b9\1\u01bc\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\u018a\1\u018e"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\u01ba\1\u01bd\1\115\1\12"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\115\1\12\1\u018b\1\u018f\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\10\115\2\u01be\12\115"+ + "\2\0\2\115\1\0\2\115\1\0\6\115\2\u0190\14\115"+ "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\u0190\1\u0191"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\u01be\1\u01bf\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\20\115\2\u01c0\2\115\1\0\22\115"+ + "\1\0\2\115\1\0\14\115\2\u0192\6\115\1\0\22\115"+ "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u01c0\1\u01c1"+ + "\1\115\1\12\1\u0192\1\u0193\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\12\115\2\u01c2\10\115\1\0\22\115\1\0\2\115"+ + "\1\0\2\115\2\u0194\20\115\1\0\22\115\1\0\2\115"+ "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u01c2\1\u01c3"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\20\115"+ - "\2\u01c4\2\115\1\0\22\115\1\0\2\115\5\0\1\115"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\u01c4\1\u01c5\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\16\115\2\u01c6\4\115"+ - "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u01c6\1\u01c7"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\12\115\2\u01c8\10\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\u01c8\1\u01c9\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\6\62\2\u01ca\14\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\20\62\2\u01cb\2\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\10\62\2\u01cc\12\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\u01cd\1\0\2\62"+ - "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\u01ce\1\0\2\62\1\0\24\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\6\62\2\u01cf\14\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\u01d0\1\0\1\62\1\0\2\62\1\u01d0\2\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\22\62\2\u01d1\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\4\62\1\u01d2\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\24\62\1\0\2\u01d3\20\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\2\62\2\u01d4\16\62\2\u01d5\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\u01d6"+ - "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\20\62\2\u01d7\2\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\14\62\2\u01d8\6\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\4\62\2\u01d9\16\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\u01da\1\0\2\62"+ - "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\10\62\2\u01db\10\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\12\62"+ - "\2\u01dc\10\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\u01dd\1\0\2\62\1\0\24\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\14\62\2\u01de\6\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\22\62\2\u01df\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\6\62\2\u01e0\14\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\20\115\2\u01e1\2\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\u01e2\1\0\2\115\1\0\24\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\24\115\1\0\14\115\2\u01e3\4\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\u01e1\1\u01e4\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\u01e2\1\u01e5\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ - "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\u01e3\1\u01e6\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\12\115\2\u01e7\10\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ - "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ - "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\u01e7\1\u01e8\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\5\0\1\12\3\0\1\115\5\0\1\u01e9\1\0"+ - "\1\115\1\0\2\115\1\u01e9\2\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\24\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\u01e9\1\0"+ - "\1\12\1\0\2\115\1\u01ea\2\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\4\115\2\u01eb\16\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\u01eb\1\u01ec\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\24\115"+ - "\1\0\10\115\2\u01ed\10\115\1\0\2\115\5\0\1\115"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\u01ed"+ - "\1\u01ee\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\24\115\1\0\12\115"+ - "\2\u01ef\6\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\u01ef"+ - "\1\u01f0\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\20\62\2\u01f1\2\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\u01f2"+ - "\1\0\1\62\1\0\2\62\1\u01f2\2\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\6\62\2\u01f3\14\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\10\62\2\u01f4\2\62\2\u01f5\6\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\14\62\2\u01f6\6\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\u01f7\1\0\2\62\1\0\24\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\u01f8"+ - "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ - "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\22\62\2\u01f9\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\u01fa\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\u01fb"+ - "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ - "\2\62\2\u01fc\16\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\16\62\2\u01fd"+ - "\4\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\2\62\2\u01fe"+ - "\20\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\16\62\2\u01ff"+ - "\4\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\22\62\2\u0200"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\20\62\2\u0201\2\62"+ - "\1\0\10\62\2\u0202\10\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\14\62"+ - "\2\u0203\6\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\22\62"+ - "\2\u0204\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u0205\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\20\62\2\u0206\2\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\10\62\2\u0207\12\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\24\115\1\0\2\u0208\20\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\u0208\1\u0209\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\14\115\2\u020a\6\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\u020a\1\u020b\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\u020c\1\0\2\115\1\0\24\115"+ - "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ - "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ - "\1\12\2\0\1\u020c\1\u020d\1\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\u020e"+ - "\1\0\2\115\1\0\24\115\1\0\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\u020e\1\u020f"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\u0194\1\u0195"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ @@ -2054,548 +1586,1038 @@ public final class Flasm3Lexer { "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\14\115"+ - "\2\u0210\6\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\2\u0196\6\115\1\0\22\115\1\0\2\115\5\0\1\115"+ "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u0210\1\u0211"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\u0196\1\u0197"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\u0212\1\0\2\62\1\0\24\62\1\0\22\62"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\24\115\1\0\2\u0198"+ + "\20\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\u0198\1\u0199\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\14\115\2\u019a\6\115\1\0\22\115\1\0"+ + "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ + "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\u019a\1\u019b\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ + "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\24\115\1\0\2\u019c\20\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\u019c"+ + "\1\u019d\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\2\115\2\u019e\20\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\u019e\1\u019f\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\20\62\2\u01a0\2\62\1\0\22\62"+ "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\14\62\2\u0213\6\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\14\62\2\u0214\6\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\20\62\2\u0215\2\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\20\62\2\u0216\2\62\1\0\22\62"+ - "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ - "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ - "\1\0\2\62\1\0\24\62\1\0\2\u0217\20\62\1\0"+ + "\1\0\2\62\1\0\24\62\1\0\2\u01a1\20\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\u0218\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\14\62\2\u01a2\6\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\2\62\2\u01a3\20\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\24\62\1\0\2\62\2\u01a4\16\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\6\62\2\u01a5\14\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\2\62\2\u01a6\20\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\6\62\2\u01a7\14\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\20\62\2\u01a8\2\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u01a9\1\0"+ + "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\u01aa\1\0\2\62\1\0"+ + "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\10\62\2\u01ab"+ + "\12\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u01ac"+ + "\2\u01ad\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\4\62\2\u01ae"+ + "\16\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\2\u01af\22\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\22\62\2\u01b0\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\2\62\2\u01b1\20\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\24\62\1\0\2\u01b2\20\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\u01b3"+ + "\1\0\1\62\1\0\2\62\1\u01b3\2\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\20\62\2\u01b4\2\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\2\u01b5\20\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u01b6\1\0"+ "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\10\62\2\u0219\12\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\12\62\2\u021a\6\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\6\62\2\u021b\14\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\u021c\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\12\62\2\u021d"+ - "\10\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u021e"+ - "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ - "\2\u021f\20\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\u0220\1\0\1\62\1\0\2\62\1\u0220\2\62"+ + "\22\62\2\u01b7\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\10\62"+ + "\2\u01b8\12\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\12\62\2\u0221\10\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\u0222\1\0\2\115\1\0\24\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\u0222\1\u0223\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\0\2\62\2\u01b9\16\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\10\62"+ + "\2\u01ba\12\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\u01bb\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\4\62"+ + "\2\u01bc\16\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\u01bd\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\6\115"+ + "\2\u01be\14\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\4\115"+ + "\2\u01bf\16\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\2\115"+ + "\2\u01c0\20\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\u01be\1\u01c1\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ - "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ - "\1\0\5\115\1\116\1\115\2\0\2\u0224\1\0\2\115"+ - "\1\0\6\115\2\u0225\6\115\2\u0226\4\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\u01bf\1\u01c2\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ - "\1\u0224\1\u0227\1\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\u0225\1\u0228\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\u0226\1\u0229\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\u01c0\1\u01c3\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ - "\1\0\24\115\1\0\2\u022a\20\115\1\0\2\115\5\0"+ - "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\0\10\115\2\u01c4\12\115\1\0\22\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\u01c4\1\u01c5\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\20\115"+ + "\2\u01c6\2\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\u01c6\1\u01c7\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\12\115\2\u01c8\10\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\u01c8\1\u01c9\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\u022a\1\u022b\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ + "\1\0\2\115\1\0\20\115\2\u01ca\2\115\1\0\22\115"+ + "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ + "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\u01ca\1\u01cb"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ + "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ + "\1\0\16\115\2\u01cc\4\115\1\0\22\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\u01cc\1\u01cd\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\12\115"+ + "\2\u01ce\10\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\u01ce\1\u01cf\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\6\62\2\u01d0\14\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\20\62\2\u01d1\2\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\10\62\2\u01d2\12\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\u01d3\1\0\2\62\1\0\24\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\u01d4"+ + "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\6\62\2\u01d5\14\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\u01d6\1\0\1\62"+ + "\1\0\2\62\1\u01d6\2\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\22\62\2\u01d7\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\4\62\1\u01d8\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ + "\1\0\2\u01d9\20\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\2\62\2\u01da"+ + "\16\62\2\u01db\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\u01dc\1\0\2\62\1\0\24\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\20\62\2\u01dd\2\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\14\62\2\u01de\6\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\4\62\2\u01df\16\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\u01e0\1\0\2\62\1\0\24\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\10\62\2\u01e1\10\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\12\62\2\u01e2\10\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\u01e3"+ + "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\14\62\2\u01e4\6\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\22\62\2\u01e5\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\6\62\2\u01e6\14\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\20\115\2\u01e7\2\115\1\0\22\115\1\0\2\115\5\0"+ + "\1\115\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\u01e8\1\0\2\115\1\0"+ + "\24\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\6\115\2\u022c"+ - "\14\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\24\115\1\0"+ + "\14\115\2\u01e9\4\115\1\0\2\115\5\0\1\115\3\0"+ "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\u022c"+ - "\1\u022d\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\u01e7\1\u01ea\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\20\62\2\u022e\2\62\1\0"+ - "\10\62\2\u022f\10\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u0230"+ - "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\u0231"+ - "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\u0232\1\0\1\62\1\0\2\62\1\u0232"+ - "\2\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\u0233\1\0\1\62\1\0\2\62\1\u0233"+ - "\2\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\14\62\2\u0234"+ - "\6\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\16\62\2\u0235"+ - "\4\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ - "\20\62\2\u0236\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\u0237\1\0\1\62\1\0\2\62\1\u0237\2\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\6\62\2\u0238\14\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\4\62\1\u0239\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\14\62\2\u023a\6\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\4\115\2\u023b\16\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ - "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\u023b\1\u023c\1\115\1\12\1\115"+ + "\2\0\1\u01e8\1\u01eb\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ - "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\14\115\2\u023d\6\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\20\115\2\u023e\2\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\6\115\2\u023f\14\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\u023d\1\u0240\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\u01e9\1\u01ec"+ "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ + "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\12\115\2\u01ed\10\115\1\0\22\115\1\0\2\115\5\0"+ + "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\u023e\1\u0241\1\115\1\12\1\0"+ + "\1\12\1\115\1\12\1\115\1\12\1\u01ed\1\u01ee\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ - "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\u023f"+ - "\1\u0242\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\5\0\1\u01ef\1\0\1\115\1\0\2\115\1\u01ef"+ + "\2\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\24\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\u01ef\1\0\1\12\1\0\2\115\1\u01f0"+ + "\2\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\u0243\1\0\2\115\1\0\24\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\u0243"+ - "\1\u0244\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\4\115\2\u01f1\16\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\u01f1\1\u01f2\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ + "\1\0\2\115\1\0\24\115\1\0\10\115\2\u01f3\10\115"+ + "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ + "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\u01f3\1\u01f4\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ + "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ + "\1\0\24\115\1\0\12\115\2\u01f5\6\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\u01f5\1\u01f6\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\u01f7\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\u01f8\1\0\1\62\1\0\2\62"+ + "\1\u01f8\2\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\6\62"+ + "\2\u01f9\14\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\10\62"+ + "\2\u01fa\2\62\2\u01fb\6\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\14\62\2\u01fc\6\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\u01fd\1\0\2\62"+ + "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\u01fe\1\0\2\62\1\0\24\62"+ + "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ + "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\22\62\2\u01ff\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\u0200\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\6\62\2\u0201\14\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\24\62\1\0\2\62\2\u0202\16\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\16\62\2\u0203\4\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\2\62\2\u0204\20\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\16\62\2\u0205\4\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\22\62\2\u0206\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\20\62\2\u0207\2\62\1\0\10\62\2\u0208\10\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\14\62\2\u0209\6\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\22\62\2\u020a\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u020b\1\0"+ + "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\20\62\2\u020c\2\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\10\62\2\u020d\12\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\24\115\1\0\2\u020e\20\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\u020e"+ + "\1\u020f\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\14\115\2\u0210\6\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\u0210\1\u0211\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\u0212"+ + "\1\0\2\115\1\0\24\115\1\0\22\115\1\0\2\115"+ + "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ + "\1\0\2\115\3\12\1\116\1\12\2\0\1\u0212\1\u0213"+ + "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\u0214\1\0\2\115\1\0\24\115"+ + "\1\0\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\u0214\1\u0215\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ + "\1\0\2\115\1\0\14\115\2\u0216\6\115\1\0\22\115"+ + "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ + "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\u0216\1\u0217\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\5\0\1\12\3\0\1\115\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\u0218\1\0\2\62"+ + "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\14\62"+ + "\2\u0219\6\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\14\62"+ + "\2\u021a\6\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\u021b\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ + "\2\u021c\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ + "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ + "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ + "\1\0\2\u021d\20\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\u021e\1\0\2\62\1\0\24\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\10\62\2\u021f\12\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\24\62\1\0\12\62\2\u0220"+ + "\6\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\6\62\2\u0221\14\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\u0222\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\12\62\2\u0223\10\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\20\62\2\u0224\2\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\24\62\1\0\2\u0225\20\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\u0226\1\0\1\62"+ + "\1\0\2\62\1\u0226\2\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\12\62\2\u0227\10\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\115\1\0\1\115"+ + "\1\0\5\115\1\116\1\115\2\0\2\u0228\1\0\2\115"+ + "\1\0\24\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\u0228\1\u0229\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\u022a\1\0\2\115\1\0\6\115\2\u022b\6\115"+ + "\2\u022c\4\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ + "\3\12\1\116\1\12\2\0\1\u022a\1\u022d\1\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\u022b\1\u022e\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\u022c\1\u022f\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ + "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ + "\2\0\2\115\1\0\2\115\1\0\24\115\1\0\2\u0230"+ + "\20\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\u0230\1\u0231\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\6\115\2\u0232\14\115\1\0\22\115\1\0"+ + "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ + "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\u0232\1\u0233\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ "\1\12\3\0\1\115\5\0\1\62\1\0\1\62\1\0"+ "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\20\62\2\u0245\2\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\u0246\1\0\1\62\1\0"+ - "\2\62\1\u0246\2\62\1\0\1\62\2\0\2\62\1\0"+ + "\20\62\2\u0234\2\62\1\0\10\62\2\u0235\10\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\20\62\2\u0236\2\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\6\62\2\u0237\14\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\u0238\1\0"+ + "\1\62\1\0\2\62\1\u0238\2\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\u0239\1\0"+ + "\1\62\1\0\2\62\1\u0239\2\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\14\62\2\u023a\6\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\16\62\2\u023b\4\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\24\62\1\0\20\62\2\u023c\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\u023d\1\0\1\62"+ + "\1\0\2\62\1\u023d\2\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\6\62\2\u023e\14\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\4\62\1\u023f\1\0\1\62\2\0\2\62\1\0"+ "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\u0247\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u0248\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\u0249\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\20\62\2\u024a\2\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\6\62\2\u024b\14\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\20\62\2\u024c\2\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\u024d\1\0"+ - "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\u024e\1\0\2\62\1\0"+ - "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\14\62\2\u024f"+ - "\6\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u0250"+ - "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\115\1\0\2\115\1\0\6\115\2\u0251"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\14\62\2\u0240\6\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\4\115\2\u0241\16\115\1\0\22\115\1\0\2\115\5\0"+ + "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ + "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\u0241"+ + "\1\u0242\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ + "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\14\115\2\u0243"+ + "\6\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\20\115\2\u0244"+ + "\2\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\6\115\2\u0245"+ "\14\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\u0251"+ - "\1\u0252\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\u0243\1\u0246\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\24\115\1\0\2\u0253\20\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\22\115\2\u0254\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ - "\2\115\1\0\20\115\2\u0255\2\115\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\u0253\1\u0256\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\u0254\1\u0257\1\0"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ - "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\u0255\1\u0258\1\115\1\12\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\4\115\2\u0259\16\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\u0259\1\u025a\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\5\0\1\12\3\0\1\115\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\u025b\1\0"+ - "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\22\62\2\u025c\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\16\62"+ - "\2\u025d\4\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\16\62"+ - "\2\u025e\4\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\u025f\1\0\1\62\1\0\2\62"+ - "\1\u025f\2\62\1\0\1\62\2\0\2\62\1\0\2\62"+ - "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\6\62"+ - "\2\u0260\14\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\14\62"+ - "\2\u0261\6\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\2\62"+ - "\2\u0262\20\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\20\62"+ - "\2\u0263\2\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\24\62"+ - "\1\0\10\62\2\u0264\10\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\115\1\0\1\115\1\0\5\115"+ - "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\24\115"+ - "\1\0\16\115\2\u0265\2\115\1\0\2\115\5\0\1\115"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\u0265\1\u0266\1\115"+ - "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\115\1\0\1\115\1\0\5\115\1\116\1\115"+ - "\2\0\2\115\1\0\2\115\1\0\24\115\1\u0267\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\24\115\1\0\2\115\2\u0268\16\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\22\115\2\u0269\1\0\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ - "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\u0267\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ - "\1\12\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ - "\1\115\1\12\1\u0268\1\u026a\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ - "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\u0269\1\u026b\1\0\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\6\115\2\u026c\14\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ - "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ - "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\u026c\1\u026d\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ - "\1\12\5\0\1\12\3\0\1\115\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\16\62\2\u026e\4\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\14\62\2\u026f\6\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\4\62\2\u0270\16\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\4\62\2\u0271\16\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ - "\1\62\1\0\5\62\1\0\1\62\2\0\2\u0272\1\0"+ - "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\10\62\2\u0273\12\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\6\62\2\u0274\14\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ - "\6\62\2\u0275\14\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\5\0\1\u0276\1\0\1\62\1\0"+ - "\2\62\1\u0276\2\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ - "\1\62\3\0\1\62\7\0\1\u0277\7\0\1\u0278\67\0"+ - "\1\u0277\11\0\1\115\1\0\1\115\1\0\5\115\1\116"+ - "\1\115\2\0\2\u0279\1\0\2\115\1\0\24\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ - "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\6\115\2\u027a\14\115\1\0"+ - "\22\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ - "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ - "\2\0\1\u0279\1\u027b\1\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\u0244"+ + "\1\u0247\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\u027a\1\u027c\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\u0245\1\u0248\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ + "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\u0249\1\0\2\115\1\0"+ + "\24\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\u0249\1\u024a\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\20\62\2\u024b\2\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\u024c\1\0\1\62\1\0\2\62\1\u024c\2\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\u024d\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u024e\1\0"+ + "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\u024f\1\0\2\62\1\0"+ + "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u0250"+ + "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\6\62\2\u0251"+ + "\14\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u0252"+ + "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\u0253\1\0\2\62\1\0\24\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\u0254\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\14\62\2\u0255\6\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\20\62\2\u0256\2\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\115\1\0"+ + "\2\115\1\0\6\115\2\u0257\14\115\1\0\22\115\1\0"+ + "\2\115\5\0\1\115\3\0\1\115\5\0\1\115\1\0"+ + "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\u0257\1\u0258\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ - "\24\115\1\0\16\115\2\u027d\2\115\1\0\2\115\5\0"+ + "\24\115\1\0\2\u0259\20\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\22\115"+ + "\2\u025a\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\115\1\0\5\115\1\116"+ + "\1\115\2\0\2\115\1\0\2\115\1\0\20\115\2\u025b"+ + "\2\115\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\u0259\1\u025c"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\u025a\1\u025d\1\0\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ + "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\u025b\1\u025e\1\115"+ + "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ + "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\4\115\2\u025f\16\115\1\0\22\115\1\0\2\115\5\0"+ "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\u025f"+ + "\1\u0260\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ + "\1\115\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\u0261\1\0\2\62\1\0\24\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\22\62\2\u0262\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\16\62\2\u0263\4\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\16\62\2\u0264\4\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\u0265"+ + "\1\0\1\62\1\0\2\62\1\u0265\2\62\1\0\1\62"+ + "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\6\62\2\u0266\14\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\14\62\2\u0267\6\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\2\62\2\u0268\20\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\20\62\2\u0269\2\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\24\62\1\0\10\62\2\u026a\10\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\115"+ + "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ + "\1\0\2\115\1\0\24\115\1\0\16\115\2\u026b\2\115"+ + "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ + "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\u026b\1\u026c\1\115\1\12\1\0\1\115\1\12"+ + "\5\0\1\12\3\0\1\115\5\0\1\115\1\0\1\115"+ + "\1\0\5\115\1\116\1\115\2\0\2\115\1\0\2\115"+ + "\1\0\24\115\1\u026d\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\24\115"+ + "\1\0\2\115\2\u026e\16\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\22\115"+ + "\2\u026f\1\0\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\u026d\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\1\u026e\1\u0270"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\115\1\0"+ + "\1\12\1\0\2\115\3\12\1\116\1\12\2\0\1\115"+ + "\1\12\1\0\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\u026f"+ + "\1\u0271\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\5\0"+ + "\1\12\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\6\115\2\u0272\14\115\1\0\22\115\1\0\2\115\5\0"+ + "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ + "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\u0272\1\u0273\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ + "\1\115\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\16\62\2\u0274"+ + "\4\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\14\62\2\u0275"+ + "\6\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\4\62\2\u0276"+ + "\16\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\4\62\2\u0277"+ + "\16\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\u0278\1\0\2\62\1\0\24\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\10\62\2\u0279\12\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\6\62\2\u027a\14\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\62\1\0\2\62\1\0\6\62\2\u027b\14\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\u027c\1\0\1\62\1\0\2\62\1\u027c\2\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\24\62\1\0"+ + "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\7\0"+ + "\1\u027d\7\0\1\u027e\67\0\1\u027d\11\0\1\115\1\0"+ + "\1\115\1\0\5\115\1\116\1\115\2\0\2\u027f\1\0"+ + "\2\115\1\0\24\115\1\0\22\115\1\0\2\115\5\0"+ + "\1\115\3\0\1\115\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\6\115\2\u0280\14\115\1\0\22\115\1\0\2\115\5\0"+ + "\1\115\3\0\1\115\5\0\1\115\1\0\1\12\1\0"+ + "\2\115\3\12\1\116\1\12\2\0\1\u027f\1\u0281\1\0"+ "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u027d\1\u027e"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\4\62\2\u027f"+ - "\16\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u0280"+ - "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u0281"+ - "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u0282"+ - "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\16\62\2\u0283"+ - "\4\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\12\62\2\u0284"+ - "\10\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\16\62\2\u0285"+ - "\4\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u0286\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\u0287\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\7\0\1\u0277\6\0"+ - "\1\u0288\1\u0277\67\0\1\u0277\22\0\1\u0288\102\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\6\115\2\u0289\14\115\1\0\22\115"+ - "\1\0\2\115\5\0\1\115\3\0\1\115\5\0\1\115"+ - "\1\0\1\115\1\0\5\115\1\116\1\115\2\0\2\115"+ - "\1\0\2\115\1\0\24\115\1\u028a\22\115\1\0\2\115"+ - "\5\0\1\115\3\0\1\115\5\0\1\115\1\0\1\12"+ - "\1\0\2\115\3\12\1\116\1\12\2\0\1\115\1\12"+ - "\1\0\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\u0289\1\u028b\1\115\1\12\1\115\1\12"+ + "\1\115\5\0\1\115\1\0\1\12\1\0\2\115\3\12"+ + "\1\116\1\12\2\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\u0280"+ + "\1\u0282\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\0\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\0\1\115\1\12\5\0\1\12"+ - "\3\0\1\115\5\0\1\115\1\0\1\12\1\0\2\115"+ - "\3\12\1\116\1\12\2\0\1\115\1\12\1\0\1\115"+ - "\1\12\1\0\1\115\1\12\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\u028a\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\0\1\115\1\12\5\0\1\12\3\0\1\115"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\20\62\2\u028c\2\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\10\62"+ - "\2\u028d\10\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\2\62\2\u028e\20\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\2\62\2\u028f\20\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\4\62\2\u0290\16\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\14\62\2\u0291\6\62"+ - "\1\0\22\62\1\0\2\62\5\0\1\62\3\0\1\62"+ - "\5\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ - "\2\0\2\62\1\0\2\62\1\0\24\62\1\0\2\u0292"+ - "\20\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\62\1\0\2\62\1\0\16\62\2\u0293\4\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ + "\1\0\1\115\1\12\5\0\1\12\3\0\1\115\5\0"+ "\1\115\1\0\1\115\1\0\5\115\1\116\1\115\2\0"+ - "\2\115\1\0\2\115\1\0\24\115\1\u0294\22\115\1\0"+ - "\2\115\5\0\1\115\3\0\1\115\7\0\1\u0295\7\0"+ - "\1\u0296\67\0\1\u0295\11\0\1\115\1\0\1\12\1\0"+ - "\2\115\3\12\1\116\1\12\2\0\1\115\1\12\1\0"+ - "\1\115\1\12\1\0\1\115\1\12\1\115\1\12\1\115"+ + "\2\115\1\0\2\115\1\0\24\115\1\0\16\115\2\u0283"+ + "\2\115\1\0\2\115\5\0\1\115\3\0\1\115\5\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ - "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\u0294"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\0\1\115\1\12\1\115\1\12"+ "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ - "\1\115\1\12\1\0\1\115\1\12\5\0\1\12\3\0"+ - "\1\115\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\2\62\2\u0297"+ - "\20\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\62\1\0\2\62\1\0\14\62\2\u0298"+ - "\6\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ - "\1\62\2\0\2\u0299\1\0\2\62\1\0\24\62\1\0"+ - "\22\62\1\0\2\62\5\0\1\62\3\0\1\62\5\0"+ - "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ - "\2\u029a\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\1\115\1\12\1\u0283\1\u0284\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\4\62\2\u0285\16\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\20\62\2\u029b\2\62\1\0\22\62\1\0"+ + "\2\62\1\0\20\62\2\u0286\2\62\1\0\22\62\1\0"+ "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ - "\2\62\1\0\14\62\2\u029c\6\62\1\0\22\62\1\0"+ - "\2\62\5\0\1\62\3\0\1\62\7\0\1\u029d\7\0"+ - "\1\u029e\67\0\1\u029d\13\0\1\u0295\6\0\1\u029f\1\u0295"+ - "\67\0\1\u0295\22\0\1\u029f\102\0\1\62\1\0\1\62"+ - "\1\0\5\62\1\0\1\62\2\0\2\u02a0\1\0\2\62"+ - "\1\0\24\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\16\62"+ - "\2\u02a1\4\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\2\62"+ - "\2\u02a2\20\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\5\0\1\62\1\0\1\62\1\0\5\62"+ - "\1\0\1\62\2\0\2\62\1\0\2\62\1\0\16\62"+ - "\2\u02a3\4\62\1\0\22\62\1\0\2\62\5\0\1\62"+ - "\3\0\1\62\7\0\1\u029d\6\0\1\u02a4\1\u029d\67\0"+ - "\1\u029d\22\0\1\u02a4\102\0\1\62\1\0\1\62\1\0"+ - "\5\62\1\0\1\62\2\0\2\u02a5\1\0\2\62\1\0"+ + "\2\62\1\0\20\62\2\u0287\2\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\20\62\2\u0288\2\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\16\62\2\u0289\4\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\12\62\2\u028a\10\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\16\62\2\u028b\4\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u028c\1\0"+ + "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\u028d\1\0\2\62\1\0"+ "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ - "\1\62"; + "\1\62\7\0\1\u027d\6\0\1\u028e\1\u027d\67\0\1\u027d"+ + "\22\0\1\u028e\102\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\6\115"+ + "\2\u028f\14\115\1\0\22\115\1\0\2\115\5\0\1\115"+ + "\3\0\1\115\5\0\1\115\1\0\1\115\1\0\5\115"+ + "\1\116\1\115\2\0\2\115\1\0\2\115\1\0\24\115"+ + "\1\u0290\22\115\1\0\2\115\5\0\1\115\3\0\1\115"+ + "\5\0\1\115\1\0\1\12\1\0\2\115\3\12\1\116"+ + "\1\12\2\0\1\115\1\12\1\0\1\115\1\12\1\0"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\u028f\1\u0291"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\0\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\0"+ + "\1\115\1\12\5\0\1\12\3\0\1\115\5\0\1\115"+ + "\1\0\1\12\1\0\2\115\3\12\1\116\1\12\2\0"+ + "\1\115\1\12\1\0\1\115\1\12\1\0\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\u0290\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\0\1\115\1\12"+ + "\5\0\1\12\3\0\1\115\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\20\62\2\u0292\2\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\24\62\1\0\10\62\2\u0293\10\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\2\62\2\u0294\20\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\2\62\2\u0295\20\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\4\62\2\u0296\16\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\14\62\2\u0297\6\62\1\0\22\62\1\0\2\62"+ + "\5\0\1\62\3\0\1\62\5\0\1\62\1\0\1\62"+ + "\1\0\5\62\1\0\1\62\2\0\2\62\1\0\2\62"+ + "\1\0\24\62\1\0\2\u0298\20\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\62\1\0\2\62\1\0"+ + "\16\62\2\u0299\4\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\115\1\0\1\115\1\0"+ + "\5\115\1\116\1\115\2\0\2\115\1\0\2\115\1\0"+ + "\24\115\1\u029a\22\115\1\0\2\115\5\0\1\115\3\0"+ + "\1\115\7\0\1\u029b\7\0\1\u029c\67\0\1\u029b\11\0"+ + "\1\115\1\0\1\12\1\0\2\115\3\12\1\116\1\12"+ + "\2\0\1\115\1\12\1\0\1\115\1\12\1\0\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\115\1\12\1\115\1\12\1\115"+ + "\1\12\1\115\1\12\1\u029a\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\115\1\12"+ + "\1\115\1\12\1\115\1\12\1\115\1\12\1\0\1\115"+ + "\1\12\5\0\1\12\3\0\1\115\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\2\62\2\u029d\20\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\62\1\0"+ + "\2\62\1\0\14\62\2\u029e\6\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62\5\0\1\62\1\0"+ + "\1\62\1\0\5\62\1\0\1\62\2\0\2\u029f\1\0"+ + "\2\62\1\0\24\62\1\0\22\62\1\0\2\62\5\0"+ + "\1\62\3\0\1\62\5\0\1\62\1\0\1\62\1\0"+ + "\5\62\1\0\1\62\2\0\2\u02a0\1\0\2\62\1\0"+ + "\24\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\20\62\2\u02a1"+ + "\2\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\5\0\1\62\1\0\1\62\1\0\5\62\1\0"+ + "\1\62\2\0\2\62\1\0\2\62\1\0\14\62\2\u02a2"+ + "\6\62\1\0\22\62\1\0\2\62\5\0\1\62\3\0"+ + "\1\62\7\0\1\u02a3\7\0\1\u02a4\67\0\1\u02a3\13\0"+ + "\1\u029b\6\0\1\u02a5\1\u029b\67\0\1\u029b\22\0\1\u02a5"+ + "\102\0\1\62\1\0\1\62\1\0\5\62\1\0\1\62"+ + "\2\0\2\u02a6\1\0\2\62\1\0\24\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\16\62\2\u02a7\4\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\2\62\2\u02a8\20\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\5\0\1\62"+ + "\1\0\1\62\1\0\5\62\1\0\1\62\2\0\2\62"+ + "\1\0\2\62\1\0\16\62\2\u02a9\4\62\1\0\22\62"+ + "\1\0\2\62\5\0\1\62\3\0\1\62\7\0\1\u02a3"+ + "\6\0\1\u02aa\1\u02a3\67\0\1\u02a3\22\0\1\u02aa\102\0"+ + "\1\62\1\0\1\62\1\0\5\62\1\0\1\62\2\0"+ + "\2\u02ab\1\0\2\62\1\0\24\62\1\0\22\62\1\0"+ + "\2\62\5\0\1\62\3\0\1\62"; private static int [] zzUnpackTrans() { - int [] result = new int[42636]; + int [] result = new int[42940]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -2636,34 +2658,34 @@ public final class Flasm3Lexer { "\3\0\1\11\44\1\1\11\1\1\1\11\1\1\1\11"+ "\1\1\1\11\1\1\1\11\24\1\1\11\1\1\5\11"+ "\1\0\1\11\2\0\2\1\2\0\2\1\1\0\1\1"+ - "\1\0\1\1\1\0\1\1\1\0\1\1\2\0\2\1"+ + "\1\0\1\1\1\0\1\1\2\0\2\1\2\0\2\1"+ "\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1"+ "\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1"+ "\3\11\1\1\4\11\1\1\2\11\3\1\2\0\1\1"+ "\1\0\42\1\2\0\2\1\1\0\3\1\1\0\1\1"+ - "\1\0\1\1\1\0\1\1\1\0\3\1\2\0\2\1"+ + "\1\0\1\1\1\0\1\1\1\0\1\1\1\0\3\1"+ + "\2\0\2\1\1\0\1\1\1\0\1\1\1\0\1\1"+ "\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1"+ - "\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1"+ - "\2\0\3\1\2\0\42\1\3\0\3\1\1\0\5\1"+ - "\1\0\1\1\1\0\2\1\1\0\2\1\1\0\3\1"+ - "\1\0\1\1\1\0\1\1\1\0\3\1\1\0\1\1"+ - "\1\0\1\1\1\11\1\0\3\1\1\0\43\1\4\0"+ - "\4\1\1\0\5\1\1\0\1\1\1\0\1\1\1\0"+ - "\1\1\1\0\1\1\1\0\1\1\1\0\6\1\1\11"+ - "\37\1\1\0\1\1\2\0\4\1\1\0\1\1\1\0"+ - "\1\1\1\0\1\1\1\0\3\1\1\0\3\1\1\0"+ - "\37\1\3\0\3\1\1\0\1\1\1\0\1\1\1\0"+ - "\1\1\1\0\3\1\1\0\31\1\1\0\4\1\1\0"+ - "\1\1\1\0\1\1\1\0\3\1\1\0\30\1\1\0"+ - "\1\1\1\0\3\1\1\0\1\1\1\0\21\1\1\0"+ - "\1\1\3\0\3\1\1\0\20\1\1\0\1\1\3\0"+ - "\3\1\1\0\15\1\1\0\1\1\3\0\3\1\1\0"+ - "\15\1\3\0\2\1\1\0\12\1\4\0\15\1\1\11"+ - "\2\0\11\1\3\0\6\1\2\0\1\11\4\1\1\11"+ - "\1\1"; + "\1\0\1\1\2\0\3\1\2\0\42\1\3\0\3\1"+ + "\1\0\5\1\1\0\1\1\1\0\4\1\1\0\2\1"+ + "\1\0\3\1\1\0\1\1\1\0\1\1\1\0\3\1"+ + "\1\0\1\1\1\0\1\1\1\11\1\0\3\1\1\0"+ + "\43\1\4\0\4\1\1\0\5\1\1\0\1\1\1\0"+ + "\1\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+ + "\6\1\1\11\37\1\1\0\1\1\2\0\4\1\1\0"+ + "\1\1\1\0\1\1\1\0\1\1\1\0\3\1\1\0"+ + "\3\1\1\0\37\1\3\0\3\1\1\0\1\1\1\0"+ + "\1\1\1\0\1\1\1\0\3\1\1\0\31\1\1\0"+ + "\4\1\1\0\1\1\1\0\1\1\1\0\3\1\1\0"+ + "\30\1\1\0\1\1\1\0\3\1\1\0\1\1\1\0"+ + "\21\1\1\0\1\1\3\0\3\1\1\0\20\1\1\0"+ + "\1\1\3\0\3\1\1\0\15\1\1\0\1\1\3\0"+ + "\3\1\1\0\15\1\3\0\2\1\1\0\12\1\4\0"+ + "\15\1\1\11\2\0\11\1\3\0\6\1\2\0\1\11"+ + "\4\1\1\11\1\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[677]; + int [] result = new int[683]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -3149,24 +3171,24 @@ public final class Flasm3Lexer { case 1: { } - case 104: break; + case 105: break; case 2: { return new ParsedSymbol(ParsedSymbol.TYPE_COMMENT, yytext().substring(1)); } - case 105: break; + case 106: break; case 3: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); } - case 106: break; + case 107: break; case 4: { string.append(yytext()); } - case 107: break; + case 108: break; case 5: { throw new AVM2ParseException("Unterminated string at end of line", yyline + 1); } - case 108: break; + case 109: break; case 6: { yybegin(PARAMETERS); // length also includes the trailing quote @@ -3176,406 +3198,410 @@ public final class Flasm3Lexer { return new ParsedSymbol(ParsedSymbol.TYPE_STRING, string.toString()); } } - case 109: break; + case 110: break; case 7: { yybegin(YYINITIAL); } - case 110: break; + case 111: break; case 8: { return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER, yytext()); } - case 111: break; + case 112: break; case 9: { return new ParsedSymbol(ParsedSymbol.TYPE_BRACKET_OPEN, yytext()); } - case 112: break; + case 113: break; case 10: { return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER, Long.parseLong((yytext()))); } - case 113: break; + case 114: break; case 11: { return new ParsedSymbol(ParsedSymbol.TYPE_BRACKET_CLOSE, yytext()); } - case 114: break; + case 115: break; case 12: { isMultiname = false; yybegin(STRING); string.setLength(0); } - case 115: break; + case 116: break; case 13: { return new ParsedSymbol(ParsedSymbol.TYPE_PARENT_OPEN, yytext()); } - case 116: break; + case 117: break; case 14: { return new ParsedSymbol(ParsedSymbol.TYPE_PARENT_CLOSE, yytext()); } - case 117: break; + case 118: break; case 15: { return new ParsedSymbol(ParsedSymbol.TYPE_LOWERTHAN, yytext()); } - case 118: break; + case 119: break; case 16: { return new ParsedSymbol(ParsedSymbol.TYPE_GREATERTHAN, yytext()); } - case 119: break; + case 120: break; case 17: { return new ParsedSymbol(ParsedSymbol.TYPE_COMMA, yytext()); } - case 120: break; + case 121: break; case 18: { String s = yytext(); return new ParsedSymbol(ParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); } - case 121: break; + case 122: break; case 19: { throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); } - case 122: break; + case 123: break; case 20: { string.append('\b'); } - case 123: break; + case 124: break; case 21: { string.append('\\'); } - case 124: break; + case 125: break; case 22: { string.append('\t'); } - case 125: break; + case 126: break; case 23: { string.append('\n'); } - case 126: break; + case 127: break; case 24: { string.append('\r'); } - case 127: break; + case 128: break; case 25: { string.append('\f'); } - case 128: break; + case 129: break; case 26: { string.append('\"'); } - case 129: break; + case 130: break; case 27: { string.append('\''); } - case 130: break; + case 131: break; case 28: { return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT, Double.parseDouble((yytext()))); } - case 131: break; + case 132: break; case 29: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TO, yytext()); } - case 132: break; + case 133: break; case 30: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_END, yytext()); } - case 133: break; + case 134: break; case 31: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TRY, yytext()); } - case 134: break; + case 135: break; case 32: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_BODY, yytext()); } - case 135: break; + case 136: break; case 33: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_CODE, yytext()); } - case 136: break; - case 34: - { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_ITEM, yytext()); - } case 137: break; - case 35: - { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_NAME, yytext()); + case 34: + { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TYPE, yytext()); } case 138: break; - case 36: - { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_FLAG, yytext()); + case 35: + { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_ITEM, yytext()); } case 139: break; + case 36: + { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_NAME, yytext()); + } + case 140: break; case 37: + { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_FLAG, yytext()); + } + case 141: break; + case 38: { char val = (char) Integer.parseInt(yytext().substring(2), 16); string.append(val); } - case 140: break; - case 38: + case 142: break; + case 39: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TRUE, yytext()); } - case 141: break; - case 39: + case 143: break; + case 40: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TYPE, yytext()); } - case 142: break; - case 40: + case 144: break; + case 41: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_NAME, yytext()); } - case 143: break; - case 41: + case 145: break; + case 42: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_NULL, yytext()); } - case 144: break; - case 42: + case 146: break; + case 43: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_SLOT, yytext()); } - case 145: break; - case 43: + case 147: break; + case 44: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_FROM, yytext()); } - case 146: break; - case 44: + case 148: break; + case 45: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_UTF8, yytext()); } - case 147: break; - case 45: + case 149: break; + case 46: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_PARAM, yytext()); } - case 148: break; - case 46: + case 150: break; + case 47: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TRAIT, yytext()); } - case 149: break; - case 47: + case 151: break; + case 48: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_VALUE, yytext()); } - case 150: break; - case 48: + case 152: break; + case 49: { isMultiname = true; String s = yytext(); multinameId = Long.parseLong(s.substring(2, s.length() - 2)); yybegin(STRING); string.setLength(0); } - case 151: break; - case 49: + case 153: break; + case 50: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_CONST, yytext()); } - case 152: break; - case 50: + case 154: break; + case 51: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_CLASS, yytext()); } - case 153: break; - case 51: + case 155: break; + case 52: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_FINAL, yytext()); } - case 154: break; - case 52: + case 156: break; + case 53: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_FALSE, yytext()); } - case 155: break; - case 53: + case 157: break; + case 54: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_QNAME, yytext()); } - case 156: break; - case 54: + case 158: break; + case 55: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_METHOD, yytext()); } - case 157: break; - case 55: + case 159: break; + case 56: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_SLOTID, yytext()); } - case 158: break; - case 56: + case 160: break; + case 57: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_DISPID, yytext()); } - case 159: break; - case 57: + case 161: break; + case 58: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TARGET, yytext()); } - case 160: break; - case 58: + case 162: break; + case 59: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_SETTER, yytext()); } - case 161: break; - case 59: + case 163: break; + case 60: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_DOUBLE, yytext()); } - case 162: break; - case 60: + case 164: break; + case 61: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_GETTER, yytext()); } - case 163: break; - case 61: + case 165: break; + case 62: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_QNAMEA, yytext()); } - case 164: break; - case 62: + case 166: break; + case 63: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_RETURNS, yytext()); } - case 165: break; - case 63: + case 167: break; + case 64: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_INTEGER, yytext()); } - case 166: break; - case 64: + case 168: break; + case 65: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_RTQNAME, yytext()); } - case 167: break; - case 65: + case 169: break; + case 66: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_DECIMAL, yytext()); } - case 168: break; - case 66: + case 170: break; + case 67: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_METADATA_BLOCK, yytext()); } - case 169: break; - case 67: + case 171: break; + case 68: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_MAXSTACK, yytext()); } - case 170: break; - case 68: + case 172: break; + case 69: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_OPTIONAL, yytext()); } - case 171: break; - case 69: + case 173: break; + case 70: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_METADATA, yytext()); } - case 172: break; - case 70: + case 174: break; + case 71: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_EXPLICIT, yytext()); } - case 173: break; - case 71: + case 175: break; + case 72: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_TYPENAME, yytext()); } - case 174: break; - case 72: + case 176: break; + case 73: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_OVERRIDE, yytext()); } - case 175: break; - case 73: + case 177: break; + case 74: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_SET_DXNS, yytext()); } - case 176: break; - case 74: + case 178: break; + case 75: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_RTQNAMEA, yytext()); } - case 177: break; - case 75: + case 179: break; + case 76: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_RTQNAMEL, yytext()); } - case 178: break; - case 76: + case 180: break; + case 77: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_FUNCTION, yytext()); } - case 179: break; - case 77: + case 181: break; + case 78: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_UINTEGER, yytext()); } - case 180: break; - case 78: + case 182: break; + case 79: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_PARAMNAME, yytext()); } - case 181: break; - case 79: + case 183: break; + case 80: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_MULTINAME, yytext()); } - case 182: break; - case 80: + case 184: break; + case 81: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_NEED_REST, yytext()); } - case 183: break; - case 81: + case 185: break; + case 82: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_NAMESPACE, yytext()); } - case 184: break; - case 82: + case 186: break; + case 83: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_RTQNAMELA, yytext()); } - case 185: break; - case 83: + case 187: break; + case 84: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_UNDEFINED, yytext()); } - case 186: break; - case 84: + case 188: break; + case 85: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_LOCALCOUNT, yytext()); } - case 187: break; - case 85: + case 189: break; + case 86: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_MULTINAMEA, yytext()); } - case 188: break; - case 86: + case 190: break; + case 87: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_MULTINAMEL, yytext()); } - case 189: break; - case 87: + case 191: break; + case 88: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_MULTINAMELA, yytext()); } - case 190: break; - case 88: + case 192: break; + case 89: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_IGNORE_REST, yytext()); } - case 191: break; - case 89: + case 193: break; + case 90: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_HAS_OPTIONAL, yytext()); } - case 192: break; - case 90: + case 194: break; + case 91: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_MAXSCOPEDEPTH, yytext()); } - case 193: break; - case 91: + case 195: break; + case 92: { yybegin(PARAMETERS); return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_INITSCOPEDEPTH, yytext()); } - case 194: break; - case 92: + case 196: break; + case 93: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_NEED_ARGUMENTS, yytext()); } - case 195: break; - case 93: + case 197: break; + case 94: { String s=yytext(); return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_END, Integer.parseInt(s.substring(13, s.length() - 1))); } - case 196: break; - case 94: + case 198: break; + case 95: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_NEED_ACTIVATION, yytext()); } - case 197: break; - case 95: + case 199: break; + case 96: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_HAS_PARAM_NAMES, yytext()); } - case 198: break; - case 96: + case 200: break; + case 97: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_PACKAGENAMESPACE, yytext()); } - case 199: break; - case 97: + case 201: break; + case 98: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_PRIVATENAMESPACE, yytext()); } - case 200: break; - case 98: + case 202: break; + case 99: { String s=yytext(); return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_START, Integer.parseInt(s.substring(15, s.length() - 1))); } - case 201: break; - case 99: + case 203: break; + case 100: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_EXPLICITNAMESPACE, yytext()); } - case 202: break; - case 100: + case 204: break; + case 101: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_PACKAGEINTERNALNS, yytext()); } - case 203: break; - case 101: + case 205: break; + case 102: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_STATICPROTECTEDNS, yytext()); } - case 204: break; - case 102: + case 206: break; + case 103: { String s=yytext(); return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_TARGET,Integer.parseInt(s.substring(16, s.length() - 1))); } - case 205: break; - case 103: + case 207: break; + case 104: { return new ParsedSymbol(ParsedSymbol.TYPE_KEYWORD_PROTECTEDNAMESPACE, yytext()); } - case 206: break; + case 208: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index 3afe103d9..5e700b90f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -1244,7 +1244,7 @@ public class AVM2SourceGenerator implements SourceGenerator { if (t instanceof TraitSlotConst) { TraitSlotConst tsc = (TraitSlotConst) t; if (tsc.kindType == Trait.TRAIT_SLOT) { - if ("_skinParts".equals(tsc.getName(ci.abc).getName(ci.abc.constants, new ArrayList<>(), true))) { + if ("_skinParts".equals(tsc.getName(ci.abc).getName(ci.abc.constants, new ArrayList<>(), true, true))) { if (d.assignedValues.containsKey(tsc)) { if (d.assignedValues.get(tsc).value instanceof NewObjectAVM2Item) { NewObjectAVM2Item no = (NewObjectAVM2Item) d.assignedValues.get(tsc).value; @@ -1270,7 +1270,7 @@ public class AVM2SourceGenerator implements SourceGenerator { } */ List getterBody = new ArrayList<>(); - UnresolvedAVM2Item sp = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, false, TypeItem.UNBOUNDED, 0, new DottedChain("_skinParts"), + UnresolvedAVM2Item sp = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, false, TypeItem.UNBOUNDED, 0, new DottedChain(new String[]{"_skinParts"}, ""), null, openedNamespaces); getterBody.add(new ReturnValueAVM2Item(null, null, sp)); List subvars = new ArrayList<>(); @@ -1577,7 +1577,7 @@ public class AVM2SourceGenerator implements SourceGenerator { List registerLines = new ArrayList<>(); List registerTypes = new ArrayList<>(); if (className != null) { - String fullClassName = pkg.add(className).toRawString(); + String fullClassName = pkg.addWithSuffix(className).toRawString(); registerTypes.add(fullClassName); localData.scopeStack.add(new LocalRegAVM2Item(null, null, registerNames.size(), null)); registerNames.add("this"); @@ -1831,9 +1831,9 @@ public class AVM2SourceGenerator implements SourceGenerator { TraitSlotConst tsc = (TraitSlotConst) mbody.traits.traits.get(i); GraphTargetItem type = TypeItem.UNBOUNDED; if (tsc.type_index > 0) { - type = new TypeItem(abcIndex.getSelectedAbc().constants.getMultiname(tsc.type_index).getNameWithNamespace(abcIndex.getSelectedAbc().constants)); + type = new TypeItem(abcIndex.getSelectedAbc().constants.getMultiname(tsc.type_index).getNameWithNamespace(abcIndex.getSelectedAbc().constants, true)); } - NameAVM2Item d = new NameAVM2Item(type, 0, tsc.getName(abcIndex.getSelectedAbc()).getName(abcIndex.getSelectedAbc().constants, null, true), NameAVM2Item.getDefaultValue("" + type), true, new ArrayList<>()); + NameAVM2Item d = new NameAVM2Item(type, 0, tsc.getName(abcIndex.getSelectedAbc()).getName(abcIndex.getSelectedAbc().constants, null, true, true), NameAVM2Item.getDefaultValue("" + type), true, new ArrayList<>()); d.setSlotNumber(tsc.slot_id); d.setSlotScope(slotScope); mbodyCode.addAll(0, toInsList(d.toSourceIgnoreReturnValue(localData, this))); @@ -2452,7 +2452,7 @@ public class AVM2SourceGenerator implements SourceGenerator { indices.add( abc.getSelectedAbc().constants.getMultinameId( Multiname.createQName(false, - abc.getSelectedAbc().constants.getStringId(superName.getName(a.constants, null, true), true), + abc.getSelectedAbc().constants.getStringId(superName.getName(a.constants, null, true, true /*FIXME!!! ???*/), true), abc.getSelectedAbc().constants.getNamespaceId(superName.getNamespace(a.constants).kind, superName.getNamespace(a.constants).getName(a.constants), 0, true)), true) ); } @@ -2503,9 +2503,9 @@ public class AVM2SourceGenerator implements SourceGenerator { private static boolean searchPrototypeChain(int selectedNs, boolean instanceOnly, AbcIndexing abc, DottedChain pkg, String obj, String propertyName, Reference outName, Reference outNs, Reference outPropNs, Reference outPropNsKind, Reference outPropNsIndex, Reference outPropType, Reference outPropValue, Reference outPropValueAbc) { - AbcIndexing.TraitIndex sp = abc.findScriptProperty(pkg.add(propertyName)); + AbcIndexing.TraitIndex sp = abc.findScriptProperty(pkg.addWithSuffix(propertyName)); if (sp == null) { - sp = abc.findProperty(new AbcIndexing.PropertyDef(propertyName, new TypeItem(pkg.add(obj)), abc.getSelectedAbc(), selectedNs), !instanceOnly, true); + sp = abc.findProperty(new AbcIndexing.PropertyDef(propertyName, new TypeItem(pkg.addWithSuffix(obj)), abc.getSelectedAbc(), selectedNs), !instanceOnly, true); } if (sp != null) { if (sp.objType instanceof TypeItem) { @@ -2527,12 +2527,12 @@ public class AVM2SourceGenerator implements SourceGenerator { } public static void parentNames(AbcIndexing abc, int name_index, List indices, List names, List namespaces, List outABCs) { - AbcIndexing.ClassIndex ci = abc.findClass(new TypeItem(abc.getSelectedAbc().constants.getMultiname(name_index).getNameWithNamespace(abc.getSelectedAbc().constants))); + AbcIndexing.ClassIndex ci = abc.findClass(new TypeItem(abc.getSelectedAbc().constants.getMultiname(name_index).getNameWithNamespace(abc.getSelectedAbc().constants, true /*FIXME!!*/))); while (ci != null) { int ni = ci.abc.instance_info.get(ci.index).name_index; indices.add(ni); outABCs.add(ci.abc); - names.add(ci.abc.constants.getMultiname(ni).getName(ci.abc.constants, null, true)); + names.add(ci.abc.constants.getMultiname(ni).getName(ci.abc.constants, null, true, true/*FIXME!!*/)); namespaces.add(ci.abc.constants.getMultiname(ni).getNamespace(ci.abc.constants).getName(ci.abc.constants).toRawString()); ci = ci.parent; } @@ -2627,7 +2627,7 @@ public class AVM2SourceGenerator implements SourceGenerator { Multiname m = ci.abc.instance_info.get(ci.index).getName(ci.abc.constants); if (m != null) { Namespace ns = ci.abc.instance_info.get(ci.index).getName(ci.abc.constants).getNamespace(ci.abc.constants); - String n = m.getName(ci.abc.constants, new ArrayList<>(), true); + String n = m.getName(ci.abc.constants, new ArrayList<>(), true, true /*FIXME!!*/); String nsn = ns == null ? null : ns.getName(ci.abc.constants).toRawString(); name_index = constants.getQnameId( n, @@ -2638,7 +2638,7 @@ public class AVM2SourceGenerator implements SourceGenerator { for (int i = 1; i < constants.getMultinameCount(); i++) { Multiname mname = constants.getMultiname(i); - if (mname != null && name.equals(mname.getName(constants, null, true))) { + if (mname != null && name.equals(mname.getName(constants, null, true, true /*FIXME!!*/))) { if (mname.getNamespace(constants) != null && pkg.equals(mname.getNamespace(constants).getName(constants))) { name_index = i; break; @@ -2648,7 +2648,7 @@ public class AVM2SourceGenerator implements SourceGenerator { if (name_index == 0) { if (pkg.isEmpty() && localData.currentScript != null /*FIXME!*/) { for (Trait t : localData.currentScript.traits.traits) { - if (t.getName(abc).getName(constants, null, true).equals(name)) { + if (t.getName(abc).getName(constants, null, true, true /*FIXME!!*/).equals(name)) { name_index = t.name_index; break; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java index d691e4cf4..e039e9a17 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java @@ -278,7 +278,7 @@ public final class AbcIndexing { @Override public String toString() { - return abc.constants.getMultiname(abc.instance_info.get(index).name_index).getNameWithNamespace(abc.constants).toPrintableString(true); + return abc.constants.getMultiname(abc.instance_info.get(index).name_index).getNameWithNamespace(abc.constants, true).toPrintableString(true); } public ClassIndex(int index, ABC abc, ClassIndex parent) { @@ -389,7 +389,7 @@ public final class AbcIndexing { if (ci != null && ci.parent != null && (prop.abc == null || prop.propNsIndex == 0)) { ci = ci.parent; //parent protected - DottedChain parentClass = ci.abc.instance_info.get(ci.index).getName(ci.abc.constants).getNameWithNamespace(ci.abc.constants); + DottedChain parentClass = ci.abc.instance_info.get(ci.index).getName(ci.abc.constants).getNameWithNamespace(ci.abc.constants, true); TraitIndex pti = findProperty(new PropertyDef(prop.propName, new TypeItem(parentClass), ci.abc, ci.abc.instance_info.get(ci.index).protectedNS), findStatic, findInstance); if (pti != null) { return pti; @@ -414,7 +414,7 @@ public final class AbcIndexing { } return new ApplyTypeAVM2Item(null, null, obj, params); } else { - return new TypeItem(m.getNameWithNamespace(constants)); + return new TypeItem(m.getNameWithNamespace(constants, true)); } } @@ -453,12 +453,12 @@ public final class AbcIndexing { propValue = new ValueKind(tsc.value_index, tsc.value_kind); } if (map != null) { - PropertyDef dp = new PropertyDef(t.getName(abc).getName(abc.constants, new ArrayList<>() /*?*/, true), multinameToType(name_index, abc.constants), abc, abc.constants.getMultiname(t.name_index).namespace_index); + PropertyDef dp = new PropertyDef(t.getName(abc).getName(abc.constants, new ArrayList<>() /*?*/, true, true /*FIXME ???*/), multinameToType(name_index, abc.constants), abc, abc.constants.getMultiname(t.name_index).namespace_index); map.put(dp, new TraitIndex(t, abc, getTraitReturnType(abc, t), propValue, multinameToType(name_index, abc.constants))); } if (mapNs != null) { Multiname m = abc.constants.getMultiname(t.name_index); - PropertyNsDef ndp = new PropertyNsDef(t.getName(abc).getName(abc.constants, new ArrayList<>() /*?*/, true), m == null || m.namespace_index == 0 ? DottedChain.EMPTY : m.getNamespace(abc.constants).getName(abc.constants), abc, m == null ? 0 : m.namespace_index); + PropertyNsDef ndp = new PropertyNsDef(t.getName(abc).getName(abc.constants, new ArrayList<>() /*?*/, true, true/*FIXME ???*/), m == null || m.namespace_index == 0 ? DottedChain.EMPTY : m.getNamespace(abc.constants).getName(abc.constants), abc, m == null ? 0 : m.namespace_index); TraitIndex ti = new TraitIndex(t, abc, getTraitReturnType(abc, t), propValue, multinameToType(name_index, abc.constants)); if (!mapNs.containsKey(ndp)) { mapNs.put(ndp, ti); @@ -552,7 +552,7 @@ public final class AbcIndexing { for (ClassIndex cindex : addedClasses) { int parentClassName = abc.instance_info.get(cindex.index).super_index; if (parentClassName > 0) { - TypeItem parentClass = new TypeItem(abc.constants.getMultiname(parentClassName).getNameWithNamespace(abc.constants)); + TypeItem parentClass = new TypeItem(abc.constants.getMultiname(parentClassName).getNameWithNamespace(abc.constants, true)); ClassIndex parentClassIndex = findClass(parentClass); if (parentClassIndex == null) { //Parent class can be deleted, do not check. TODO: handle this better diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java index 4001a5606..d3d4d237c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java @@ -304,7 +304,7 @@ public class ActionScript3Parser { s = lex(); GraphTargetItem ns = null; if (s.type == SymbolType.NAMESPACE_OP) { - ns = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, false, null, lexer.yyline(), new DottedChain(propName), null, openedNamespaces); + ns = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, false, null, lexer.yyline(), new DottedChain(new String[]{propName}, "" /*FIXME ???*/), null, openedNamespaces); variables.add((UnresolvedAVM2Item) ns); s = lex(); if (s.type == SymbolType.BRACKET_OPEN) { @@ -337,7 +337,7 @@ public class ActionScript3Parser { private GraphTargetItem name(List> allOpenedNamespaces, TypeItem thisType, NamespaceItem pkg, Reference needsActivation, boolean typeOnly, List openedNamespaces, HashMap registerVars, boolean inFunction, boolean inMethod, List variables, List importedClasses) throws IOException, AVM2ParseException { ParsedSymbol s = lex(); - DottedChain name = new DottedChain(); + DottedChain name = new DottedChain(new String[]{}, ""); String name2 = ""; if (s.type == SymbolType.ATTRIBUTE) { name2 += "@"; @@ -348,7 +348,7 @@ public class ActionScript3Parser { s = lex(); boolean attrBracket = false; - name = name.add(name2); + name = name.addWithSuffix(name2); while (s.isType(SymbolType.DOT)) { //name += s.value.toString(); //. or :: s = lex(); @@ -371,7 +371,7 @@ public class ActionScript3Parser { expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, SymbolType.MULTIPLY); name2 += s.value.toString(); } - name = name.add(name2); + name = name.addWithSuffix(name2); s = lex(); } String nsname = null; @@ -402,7 +402,7 @@ public class ActionScript3Parser { if (attr) { nsname = nsname.substring(1); } - UnresolvedAVM2Item ns = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, typeOnly, null, lexer.yyline(), new DottedChain(nsname), null, openedNamespaces); + UnresolvedAVM2Item ns = new UnresolvedAVM2Item(new ArrayList<>(), importedClasses, typeOnly, null, lexer.yyline(), new DottedChain(new String[]{nsname}, ""), null, openedNamespaces); variables.add(ns); ret = new NamespacedAVM2Item(ns, nsprop, nspropItem, ret, attr, openedNamespaces, null); } @@ -618,7 +618,7 @@ public class ActionScript3Parser { looptraits: while (true) { - TypeItem thisType = new TypeItem(pkg.name.add(classNameStr)); + TypeItem thisType = new TypeItem(pkg.name.addWithSuffix(classNameStr)); boolean isGetter = false; boolean isSetter = false; boolean isOverride = false; @@ -884,13 +884,13 @@ public class ActionScript3Parser { s = lex(); if (s.type != SymbolType.CURLY_OPEN) { expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); - pkgName = pkgName.add(s.value.toString()); + pkgName = pkgName.addWithSuffix(s.value.toString()); s = lex(); } while (s.type == SymbolType.DOT) { s = lex(); expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); - pkgName = pkgName.add(s.value.toString()); + pkgName = pkgName.addWithSuffix(s.value.toString()); s = lex(); } expected(s, lexer.yyline(), SymbolType.CURLY_OPEN); @@ -1744,7 +1744,7 @@ public class ActionScript3Parser { for (AssignableAVM2Item a : catchVars) { if (a instanceof UnresolvedAVM2Item) { UnresolvedAVM2Item ui = (UnresolvedAVM2Item) a; - if (ui.getVariableName().equals(DottedChain.parse(e.getVariableName()))) { + if (ui.getVariableName().equals(DottedChain.parseWithSuffix(e.getVariableName()))) { try { ui.resolve(null, new ArrayList<>(), new ArrayList<>(), abcIndex, new ArrayList<>(), variables); } catch (CompilationException ex) { @@ -1767,7 +1767,7 @@ public class ActionScript3Parser { if (av instanceof UnresolvedAVM2Item) { UnresolvedAVM2Item ui = (UnresolvedAVM2Item) av; for (NameAVM2Item e : catchExceptions) { - if (ui.getVariableName().equals(DottedChain.parse(e.getVariableName()))) { + if (ui.getVariableName().equals(DottedChain.parseWithSuffix(e.getVariableName()))) { try { ui.resolve(null, new ArrayList<>(), new ArrayList<>(), abcIndex, new ArrayList<>(), variables); } catch (CompilationException ex) { @@ -2486,8 +2486,8 @@ public class ActionScript3Parser { } s = lex(); expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); - DottedChain fullName = new DottedChain(); - fullName = fullName.add(s.value.toString()); + DottedChain fullName = new DottedChain(new String[]{}, ""); + fullName = fullName.addWithSuffix(s.value.toString()); s = lex(); boolean isStar = false; while (s.type == SymbolType.DOT) { @@ -2499,7 +2499,7 @@ public class ActionScript3Parser { break; } expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); - fullName = fullName.add(s.value.toString()); + fullName = fullName.addWithSuffix(s.value.toString()); s = lex(); } 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 4bd05fca1..e78913ec1 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 @@ -1,6 +1,6 @@ /* The following code was generated by JFlex 1.6.0 */ - /* +/* * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or @@ -17,1000 +17,943 @@ * 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 - * JFlex 1.6.0 from the specification file - * C:/FFDec/jpexs-decompiler/libsrc/ffdec_lib/lexers/actionscript3_script.flex + * This class is a scanner generated by + * JFlex 1.6.0 + * 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\114\1\3\1\1\22\0\1\13\1\14\1\34"+ + "\1\51\1\6\1\112\1\107\1\35\1\100\1\101\1\5\1\46\1\105"+ + "\1\15\1\11\1\4\1\36\3\42\4\43\2\22\1\17\1\104\1\12"+ + "\1\33\1\16\1\24\1\113\1\30\1\20\1\26\1\27\1\44\1\20"+ + "\2\10\1\76\4\10\1\77\5\10\1\31\3\10\1\40\2\10\1\25"+ + "\1\47\1\32\1\111\1\10\1\0\1\54\1\52\1\56\1\65\1\45"+ + "\1\41\1\75\1\70\1\63\1\21\1\55\1\66\1\73\1\61\1\60"+ + "\1\71\1\21\1\53\1\57\1\62\1\64\1\74\1\67\1\37\1\72"+ + "\1\21\1\102\1\110\1\103\1\106\6\0\1\114\41\0\1\50\2\0"+ + "\1\6\12\0\1\6\1\0\1\23\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\114\1\114\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"+ + "\1\1\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\0\1\3"+ + "\1\0\1\57\1\0\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\103\2\6\1\104\16\6"+ + "\1\105\1\106\1\107\4\6\1\110\13\6\1\111\1\112"+ + "\1\113\1\114\1\115\1\116\1\117\1\120\1\121\1\117"+ + "\1\122\1\123\1\124\1\125\1\126\1\127\1\117\1\130"+ + "\1\0\1\131\1\0\1\132\1\0\1\133\1\134\1\0"+ + "\1\135\4\0\1\136\2\0\1\137\2\140\1\141\1\140"+ + "\1\142\2\3\2\0\1\142\2\0\1\142\1\143\1\144"+ + "\1\145\1\146\1\147\1\0\1\63\1\150\2\151\1\100"+ + "\1\6\1\152\5\6\1\153\6\6\1\154\4\6\1\155"+ + "\4\6\1\156\6\6\1\157\12\6\1\160\1\6\1\161"+ + "\1\6\1\162\3\0\1\135\1\163\1\164\1\0\1\165"+ + "\2\0\1\166\1\167\2\0\1\3\1\142\1\170\1\151"+ + "\1\100\4\6\1\171\1\172\2\6\1\173\12\6\1\174"+ + "\1\175\1\6\1\176\11\6\1\177\5\6\1\200\1\6"+ + "\1\201\2\0\1\202\1\203\1\0\1\151\1\100\1\204"+ + "\1\205\2\6\1\206\1\6\1\207\1\210\1\6\1\211"+ + "\1\6\1\212\4\6\1\213\11\6\1\214\5\6\1\0"+ + "\1\151\1\100\3\6\1\215\1\6\1\216\1\217\1\6"+ + "\1\220\1\6\1\221\3\6\1\222\3\6\1\223\4\6"+ + "\1\224\1\6\1\0\1\151\1\100\1\225\1\6\1\226"+ + "\10\6\1\227\1\230\1\6\1\231\1\232\1\6\1\0"+ + "\1\151\1\100\1\233\1\234\1\235\3\6\1\236\3\6"+ + "\1\237\1\0\1\151\1\100\1\240\1\6\1\241\1\6"+ + "\1\242\1\243\1\244\1\151\1\100\1\245\1\246\6\100"; - public static final int XMLINSTRATTRIB = 12; + private static int [] zzUnpackAction() { + int [] result = new int[460]; + 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\113\1\3\1\1\22\0\1\13\1\14\1\34" - + "\1\0\1\6\1\111\1\106\1\35\1\77\1\100\1\5\1\46\1\104" - + "\1\15\1\11\1\4\1\36\3\42\4\43\2\22\1\17\1\103\1\12" - + "\1\33\1\16\1\24\1\112\1\30\1\20\1\26\1\27\1\44\1\20" - + "\2\10\1\75\4\10\1\76\5\10\1\31\3\10\1\40\2\10\1\25" - + "\1\47\1\32\1\110\1\10\1\0\1\53\1\51\1\55\1\64\1\45" - + "\1\41\1\74\1\67\1\62\1\21\1\54\1\65\1\72\1\60\1\57" - + "\1\70\1\21\1\52\1\56\1\61\1\63\1\73\1\66\1\37\1\71" - + "\1\21\1\101\1\107\1\102\1\105\6\0\1\113\41\0\1\50\2\0" - + "\1\6\12\0\1\6\1\0\1\23\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\113\1\113\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\0\1\3\1\0" - + "\1\57\1\0\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\1\141\2\3" - + "\2\0\1\141\2\0\1\141\1\142\1\143\1\144\1\145" - + "\1\146\1\0\1\63\1\147\2\150\1\100\1\6\1\151" - + "\5\6\1\152\6\6\1\153\4\6\1\154\4\6\1\155" - + "\6\6\1\156\12\6\1\157\1\6\1\160\1\6\1\161" - + "\3\0\1\134\1\162\1\163\1\0\1\164\2\0\1\165" - + "\1\166\2\0\1\3\1\141\1\167\1\150\1\100\4\6" - + "\1\170\1\171\2\6\1\172\12\6\1\173\1\174\1\6" - + "\1\175\11\6\1\176\5\6\1\177\1\6\1\200\2\0" - + "\1\201\1\202\1\0\1\150\1\100\1\203\1\204\2\6" - + "\1\205\1\6\1\206\1\207\1\6\1\210\1\6\1\211" - + "\4\6\1\212\11\6\1\213\5\6\1\0\1\150\1\100" - + "\3\6\1\214\1\6\1\215\1\216\1\6\1\217\1\6" - + "\1\220\3\6\1\221\3\6\1\222\4\6\1\223\1\6" - + "\1\0\1\150\1\100\1\224\1\6\1\225\10\6\1\226" - + "\1\227\1\6\1\230\1\231\1\6\1\0\1\150\1\100" - + "\1\232\1\233\1\234\3\6\1\235\3\6\1\236\1\0" - + "\1\150\1\100\1\237\1\6\1\240\1\6\1\241\1\242" - + "\1\243\1\150\1\100\1\244\1\245\6\100"; - - private static int[] zzUnpackAction() { - int[] result = new int[457]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ - int j = offset; - /* index in unpacked array */ + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\115\0\232\0\347\0\u0134\0\u0181\0\u01ce\0\u021b"+ + "\0\u0268\0\u02b5\0\u0302\0\u034f\0\u039c\0\u034f\0\u03e9\0\u0436"+ + "\0\u0483\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e"+ + "\0\u06eb\0\u034f\0\u034f\0\u034f\0\u0738\0\u034f\0\u034f\0\u0785"+ + "\0\u07d2\0\u081f\0\u086c\0\u08b9\0\u0906\0\u0953\0\u09a0\0\u09ed"+ + "\0\u0a3a\0\u0a87\0\u0ad4\0\u0b21\0\u0b6e\0\u0bbb\0\u0c08\0\u0c55"+ + "\0\u0ca2\0\u0cef\0\u0d3c\0\u0d89\0\u0dd6\0\u0e23\0\u034f\0\u034f"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u0e70\0\u0ebd\0\u0f0a"+ + "\0\u0f57\0\u034f\0\u0fa4\0\u0ff1\0\u034f\0\u034f\0\u103e\0\u108b"+ + "\0\u10d8\0\u034f\0\u1125\0\u034f\0\u1172\0\u11bf\0\u120c\0\u034f"+ + "\0\u034f\0\u1259\0\u034f\0\u12a6\0\u12f3\0\u034f\0\u1340\0\u034f"+ + "\0\u034f\0\u138d\0\u13da\0\u034f\0\u1427\0\u1474\0\u034f\0\u14c1"+ + "\0\u150e\0\u034f\0\u155b\0\u15a8\0\u15f5\0\u155b\0\u1642\0\u034f"+ + "\0\u168f\0\u034f\0\u16dc\0\u034f\0\u1729\0\u1776\0\u034f\0\u034f"+ + "\0\u17c3\0\u034f\0\u034f\0\u1810\0\u034f\0\u034f\0\u185d\0\u18aa"+ + "\0\u18f7\0\u1944\0\u1991\0\u19de\0\u1a2b\0\u1a78\0\u1ac5\0\u1b12"+ + "\0\u1b5f\0\u1bac\0\u1bf9\0\u1c46\0\u034f\0\u034f\0\u1c93\0\u1ce0"+ + "\0\u034f\0\u1d2d\0\u1d7a\0\u04d0\0\u1dc7\0\u1e14\0\u1e61\0\u1eae"+ + "\0\u1efb\0\u1f48\0\u1f95\0\u1fe2\0\u202f\0\u207c\0\u20c9\0\u2116"+ + "\0\u2163\0\u21b0\0\u04d0\0\u04d0\0\u21fd\0\u224a\0\u2297\0\u22e4"+ + "\0\u2331\0\u04d0\0\u237e\0\u23cb\0\u2418\0\u2465\0\u24b2\0\u24ff"+ + "\0\u254c\0\u2599\0\u25e6\0\u2633\0\u2680\0\u034f\0\u034f\0\u034f"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u26cd\0\u034f"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u271a\0\u034f\0\u120c"+ + "\0\u034f\0\u1259\0\u034f\0\u12a6\0\u034f\0\u034f\0\u1340\0\u2767"+ + "\0\u27b4\0\u2801\0\u284e\0\u289b\0\u28e8\0\u2935\0\u2982\0\u034f"+ + "\0\u034f\0\u26cd\0\u034f\0\u271a\0\u29cf\0\u2a1c\0\u034f\0\u2a69"+ + "\0\u2ab6\0\u2b03\0\u2b50\0\u2b9d\0\u2bea\0\u034f\0\u034f\0\u034f"+ + "\0\u2c37\0\u034f\0\u2c84\0\u2c84\0\u034f\0\u2cd1\0\u1991\0\u2d1e"+ + "\0\u2d6b\0\u04d0\0\u2db8\0\u2e05\0\u2e52\0\u2e9f\0\u2eec\0\u2f39"+ + "\0\u2f86\0\u2fd3\0\u3020\0\u306d\0\u30ba\0\u3107\0\u04d0\0\u3154"+ + "\0\u31a1\0\u31ee\0\u323b\0\u04d0\0\u3288\0\u32d5\0\u3322\0\u336f"+ + "\0\u04d0\0\u33bc\0\u3409\0\u3456\0\u34a3\0\u34f0\0\u353d\0\u04d0"+ + "\0\u358a\0\u35d7\0\u3624\0\u3671\0\u36be\0\u370b\0\u3758\0\u37a5"+ + "\0\u37f2\0\u383f\0\u04d0\0\u388c\0\u04d0\0\u38d9\0\u04d0\0\u3926"+ + "\0\u3973\0\u2767\0\u034f\0\u034f\0\u034f\0\u39c0\0\u034f\0\u3a0d"+ + "\0\u3a5a\0\u3aa7\0\u034f\0\u3af4\0\u3b41\0\u29cf\0\u3b8e\0\u034f"+ + "\0\u3bdb\0\u3c28\0\u3c75\0\u3cc2\0\u3d0f\0\u3d5c\0\u04d0\0\u04d0"+ + "\0\u3da9\0\u3df6\0\u04d0\0\u3e43\0\u3e90\0\u3edd\0\u3f2a\0\u3f77"+ + "\0\u3fc4\0\u4011\0\u405e\0\u40ab\0\u40f8\0\u04d0\0\u04d0\0\u4145"+ + "\0\u04d0\0\u4192\0\u41df\0\u422c\0\u4279\0\u42c6\0\u4313\0\u4360"+ + "\0\u43ad\0\u43fa\0\u04d0\0\u4447\0\u4494\0\u44e1\0\u452e\0\u457b"+ + "\0\u04d0\0\u45c8\0\u034f\0\u26cd\0\u4615\0\u034f\0\u034f\0\u4662"+ + "\0\u46af\0\u46fc\0\u04d0\0\u4749\0\u4796\0\u47e3\0\u04d0\0\u4830"+ + "\0\u04d0\0\u04d0\0\u487d\0\u04d0\0\u48ca\0\u04d0\0\u4917\0\u4964"+ + "\0\u49b1\0\u49fe\0\u04d0\0\u4a4b\0\u4a98\0\u4ae5\0\u4b32\0\u4b7f"+ + "\0\u4bcc\0\u4c19\0\u4c66\0\u4cb3\0\u04d0\0\u4d00\0\u4d4d\0\u4d9a"+ + "\0\u4de7\0\u4e34\0\u4e81\0\u4ece\0\u4f1b\0\u4f68\0\u4fb5\0\u5002"+ + "\0\u04d0\0\u504f\0\u04d0\0\u04d0\0\u509c\0\u04d0\0\u50e9\0\u04d0"+ + "\0\u5136\0\u5183\0\u51d0\0\u04d0\0\u521d\0\u526a\0\u52b7\0\u04d0"+ + "\0\u5304\0\u5351\0\u539e\0\u53eb\0\u04d0\0\u5438\0\u5485\0\u54d2"+ + "\0\u551f\0\u04d0\0\u556c\0\u04d0\0\u55b9\0\u5606\0\u5653\0\u56a0"+ + "\0\u56ed\0\u573a\0\u5787\0\u57d4\0\u04d0\0\u04d0\0\u5821\0\u04d0"+ + "\0\u04d0\0\u586e\0\u58bb\0\u5908\0\u5955\0\u04d0\0\u04d0\0\u04d0"+ + "\0\u59a2\0\u59ef\0\u5a3c\0\u04d0\0\u5a89\0\u5ad6\0\u5b23\0\u04d0"+ + "\0\u5b70\0\u5bbd\0\u5c0a\0\u04d0\0\u5c57\0\u04d0\0\u5ca4\0\u04d0"+ + "\0\u04d0\0\u034f\0\u034f\0\u5cf1\0\u04d0\0\u04d0\0\u5d3e\0\u5d8b"+ + "\0\u5dd8\0\u5e25\0\u5e72\0\u18f7"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[460]; + 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\114\0\230\0\344\0\u0130\0\u017c\0\u01c8\0\u0214" - + "\0\u0260\0\u02ac\0\u02f8\0\u0344\0\u0390\0\u0344\0\u03dc\0\u0428" - + "\0\u0474\0\u04c0\0\u050c\0\u0558\0\u05a4\0\u05f0\0\u063c\0\u0688" - + "\0\u06d4\0\u0344\0\u0344\0\u0344\0\u0720\0\u0344\0\u0344\0\u076c" - + "\0\u07b8\0\u0804\0\u0850\0\u089c\0\u08e8\0\u0934\0\u0980\0\u09cc" - + "\0\u0a18\0\u0a64\0\u0ab0\0\u0afc\0\u0b48\0\u0b94\0\u0be0\0\u0c2c" - + "\0\u0c78\0\u0cc4\0\u0d10\0\u0d5c\0\u0da8\0\u0344\0\u0344\0\u0344" - + "\0\u0344\0\u0344\0\u0344\0\u0344\0\u0df4\0\u0e40\0\u0e8c\0\u0ed8" - + "\0\u0344\0\u0f24\0\u0f70\0\u0344\0\u0344\0\u0fbc\0\u1008\0\u1054" - + "\0\u0344\0\u10a0\0\u0344\0\u10ec\0\u1138\0\u1184\0\u0344\0\u0344" - + "\0\u11d0\0\u0344\0\u121c\0\u1268\0\u0344\0\u12b4\0\u0344\0\u0344" - + "\0\u1300\0\u134c\0\u0344\0\u1398\0\u13e4\0\u0344\0\u1430\0\u147c" - + "\0\u0344\0\u14c8\0\u1514\0\u1560\0\u14c8\0\u15ac\0\u0344\0\u15f8" - + "\0\u0344\0\u1644\0\u0344\0\u1690\0\u16dc\0\u0344\0\u0344\0\u1728" - + "\0\u0344\0\u0344\0\u1774\0\u0344\0\u0344\0\u17c0\0\u180c\0\u1858" - + "\0\u18a4\0\u18f0\0\u193c\0\u1988\0\u19d4\0\u1a20\0\u1a6c\0\u1ab8" - + "\0\u1b04\0\u1b50\0\u1b9c\0\u0344\0\u0344\0\u1be8\0\u1c34\0\u1c80" - + "\0\u04c0\0\u1ccc\0\u1d18\0\u1d64\0\u1db0\0\u1dfc\0\u1e48\0\u1e94" - + "\0\u1ee0\0\u1f2c\0\u1f78\0\u1fc4\0\u2010\0\u205c\0\u20a8\0\u04c0" - + "\0\u04c0\0\u20f4\0\u2140\0\u218c\0\u21d8\0\u2224\0\u04c0\0\u2270" - + "\0\u22bc\0\u2308\0\u2354\0\u23a0\0\u23ec\0\u2438\0\u2484\0\u24d0" - + "\0\u251c\0\u2568\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344" - + "\0\u0344\0\u0344\0\u0344\0\u25b4\0\u0344\0\u0344\0\u0344\0\u0344" - + "\0\u0344\0\u0344\0\u2600\0\u0344\0\u1184\0\u0344\0\u11d0\0\u0344" - + "\0\u121c\0\u0344\0\u0344\0\u12b4\0\u264c\0\u2698\0\u26e4\0\u2730" - + "\0\u277c\0\u27c8\0\u2814\0\u2860\0\u0344\0\u0344\0\u25b4\0\u0344" - + "\0\u2600\0\u28ac\0\u28f8\0\u0344\0\u2944\0\u2990\0\u29dc\0\u2a28" - + "\0\u2a74\0\u2ac0\0\u0344\0\u0344\0\u0344\0\u2b0c\0\u0344\0\u2b58" - + "\0\u2b58\0\u0344\0\u2ba4\0\u18f0\0\u2bf0\0\u2c3c\0\u04c0\0\u2c88" - + "\0\u2cd4\0\u2d20\0\u2d6c\0\u2db8\0\u2e04\0\u2e50\0\u2e9c\0\u2ee8" - + "\0\u2f34\0\u2f80\0\u2fcc\0\u04c0\0\u3018\0\u3064\0\u30b0\0\u30fc" - + "\0\u04c0\0\u3148\0\u3194\0\u31e0\0\u322c\0\u04c0\0\u3278\0\u32c4" - + "\0\u3310\0\u335c\0\u33a8\0\u33f4\0\u04c0\0\u3440\0\u348c\0\u34d8" - + "\0\u3524\0\u3570\0\u35bc\0\u3608\0\u3654\0\u36a0\0\u36ec\0\u04c0" - + "\0\u3738\0\u04c0\0\u3784\0\u04c0\0\u37d0\0\u381c\0\u264c\0\u0344" - + "\0\u0344\0\u0344\0\u3868\0\u0344\0\u38b4\0\u3900\0\u394c\0\u0344" - + "\0\u3998\0\u39e4\0\u28ac\0\u3a30\0\u0344\0\u3a7c\0\u3ac8\0\u3b14" - + "\0\u3b60\0\u3bac\0\u3bf8\0\u04c0\0\u04c0\0\u3c44\0\u3c90\0\u04c0" - + "\0\u3cdc\0\u3d28\0\u3d74\0\u3dc0\0\u3e0c\0\u3e58\0\u3ea4\0\u3ef0" - + "\0\u3f3c\0\u3f88\0\u04c0\0\u04c0\0\u3fd4\0\u04c0\0\u4020\0\u406c" - + "\0\u40b8\0\u4104\0\u4150\0\u419c\0\u41e8\0\u4234\0\u4280\0\u04c0" - + "\0\u42cc\0\u4318\0\u4364\0\u43b0\0\u43fc\0\u04c0\0\u4448\0\u0344" - + "\0\u25b4\0\u4494\0\u0344\0\u0344\0\u44e0\0\u452c\0\u4578\0\u04c0" - + "\0\u45c4\0\u4610\0\u465c\0\u04c0\0\u46a8\0\u04c0\0\u04c0\0\u46f4" - + "\0\u04c0\0\u4740\0\u04c0\0\u478c\0\u47d8\0\u4824\0\u4870\0\u04c0" - + "\0\u48bc\0\u4908\0\u4954\0\u49a0\0\u49ec\0\u4a38\0\u4a84\0\u4ad0" - + "\0\u4b1c\0\u04c0\0\u4b68\0\u4bb4\0\u4c00\0\u4c4c\0\u4c98\0\u4ce4" - + "\0\u4d30\0\u4d7c\0\u4dc8\0\u4e14\0\u4e60\0\u04c0\0\u4eac\0\u04c0" - + "\0\u04c0\0\u4ef8\0\u04c0\0\u4f44\0\u04c0\0\u4f90\0\u4fdc\0\u5028" - + "\0\u04c0\0\u5074\0\u50c0\0\u510c\0\u04c0\0\u5158\0\u51a4\0\u51f0" - + "\0\u523c\0\u04c0\0\u5288\0\u52d4\0\u5320\0\u536c\0\u04c0\0\u53b8" - + "\0\u04c0\0\u5404\0\u5450\0\u549c\0\u54e8\0\u5534\0\u5580\0\u55cc" - + "\0\u5618\0\u04c0\0\u04c0\0\u5664\0\u04c0\0\u04c0\0\u56b0\0\u56fc" - + "\0\u5748\0\u5794\0\u04c0\0\u04c0\0\u04c0\0\u57e0\0\u582c\0\u5878" - + "\0\u04c0\0\u58c4\0\u5910\0\u595c\0\u04c0\0\u59a8\0\u59f4\0\u5a40" - + "\0\u04c0\0\u5a8c\0\u04c0\0\u5ad8\0\u04c0\0\u04c0\0\u0344\0\u0344" - + "\0\u5b24\0\u04c0\0\u04c0\0\u5b70\0\u5bbc\0\u5c08\0\u5c54\0\u5ca0" - + "\0\u1858"; + 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"+ + "\2\22\1\31\1\14\1\32\1\33\4\22\1\34\1\35"+ + "\1\36\1\37\1\40\2\22\1\41\2\31\1\22\1\42"+ + "\1\43\1\14\1\44\1\45\1\46\1\47\1\50\1\22"+ + "\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\60"+ + "\1\22\1\61\1\22\1\62\2\22\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\102\1\14\1\103\1\104"+ + "\1\105\31\103\1\106\12\103\1\107\45\103\1\110\1\111"+ + "\1\112\32\110\1\106\11\110\1\107\45\110\1\14\1\113"+ + "\1\114\1\115\1\116\3\14\1\117\2\14\1\115\2\14"+ + "\1\120\3\117\4\14\4\117\5\14\3\117\2\14\2\117"+ + "\4\14\26\117\2\14\1\121\46\14\1\122\45\14\1\123"+ + "\13\14\1\113\1\114\1\115\4\14\1\124\2\14\1\115"+ + "\3\14\3\124\2\14\1\125\1\14\4\124\5\14\3\124"+ + "\2\14\2\124\4\14\26\124\2\14\1\126\46\14\1\127"+ + "\45\14\1\130\12\14\1\131\1\113\1\114\27\131\1\132"+ + "\63\131\1\133\1\134\12\131\1\135\100\131\1\113\1\114"+ + "\7\131\1\136\67\131\1\137\12\131\1\140\1\111\1\112"+ + "\44\140\1\141\1\142\44\140\117\0\1\16\115\0\1\17"+ + "\7\0\1\17\101\0\1\143\2\0\1\143\1\144\1\145"+ + "\25\143\1\146\13\143\1\147\45\143\33\0\1\150\67\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\26\22\26\0\1\151\1\152\7\0\1\153\13\0\1\153"+ + "\3\0\2\153\34\0\1\154\24\0\1\155\1\0\1\156"+ + "\4\0\3\155\4\0\4\155\1\0\1\157\3\0\3\155"+ + "\2\0\2\155\4\0\26\155\2\0\1\160\45\0\1\161"+ + "\76\0\1\162\15\0\1\163\77\0\1\164\14\0\1\165"+ + "\100\0\1\166\106\0\1\153\10\0\1\31\13\0\1\31"+ + "\3\0\2\31\2\167\102\0\1\170\72\0\1\153\10\0"+ + "\1\171\13\0\1\172\2\173\1\0\1\174\1\175\2\167"+ + "\55\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\2\22\1\176\3\22\1\177\2\22\1\200\1\201"+ + "\13\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\1\22\1\202\6\22\4\0\2\22\1\203\11\22\1\204"+ + "\11\22\50\0\1\205\12\0\1\206\116\0\1\207\66\0"+ + "\1\210\13\0\1\211\3\0\2\210\57\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\1\22\1\212"+ + "\24\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\213\4\0\26\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\5\22\1\214\20\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\2\22\1\215\3\22\1\216\5\22\1\217\11\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\220\4\0\10\22\1\221\1\22\1\222\2\22\1\223"+ + "\10\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\22\22\1\224\3\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\225\4\0\2\22"+ + "\1\226\7\22\1\227\13\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\1\22\1\230\14\22"+ + "\1\231\1\22\1\232\5\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\3\22\1\233\4\22\4\0\5\22"+ + "\1\234\1\22\1\235\11\22\1\236\4\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\5\22"+ + "\1\237\1\22\1\240\16\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\241\4\0\6\22\1\242"+ + "\11\22\1\243\5\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\11\22\1\244\4\22\1\245"+ + "\7\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\1\22\1\246\1\247\7\22\1\250\13\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\2\22\1\251\3\22\1\252\17\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\253\4\0"+ + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\7\22\1\254\16\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\2\22\1\255"+ + "\23\22\50\0\1\256\53\0\1\257\40\0\1\260\54\0"+ + "\1\261\37\0\1\262\114\0\1\263\61\0\1\103\2\0"+ + "\31\103\1\0\12\103\1\0\45\103\2\0\1\105\112\0"+ + "\1\264\3\0\30\264\1\265\1\266\1\264\1\267\1\264"+ + "\1\270\5\264\1\271\2\264\1\272\1\273\5\264\1\274"+ + "\1\275\1\264\1\276\27\264\1\0\1\110\2\0\32\110"+ + "\1\0\11\110\1\0\45\110\2\0\1\112\114\0\1\114"+ + "\115\0\1\115\7\0\1\115\117\0\1\277\106\0\2\300"+ + "\3\0\1\300\1\0\5\300\2\0\4\300\1\0\1\301"+ + "\2\0\10\300\4\0\26\300\15\0\1\302\2\0\31\302"+ + "\1\303\60\302\10\0\2\304\3\0\1\304\1\0\5\304"+ + "\2\0\4\304\1\0\1\305\2\0\10\304\4\0\26\304"+ + "\33\0\1\306\76\0\1\307\2\0\31\307\1\310\1\311"+ + "\57\307\32\0\1\312\64\0\1\134\127\0\1\313\103\0"+ + "\1\314\3\0\1\315\3\0\1\316\2\0\3\315\2\0"+ + "\1\317\1\0\4\315\5\0\3\315\2\0\2\315\4\0"+ + "\26\315\2\0\1\320\12\0\1\140\2\0\44\140\2\0"+ + "\44\140\1\321\3\0\33\321\1\322\1\321\1\270\5\321"+ + "\1\271\1\323\1\321\1\272\1\273\5\321\1\274\1\275"+ + "\1\321\1\324\27\321\1\0\1\143\2\0\1\143\1\325"+ + "\42\143\1\147\45\143\1\144\1\326\1\327\112\144\1\330"+ + "\2\331\1\330\1\332\1\333\41\330\1\334\45\330\1\143"+ + "\2\0\1\143\1\335\42\143\1\147\45\143\11\0\1\336"+ + "\125\0\1\153\13\0\1\153\3\0\2\153\2\167\57\0"+ + "\2\155\3\0\1\155\1\0\5\155\2\0\4\155\4\0"+ + "\10\155\4\0\26\155\50\0\1\337\114\0\1\340\77\0"+ + "\1\341\14\0\1\342\76\0\1\343\4\0\1\344\13\0"+ + "\1\344\3\0\2\344\2\0\1\343\101\0\1\345\72\0"+ + "\1\153\10\0\1\171\13\0\1\171\3\0\2\171\2\167"+ + "\60\0\1\153\10\0\1\171\13\0\1\172\3\0\1\174"+ + "\1\175\2\167\67\0\1\346\1\0\1\346\3\0\3\346"+ + "\5\0\1\347\2\0\5\346\4\0\1\346\1\0\1\346"+ + "\1\0\1\346\6\0\1\346\40\0\1\153\10\0\1\171"+ + "\13\0\1\175\3\0\2\175\2\167\60\0\1\153\10\0"+ + "\1\171\13\0\1\350\3\0\2\350\2\167\55\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\14\22"+ + "\1\351\11\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\1\22\1\352\24\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\7\22"+ + "\1\353\16\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\7\22\1\354\16\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\10\22"+ + "\1\355\15\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\4\22\1\356\21\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\5\22"+ + "\1\357\20\22\23\0\1\360\1\0\1\360\7\0\2\360"+ + "\4\0\4\360\5\0\3\360\2\0\2\360\4\0\26\360"+ + "\37\0\1\210\13\0\1\210\3\0\2\210\57\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\361\4\0"+ + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\10\22\1\362\15\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\5\22\1\363"+ + "\2\22\1\364\15\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\7\22\1\365\16\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\2\22\1\366\23\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\10\22\1\367\15\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\2\22\1\370\23\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\17\22\1\371\6\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\11\22\1\372\14\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\373\4\0\26\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\15\22"+ + "\1\374\10\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\10\22\1\375\10\22\1\376\4\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\14\22\1\377\11\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\12\22\1\u0100\5\22"+ + "\1\u0101\5\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\1\22\1\u0102\7\22\1\u0103\14\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\17\22\1\u0104\6\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\5\22\1\u0105\2\22"+ + "\1\u0106\15\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\17\22\1\u0107\6\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u0108\4\0"+ + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\13\22\1\u0109\12\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\3\22\1\u010a\4\22\4\0"+ + "\14\22\1\u010b\11\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\7\22\1\u010c\16\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\10\22\1\u010d\15\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\11\22\1\u010e\14\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\6\22\1\u010f\2\22\1\u0110\14\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\4\22\1\u0111"+ + "\21\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\1\u0112\25\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\1\22\1\u0113\24\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\11\22\1\u0114\14\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\10\22\1\u0115\15\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\3\22"+ + "\1\u0116\4\22\4\0\26\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\25\22\1\u0117\35\0"+ + "\1\u0118\1\0\1\u0118\3\0\3\u0118\5\0\1\u0118\2\0"+ + "\5\u0118\4\0\1\u0118\1\0\1\u0118\1\0\1\u0118\6\0"+ + "\1\u0118\47\0\1\u0119\1\0\1\u0119\3\0\3\u0119\5\0"+ + "\1\u0119\2\0\5\u0119\4\0\1\u0119\1\0\1\u0119\1\0"+ + "\1\u0119\6\0\1\u0119\27\0\1\u011a\2\0\31\u011a\1\310"+ + "\1\0\57\u011a\1\311\2\0\31\311\1\u011b\60\311\16\0"+ + "\1\u011c\114\0\1\u011d\106\0\1\u011e\6\0\3\u011e\4\0"+ + "\4\u011e\5\0\3\u011e\2\0\2\u011e\4\0\26\u011e\2\0"+ + "\1\u011f\22\0\2\315\3\0\1\315\1\0\5\315\2\0"+ + "\4\315\4\0\10\315\4\0\26\315\32\0\1\u0120\7\0"+ + "\1\u0121\77\0\1\u0122\6\0\3\u0122\4\0\4\u0122\5\0"+ + "\3\u0122\2\0\2\u0122\4\0\26\u0122\2\0\1\u0123\33\0"+ + "\1\325\15\0\1\325\1\0\1\325\3\0\1\325\4\0"+ + "\24\325\21\0\1\327\112\0\1\330\2\331\1\330\1\332"+ + "\1\u0124\41\330\1\334\45\330\5\331\1\u0125\114\331\1\u0125"+ + "\13\331\1\332\15\331\1\332\1\331\1\332\3\331\1\332"+ + "\4\331\24\332\17\331\1\143\2\0\1\143\1\u0126\1\333"+ + "\41\143\1\147\45\143\1\330\2\331\1\330\1\u0127\1\u0124"+ + "\41\330\1\334\45\330\1\143\2\0\1\143\1\325\14\143"+ + "\1\335\15\143\1\335\1\143\1\335\3\143\1\335\1\143"+ + "\1\147\2\143\24\335\17\143\33\0\1\u0128\103\0\1\344"+ + "\13\0\1\344\3\0\2\344\71\0\1\u0129\1\0\1\u0129"+ + "\3\0\3\u0129\5\0\1\u0129\2\0\5\u0129\4\0\1\u0129"+ + "\1\0\1\u0129\1\0\1\u0129\6\0\1\u0129\40\0\1\153"+ + "\10\0\1\171\13\0\1\u012a\3\0\2\u012a\2\167\55\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\5\22\1\u012b\20\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\2\22\1\u012c\23\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\4\22\1\u012d\21\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u012e\4\0\26\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\16\22"+ + "\1\u012f\7\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u0130\4\0\26\22\23\0\3\360\7\0"+ + "\3\360\3\0\4\360\4\0\10\360\4\0\26\360\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\2\22\1\u0131\23\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\12\22\1\u0132\13\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u0133"+ + "\4\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\4\22\1\u0134\21\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\5\22"+ + "\1\u0135\2\22\1\u0136\15\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\5\22\1\u0137\20\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\10\22\1\u0138\15\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u0139\4\0\26\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\10\22\1\u013a\15\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\1\22\1\u013b\24\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\11\22\1\u013c\14\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u013d\4\0\26\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\14\22"+ + "\1\u013e\11\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u013f\4\0\26\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\6\22\1\u0140"+ + "\17\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\5\22\1\u0141\20\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0142\4\0\26\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\10\22\1\u0143\15\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u0144\4\0\26\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\6\22\1\u0145\5\22\1\u0146\11\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0147\4\0\26\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\2\22\1\u0148\23\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u0149\4\0\26\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\2\22\1\u014a\23\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\16\22\1\u014b\7\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\14\22\1\u014c\11\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\10\22\1\u014d\15\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\22\22\1\u014e\3\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\3\22\1\u014f\22\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\14\22\1\u0150\11\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\13\22\1\u0151\12\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\11\22\1\u0152\14\22\35\0\1\u0153\1\0\1\u0153\3\0"+ + "\3\u0153\5\0\1\u0153\2\0\5\u0153\4\0\1\u0153\1\0"+ + "\1\u0153\1\0\1\u0153\6\0\1\u0153\47\0\1\u0154\1\0"+ + "\1\u0154\3\0\3\u0154\5\0\1\u0154\2\0\5\u0154\4\0"+ + "\1\u0154\1\0\1\u0154\1\0\1\u0154\6\0\1\u0154\30\0"+ + "\2\u0155\5\0\2\u011e\1\0\1\u0155\1\0\1\u011e\1\u0156"+ + "\5\u011e\2\0\4\u011e\4\0\10\u011e\4\0\26\u011e\32\0"+ + "\1\u0157\125\0\1\u0158\76\0\2\u0122\3\0\1\u0122\1\0"+ + "\5\u0122\2\0\4\u0122\4\0\10\u0122\4\0\26\u0122\15\0"+ + "\1\330\2\331\1\330\1\u0126\1\u0124\41\330\1\334\45\330"+ + "\4\331\1\327\1\u0125\107\331\1\330\2\331\1\330\1\332"+ + "\1\u0124\13\330\1\u0127\15\330\1\u0127\1\330\1\u0127\3\330"+ + "\1\u0127\1\330\1\334\2\330\24\u0127\17\330\20\0\1\u0159"+ + "\1\0\1\u0159\3\0\3\u0159\5\0\1\u0159\2\0\5\u0159"+ + "\4\0\1\u0159\1\0\1\u0159\1\0\1\u0159\6\0\1\u0159"+ + "\40\0\1\153\10\0\1\171\13\0\1\u015a\3\0\2\u015a"+ + "\2\167\55\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\u015b\4\0\26\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\14\22\1\u015c\11\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\10\22\1\u015d\15\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\7\22\1\u015e\16\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\3\22\1\u015f\22\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\1\22\1\u0160\24\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\16\22\1\u0161\7\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\10\22\1\u0162\15\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\11\22\1\u0163\14\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\5\22\1\u0164\20\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\11\22\1\u0165\14\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\1\22\1\u0166\24\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\4\22\1\u0167\21\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\1\22\1\u0168\24\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\22\22\1\u0169\3\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\5\22\1\u016a\20\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\15\22\1\u016b\10\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\6\22\1\u016c\17\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\2\22\1\u016d\23\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\1\22\1\u016e\24\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\1\22\1\u016f\24\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u0170\4\0\26\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\3\22\1\u0171"+ + "\4\22\4\0\26\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\12\22\1\u0172\13\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\4\0"+ + "\10\22\1\u0173\15\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\21\22\1\u0174\4\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u0175"+ + "\4\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u0176\4\0\26\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\2\22\1\u0177"+ + "\23\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\2\22\1\u0178\23\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\11\22\1\u0179"+ + "\14\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\7\22\1\u017a\16\22\16\0\2\u0155\10\0"+ + "\1\u0155\2\0\1\u0156\125\0\1\u017b\105\0\1\u017c\1\0"+ + "\1\u017c\3\0\3\u017c\5\0\1\u017c\2\0\5\u017c\4\0"+ + "\1\u017c\1\0\1\u017c\1\0\1\u017c\6\0\1\u017c\40\0"+ + "\1\153\10\0\1\171\13\0\1\u017d\3\0\2\u017d\2\167"+ + "\55\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\14\22\1\u017e\11\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\11\22\1\u017f\14\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\13\22\1\u0180\12\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\7\22\1\u0181\16\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\7\22\1\u0182\16\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\4\22\1\u0183\21\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\16\22\1\u0184\7\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\11\22\1\u0185\14\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u0186\4\0\26\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\17\22\1\u0187\6\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\3\22\1\u0188"+ + "\4\22\4\0\26\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\7\22\1\u0189\16\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\3\22\1\u018a"+ + "\4\22\4\0\7\22\1\u018b\16\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\10\22\1\u018c"+ + "\15\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\21\22\1\u018d\4\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\11\22\1\u018e"+ + "\14\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\14\22\1\u018f\11\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0190\4\0\26\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\11\22\1\u0191\14\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\4\22\1\u0192\21\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\10\22\1\u0193\15\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\23\22\1\u0194\2\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\4\22\1\u0195\21\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\11\22\1\u0196\14\22"+ + "\45\0\1\u0197\104\0\1\u0198\1\0\1\u0198\3\0\3\u0198"+ + "\5\0\1\u0198\2\0\5\u0198\4\0\1\u0198\1\0\1\u0198"+ + "\1\0\1\u0198\6\0\1\u0198\40\0\1\153\10\0\1\171"+ + "\13\0\1\u0199\3\0\2\u0199\2\167\55\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\20\22\1\u019a"+ + "\5\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\6\22\1\u019b\17\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\5\22\1\u019c"+ + "\20\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\12\22\1\u019d\13\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\13\22\1\u019e"+ + "\12\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\2\22\1\u019f\23\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\4\22\1\u01a0"+ + "\21\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\2\22\1\u01a1\23\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\2\22\1\u01a2"+ + "\23\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\u01a3\4\0\26\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\7\22\1\u01a4\16\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\10\22\1\u01a5\15\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\4\22\1\u01a6\21\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\10\22\1\u01a7\15\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u01a8\4\0\26\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u01a9"+ + "\4\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\10\22\1\u01aa\15\22\46\0\1\u01ab"+ + "\103\0\1\u01ac\1\0\1\u01ac\3\0\3\u01ac\5\0\1\u01ac"+ + "\2\0\5\u01ac\4\0\1\u01ac\1\0\1\u01ac\1\0\1\u01ac"+ + "\6\0\1\u01ac\40\0\1\153\10\0\1\171\13\0\1\u01ad"+ + "\3\0\2\u01ad\2\167\55\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\4\0\7\22\1\u01ae\16\22\23\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u01af"+ + "\4\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u01b0\4\0\26\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\4\22\1\u01b1"+ + "\21\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\u01b2\4\0\26\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\4\22\1\u01b3\21\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\4\0\14\22\1\u01b4\11\22\23\0\3\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\4\0\7\22\1\u01b5\16\22"+ + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u01b6\4\0\26\22\23\0\3\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u01b7\4\0\26\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\20\22"+ + "\1\u01b8\5\22\45\0\1\u01b9\104\0\1\u01ba\1\0\1\u01ba"+ + "\3\0\3\u01ba\5\0\1\u01ba\2\0\5\u01ba\4\0\1\u01ba"+ + "\1\0\1\u01ba\1\0\1\u01ba\6\0\1\u01ba\40\0\1\153"+ + "\10\0\1\171\13\0\1\u01bb\3\0\2\u01bb\2\167\55\0"+ + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u01bc"+ + "\4\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\4\0\6\22\1\u01bd\17\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u01be\4\0"+ + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\10\22\1\u01bf\15\22\23\0\3\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\4\0\13\22\1\u01c0"+ + "\12\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\4\0\13\22\1\u01c1\12\22\42\0\1\u01c2\107\0"+ + "\1\u01c3\1\0\1\u01c3\3\0\3\u01c3\5\0\1\u01c3\2\0"+ + "\5\u01c3\4\0\1\u01c3\1\0\1\u01c3\1\0\1\u01c3\6\0"+ + "\1\u01c3\40\0\1\153\10\0\1\171\13\0\1\u01c4\3\0"+ + "\2\u01c4\2\167\55\0\3\22\7\0\3\22\3\0\4\22"+ + "\4\0\3\22\1\u01c5\4\22\4\0\26\22\23\0\3\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\4\0\5\22"+ + "\1\u01c6\20\22\26\0\1\153\10\0\1\171\13\0\1\u01c7"+ + "\3\0\2\u01c7\2\167\60\0\1\153\10\0\1\171\13\0"+ + "\1\u01c8\3\0\2\u01c8\2\167\60\0\1\153\10\0\1\171"+ + "\13\0\1\u01c9\3\0\2\u01c9\2\167\60\0\1\153\10\0"+ + "\1\171\13\0\1\u01ca\3\0\2\u01ca\2\167\60\0\1\153"+ + "\10\0\1\171\13\0\1\u01cb\3\0\2\u01cb\2\167\60\0"+ + "\1\153\10\0\1\171\13\0\1\u01cc\3\0\2\u01cc\2\167"+ + "\47\0"; - private static int[] zzUnpackRowMap() { - int[] result = new int[457]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + private static int [] zzUnpackTrans() { + int [] result = new int[24255]; + 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"+ + "\27\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\0\1\1\1\0\1\1\1\0\1\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\1\1\1\11"+ + "\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\3\1\1\11\2\0\1\1"+ + "\2\0\1\1\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"+ + "\2\0\2\1\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[460]; + 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" - + "\2\22\1\31\1\14\1\32\1\33\4\22\1\34\1\35" - + "\1\36\1\37\1\40\2\22\1\41\2\31\1\22\1\42" - + "\1\43\1\14\1\44\1\45\1\46\1\47\1\22\1\50" - + "\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\22" - + "\1\60\1\22\1\61\2\22\1\62\1\63\1\64\1\65" - + "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75" - + "\1\76\1\77\1\100\1\101\1\14\1\102\1\103\1\104" - + "\31\102\1\105\12\102\1\106\44\102\1\107\1\110\1\111" - + "\32\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" - + "\3\116\4\14\4\116\5\14\3\116\2\14\2\116\3\14" - + "\26\116\2\14\1\120\46\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" - + "\3\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\46\14\1\126\44\14" - + "\1\127\12\14\1\130\1\112\1\113\27\130\1\131\62\130" - + "\1\132\1\133\12\130\1\134\77\130\1\112\1\113\7\130" - + "\1\135\66\130\1\136\12\130\1\137\1\110\1\111\44\137" - + "\1\140\1\141\43\137\116\0\1\16\114\0\1\17\7\0" - + "\1\17\100\0\1\142\2\0\1\142\1\143\1\144\25\142" - + "\1\145\13\142\1\146\44\142\33\0\1\147\66\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\26\22" - + "\26\0\1\150\1\151\7\0\1\152\13\0\1\152\3\0" - + "\2\152\33\0\1\153\24\0\1\154\1\0\1\155\4\0" - + "\3\154\4\0\4\154\1\0\1\156\3\0\3\154\2\0" - + "\2\154\3\0\26\154\2\0\1\157\45\0\1\160\75\0" - + "\1\161\15\0\1\162\76\0\1\163\14\0\1\164\77\0" - + "\1\165\105\0\1\152\10\0\1\31\13\0\1\31\3\0" - + "\2\31\2\166\101\0\1\167\71\0\1\152\10\0\1\170" - + "\13\0\1\171\2\172\1\0\1\173\1\174\2\166\54\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\2\22\1\175\3\22\1\176\2\22\1\177\1\200\13\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\1\22" - + "\1\201\6\22\3\0\2\22\1\202\11\22\1\203\11\22" - + "\50\0\1\204\12\0\1\205\115\0\1\206\51\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22" - + "\1\207\24\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\7\22\1\210\3\0\26\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\5\22\1\211" - + "\20\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\212\3\22\1\213\5\22\1\214" - + "\11\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\215\3\0\10\22\1\216\1\22\1\217\2\22" - + "\1\220\10\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\22\22\1\221\3\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\7\22\1\222\3\0" - + "\2\22\1\223\7\22\1\224\13\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\225" - + "\14\22\1\226\1\22\1\227\5\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\3\22\1\230\4\22\3\0" - + "\5\22\1\231\1\22\1\232\11\22\1\233\4\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\5\22\1\234\1\22\1\235\16\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\236\3\0\6\22" - + "\1\237\11\22\1\240\5\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\11\22\1\241\4\22" - + "\1\242\7\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\1\22\1\243\1\244\7\22\1\245" - + "\13\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\246\3\22\1\247\17\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\250" - + "\3\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\7\22\1\251\16\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\2\22" - + "\1\252\23\22\50\0\1\253\52\0\1\254\40\0\1\255" - + "\53\0\1\256\37\0\1\257\113\0\1\260\60\0\1\102" - + "\2\0\31\102\1\0\12\102\1\0\44\102\2\0\1\104" - + "\111\0\1\261\3\0\30\261\1\262\1\263\1\261\1\264" - + "\1\261\1\265\5\261\1\266\1\261\1\267\1\270\5\261" - + "\1\271\1\272\1\261\1\273\27\261\1\0\1\107\2\0" - + "\32\107\1\0\11\107\1\0\44\107\2\0\1\111\113\0" - + "\1\113\114\0\1\114\7\0\1\114\116\0\1\274\105\0" - + "\2\275\3\0\1\275\1\0\5\275\2\0\4\275\1\0" - + "\1\276\2\0\10\275\3\0\26\275\15\0\1\277\2\0" - + "\31\277\1\300\57\277\10\0\2\301\3\0\1\301\1\0" - + "\5\301\2\0\4\301\1\0\1\302\2\0\10\301\3\0" - + "\26\301\33\0\1\303\75\0\1\304\2\0\31\304\1\305" - + "\1\306\56\304\32\0\1\307\63\0\1\133\126\0\1\310" - + "\102\0\1\311\3\0\1\312\3\0\1\313\2\0\3\312" - + "\2\0\1\314\1\0\4\312\5\0\3\312\2\0\2\312" - + "\3\0\26\312\2\0\1\315\12\0\1\137\2\0\44\137" - + "\2\0\43\137\1\316\3\0\33\316\1\317\1\316\1\265" - + "\5\316\1\266\1\320\1\267\1\270\5\316\1\271\1\272" - + "\1\316\1\321\27\316\1\0\1\142\2\0\1\142\1\322" - + "\42\142\1\146\44\142\1\143\1\323\1\324\111\143\1\325" - + "\2\326\1\325\1\327\1\330\41\325\1\331\44\325\1\142" - + "\2\0\1\142\1\332\42\142\1\146\44\142\11\0\1\333" - + "\124\0\1\152\13\0\1\152\3\0\2\152\2\166\56\0" - + "\2\154\3\0\1\154\1\0\5\154\2\0\4\154\4\0" - + "\10\154\3\0\26\154\50\0\1\334\113\0\1\335\76\0" - + "\1\336\14\0\1\337\75\0\1\340\4\0\1\341\13\0" - + "\1\341\3\0\2\341\2\0\1\340\100\0\1\342\71\0" - + "\1\152\10\0\1\170\13\0\1\170\3\0\2\170\2\166" - + "\57\0\1\152\10\0\1\170\13\0\1\171\3\0\1\173" - + "\1\174\2\166\66\0\1\343\1\0\1\343\3\0\3\343" - + "\5\0\1\344\2\0\5\343\3\0\1\343\1\0\1\343" - + "\1\0\1\343\6\0\1\343\40\0\1\152\10\0\1\170" - + "\13\0\1\174\3\0\2\174\2\166\57\0\1\152\10\0" - + "\1\170\13\0\1\345\3\0\2\345\2\166\54\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\14\22" - + "\1\346\11\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\1\22\1\347\24\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\350\16\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\7\22\1\351\16\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22" - + "\1\352\15\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\4\22\1\353\21\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\354\20\22\23\0\1\355\1\0\1\355\7\0\2\355" - + "\4\0\4\355\5\0\3\355\2\0\2\355\3\0\26\355" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\7\22" - + "\1\356\3\0\26\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\10\22\1\357\15\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\5\22\1\360\2\22\1\361\15\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\7\22\1\362" - + "\16\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\363\23\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\10\22\1\364" - + "\15\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\365\23\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\17\22\1\366" - + "\6\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\11\22\1\367\14\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\370\3\0\26\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\15\22\1\371\10\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\10\22\1\372\10\22" - + "\1\373\4\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\14\22\1\374\11\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\12\22" - + "\1\375\5\22\1\376\5\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\1\22\1\377\7\22" - + "\1\u0100\14\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\17\22\1\u0101\6\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\u0102\2\22\1\u0103\15\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\17\22\1\u0104\6\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\7\22" - + "\1\u0105\3\0\26\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\13\22\1\u0106\12\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\3\22\1\u0107" - + "\4\22\3\0\14\22\1\u0108\11\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u0109" - + "\16\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u010a\15\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u010b" - + "\14\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\6\22\1\u010c\2\22\1\u010d\14\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\4\22\1\u010e\21\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\1\u010f\25\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22" - + "\1\u0110\24\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\11\22\1\u0111\14\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22" - + "\1\u0112\15\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\3\22\1\u0113\4\22\3\0\26\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\25\22" - + "\1\u0114\35\0\1\u0115\1\0\1\u0115\3\0\3\u0115\5\0" - + "\1\u0115\2\0\5\u0115\3\0\1\u0115\1\0\1\u0115\1\0" - + "\1\u0115\6\0\1\u0115\47\0\1\u0116\1\0\1\u0116\3\0" - + "\3\u0116\5\0\1\u0116\2\0\5\u0116\3\0\1\u0116\1\0" - + "\1\u0116\1\0\1\u0116\6\0\1\u0116\27\0\1\u0117\2\0" - + "\31\u0117\1\305\1\0\56\u0117\1\306\2\0\31\306\1\u0118" - + "\57\306\16\0\1\u0119\113\0\1\u011a\105\0\1\u011b\6\0" - + "\3\u011b\4\0\4\u011b\5\0\3\u011b\2\0\2\u011b\3\0" - + "\26\u011b\2\0\1\u011c\22\0\2\312\3\0\1\312\1\0" - + "\5\312\2\0\4\312\4\0\10\312\3\0\26\312\32\0" - + "\1\u011d\7\0\1\u011e\76\0\1\u011f\6\0\3\u011f\4\0" - + "\4\u011f\5\0\3\u011f\2\0\2\u011f\3\0\26\u011f\2\0" - + "\1\u0120\33\0\1\322\15\0\1\322\1\0\1\322\3\0" - + "\1\322\3\0\24\322\21\0\1\324\111\0\1\325\2\326" - + "\1\325\1\327\1\u0121\41\325\1\331\44\325\5\326\1\u0122" - + "\113\326\1\u0122\13\326\1\327\15\326\1\327\1\326\1\327" - + "\3\326\1\327\3\326\24\327\17\326\1\142\2\0\1\142" - + "\1\u0123\1\330\41\142\1\146\44\142\1\325\2\326\1\325" - + "\1\u0124\1\u0121\41\325\1\331\44\325\1\142\2\0\1\142" - + "\1\322\14\142\1\332\15\142\1\332\1\142\1\332\3\142" - + "\1\332\1\142\1\146\1\142\24\332\17\142\33\0\1\u0125" - + "\102\0\1\341\13\0\1\341\3\0\2\341\70\0\1\u0126" - + "\1\0\1\u0126\3\0\3\u0126\5\0\1\u0126\2\0\5\u0126" - + "\3\0\1\u0126\1\0\1\u0126\1\0\1\u0126\6\0\1\u0126" - + "\40\0\1\152\10\0\1\170\13\0\1\u0127\3\0\2\u0127" - + "\2\166\54\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\5\22\1\u0128\20\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u0129" - + "\23\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\4\22\1\u012a\21\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\u012b\3\0\26\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\16\22\1\u012c\7\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\u012d\3\0\26\22\23\0" - + "\3\355\7\0\3\355\3\0\4\355\4\0\10\355\3\0" - + "\26\355\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\u012e\23\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\12\22\1\u012f" - + "\13\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\u0130\3\0\26\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u0131\21\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\5\22\1\u0132\2\22\1\u0133\15\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\u0134\20\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\u0135\15\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u0136\3\0" - + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u0137\15\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\u0138" - + "\24\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\11\22\1\u0139\14\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\u013a\3\0\26\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\14\22\1\u013b\11\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\u013c\3\0\26\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\6\22\1\u013d\17\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\5\22\1\u013e\20\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u013f" - + "\3\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\u0140\15\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u0141\3\0" - + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\6\22\1\u0142\5\22\1\u0143\11\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u0144" - + "\3\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\2\22\1\u0145\23\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u0146\3\0" - + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\u0147\23\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0148" - + "\7\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\14\22\1\u0149\11\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u014a" - + "\15\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\22\22\1\u014b\3\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\3\22\1\u014c" - + "\22\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\14\22\1\u014d\11\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\13\22\1\u014e" - + "\12\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\11\22\1\u014f\14\22\35\0\1\u0150\1\0" - + "\1\u0150\3\0\3\u0150\5\0\1\u0150\2\0\5\u0150\3\0" - + "\1\u0150\1\0\1\u0150\1\0\1\u0150\6\0\1\u0150\47\0" - + "\1\u0151\1\0\1\u0151\3\0\3\u0151\5\0\1\u0151\2\0" - + "\5\u0151\3\0\1\u0151\1\0\1\u0151\1\0\1\u0151\6\0" - + "\1\u0151\30\0\2\u0152\5\0\2\u011b\1\0\1\u0152\1\0" - + "\1\u011b\1\u0153\5\u011b\2\0\4\u011b\4\0\10\u011b\3\0" - + "\26\u011b\32\0\1\u0154\124\0\1\u0155\75\0\2\u011f\3\0" - + "\1\u011f\1\0\5\u011f\2\0\4\u011f\4\0\10\u011f\3\0" - + "\26\u011f\15\0\1\325\2\326\1\325\1\u0123\1\u0121\41\325" - + "\1\331\44\325\4\326\1\324\1\u0122\106\326\1\325\2\326" - + "\1\325\1\327\1\u0121\13\325\1\u0124\15\325\1\u0124\1\325" - + "\1\u0124\3\325\1\u0124\1\325\1\331\1\325\24\u0124\17\325" - + "\20\0\1\u0156\1\0\1\u0156\3\0\3\u0156\5\0\1\u0156" - + "\2\0\5\u0156\3\0\1\u0156\1\0\1\u0156\1\0\1\u0156" - + "\6\0\1\u0156\40\0\1\152\10\0\1\170\13\0\1\u0157" - + "\3\0\2\u0157\2\166\54\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\7\22\1\u0158\3\0\26\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\14\22" - + "\1\u0159\11\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\u015a\15\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\u015b\16\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\3\22\1\u015c\22\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22" - + "\1\u015d\24\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\16\22\1\u015e\7\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22" - + "\1\u015f\15\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\11\22\1\u0160\14\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\u0161\20\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\11\22\1\u0162\14\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22" - + "\1\u0163\24\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\4\22\1\u0164\21\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22" - + "\1\u0165\24\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\22\22\1\u0166\3\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\u0167\20\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\15\22\1\u0168\10\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\6\22" - + "\1\u0169\17\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\2\22\1\u016a\23\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22" - + "\1\u016b\24\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\1\22\1\u016c\24\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u016d\3\0" - + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\3\22\1\u016e\4\22\3\0\26\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\12\22\1\u016f" - + "\13\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u0170\15\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\21\22\1\u0171" - + "\4\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\u0172\3\0\26\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\u0173\3\0\26\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\2\22\1\u0174\23\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\2\22\1\u0175\23\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\11\22\1\u0176\14\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\7\22\1\u0177\16\22\16\0" - + "\2\u0152\10\0\1\u0152\2\0\1\u0153\124\0\1\u0178\104\0" - + "\1\u0179\1\0\1\u0179\3\0\3\u0179\5\0\1\u0179\2\0" - + "\5\u0179\3\0\1\u0179\1\0\1\u0179\1\0\1\u0179\6\0" - + "\1\u0179\40\0\1\152\10\0\1\170\13\0\1\u017a\3\0" - + "\2\u017a\2\166\54\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\14\22\1\u017b\11\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\11\22" - + "\1\u017c\14\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\13\22\1\u017d\12\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\u017e\16\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\7\22\1\u017f\16\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22" - + "\1\u0180\21\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\16\22\1\u0181\7\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\11\22" - + "\1\u0182\14\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\7\22\1\u0183\3\0\26\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\17\22\1\u0184" - + "\6\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\3\22\1\u0185\4\22\3\0\26\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u0186" - + "\16\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\3\22\1\u0187\4\22\3\0\7\22\1\u0188\16\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\10\22\1\u0189\15\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\21\22\1\u018a\4\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\11\22\1\u018b\14\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\14\22\1\u018c\11\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u018d" - + "\3\0\26\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\11\22\1\u018e\14\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22" - + "\1\u018f\21\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\u0190\15\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\23\22" - + "\1\u0191\2\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\4\22\1\u0192\21\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\11\22" - + "\1\u0193\14\22\45\0\1\u0194\103\0\1\u0195\1\0\1\u0195" - + "\3\0\3\u0195\5\0\1\u0195\2\0\5\u0195\3\0\1\u0195" - + "\1\0\1\u0195\1\0\1\u0195\6\0\1\u0195\40\0\1\152" - + "\10\0\1\170\13\0\1\u0196\3\0\2\u0196\2\166\54\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\20\22\1\u0197\5\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\6\22\1\u0198\17\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\5\22\1\u0199\20\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\12\22\1\u019a\13\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\13\22\1\u019b\12\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\2\22\1\u019c\23\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\4\22\1\u019d\21\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\2\22\1\u019e\23\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\2\22\1\u019f\23\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\7\22\1\u01a0\3\0\26\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\u01a1\16\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\u01a2\15\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22" - + "\1\u01a3\21\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\u01a4\15\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u01a5\3\0" - + "\26\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\u01a6\3\0\26\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u01a7\15\22" - + "\46\0\1\u01a8\102\0\1\u01a9\1\0\1\u01a9\3\0\3\u01a9" - + "\5\0\1\u01a9\2\0\5\u01a9\3\0\1\u01a9\1\0\1\u01a9" - + "\1\0\1\u01a9\6\0\1\u01a9\40\0\1\152\10\0\1\170" - + "\13\0\1\u01aa\3\0\2\u01aa\2\166\54\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u01ab" - + "\16\22\23\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\u01ac\3\0\26\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\u01ad\3\0\26\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\4\22\1\u01ae\21\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\7\22\1\u01af\3\0\26\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22" - + "\1\u01b0\21\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\14\22\1\u01b1\11\22\23\0\3\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\u01b2\16\22\23\0\3\22\7\0\3\22\3\0\4\22" - + "\4\0\7\22\1\u01b3\3\0\26\22\23\0\3\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\u01b4\3\0\26\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\20\22\1\u01b5\5\22\45\0\1\u01b6\103\0\1\u01b7" - + "\1\0\1\u01b7\3\0\3\u01b7\5\0\1\u01b7\2\0\5\u01b7" - + "\3\0\1\u01b7\1\0\1\u01b7\1\0\1\u01b7\6\0\1\u01b7" - + "\40\0\1\152\10\0\1\170\13\0\1\u01b8\3\0\2\u01b8" - + "\2\166\54\0\3\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\u01b9\3\0\26\22\23\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\6\22\1\u01ba\17\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\7\22" - + "\1\u01bb\3\0\26\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\10\22\1\u01bc\15\22\23\0" - + "\3\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\13\22\1\u01bd\12\22\23\0\3\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\13\22\1\u01be\12\22\42\0" - + "\1\u01bf\106\0\1\u01c0\1\0\1\u01c0\3\0\3\u01c0\5\0" - + "\1\u01c0\2\0\5\u01c0\3\0\1\u01c0\1\0\1\u01c0\1\0" - + "\1\u01c0\6\0\1\u01c0\40\0\1\152\10\0\1\170\13\0" - + "\1\u01c1\3\0\2\u01c1\2\166\54\0\3\22\7\0\3\22" - + "\3\0\4\22\4\0\3\22\1\u01c2\4\22\3\0\26\22" - + "\23\0\3\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\5\22\1\u01c3\20\22\26\0\1\152\10\0\1\170" - + "\13\0\1\u01c4\3\0\2\u01c4\2\166\57\0\1\152\10\0" - + "\1\170\13\0\1\u01c5\3\0\2\u01c5\2\166\57\0\1\152" - + "\10\0\1\170\13\0\1\u01c6\3\0\2\u01c6\2\166\57\0" - + "\1\152\10\0\1\170\13\0\1\u01c7\3\0\2\u01c7\2\166" - + "\57\0\1\152\10\0\1\170\13\0\1\u01c8\3\0\2\u01c8" - + "\2\166\57\0\1\152\10\0\1\170\13\0\1\u01c9\3\0" - + "\2\u01c9\2\166\46\0"; + /** the current state of the DFA */ + private int zzState; - private static int[] zzUnpackTrans() { - int[] result = new int[23788]; - 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\0\1\1\1\0\1\1\1\0\1\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\3\1\1\11\2\0\1\1\2\0\1\1" - + "\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\2\0\2\1" - + "\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[457]; - 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); } @@ -1028,24 +971,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); } } @@ -1057,10 +1000,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(); @@ -1069,1274 +1011,1102 @@ 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 166: - break; - case 2: { - yyline++; - } - case 167: - break; - case 3: { - /*ignore*/ - - } - case 168: - break; - case 4: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); - } - case 169: - break; - case 5: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); - } - case 170: - break; - case 6: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); - } - case 171: - break; - case 7: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); - } - case 172: - break; - case 8: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); - } - case 173: - break; - case 9: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); - } - case 174: - break; - case 10: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); - } - case 175: - break; - case 11: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); - } - case 176: - break; - case 12: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); - } - case 177: - break; - case 13: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong((yytext()))); - } - case 178: - break; - case 14: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); - } - case 179: - break; - case 15: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); - } - case 180: - break; - case 16: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); - } - case 181: - break; - case 17: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); - } - case 182: - break; - case 18: { - string.setLength(0); - yybegin(STRING); - } - case 183: - break; - case 19: { - string.setLength(0); - yybegin(CHARLITERAL); - } - case 184: - break; - case 20: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); - } - case 185: - break; - case 21: { - string.setLength(0); - yybegin(OIDENTIFIER); - } - case 186: - break; - case 22: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); - } - case 187: - break; - case 23: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); - } - case 188: - break; - case 24: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); - } - case 189: - break; - case 25: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); - } - case 190: - break; - case 26: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); - } - case 191: - break; - case 27: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); - } - case 192: - break; - case 28: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); - } - case 193: - break; - case 29: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); - } - case 194: - break; - case 30: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); - } - case 195: - break; - case 31: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); - } - case 196: - break; - case 32: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); - } - case 197: - break; - case 33: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); - } - case 198: - break; - case 34: { - string.append(yytext()); - } - case 199: - break; - case 35: { - yybegin(YYINITIAL); - yyline++; - } - case 200: - break; - case 36: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); - } - case 201: - break; - case 37: { - yybegin(YYINITIAL); - yyline++; - } - case 202: - break; - case 38: { - string.append(yytext()); - yyline++; - } - case 203: - 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 204: - 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 205: - break; - case 41: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); - } - case 206: - 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 207: - break; - case 43: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); - } - case 208: - break; - case 44: { - string.append(yytext()); - yyline++; - } - case 209: - 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 210: - break; - case 46: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString()); - } - case 211: - break; - case 47: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); - } - case 212: - break; - case 48: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); - } - case 213: - break; - case 49: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); - } - case 214: - break; - case 50: { - return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); - } - case 215: - break; - case 51: { - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble((yytext()))); - } - case 216: - break; - case 52: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); - } - case 217: - break; - case 53: { - yybegin(XMLOPENTAG); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()); - } - case 218: - break; - case 54: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); - } - case 219: - break; - case 55: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); - } - case 220: - break; - case 56: { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); - } - case 221: - break; - case 57: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); - } - case 222: - break; - case 58: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); - } - case 223: - break; - case 59: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); - } - case 224: - break; - case 60: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); - } - case 225: - break; - case 61: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); - } - case 226: - break; - case 62: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); - } - case 227: - break; - case 63: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); - } - case 228: - break; - case 64: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext(), 8)); - } - case 229: - break; - case 65: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); - } - case 230: - break; - case 66: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); - } - case 231: - break; - case 67: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); - } - case 232: - break; - case 68: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); - } - case 233: - break; - case 69: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); - } - case 234: - break; - case 70: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); - } - case 235: - break; - case 71: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); - } - case 236: - break; - case 72: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); - } - case 237: - break; - case 73: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); - } - case 238: - break; - case 74: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); - } - case 239: - break; - case 75: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); - } - case 240: - break; - case 76: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); - } - case 241: - break; - case 77: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); - } - case 242: - break; - case 78: { - /* ignore illegal character escape */ - - } - case 243: - break; - case 79: { - string.append('\"'); - } - case 244: - break; - case 80: { - string.append('\''); - } - case 245: - break; - case 81: { - string.append('\f'); - } - case 246: - break; - case 82: { - string.append('\\'); - } - case 247: - break; - case 83: { - string.append('\b'); - } - case 248: - break; - case 84: { - string.append('\r'); - } - case 249: - break; - case 85: { - string.append('\n'); - } - case 250: - break; - case 86: { - string.append('\t'); - } - case 251: - 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 252: - 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 253: - break; - case 89: { - yybegin(XMLOPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 254: - 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 255: - 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 256: - break; - case 92: { - yybegin(XMLINSTROPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 257: - 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 258: - 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 259: - break; - case 95: { - throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 260: - break; - case 96: { - string.append('\u00A7'); - } - case 261: - break; - case 97: { - return new ParsedSymbol(SymbolGroup.REGEXP, SymbolType.REGEXP, yytext()); - } - case 262: - break; - case 98: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); - } - case 263: - break; - case 99: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); - } - case 264: - break; - case 100: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); - } - case 265: - break; - case 101: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); - } - case 266: - break; - case 102: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); - } - case 267: - break; - case 103: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); - } - case 268: - break; - case 104: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext().substring(2), 16)); - } - case 269: - break; - case 105: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); - } - case 270: - break; - case 106: { - return new ParsedSymbol(SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2)); - } - case 271: - break; - case 107: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext()); - } - case 272: - break; - case 108: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); - } - case 273: - break; - case 109: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); - } - case 274: - break; - case 110: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); - } - case 275: - break; - case 111: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); - } - case 276: - break; - case 112: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext()); - } - case 277: - break; - case 113: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); - } - case 278: - break; - case 114: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); - } - case 279: - break; - case 115: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); - } - case 280: - break; - case 116: { - 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 281: - break; - case 117: { - 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 282: - break; - case 118: { - 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 283: - break; - case 119: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); - } - case 284: - break; - case 120: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext()); - } - case 285: - break; - case 121: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); - } - case 286: - break; - case 122: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); - } - case 287: - break; - case 123: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); - } - case 288: - break; - case 124: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); - } - case 289: - break; - case 125: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); - } - case 290: - break; - case 126: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); - } - case 291: - break; - case 127: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); - } - case 292: - break; - case 128: { - char val = (char) Integer.parseInt(yytext().substring(2), 16); - string.append(val); - } - case 293: - break; - case 129: { - 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 294: - break; - case 130: { - 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 295: - break; - case 131: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); - } - case 296: - break; - case 132: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext()); - } - case 297: - break; - case 133: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); - } - case 298: - break; - case 134: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); - } - case 299: - break; - case 135: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); - } - case 300: - break; - case 136: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); - } - case 301: - break; - case 137: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); - } - case 302: - break; - case 138: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); - } - case 303: - break; - case 139: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); - } - case 304: - break; - case 140: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); - } - case 305: - break; - case 141: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext()); - } - case 306: - break; - case 142: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); - } - case 307: - break; - case 143: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext()); - } - case 308: - break; - case 144: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); - } - case 309: - break; - case 145: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); - } - case 310: - break; - case 146: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); - } - case 311: - break; - case 147: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); - } - case 312: - break; - case 148: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); - } - case 313: - break; - case 149: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); - } - case 314: - break; - case 150: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); - } - case 315: - break; - case 151: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext()); - } - case 316: - break; - case 152: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); - } - case 317: - break; - case 153: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); - } - case 318: - break; - case 154: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); - } - case 319: - break; - case 155: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); - } - case 320: - break; - case 156: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext()); - } - case 321: - break; - case 157: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); - } - case 322: - break; - case 158: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); - } - case 323: - break; - case 159: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext()); - } - case 324: - break; - case 160: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); - } - case 325: - break; - case 161: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); - } - case 326: - break; - case 162: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); - } - case 327: - break; - case 163: { - 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 328: - break; - case 164: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); - } - case 329: - break; - case 165: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); - } - case 330: - 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 167: break; + case 2: + { yyline++; + } + case 168: break; + case 3: + { /*ignore*/ + } + case 169: break; + case 4: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); + } + case 170: break; + case 5: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); + } + case 171: break; + case 6: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); + } + case 172: break; + case 7: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); + } + case 173: break; + case 8: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); + } + case 174: break; + case 9: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); + } + case 175: break; + case 10: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); + } + case 176: break; + case 11: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); + } + case 177: break; + case 12: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); + } + case 178: break; + case 13: + { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong((yytext()))); + } + case 179: break; + case 14: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); + } + case 180: break; + case 15: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); + } + case 181: break; + case 16: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); + } + case 182: break; + case 17: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); + } + case 183: break; + case 18: + { string.setLength(0); + yybegin(STRING); + } + case 184: break; + case 19: + { string.setLength(0); + yybegin(CHARLITERAL); + } + case 185: break; + case 20: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); + } + case 186: break; + case 21: + { string.setLength(0); + yybegin(OIDENTIFIER); + } + case 187: break; + case 22: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); + } + case 188: break; + case 23: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); + } + case 189: break; + case 24: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); + } + case 190: break; + case 25: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); + } + case 191: break; + case 26: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); + } + case 192: break; + case 27: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); + } + case 193: break; + case 28: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); + } + case 194: break; + case 29: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); + } + case 195: break; + case 30: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); + } + case 196: break; + case 31: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); + } + case 197: break; + case 32: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); + } + case 198: break; + case 33: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); + } + case 199: break; + case 34: + { string.append(yytext()); + } + case 200: break; + case 35: + { yybegin(YYINITIAL); yyline++; + } + case 201: break; + case 36: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); + } + case 202: break; + case 37: + { yybegin(YYINITIAL); yyline++; + } + case 203: break; + case 38: + { string.append(yytext()); yyline++; + } + case 204: 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 205: 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 206: break; + case 41: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); + } + case 207: 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 208: break; + case 43: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); + } + case 209: break; + case 44: + { string.append(yytext()); yyline++; + } + case 210: 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 211: break; + case 46: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString()); + } + case 212: break; + case 47: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); + } + case 213: break; + case 48: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); + } + case 214: break; + case 49: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); + } + case 215: break; + case 50: + { return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); + } + case 216: break; + case 51: + { return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble((yytext()))); + } + case 217: break; + case 52: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); + } + case 218: break; + case 53: + { yybegin(XMLOPENTAG); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()); + } + case 219: break; + case 54: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); + } + case 220: break; + case 55: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); + } + case 221: break; + case 56: + { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); + } + case 222: break; + case 57: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); + } + case 223: break; + case 58: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); + } + case 224: break; + case 59: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); + } + case 225: break; + case 60: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); + } + case 226: break; + case 61: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); + } + case 227: break; + case 62: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); + } + case 228: break; + case 63: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); + } + case 229: break; + case 64: + { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext(), 8)); + } + case 230: break; + case 65: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); + } + case 231: break; + case 66: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); + } + case 232: break; + case 67: + { return new ParsedSymbol(SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1))); + } + case 233: break; + case 68: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); + } + case 234: break; + case 69: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); + } + case 235: break; + case 70: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); + } + case 236: break; + case 71: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); + } + case 237: break; + case 72: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); + } + case 238: break; + case 73: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); + } + case 239: break; + case 74: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); + } + case 240: break; + case 75: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); + } + case 241: break; + case 76: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); + } + case 242: break; + case 77: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); + } + case 243: break; + case 78: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); + } + case 244: break; + case 79: + { /* ignore illegal character escape */ + } + case 245: break; + case 80: + { string.append('\"'); + } + case 246: break; + case 81: + { string.append('\''); + } + case 247: break; + case 82: + { string.append('\f'); + } + case 248: break; + case 83: + { string.append('\\'); + } + case 249: break; + case 84: + { string.append('\b'); + } + case 250: break; + case 85: + { string.append('\r'); + } + case 251: break; + case 86: + { string.append('\n'); + } + case 252: break; + case 87: + { string.append('\t'); + } + case 253: break; + case 88: + { 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 254: break; + case 89: + { 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 255: break; + case 90: + { yybegin(XMLOPENTAG); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 256: break; + case 91: + { 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 257: break; + case 92: + { 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 258: break; + case 93: + { yybegin(XMLINSTROPENTAG); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 259: break; + case 94: + { 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 260: break; + case 95: + { 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 261: break; + case 96: + { throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 262: break; + case 97: + { string.append('\u00A7'); + } + case 263: break; + case 98: + { return new ParsedSymbol(SymbolGroup.REGEXP, SymbolType.REGEXP, yytext()); + } + case 264: break; + case 99: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); + } + case 265: break; + case 100: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); + } + case 266: break; + case 101: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); + } + case 267: break; + case 102: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); + } + case 268: break; + case 103: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); + } + case 269: break; + case 104: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); + } + case 270: break; + case 105: + { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext().substring(2), 16)); + } + case 271: break; + case 106: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); + } + case 272: break; + case 107: + { return new ParsedSymbol(SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2)); + } + case 273: break; + case 108: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext()); + } + case 274: break; + case 109: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); + } + case 275: break; + case 110: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); + } + case 276: break; + case 111: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); + } + case 277: break; + case 112: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); + } + case 278: break; + case 113: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext()); + } + case 279: break; + case 114: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); + } + case 280: break; + case 115: + { string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); + } + case 281: break; + case 116: + { string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); + } + case 282: break; + case 117: + { 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 283: break; + case 118: + { 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 284: break; + case 119: + { 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 285: break; + case 120: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); + } + case 286: break; + case 121: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext()); + } + case 287: break; + case 122: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); + } + case 288: break; + case 123: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); + } + case 289: break; + case 124: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); + } + case 290: break; + case 125: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); + } + case 291: break; + case 126: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); + } + case 292: break; + case 127: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); + } + case 293: break; + case 128: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); + } + case 294: break; + case 129: + { char val = (char) Integer.parseInt(yytext().substring(2), 16); + string.append(val); + } + case 295: break; + case 130: + { 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 296: break; + case 131: + { 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 297: break; + case 132: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); + } + case 298: break; + case 133: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext()); + } + case 299: break; + case 134: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); + } + case 300: break; + case 135: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); + } + case 301: break; + case 136: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); + } + case 302: break; + case 137: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); + } + case 303: break; + case 138: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); + } + case 304: break; + case 139: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); + } + case 305: break; + case 140: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); + } + case 306: break; + case 141: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); + } + case 307: break; + case 142: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext()); + } + case 308: break; + case 143: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); + } + case 309: break; + case 144: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext()); + } + case 310: break; + case 145: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); + } + case 311: break; + case 146: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); + } + case 312: break; + case 147: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); + } + case 313: break; + case 148: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); + } + case 314: break; + case 149: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); + } + case 315: break; + case 150: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); + } + case 316: break; + case 151: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); + } + case 317: break; + case 152: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext()); + } + case 318: break; + case 153: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); + } + case 319: break; + case 154: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); + } + case 320: break; + case 155: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); + } + case 321: break; + case 156: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); + } + case 322: break; + case 157: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext()); + } + case 323: break; + case 158: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); + } + case 324: break; + case 159: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); + } + case 325: break; + case 160: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext()); + } + case 326: break; + case 161: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); + } + case 327: break; + case 162: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); + } + case 328: break; + case 163: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); + } + case 329: break; + case 164: + { 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 330: break; + case 165: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); + } + case 331: break; + case 166: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); + } + case 332: 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/abc/avm2/parser/script/CallAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java index b9c215802..c7fac0d57 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java @@ -134,7 +134,7 @@ public class CallAVM2Item extends AVM2Item { } } - if (cname != null && AVM2SourceGenerator.searchPrototypeChain(otherNs, localData.privateNs, localData.protectedNs, true, g.abcIndex, pkgName, cname, prop.propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc) && (localData.getFullClass().equals(outNs.getVal().add(outName.getVal()).toRawString()))) { + if (cname != null && AVM2SourceGenerator.searchPrototypeChain(otherNs, localData.privateNs, localData.protectedNs, true, g.abcIndex, pkgName, cname, prop.propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc) && (localData.getFullClass().equals(outNs.getVal().addWithSuffix(outName.getVal()).toRawString()))) { NameAVM2Item nobj = new NameAVM2Item(new TypeItem(localData.getFullClass()), 0, "this", null, false, new ArrayList<>()); nobj.setRegNumber(0); obj = nobj; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java index 7a731466e..7573154ef 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java @@ -65,7 +65,7 @@ public class ConstructSomethingAVM2Item extends CallAVM2Item { if (resname instanceof TypeItem) { TypeItem prop = (TypeItem) resname; - if (localData.isStatic && localData.pkg.add(localData.currentClass).equals(prop.fullTypeName)) { + if (localData.isStatic && localData.pkg.addWithSuffix(localData.currentClass).equals(prop.fullTypeName)) { return toSourceMerge(localData, generator, new AVM2Instruction(0, AVM2Instructions.GetLocal0, new int[]{}), arguments, new AVM2Instruction(0, AVM2Instructions.Construct, new int[]{arguments.size()})); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespaceItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespaceItem.java index 67f19c014..c4f320a4c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespaceItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespaceItem.java @@ -49,7 +49,7 @@ public class NamespaceItem { } public NamespaceItem(String name, int kind) { - this.name = DottedChain.parse(name); + this.name = DottedChain.parseWithSuffix(name); this.kind = kind; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java index 0bbd9bd49..22755433a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java @@ -119,7 +119,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { } return new ApplyTypeAVM2Item(null, null, obj, params); } else { - return new TypeItem(m.getNameWithNamespace(constants)); + return new TypeItem(m.getNameWithNamespace(constants, true)); } } @@ -245,7 +245,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { } } if (AVM2SourceGenerator.searchPrototypeChain(otherNs, localData.privateNs, localData.protectedNs, false, abcIndex, ftn.getWithoutLast(), ftn.getLast(), propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc)) { - objType = new TypeItem(outNs.getVal().add(outName.getVal())); + objType = new TypeItem(outNs.getVal().addWithSuffix(outName.getVal())); propType = outPropType.getVal(); propIndex = constants.getMultinameId(Multiname.createQName(false, constants.getStringId(propertyName, true), @@ -260,7 +260,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { for (MethodBody b : callStack) { for (int i = 0; i < b.traits.traits.size(); i++) { Trait t = b.traits.traits.get(i); - if (t.getName(abc).getName(constants, null, true).equals(propertyName)) { + if (t.getName(abc).getName(constants, null, true, true).equals(propertyName)) { if (t instanceof TraitSlotConst) { TraitSlotConst tsc = (TraitSlotConst) t; objType = new TypeItem(DottedChain.FUNCTION); @@ -287,7 +287,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { int name_index = 0; for (int m = 1; m < constants.getMultinameCount(); m++) { Multiname mname = constants.getMultiname(m); - if (mname.kind == Multiname.QNAME && mname.getName(constants, null, true).equals(propertyName) && mname.namespace_index == nsindex) { + if (mname.kind == Multiname.QNAME && mname.getName(constants, null, true, true).equals(propertyName) && mname.namespace_index == nsindex) { name_index = m; break; } @@ -363,7 +363,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { } } if (AVM2SourceGenerator.searchPrototypeChain(otherns, localData.privateNs, localData.protectedNs, false, abcIndex, nsname, (((TypeItem) p.objType).fullTypeName.getLast()), propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc)) { - objType = new TypeItem(outNs.getVal().add(outName.getVal())); + objType = new TypeItem(outNs.getVal().addWithSuffix(outName.getVal())); propType = p.returnType; propIndex = constants.getMultinameId(Multiname.createQName(false, constants.getStringId(propertyName, true), @@ -683,7 +683,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { otherNs.add(n.getCpoolIndex(abcIndex)); } } - if (!localData.subMethod && cname != null && AVM2SourceGenerator.searchPrototypeChain(otherNs, localData.privateNs, localData.protectedNs, true, abcIndex, pkgName, cname, propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc) && (localData.getFullClass().equals(outNs.getVal().add(outName.getVal()).toRawString()))) { + if (!localData.subMethod && cname != null && AVM2SourceGenerator.searchPrototypeChain(otherNs, localData.privateNs, localData.protectedNs, true, abcIndex, pkgName, cname, propertyName, outName, outNs, outPropNs, outPropNsKind, outPropNsIndex, outPropType, outPropValue, outPropValueAbc) && (localData.getFullClass().equals(outNs.getVal().addWithSuffix(outName.getVal()).toRawString()))) { NameAVM2Item nobj = new NameAVM2Item(new TypeItem(localData.getFullClass()), 0, "this", null, false, openedNamespaces); nobj.setRegNumber(0); obj = nobj; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolGroup.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolGroup.java index 59afa0407..33391c0a9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolGroup.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolGroup.java @@ -35,5 +35,6 @@ public enum SymbolGroup { //GLOBALFUNC, GLOBALCONST, PREPROCESSOR, - REGEXP + REGEXP, + NAMESPACESUFFIX } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolType.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolType.java index ecb4281a3..0683fbe6d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolType.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolType.java @@ -207,7 +207,8 @@ public enum SymbolType { DESCENDANTS(GraphTargetItem.PRECEDENCE_PRIMARY, false), NATIVE, PREPROCESSOR(GraphTargetItem.PRECEDENCE_PRIMARY, false), - REGEXP(GraphTargetItem.PRECEDENCE_PRIMARY, false); + REGEXP(GraphTargetItem.PRECEDENCE_PRIMARY, false), + NAMESPACESUFFIX; private int precedence = GraphTargetItem.NOPRECEDENCE; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java index 83ee345a5..3c83c9879 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java @@ -123,7 +123,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { } */ public void appendName(String name) { - this.name = this.name.add(name); + this.name = this.name.addWithSuffix(name); } public void setDefinition(boolean definition) { @@ -354,7 +354,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { //Search for types in opened namespaces for (NamespaceItem n : openedNamespaces) { Namespace ons = abc.getSelectedAbc().constants.getNamespace(n.getCpoolIndex(abc)); - TypeItem ti = new TypeItem(ons.getName(abc.getSelectedAbc().constants).add(name.get(0))); + TypeItem ti = new TypeItem(ons.getName(abc.getSelectedAbc().constants).addWithSuffix(name.get(0))); AbcIndexing.ClassIndex ci = abc.findClass(ti); if (ci != null) { if (!subtypes.isEmpty() && name.size() > 1) { @@ -393,7 +393,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { if (ci == null) { ntype = new TypeItem("Object"); } else { - ntype = new TypeItem(ci.abc.instance_info.get(ci.index).getName(ci.abc.constants).getNameWithNamespace(ci.abc.constants)); + ntype = new TypeItem(ci.abc.instance_info.get(ci.index).getName(ci.abc.constants).getNameWithNamespace(ci.abc.constants, true)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ABCException.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ABCException.java index 4d83a14eb..5d21b1ecf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ABCException.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ABCException.java @@ -65,14 +65,14 @@ public class ABCException implements Serializable, Cloneable { if (name_index == 0) { return ""; } - return constants.getMultiname(name_index).getName(constants, fullyQualifiedNames, false); + return constants.getMultiname(name_index).getName(constants, fullyQualifiedNames, false, true); } public String getTypeName(AVM2ConstantPool constants, List fullyQualifiedNames) { if (type_index == 0) { return "*"; } - return constants.getMultiname(type_index).getName(constants, fullyQualifiedNames, false); + return constants.getMultiname(type_index).getName(constants, fullyQualifiedNames, false, true); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java index 4a637b1a5..7f151cf0e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java @@ -103,11 +103,11 @@ public class InstanceInfo { } writer.appendNoHilight(modifiers + objType); - writer.hilightSpecial(abc.constants.getMultiname(name_index).getName(abc.constants, null/* No full names here*/, false), HighlightSpecialType.CLASS_NAME); + writer.hilightSpecial(abc.constants.getMultiname(name_index).getName(abc.constants, null/* No full names here*/, false, true), HighlightSpecialType.CLASS_NAME); if (super_index > 0) { - String typeName = abc.constants.getMultiname(super_index).getNameWithNamespace(abc.constants).toRawString(); - String parentName = abc.constants.getMultiname(super_index).getName(abc.constants, fullyQualifiedNames, false); + String typeName = abc.constants.getMultiname(super_index).getNameWithNamespace(abc.constants, true).toRawString(); + String parentName = abc.constants.getMultiname(super_index).getName(abc.constants, fullyQualifiedNames, false, true); if (!parentName.equals("Object")) { writer.appendNoHilight(" extends "); writer.hilightSpecial(parentName, HighlightSpecialType.TYPE_NAME, typeName); @@ -123,8 +123,8 @@ public class InstanceInfo { if (i > 0) { writer.append(", "); } - String typeName = abc.constants.getMultiname(interfaces[i]).getNameWithNamespace(abc.constants).toRawString(); - writer.hilightSpecial(abc.constants.getMultiname(interfaces[i]).getName(abc.constants, fullyQualifiedNames, false), HighlightSpecialType.TYPE_NAME, typeName); + String typeName = abc.constants.getMultiname(interfaces[i]).getNameWithNamespace(abc.constants, true).toRawString(); + writer.hilightSpecial(abc.constants.getMultiname(interfaces[i]).getName(abc.constants, fullyQualifiedNames, false, true), HighlightSpecialType.TYPE_NAME, typeName); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java index 20f504f49..ef5c195ef 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java @@ -319,7 +319,7 @@ public class MethodInfo { } DottedChain ptype = DottedChain.ALL; if (param_types[i] > 0) { - ptype = constants.getMultiname(param_types[i]).getNameWithNamespace(constants); + ptype = constants.getMultiname(param_types[i]).getNameWithNamespace(constants, true); } HighlightData pdata = new HighlightData(); @@ -340,7 +340,7 @@ public class MethodInfo { if (param_types[i] == 0) { writer.hilightSpecial("*", HighlightSpecialType.PARAM, i); } else { - writer.hilightSpecial(constants.getMultiname(param_types[i]).getName(constants, fullyQualifiedNames, false), HighlightSpecialType.PARAM, i); + writer.hilightSpecial(constants.getMultiname(param_types[i]).getName(constants, fullyQualifiedNames, false, true), HighlightSpecialType.PARAM, i); } if (optional != null) { if (i >= param_types.length - optional.length) { @@ -381,7 +381,7 @@ public class MethodInfo { if (multiname.kind != Multiname.TYPENAME && multiname.name_index > 0 && constants.getString(multiname.name_index).equals("void")) { rname = "void"; } else { - rname = multiname.getName(constants, fullyQualifiedNames, false); + rname = multiname.getName(constants, fullyQualifiedNames, false, true); } } return writer.hilightSpecial(rname, HighlightSpecialType.RETURNS); @@ -394,7 +394,7 @@ public class MethodInfo { if (multiname.kind != Multiname.TYPENAME && multiname.name_index > 0 && constants.getString(multiname.name_index).equals("void")) { rname = "void"; } else { - rname = multiname.getName(constants, fullyQualifiedNames, false); + rname = multiname.getName(constants, fullyQualifiedNames, false, true); } } return rname; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java index b1f4c7efc..dfece77d6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java @@ -73,6 +73,20 @@ public class Multiname { @Internal public boolean deleted; + @Internal + private boolean displayNamespace = false; + + public String getNamespaceSuffix() { + if (displayNamespace) { + return "#" + namespace_index; + } + return ""; + } + + public void setDisplayNamespace(boolean displayNamespace) { + this.displayNamespace = displayNamespace; + } + private boolean validType() { boolean cnt = false; for (int i = 0; i < multinameKinds.length; i++) { @@ -103,6 +117,18 @@ public class Multiname { } } + public boolean hasOwnName() { + return kind == QNAME || kind == QNAMEA || kind == RTQNAME || kind == RTQNAMEA || kind == MULTINAME || kind == MULTINAMEA; + } + + public boolean hasOwnNamespace() { + return kind == QNAME || kind == QNAMEA; + } + + public boolean hasOwnNamespaceSet() { + return kind == MULTINAME || kind == MULTINAMEA || kind == MULTINAMEL || kind == MULTINAMELA; + } + public static Multiname createQName(boolean attribute, int name_index, int namespace_index) { return new Multiname(attribute ? QNAMEA : QNAME, name_index, namespace_index, 0, 0, null); } @@ -300,12 +326,12 @@ public class Multiname { return null; } - private String typeNameToStr(AVM2ConstantPool constants, List fullyQualifiedNames, boolean raw) { + private String typeNameToStr(AVM2ConstantPool constants, List fullyQualifiedNames, boolean dontDeobfuscate, boolean withSuffix) { if (constants.getMultiname(qname_index).name_index == name_index) { return "ambiguousTypeName"; } StringBuilder typeNameStr = new StringBuilder(); - typeNameStr.append(constants.getMultiname(qname_index).getName(constants, fullyQualifiedNames, raw)); + typeNameStr.append(constants.getMultiname(qname_index).getName(constants, fullyQualifiedNames, dontDeobfuscate, withSuffix)); if (params != null && params.length > 0) { typeNameStr.append(".<"); for (int i = 0; i < params.length; i++) { @@ -316,7 +342,7 @@ public class Multiname { if (param == 0) { typeNameStr.append("*"); } else { - typeNameStr.append(constants.getMultiname(param).getName(constants, fullyQualifiedNames, raw)); + typeNameStr.append(constants.getMultiname(param).getName(constants, fullyQualifiedNames, dontDeobfuscate, withSuffix)); } } typeNameStr.append(">"); @@ -324,9 +350,9 @@ public class Multiname { return typeNameStr.toString(); } - public String getName(AVM2ConstantPool constants, List fullyQualifiedNames, boolean raw) { + public String getName(AVM2ConstantPool constants, List fullyQualifiedNames, boolean dontDeobfuscate, boolean withSuffix) { if (kind == TYPENAME) { - return typeNameToStr(constants, fullyQualifiedNames, raw); + return typeNameToStr(constants, fullyQualifiedNames, dontDeobfuscate, withSuffix); } if (name_index == -1) { return ""; @@ -335,15 +361,15 @@ public class Multiname { return isAttribute() ? "@*" : "*"; } else { String name = constants.getString(name_index); - if (fullyQualifiedNames != null && fullyQualifiedNames.contains(DottedChain.parse(name))) { - DottedChain dc = getNameWithNamespace(constants); - return raw ? dc.toRawString() : dc.toPrintableString(true); + if (fullyQualifiedNames != null && fullyQualifiedNames.contains(DottedChain.parseWithSuffix(name))) { + DottedChain dc = getNameWithNamespace(constants, withSuffix); + return dontDeobfuscate ? dc.toRawString() : dc.toPrintableString(true); } - return (isAttribute() ? "@" : "") + (raw ? name : IdentifiersDeobfuscation.printIdentifier(true, name)); + return (isAttribute() ? "@" : "") + (dontDeobfuscate ? name : IdentifiersDeobfuscation.printIdentifier(true, name)) + (withSuffix ? getNamespaceSuffix() : ""); } } - public DottedChain getNameWithNamespace(AVM2ConstantPool constants) { + public DottedChain getNameWithNamespace(AVM2ConstantPool constants, boolean withSuffix) { Namespace ns = getNamespace(constants); if (ns == null) { NamespaceSet nss = getNamespaceSet(constants); @@ -353,11 +379,11 @@ public class Multiname { } } } - String name = getName(constants, null, true); + String name = getName(constants, null, false, false); if (ns != null) { - return ns.getName(constants).add(name); + return ns.getName(constants).add(name, withSuffix ? getNamespaceSuffix() : ""); } - return new DottedChain(name); + return new DottedChain(new String[]{name}, withSuffix ? getNamespaceSuffix() : ""); } public Namespace getNamespace(AVM2ConstantPool constants) { @@ -481,7 +507,7 @@ public class Multiname { return false; } - if (!Objects.equals(other.getName(otherCpool, new ArrayList<>(), true), getName(thisCpool, new ArrayList<>(), true))) { + if (!Objects.equals(other.getName(otherCpool, new ArrayList<>(), true, true), getName(thisCpool, new ArrayList<>(), true, true))) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java index 7bacebf5d..0f06dd6d8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java @@ -78,7 +78,8 @@ public class ScriptInfo { if ((ns.kind == Namespace.KIND_PACKAGE_INTERNAL) || (ns.kind == Namespace.KIND_PACKAGE)) { DottedChain packageName = ns.getName(abc.constants); // assume not null package - String objectName = name.getName(abc.constants, null, true); + String objectName = name.getName(abc.constants, null, true, false); + String namespaceSuffix = name.getNamespaceSuffix(); List traitIndices = new ArrayList<>(); traitIndices.add(j); @@ -88,7 +89,7 @@ public class ScriptInfo { } if (packagePrefix == null || packageName.toPrintableString(true).startsWith(packagePrefix)) { - ClassPath cp = new ClassPath(packageName, objectName); + ClassPath cp = new ClassPath(packageName, objectName, namespaceSuffix); ret.add(new ScriptPack(cp, abc, allAbcs, scriptIndex, traitIndices)); } } @@ -96,6 +97,24 @@ public class ScriptInfo { if (ret.size() == 1) { ret.get(0).isSimple = true; } + if (ret.isEmpty() && !otherTraits.isEmpty()) { //no public/package internal traits to determine common pack name + //make each trait separate pack + for (int traitIndex : otherTraits) { + Trait t = traits.traits.get(traitIndex); + Multiname name = t.getName(abc); + Namespace ns = name.getNamespace(abc.constants); + + DottedChain packageName = ns.getName(abc.constants); + String objectName = name.getName(abc.constants, null, true, false); + String namespaceSuffix = name.getNamespaceSuffix(); + + List traitIndices = new ArrayList<>(); + + traitIndices.add(traitIndex); + ClassPath cp = new ClassPath(packageName, objectName, namespaceSuffix); + ret.add(new ScriptPack(cp, abc, allAbcs, scriptIndex, traitIndices)); + } + } return ret; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java index 0406b3c87..93b5d6876 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java @@ -118,11 +118,11 @@ public abstract class Trait implements Cloneable, Serializable { public var attr2; */ if (parent instanceof TraitClass) { - String thisName = getName(abc).getName(abc.constants, new ArrayList<>(), true); + String thisName = getName(abc).getName(abc.constants, new ArrayList<>(), true, true); List classTraits = abc.class_info.get(((TraitClass) parent).class_info).static_traits.traits; for (Trait t : classTraits) { if (t.kindType == Trait.TRAIT_SLOT) { - if ("_skinParts".equals(t.getName(abc).getName(abc.constants, new ArrayList<>(), true))) { + if ("_skinParts".equals(t.getName(abc).getName(abc.constants, new ArrayList<>(), true, true))) { if (t.getName(abc).getNamespace(abc.constants).kind == Namespace.KIND_PRIVATE) { if (convertData.assignedValues.containsKey(t)) { if (convertData.assignedValues.get(t).value instanceof NewObjectAVM2Item) { @@ -233,7 +233,7 @@ public abstract class Trait implements Cloneable, Serializable { if (importnames.contains(name)) { imports.remove(i); i--; - fullyQualifiedNames.add(new DottedChain(name)); + fullyQualifiedNames.add(DottedChain.parseWithSuffix(name)); } else { importnames.add(name); } @@ -246,7 +246,7 @@ public abstract class Trait implements Cloneable, Serializable { if (name.equals("*")) { continue; } - DottedChain dAll = pkg.add("*"); + DottedChain dAll = pkg.addWithSuffix("*"); if (imports.contains(dAll)) { imports.remove(i); i--; @@ -491,8 +491,9 @@ public abstract class Trait implements Cloneable, Serializable { Multiname name = getName(abc); Namespace ns = name.getNamespace(abc.constants); DottedChain packageName = ns == null ? DottedChain.EMPTY : ns.getName(abc.constants); - String objectName = name.getName(abc.constants, null, true); - return new ClassPath(packageName, objectName); //assume not null name + String objectName = name.getName(abc.constants, null, true, false); + String namespaceSuffix = name.getNamespaceSuffix(); + return new ClassPath(packageName, objectName, namespaceSuffix); //assume not null name } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java index 1dfcd5649..5d9afa2bb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java @@ -114,7 +114,7 @@ public class TraitClass extends Trait implements TraitWithSlot { fullyQualifiedNames = new ArrayList<>(); writeImportsUsages(abc, writer, packageName, fullyQualifiedNames); - String instanceInfoName = instanceInfoMultiname.getName(abc.constants, fullyQualifiedNames, false); + String instanceInfoName = instanceInfoMultiname.getName(abc.constants, fullyQualifiedNames, false, true); writer.startClass(class_info); @@ -175,7 +175,7 @@ public class TraitClass extends Trait implements TraitWithSlot { writer.startMethod(instanceInfo.iinit_index); writer.appendNoHilight(modifier); writer.appendNoHilight("function "); - writer.appendNoHilight(m.getName(abc.constants, null/*do not want full names here*/, false)); + writer.appendNoHilight(m.getName(abc.constants, null/*do not want full names here*/, false, true)); writer.appendNoHilight("("); bodyIndex = abc.findBodyIndex(instanceInfo.iinit_index); MethodBody body = bodyIndex == -1 ? null : abc.bodies.get(bodyIndex); @@ -210,12 +210,12 @@ public class TraitClass extends Trait implements TraitWithSlot { fullyQualifiedNames = new ArrayList<>(); InstanceInfo instanceInfo = abc.instance_info.get(class_info); - String instanceInfoName = instanceInfo.getName(abc.constants).getName(abc.constants, fullyQualifiedNames, false); + String instanceInfoName = instanceInfo.getName(abc.constants).getName(abc.constants, fullyQualifiedNames, false, true); ClassInfo classInfo = abc.class_info.get(class_info); AbcIndexing index = new AbcIndexing(abc.getSwf()); //for simplification of String(this) - convertData.thisHasDefaultToPrimitive = null == index.findProperty(new AbcIndexing.PropertyDef("toString", new TypeItem(instanceInfo.getName(abc.constants).getNameWithNamespace(abc.constants)), abc, abc.constants.getNamespaceId(Namespace.KIND_PACKAGE, DottedChain.TOPLEVEL, abc.constants.getStringId("", true), true)), false, true); + convertData.thisHasDefaultToPrimitive = null == index.findProperty(new AbcIndexing.PropertyDef("toString", new TypeItem(instanceInfo.getName(abc.constants).getNameWithNamespace(abc.constants, true)), abc, abc.constants.getNamespaceId(Namespace.KIND_PACKAGE, DottedChain.TOPLEVEL, abc.constants.getStringId("", true), true)), false, true); //class initializer int bodyIndex = abc.findBodyIndex(classInfo.cinit_index); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java index 41b0b73f4..dcb80e1e1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java @@ -65,7 +65,7 @@ public class TraitFunction extends Trait implements TraitWithSlot { } getModifiers(abc, isStatic, writer); writer.hilightSpecial("function ", HighlightSpecialType.TRAIT_TYPE); - writer.hilightSpecial(abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false), HighlightSpecialType.TRAIT_NAME); + writer.hilightSpecial(abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false, true), HighlightSpecialType.TRAIT_NAME); writer.appendNoHilight("("); abc.method_info.get(method_info).getParamStr(writer, abc.constants, body, abc, fullyQualifiedNames); writer.appendNoHilight(") : "); @@ -87,7 +87,7 @@ public class TraitFunction extends Trait implements TraitWithSlot { writer.startBlock(); int bodyIndex = abc.findBodyIndex(method_info); if (bodyIndex != -1) { - abc.bodies.get(bodyIndex).toString(path + "." + abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false), exportMode, abc, this, writer, fullyQualifiedNames); + abc.bodies.get(bodyIndex).toString(path + "." + abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false, true), exportMode, abc, this, writer, fullyQualifiedNames); } writer.endBlock(); @@ -104,7 +104,7 @@ public class TraitFunction extends Trait implements TraitWithSlot { convertHeader(parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel); int bodyIndex = abc.findBodyIndex(method_info); if (bodyIndex != -1) { - abc.bodies.get(bodyIndex).convert(convertData, path + "." + abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false), exportMode, isStatic, method_info, scriptIndex, classIndex, abc, this, new ScopeStack(), 0, writer, fullyQualifiedNames, null, true); + abc.bodies.get(bodyIndex).convert(convertData, path + "." + abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false, true), exportMode, isStatic, method_info, scriptIndex, classIndex, abc, this, new ScopeStack(), 0, writer, fullyQualifiedNames, null, true); } writer.endMethod(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java index 7a1565329..64d139ffe 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java @@ -95,7 +95,7 @@ public class TraitMethodGetterSetter extends Trait { getModifiers(abc, isStatic, writer); writer.hilightSpecial("function " + addKind, HighlightSpecialType.TRAIT_TYPE); - writer.hilightSpecial(getName(abc).getName(abc.constants, fullyQualifiedNames, false), HighlightSpecialType.TRAIT_NAME); + writer.hilightSpecial(getName(abc).getName(abc.constants, fullyQualifiedNames, false, true), HighlightSpecialType.TRAIT_NAME); writer.appendNoHilight("("); abc.method_info.get(method_info).getParamStr(writer, abc.constants, body, abc, fullyQualifiedNames); writer.appendNoHilight(") : "); @@ -109,7 +109,7 @@ public class TraitMethodGetterSetter extends Trait { writeImportsUsages(abc, writer, getPackage(abc), fullyQualifiedNames); } writer.startMethod(method_info); - path = path + "." + getName(abc).getName(abc.constants, fullyQualifiedNames, false); + path = path + "." + getName(abc).getName(abc.constants, fullyQualifiedNames, false, true); convertHeader(parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel); int bodyIndex = abc.findBodyIndex(method_info); if (exportMode != ScriptExportMode.AS_METHOD_STUBS) { @@ -130,7 +130,7 @@ public class TraitMethodGetterSetter extends Trait { } getMetaData(parent, convertData, abc, writer); writer.startMethod(method_info); - path = path + "." + getName(abc).getName(abc.constants, fullyQualifiedNames, false); + path = path + "." + getName(abc).getName(abc.constants, fullyQualifiedNames, false, true); toStringHeader(parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel); int bodyIndex = abc.findBodyIndex(method_info); if (classIndex != -1 && abc.instance_info.get(classIndex).isInterface() || bodyIndex == -1) { @@ -190,10 +190,10 @@ public class TraitMethodGetterSetter extends Trait { @Override public boolean isVisible(boolean isStatic, ABC abc) { if (Configuration.handleSkinPartsAutomatically.get()) { - if ("skinParts".equals(getName(abc).getName(abc.constants, new ArrayList<>(), true))) { + if ("skinParts".equals(getName(abc).getName(abc.constants, new ArrayList<>(), true, true))) { if (kindType == TRAIT_GETTER) { MethodInfo mi = abc.method_info.get(method_info); - if (mi.param_types.length == 0 && "Object".equals(abc.constants.getMultiname(mi.ret_type).getNameWithNamespace(abc.constants).toRawString())) { + if (mi.param_types.length == 0 && "Object".equals(abc.constants.getMultiname(mi.ret_type).getNameWithNamespace(abc.constants, true).toRawString())) { if (abc.constants.getNamespace(abc.constants.getMultiname(name_index).namespace_index).kind == Namespace.KIND_PROTECTED) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java index 0da163cc9..6e401f904 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java @@ -76,7 +76,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { public String getType(AVM2ConstantPool constants, List fullyQualifiedNames) { String typeStr = "*"; if (type_index > 0) { - typeStr = constants.getMultiname(type_index).getName(constants, fullyQualifiedNames, false); + typeStr = constants.getMultiname(type_index).getName(constants, fullyQualifiedNames, false, true); } return typeStr; } @@ -101,7 +101,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { slotconst = "namespace"; } writer.hilightSpecial(slotconst + " ", HighlightSpecialType.TRAIT_TYPE); - writer.hilightSpecial(getName(abc).getName(abc.constants, fullyQualifiedNames, false), HighlightSpecialType.TRAIT_NAME); + writer.hilightSpecial(getName(abc).getName(abc.constants, fullyQualifiedNames, false, true), HighlightSpecialType.TRAIT_NAME); writer.hilightSpecial(typeStr, HighlightSpecialType.TRAIT_TYPE_NAME); return writer; } @@ -216,9 +216,9 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { Hide: private static var _skinParts (part of [SkinPart] compilations) */ - if (isStatic && "_skinParts".equals(getName(abc).getName(abc.constants, new ArrayList<>(), true))) { + if (isStatic && "_skinParts".equals(getName(abc).getName(abc.constants, new ArrayList<>(), true, true))) { if (kindType == Trait.TRAIT_SLOT) { - if ("_skinParts".equals(getName(abc).getName(abc.constants, new ArrayList<>(), true))) { + if ("_skinParts".equals(getName(abc).getName(abc.constants, new ArrayList<>(), true, true))) { if (getName(abc).getNamespace(abc.constants).kind == Namespace.KIND_PRIVATE) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameInTraitMultinameUsage.java similarity index 57% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsage.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameInTraitMultinameUsage.java index c0492692f..3a70f81c6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameInTraitMultinameUsage.java @@ -22,28 +22,36 @@ import com.jpexs.decompiler.flash.abc.ABC; * * @author JPEXS */ -public abstract class InsideClassMultinameUsage extends MultinameUsage { +public class ClassNameInTraitMultinameUsage extends MultinameUsage implements DefinitionUsage, InsideClassMultinameUsageInterface { - public int multinameIndex; + private int classIndex; - public int classIndex; - - public InsideClassMultinameUsage(ABC abc, int multinameIndex, int classIndex) { - super(abc); - this.multinameIndex = multinameIndex; + public ClassNameInTraitMultinameUsage(ABC abc, int multinameIndex, int classIndex) { + super(abc, multinameIndex); this.classIndex = classIndex; } @Override - public String toString() { - return "class " + abc.constants.getMultiname(abc.instance_info.get(classIndex).name_index).getNameWithNamespace(abc.constants).toPrintableString(true); - } - - public int getMultinameIndex() { - return multinameIndex; - } - public int getClassIndex() { return classIndex; } + + @Override + public String toString() { + return "class " + abc.constants.getMultiname(abc.instance_info.get(classIndex).name_index).getNameWithNamespace(abc.constants, true).toPrintableString(true) + " trait name"; + } + + @Override + public boolean collides(MultinameUsage other) { + if (other instanceof InsideClassMultinameUsageInterface) { + if (((InsideClassMultinameUsageInterface) other).getClassIndex() == getClassIndex()) { + return false; + } + } + if ((other instanceof ClassNameInTraitMultinameUsage) || (other instanceof ClassNameMultinameUsage)) { + return sameMultinameName(other); + } + return false; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameMultinameUsage.java index ec43cadf6..1a0af3da6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ClassNameMultinameUsage.java @@ -22,14 +22,36 @@ import com.jpexs.decompiler.flash.abc.ABC; * * @author JPEXS */ -public class ClassNameMultinameUsage extends InsideClassMultinameUsage implements DefinitionUsage { +public class ClassNameMultinameUsage extends MultinameUsage implements DefinitionUsage, InsideClassMultinameUsageInterface { + + private int classIndex; public ClassNameMultinameUsage(ABC abc, int multinameIndex, int classIndex) { - super(abc, multinameIndex, classIndex); + super(abc, multinameIndex); + this.classIndex = classIndex; + } + + @Override + public int getClassIndex() { + return classIndex; } @Override public String toString() { - return "class " + abc.constants.getMultiname(abc.instance_info.get(classIndex).name_index).getNameWithNamespace(abc.constants).toPrintableString(true); + return "class " + abc.constants.getMultiname(abc.instance_info.get(classIndex).name_index).getNameWithNamespace(abc.constants, true).toPrintableString(true); } + + @Override + public boolean collides(MultinameUsage other) { + if (other instanceof InsideClassMultinameUsageInterface) { + if (((InsideClassMultinameUsageInterface) other).getClassIndex() == getClassIndex()) { + return false; + } + } + if ((other instanceof ClassNameInTraitMultinameUsage) || (other instanceof ClassNameMultinameUsage)) { + return sameMultinameName(other); + } + return false; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarMultinameUsage.java index b771ad7bc..21a833f37 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarMultinameUsage.java @@ -33,8 +33,8 @@ import java.util.ArrayList; */ public abstract class ConstVarMultinameUsage extends TraitMultinameUsage { - public ConstVarMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex, traitIndex, isStatic, traits, parentTraitIndex); + public ConstVarMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, traits, parentTraitIndex); } @Override @@ -42,14 +42,14 @@ public abstract class ConstVarMultinameUsage extends TraitMultinameUsage { NulWriter nulWriter = new NulWriter(); ConvertData convertData = new ConvertData(); if (parentTraitIndex > -1) { - if (isStatic) { - ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); - } else { - ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + if (traitsType == TRAITS_TYPE_CLASS) { + ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + } else if (traitsType == TRAITS_TYPE_INSTANCE) { + ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } } try { - ((TraitSlotConst) traits.traits.get(traitIndex)).convertHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitSlotConst) traits.traits.get(traitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS /*?? FIXME*/, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } catch (InterruptedException ex) { // ignore } @@ -57,18 +57,18 @@ public abstract class ConstVarMultinameUsage extends TraitMultinameUsage { HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); writer.appendNoHilight(super.toString() + " "); if (parentTraitIndex > -1) { - if (isStatic) { - ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); - } else { - ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); + if (traitsType == TRAITS_TYPE_CLASS) { + ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); + } else if (traitsType == TRAITS_TYPE_INSTANCE) { + ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); } } try { - ((TraitSlotConst) traits.traits.get(traitIndex)).toStringHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); + ((TraitSlotConst) traits.traits.get(traitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); } catch (InterruptedException ex) { // ignore } - return writer.toString(); + return writer.toString().trim(); } public int getTraitIndex() { @@ -76,6 +76,6 @@ public abstract class ConstVarMultinameUsage extends TraitMultinameUsage { } public boolean isStatic() { - return isStatic; + return traitsType == TRAITS_TYPE_CLASS; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarNameMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarNameMultinameUsage.java index 14d4d0b33..2846aef51 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarNameMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarNameMultinameUsage.java @@ -25,12 +25,26 @@ import com.jpexs.decompiler.flash.abc.types.traits.Traits; */ public class ConstVarNameMultinameUsage extends ConstVarMultinameUsage implements DefinitionUsage { - public ConstVarNameMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex, traitIndex, isStatic, traits, parentTraitIndex); + public ConstVarNameMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, traits, parentTraitIndex); } @Override public String toString() { return super.toString() + " name"; } + + @Override + public boolean collides(MultinameUsage other) { + if ((other instanceof ConstVarNameMultinameUsage) || (other instanceof MethodNameMultinameUsage)) { + TraitMultinameUsage otherTrait = (TraitMultinameUsage) other; + if (otherTrait.classIndex == classIndex && otherTrait.traitsType == traitsType && otherTrait.parentTraitIndex == parentTraitIndex) { + if (other.sameMultinameName(this)) { + return true; + } + } + } + return false; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarTypeMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarTypeMultinameUsage.java index 4c3c9022a..dc582f2eb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarTypeMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ConstVarTypeMultinameUsage.java @@ -25,12 +25,18 @@ import com.jpexs.decompiler.flash.abc.types.traits.Traits; */ public class ConstVarTypeMultinameUsage extends ConstVarMultinameUsage { - public ConstVarTypeMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex, traitIndex, isStatic, traits, parentTraitIndex); + public ConstVarTypeMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, traits, parentTraitIndex); } @Override public String toString() { return super.toString() + " type"; } + + @Override + public boolean collides(MultinameUsage other) { + return false; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ExtendsMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ExtendsMultinameUsage.java index 9dd1a9c48..a70215f3b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ExtendsMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ExtendsMultinameUsage.java @@ -22,14 +22,28 @@ import com.jpexs.decompiler.flash.abc.ABC; * * @author JPEXS */ -public class ExtendsMultinameUsage extends InsideClassMultinameUsage { +public class ExtendsMultinameUsage extends MultinameUsage implements InsideClassMultinameUsageInterface { + + private int classIndex; public ExtendsMultinameUsage(ABC abc, int multinameIndex, int classIndex) { - super(abc, multinameIndex, classIndex); + super(abc, multinameIndex); + this.classIndex = classIndex; + } + + @Override + public int getClassIndex() { + return classIndex; } @Override public String toString() { return super.toString() + " extends"; } + + @Override + public boolean collides(MultinameUsage other) { + return false; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ImplementsMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ImplementsMultinameUsage.java index efe218b2a..c3a2a3420 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ImplementsMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/ImplementsMultinameUsage.java @@ -22,14 +22,28 @@ import com.jpexs.decompiler.flash.abc.ABC; * * @author JPEXS */ -public class ImplementsMultinameUsage extends InsideClassMultinameUsage { +public class ImplementsMultinameUsage extends MultinameUsage implements InsideClassMultinameUsageInterface { + + private int classIndex; public ImplementsMultinameUsage(ABC abc, int multinameIndex, int classIndex) { - super(abc, multinameIndex, classIndex); + super(abc, multinameIndex); + this.classIndex = classIndex; + } + + @Override + public int getClassIndex() { + return classIndex; } @Override public String toString() { return super.toString() + " implements"; } + + @Override + public boolean collides(MultinameUsage other) { + return false; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsageInterface.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsageInterface.java new file mode 100644 index 000000000..4fd38809d --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsageInterface.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.abc.usages; + +import com.jpexs.decompiler.flash.abc.ABC; + +/** + * + * @author JPEXS + */ +public interface InsideClassMultinameUsageInterface { + + public int getClassIndex(); + + public ABC getAbc(); +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodBodyMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodBodyMultinameUsage.java index 1a638a259..471f6e3f0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodBodyMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodBodyMultinameUsage.java @@ -25,12 +25,18 @@ import com.jpexs.decompiler.flash.abc.types.traits.Traits; */ public class MethodBodyMultinameUsage extends MethodMultinameUsage { - public MethodBodyMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, boolean isInitializer, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex, traitIndex, isStatic, isInitializer, traits, parentTraitIndex); + public MethodBodyMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex); } @Override public String toString() { return super.toString() + " body"; } + + @Override + public boolean collides(MultinameUsage other) { + return false; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodMultinameUsage.java index c3c109f3d..66df54fdf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodMultinameUsage.java @@ -34,8 +34,8 @@ public abstract class MethodMultinameUsage extends TraitMultinameUsage { public boolean isInitializer; - public MethodMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, boolean isInitializer, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex, traitIndex, isStatic, traits, parentTraitIndex); + public MethodMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, traits, parentTraitIndex); this.isInitializer = isInitializer; } @@ -49,36 +49,44 @@ public abstract class MethodMultinameUsage extends TraitMultinameUsage { ConvertData convertData = new ConvertData(); if (!isInitializer) { if (parentTraitIndex > -1) { - if (isStatic) { - ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + if (traitsType == TRAITS_TYPE_CLASS) { + ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } else { - ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } } - ((TraitMethodGetterSetter) traits.traits.get(traitIndex)).convertHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitMethodGetterSetter) traits.traits.get(traitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); writer.appendNoHilight(super.toString()); writer.appendNoHilight(" "); if (isInitializer) { - if (isStatic) { - writer.appendNoHilight("class initializer"); - } else { - writer.appendNoHilight("instance initializer"); + switch (traitsType) { + case TRAITS_TYPE_CLASS: + writer.appendNoHilight("class initializer"); + break; + case TRAITS_TYPE_INSTANCE: + writer.appendNoHilight("instance initializer"); + break; + case TRAITS_TYPE_SCRIPT: + writer.appendNoHilight("script initializer"); + break; + default: + break; } } else { if (parentTraitIndex > -1) { - if (isStatic) { - ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); + if (traitsType == TRAITS_TYPE_CLASS) { + ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); } else { - ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); + ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); } writer.appendNoHilight(" "); } - ((TraitMethodGetterSetter) traits.traits.get(traitIndex)).toStringHeader(null, convertData, "", abc, isStatic, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); + ((TraitMethodGetterSetter) traits.traits.get(traitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false); } - return writer.toString(); + return writer.toString().trim(); } public int getTraitIndex() { @@ -86,6 +94,6 @@ public abstract class MethodMultinameUsage extends TraitMultinameUsage { } public boolean isStatic() { - return isStatic; + return traitsType == TRAITS_TYPE_CLASS; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodNameMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodNameMultinameUsage.java index b59bf2c78..a678336c2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodNameMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodNameMultinameUsage.java @@ -25,12 +25,25 @@ import com.jpexs.decompiler.flash.abc.types.traits.Traits; */ public class MethodNameMultinameUsage extends MethodMultinameUsage implements DefinitionUsage { - public MethodNameMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, boolean isInitializer, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex, traitIndex, isStatic, isInitializer, traits, parentTraitIndex); + public MethodNameMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex); } @Override public String toString() { return super.toString() + " name"; } + + @Override + public boolean collides(MultinameUsage other) { + if ((other instanceof MethodNameMultinameUsage) || (other instanceof ConstVarNameMultinameUsage)) { + TraitMultinameUsage otherTrait = (TraitMultinameUsage) other; + if (otherTrait.classIndex == classIndex && otherTrait.traitsType == traitsType && otherTrait.parentTraitIndex == parentTraitIndex) { + if (other.sameMultinameName(this)) { + return true; + } + } + } + return false; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodParamsMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodParamsMultinameUsage.java index 40b58a3e2..3f6ea919a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodParamsMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodParamsMultinameUsage.java @@ -25,8 +25,8 @@ import com.jpexs.decompiler.flash.abc.types.traits.Traits; */ public class MethodParamsMultinameUsage extends MethodMultinameUsage { - public MethodParamsMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, boolean isInitializer, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex, traitIndex, isStatic, isInitializer, traits, parentTraitIndex); + public MethodParamsMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodReturnTypeMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodReturnTypeMultinameUsage.java index 0b73e67fb..3e67f722e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodReturnTypeMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MethodReturnTypeMultinameUsage.java @@ -25,8 +25,8 @@ import com.jpexs.decompiler.flash.abc.types.traits.Traits; */ public class MethodReturnTypeMultinameUsage extends MethodMultinameUsage { - public MethodReturnTypeMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, boolean isInitializer, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex, traitIndex, isStatic, isInitializer, traits, parentTraitIndex); + public MethodReturnTypeMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex, scriptIndex, classIndex, traitIndex, traitsType, isInitializer, traits, parentTraitIndex); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsage.java index d48e440be..ae6b0000b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsage.java @@ -17,6 +17,10 @@ package com.jpexs.decompiler.flash.abc.usages; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.Namespace; +import java.util.ArrayList; +import java.util.Objects; /** * @@ -25,8 +29,61 @@ import com.jpexs.decompiler.flash.abc.ABC; public abstract class MultinameUsage { public ABC abc; + public int multinameIndex; - public MultinameUsage(ABC abc) { + public MultinameUsage(ABC abc, int multinameIndex) { this.abc = abc; + this.multinameIndex = multinameIndex; } + + public int getMultinameIndex() { + return multinameIndex; + } + + public ABC getAbc() { + return abc; + } + + protected boolean sameMultinameName(MultinameUsage other) { + Multiname thisM = abc.constants.getMultiname(multinameIndex); + Multiname otherM = other.abc.constants.getMultiname(other.multinameIndex); + if (thisM == null && otherM == null) { + return false; + } + if (thisM == null || otherM == null) { + return false; + } + if ((thisM.kind == Multiname.QNAME || thisM.kind == Multiname.QNAMEA) && otherM.kind == thisM.kind) { + String thisName = thisM.getName(abc.constants, new ArrayList<>(), true, true); + String otherName = otherM.getName(other.abc.constants, new ArrayList<>(), true, true); + Namespace thisNs = thisM.getNamespace(abc.constants); + Namespace otherNs = otherM.getNamespace(other.abc.constants); + if (!Objects.equals(thisName, otherName)) { + return false; + } + + //Both are custom namespaced + if (thisNs.kind == Namespace.KIND_NAMESPACE && otherNs.kind == Namespace.KIND_NAMESPACE) { + //compare those custom + return Objects.equals(thisNs.getName(abc.constants), otherNs.getName(other.abc.constants)); + } + //One is custom namespaced, other cannot be the same + if (thisNs.kind == Namespace.KIND_NAMESPACE || otherNs.kind == Namespace.KIND_NAMESPACE) { + return false; + } + + //public or package internal are colliding when have same package ns + if ((thisNs.kind == Namespace.KIND_PACKAGE || thisNs.kind == Namespace.KIND_PACKAGE_INTERNAL) + && (otherNs.kind == Namespace.KIND_PACKAGE || otherNs.kind == Namespace.KIND_PACKAGE_INTERNAL)) { + return Objects.equals(thisNs.getName(abc.constants), otherNs.getName(other.abc.constants)); + } + + //one of them is private/protected + return true; + + } + return false; + } + + public abstract boolean collides(MultinameUsage other); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TraitMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TraitMultinameUsage.java index 4f5d724c4..778360f54 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TraitMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TraitMultinameUsage.java @@ -23,21 +23,45 @@ import com.jpexs.decompiler.flash.abc.types.traits.Traits; * * @author JPEXS */ -public abstract class TraitMultinameUsage extends InsideClassMultinameUsage { +public abstract class TraitMultinameUsage extends MultinameUsage implements InsideClassMultinameUsageInterface { public int traitIndex; - public boolean isStatic; + public static final int TRAITS_TYPE_CLASS = 1; + public static final int TRAITS_TYPE_INSTANCE = 2; + public static final int TRAITS_TYPE_SCRIPT = 3; + + public int traitsType; + public int classIndex; + public int scriptIndex; public Traits traits; public int parentTraitIndex; - public TraitMultinameUsage(ABC abc, int multinameIndex, int classIndex, int traitIndex, boolean isStatic, Traits traits, int parentTraitIndex) { - super(abc, multinameIndex, classIndex); + public TraitMultinameUsage(ABC abc, int multinameIndex, int scriptIndex, int classIndex, int traitIndex, int traitsType, Traits traits, int parentTraitIndex) { + super(abc, multinameIndex); + this.scriptIndex = scriptIndex; + this.classIndex = classIndex; this.traitIndex = traitIndex; - this.isStatic = isStatic; + this.traitsType = traitsType; this.traits = traits; this.parentTraitIndex = parentTraitIndex; } + + @Override + public String toString() { + return "class " + abc.constants.getMultiname(abc.instance_info.get(classIndex).name_index).getNameWithNamespace(abc.constants, true).toPrintableString(true); + } + + @Override + public boolean collides(MultinameUsage other) { + return false; + } + + @Override + public int getClassIndex() { + return classIndex; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TypeNameMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TypeNameMultinameUsage.java index 8d28140c2..a4df163e3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TypeNameMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/TypeNameMultinameUsage.java @@ -27,8 +27,8 @@ public class TypeNameMultinameUsage extends MultinameUsage { public int typename_index; - public TypeNameMultinameUsage(ABC abc, int typename_index) { - super(abc); + public TypeNameMultinameUsage(ABC abc, int multinameIndex, int typename_index) { + super(abc, multinameIndex); this.typename_index = typename_index; } @@ -36,4 +36,9 @@ public class TypeNameMultinameUsage extends MultinameUsage { public String toString() { return "TypeName " + abc.constants.getMultiname(typename_index).toString(abc.constants, new ArrayList<>()); } + + @Override + public boolean collides(MultinameUsage other) { + return false; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java index 099e63d3f..a6a0f0c66 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java @@ -128,7 +128,7 @@ public class AS3ScriptExporter { if (((SetLocalAVM2Item) asg).regIndex == ((LocalRegAVM2Item) sp.object).regIndex) { GraphTargetItem val = sp.value; if (sp.propertyName instanceof FullMultinameAVM2Item) { - String propName = pack.abc.constants.getMultiname(((FullMultinameAVM2Item) sp.propertyName).multinameIndex).getName(pack.abc.constants, new ArrayList<>(), true); + String propName = pack.abc.constants.getMultiname(((FullMultinameAVM2Item) sp.propertyName).multinameIndex).getName(pack.abc.constants, new ArrayList<>(), true, true); if (val instanceof CallPropertyAVM2Item) { CallPropertyAVM2Item cap = (CallPropertyAVM2Item) val; if (cp.propertyName instanceof FullMultinameAVM2Item) { @@ -216,7 +216,7 @@ public class AS3ScriptExporter { private String getTagName(ScriptPack pack, int classMIndex, int nameMindex, Map namespaces) { Multiname m = pack.abc.constants.getMultiname(classMIndex); Multiname mn = pack.abc.constants.getMultiname(nameMindex); - String parentName = mn.getName(pack.abc.constants, new ArrayList<>(), true); + String parentName = mn.getName(pack.abc.constants, new ArrayList<>(), true, true); String pkg = m.getNamespace(pack.abc.constants).getName(pack.abc.constants).toRawString(); pkg += ".*"; String ns = null; @@ -276,7 +276,7 @@ public class AS3ScriptExporter { if (it instanceof InitPropertyAVM2Item) { InitPropertyAVM2Item ip = (InitPropertyAVM2Item) it; if (ip.object instanceof ThisAVM2Item) { - String propName = pack.abc.constants.getMultiname(ip.propertyName.multinameIndex).getName(pack.abc.constants, new ArrayList<>(), true); + String propName = pack.abc.constants.getMultiname(ip.propertyName.multinameIndex).getName(pack.abc.constants, new ArrayList<>(), true, true); GraphTargetItem val = ((InitPropertyAVM2Item) it).value; if (val instanceof CallPropertyAVM2Item) { CallPropertyAVM2Item cp = (CallPropertyAVM2Item) val; @@ -296,7 +296,7 @@ public class AS3ScriptExporter { ConstructPropAVM2Item cp = (ConstructPropAVM2Item) val; if (cp.propertyName instanceof FullMultinameAVM2Item) { Multiname m = pack.abc.constants.getMultiname(((FullMultinameAVM2Item) cp.propertyName).multinameIndex); - if ("mx.core.DeferredInstanceFromFunction".equals("" + m.getNameWithNamespace(pack.abc.constants))) { + if ("mx.core.DeferredInstanceFromFunction".equals("" + m.getNameWithNamespace(pack.abc.constants, true))) { if (!cp.args.isEmpty()) { if (cp.args.get(0) instanceof GetPropertyAVM2Item) { GetPropertyAVM2Item gp = (GetPropertyAVM2Item) cp.args.get(0); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DependencyParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DependencyParser.java index a779c35d2..2479fcb21 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DependencyParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DependencyParser.java @@ -51,7 +51,7 @@ public class DependencyParser { } else if ((ns.kind != Namespace.KIND_PACKAGE) && (ns.kind != Namespace.KIND_PACKAGE_INTERNAL)) { return; } - newimport = newimport.add(name); + newimport = newimport.addWithSuffix(name); Dependency dep = new Dependency(newimport, dependencyType); if (!dependencies.contains(dep)) { @@ -80,7 +80,7 @@ public class DependencyParser { return; } Namespace ns = m.getNamespace(abc.constants); - String name = m.getName(abc.constants, fullyQualifiedNames, true); + String name = m.getName(abc.constants, fullyQualifiedNames, true, true); NamespaceSet nss = m.getNamespaceSet(abc.constants); if (ns != null) { parseDependenciesFromNS(ignoredCustom, abc, dependencies, uses, m.namespace_index, ignorePackage, name, dependencyType); @@ -114,7 +114,7 @@ public class DependencyParser { } for (AVM2Instruction ins : body.getCode().code) { if (ins.definition instanceof AlchemyTypeIns) { - DottedChain nimport = AlchemyTypeIns.ALCHEMY_PACKAGE.add(ins.definition.instructionName); + DottedChain nimport = AlchemyTypeIns.ALCHEMY_PACKAGE.addWithSuffix(ins.definition.instructionName); Dependency depExp = new Dependency(nimport, DependencyType.EXPRESSION); if (!dependencies.contains(depExp)) { dependencies.add(depExp); @@ -166,7 +166,7 @@ public class DependencyParser { return; } Namespace ns = m.getNamespace(abc.constants); - String name = m.getName(abc.constants, fullyQualifiedNames, false); + String name = m.getName(abc.constants, fullyQualifiedNames, false, true); NamespaceSet nss = m.getNamespaceSet(abc.constants); if (ns != null) { parseUsagesFromNS(ignoredCustom, abc, dependencies, uses, m.namespace_index, ignorePackage, name); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/LinkReportExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/LinkReportExporter.java index 222a8fd0d..652ae0cbf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/LinkReportExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/LinkReportExporter.java @@ -92,7 +92,7 @@ public class LinkReportExporter { List existingObjects = new ArrayList<>(); for (ScriptPack sp : as3scripts) { - existingObjects.add(sp.getClassPath().packageStr.add(sp.getClassPath().className)); + existingObjects.add(sp.getClassPath().packageStr.add(sp.getClassPath().className, sp.getClassPath().namespaceSuffix)); } for (ScriptPack sp : revList) { @@ -119,7 +119,7 @@ public class LinkReportExporter { ns = abc.constants.getNamespace(nss.namespaces[0]); } String pkgName = ns == null ? "" : ns.getName(abc.constants).toRawString(); - String clsName = multiName.getName(abc.constants, new ArrayList<>(), true); + String clsName = multiName.getName(abc.constants, new ArrayList<>(), true, true); return pkgName.isEmpty() ? clsName : pkgName + ":" + clsName; } @@ -167,7 +167,7 @@ public class LinkReportExporter { sb.append(indent(3)).append("").append(newLineChar); //Automatic - tc.getDependencies(null, abc, dependencies, uses, new DottedChain("FAKE!PACKAGE"), new ArrayList<>()); + tc.getDependencies(null, abc, dependencies, uses, new DottedChain(new String[]{"FAKE!PACKAGE"}, ""), new ArrayList<>()); for (Dependency dependency : dependencies) { DottedChain dc = dependency.getId(); if (!"*".equals(dc.getLast())) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToSwcExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToSwcExporter.java index 5dc306aea..3e6862e91 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToSwcExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToSwcExporter.java @@ -104,7 +104,7 @@ public class SwfToSwcExporter { for (ScriptPack pack : packs) { ClassPath cp = pack.getClassPath(); - definedObjects.add(cp.packageStr.add(cp.className)); + definedObjects.add(cp.packageStr.add(cp.className, "" /*strip*/)); } List allAbcList = new ArrayList<>(); @@ -123,17 +123,17 @@ public class SwfToSwcExporter { for (ScriptPack pack : tagPacks) { ClassPath cp = pack.getClassPath(); - String defId = dottedChainToId(cp.packageStr.add(cp.className)); + String defId = dottedChainToId(cp.packageStr.add(cp.className, "" /*strip*/)); sb.append(" \n"); Set allDeps = new HashSet<>(); - allDeps.add(new DottedChain("AS3")); + allDeps.add(new DottedChain(new String[]{"AS3"}, "")); sb.append(" \n"); if (!skipDependencies) { List dependencies = new ArrayList<>(); List uses = new ArrayList<>(); - pack.abc.script_info.get(pack.scriptIndex).traits.getDependencies(null, pack.abc, dependencies, uses, new DottedChain("NO:PACKAGE"), new ArrayList<>()); + pack.abc.script_info.get(pack.scriptIndex).traits.getDependencies(null, pack.abc, dependencies, uses, new DottedChain(new String[]{"NO:PACKAGE"}, ""), new ArrayList<>()); for (Dependency d : dependencies) { if ("*".equals(d.getId().getLast())) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java index 578802cba..0762c24ed 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java @@ -86,11 +86,11 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl if (ii.deleted) { return true; } - if (ii.super_index != 0 && isParentDeleted(abc, allAbcs, abc.constants.getMultiname(ii.super_index).getNameWithNamespace(abc.constants))) { + if (ii.super_index != 0 && isParentDeleted(abc, allAbcs, abc.constants.getMultiname(ii.super_index).getNameWithNamespace(abc.constants, false))) { return true; } for (int iface : ii.interfaces) { - if (isParentDeleted(abc, allAbcs, abc.constants.getMultiname(iface).getNameWithNamespace(abc.constants))) { + if (isParentDeleted(abc, allAbcs, abc.constants.getMultiname(iface).getNameWithNamespace(abc.constants, false))) { return true; } } @@ -265,7 +265,7 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl //remove all subclasses from the SWC for (ScriptPack sp : copyPacks) { - DottedChain dc = sp.getPathPackage().add(sp.getPathScriptName()); + DottedChain dc = sp.getPathPackage().add(sp.getPathScriptName(), ""); if (isParentDeleted(sp.abc, sp.allABCs, dc)) { sp.abc.script_info.get(sp.scriptIndex).delete(sp.abc, true); modAbcs.add(sp.abc); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS3Package.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS3Package.java index 3013f4e73..c3f129204 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS3Package.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS3Package.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.timeline; import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.abc.ClassPath; import com.jpexs.decompiler.flash.abc.ScriptPack; import com.jpexs.decompiler.flash.treeitems.AS3ClassTreeItem; import java.util.ArrayList; @@ -44,7 +45,7 @@ public class AS3Package extends AS3ClassTreeItem { private List sortedScripts; public AS3Package(String packageName, SWF swf) { - super(packageName, null); + super(packageName, "", null); this.swf = swf; this.packageName = packageName; } @@ -81,12 +82,13 @@ public class AS3Package extends AS3ClassTreeItem { } public void addScriptPack(ScriptPack script) { - scripts.put(script.getClassPath().className, script); + ClassPath cp = script.getClassPath(); + scripts.put(cp.className + cp.namespaceSuffix, script); sortedScripts = null; } public void addSubPackage(AS3Package subPackage) { - subPackages.put(subPackage.getName(), subPackage); + subPackages.put(subPackage.getNameWithNamespaceSuffix(), subPackage); sortedPackages = null; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/AS3ClassTreeItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/AS3ClassTreeItem.java index 6bb91b1da..1d1653216 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/AS3ClassTreeItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/AS3ClassTreeItem.java @@ -29,13 +29,20 @@ public abstract class AS3ClassTreeItem implements TreeItem { private final ClassPath path; - public AS3ClassTreeItem(String name, ClassPath path) { + private final String namespaceSuffix; + + public AS3ClassTreeItem(String name, String namespaceSuffix, ClassPath path) { this.name = name; this.path = path; + this.namespaceSuffix = namespaceSuffix; } - public String getName() { - return name; + public String getNameWithNamespaceSuffix() { + String ret = name; + if (namespaceSuffix != null) { + ret += namespaceSuffix; + } + return ret; } public String getPath() { @@ -44,6 +51,10 @@ public abstract class AS3ClassTreeItem implements TreeItem { @Override public String toString() { - return IdentifiersDeobfuscation.printIdentifier(true, name); + String ret = IdentifiersDeobfuscation.printIdentifier(true, name); + if (namespaceSuffix != null) { + ret += namespaceSuffix; + } + return ret; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java index 83831c68a..bf4e53e00 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java @@ -30,37 +30,39 @@ import java.util.List; */ public class DottedChain implements Serializable, Comparable { + public static final String NO_SUFFIX = ""; + public static final DottedChain EMPTY = new DottedChain(true); - public static final DottedChain TOPLEVEL = new DottedChain(); + public static final DottedChain TOPLEVEL = new DottedChain(new String[]{}, NO_SUFFIX); - public static final DottedChain BOOLEAN = new DottedChain("Boolean"); + public static final DottedChain BOOLEAN = new DottedChain(new String[]{"Boolean"}, NO_SUFFIX); - public static final DottedChain STRING = new DottedChain("String"); + public static final DottedChain STRING = new DottedChain(new String[]{"String"}, NO_SUFFIX); - public static final DottedChain ARRAY = new DottedChain("Array"); + public static final DottedChain ARRAY = new DottedChain(new String[]{"Array"}, NO_SUFFIX); - public static final DottedChain NUMBER = new DottedChain("Number"); + public static final DottedChain NUMBER = new DottedChain(new String[]{"Number"}, NO_SUFFIX); - public static final DottedChain OBJECT = new DottedChain("Object"); + public static final DottedChain OBJECT = new DottedChain(new String[]{"Object"}, NO_SUFFIX); - public static final DottedChain INT = new DottedChain("int"); + public static final DottedChain INT = new DottedChain(new String[]{"int"}, NO_SUFFIX); - public static final DottedChain UINT = new DottedChain("uint"); + public static final DottedChain UINT = new DottedChain(new String[]{"uint"}, NO_SUFFIX); - public static final DottedChain UNDEFINED = new DottedChain("Undefined"); + public static final DottedChain UNDEFINED = new DottedChain(new String[]{"Undefined"}, NO_SUFFIX); - public static final DottedChain XML = new DottedChain("XML"); + public static final DottedChain XML = new DottedChain(new String[]{"XML"}, NO_SUFFIX); - public static final DottedChain NULL = new DottedChain("null"); + public static final DottedChain NULL = new DottedChain(new String[]{"null"}, NO_SUFFIX); - public static final DottedChain FUNCTION = new DottedChain("Function"); + public static final DottedChain FUNCTION = new DottedChain(new String[]{"Function"}, NO_SUFFIX); - public static final DottedChain VOID = new DottedChain("void"); + public static final DottedChain VOID = new DottedChain(new String[]{"void"}, NO_SUFFIX); - public static final DottedChain NAMESPACE = new DottedChain("Namespace"); + public static final DottedChain NAMESPACE = new DottedChain(new String[]{"Namespace"}, NO_SUFFIX); - public static final DottedChain ALL = new DottedChain("*"); + public static final DottedChain ALL = new DottedChain(new String[]{"*"}, NO_SUFFIX); private final String[] parts; @@ -70,13 +72,25 @@ public class DottedChain implements Serializable, Comparable { private boolean isNull = false; - public static final DottedChain parse(String name) { + private String namespaceSuffix = ""; + + public String getNamespaceSuffix() { + return namespaceSuffix; + } + + public static final DottedChain parseWithSuffix(String name) { if (name == null) { return DottedChain.EMPTY; } else if (name.isEmpty()) { return DottedChain.TOPLEVEL; } else { - return new DottedChain(name.split("\\.")); + String nameNoSuffix = name; + String namespaceSuffix = ""; + if (name.matches(".*#[0-9]+$")) { + nameNoSuffix = name.substring(0, name.lastIndexOf("#")); + namespaceSuffix = name.substring(name.lastIndexOf("#")); + } + return new DottedChain(nameNoSuffix.split("\\."), namespaceSuffix); } } @@ -88,7 +102,7 @@ public class DottedChain implements Serializable, Comparable { } public DottedChain(DottedChain src) { - this(src.parts); + this(src.parts, src.namespaceSuffix); this.isNull = src.isNull; } @@ -98,7 +112,10 @@ public class DottedChain implements Serializable, Comparable { hash = calcHash(); } - public DottedChain(String... parts) { + /*public DottedChain(String onePart, String namespaceSuffix) { + this(new String[]{onePart}, namespaceSuffix); + }*/ + public DottedChain(String[] parts, String namespaceSuffix) { if (parts.length == 1 && parts[0].isEmpty()) { length = 0; this.parts = new String[0]; @@ -107,6 +124,7 @@ public class DottedChain implements Serializable, Comparable { this.parts = parts; } hash = calcHash(); + this.namespaceSuffix = namespaceSuffix; } private DottedChain(String[] parts, int length) { @@ -165,7 +183,17 @@ public class DottedChain implements Serializable, Comparable { return new DottedChain(parts, length - 1); } - public DottedChain add(String name) { + public DottedChain addWithSuffix(String name) { + String addedNameNoSuffix = name; + String addedNamespaceSuffix = ""; + if (name != null && name.matches(".*#[0-9]+$")) { + addedNameNoSuffix = name.substring(0, name.lastIndexOf("#")); + addedNamespaceSuffix = name.substring(name.lastIndexOf("#")); + } + return add(addedNameNoSuffix, addedNamespaceSuffix); + } + + public DottedChain add(String name, String namespaceSuffix) { if (name == null) { return new DottedChain(this); } @@ -175,10 +203,10 @@ public class DottedChain implements Serializable, Comparable { } nparts[nparts.length - 1] = name; - return new DottedChain(nparts); + return new DottedChain(nparts, namespaceSuffix); } - protected String toString(boolean as3, boolean raw) { + protected String toString(boolean as3, boolean raw, boolean withSuffix) { if (isNull) { return ""; } @@ -196,6 +224,9 @@ public class DottedChain implements Serializable, Comparable { boolean lastStar = i == length - 1 && "*".equals(part); ret.append((raw || lastStar) ? part : IdentifiersDeobfuscation.printIdentifier(as3, part)); } + if (withSuffix) { + ret.append(namespaceSuffix); + } return ret.toString(); } @@ -223,11 +254,11 @@ public class DottedChain implements Serializable, Comparable { } public String toPrintableString(boolean as3) { - return toString(as3, false); + return toString(as3, false, true); } - public String toRawString() { - return toString(false/*ignored*/, true); + public String toRawString() { //Is SUFFIX correctly handled? + return toString(false/*ignored*/, true, true); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java index ed6a06085..238f9a30e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java @@ -43,7 +43,7 @@ public class TypeItem extends GraphTargetItem { public final DottedChain fullTypeName; public TypeItem(String s) { - this(s == null ? new DottedChain() : new DottedChain(s.split("\\."))); + this(s == null ? new DottedChain(new String[]{}, "") : DottedChain.parseWithSuffix(s)); } public TypeItem(DottedChain fullTypeName) { @@ -78,7 +78,7 @@ public class TypeItem extends GraphTargetItem { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { boolean as3 = localData.constantsAvm2 != null; - if (localData.fullyQualifiedNames.contains(new DottedChain(fullTypeName.getLast()))) { + if (localData.fullyQualifiedNames.contains(DottedChain.parseWithSuffix(fullTypeName.getLast()))) { writer.hilightSpecial(fullTypeName.toPrintableString(as3), HighlightSpecialType.TYPE_NAME, fullTypeName.toRawString()); } else { writer.hilightSpecial(IdentifiersDeobfuscation.printIdentifier(as3, fullTypeName.getLast()), HighlightSpecialType.TYPE_NAME, fullTypeName.toRawString()); diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java index c1e77c76a..b405470a6 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java @@ -66,7 +66,7 @@ public class ActionScript3Test extends ActionScriptTestBase { } } assertNotNull(tag); - clsIndex = tag.getABC().findClassByName(new DottedChain("classes", "Test")); + clsIndex = tag.getABC().findClassByName(new DottedChain(new String[]{"classes", "Test"}, "")); assertTrue(clsIndex > -1); this.abc = tag.getABC(); Configuration.autoDeobfuscate.set(false); diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java index 52b2cf491..8d6477cc5 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java @@ -55,12 +55,16 @@ public class AS3Generator { break; } } + if (tag == null) { + System.err.println("No ABC found"); + return; + } ABC abc = tag.getABC(); int classId = abc.findClassByName("classes.Test"); StringBuilder s = new StringBuilder(); for (Trait t : abc.instance_info.get(classId).instance_traits.traits) { if (t instanceof TraitMethodGetterSetter) { - String name = t.getName(abc).getName(abc.constants, null, true); + String name = t.getName(abc).getName(abc.constants, null, true, true); if (name.startsWith("test")) { s.append("@Test\r\npublic void "); s.append(name); diff --git a/libsrc/ffdec_lib/testdata/namespaces/EmptyDocument.as b/libsrc/ffdec_lib/testdata/namespaces/EmptyDocument.as new file mode 100644 index 000000000..45c06dde5 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/namespaces/EmptyDocument.as @@ -0,0 +1,25 @@ +package { + import flash.display.Sprite; + import flash.text.TextField; + import flash.utils.ByteArray; + + public class EmptyDocument extends Sprite{ + + public var attr:int = 5; + + public function EmptyDocument() { + var mc:MyClass = new MyClass(); + var mc2:MyClass2 = new MyClass2() + var r = mc.getResult() + mc2.getResult(); + + var expected = 561; + + var display_txt:TextField = new TextField(); + display_txt.text = "Actual = "+r+", expected = "+expected+", "+(r==expected?"OKAY":"FAIL"); + display_txt.width = 300; + addChild(display_txt); + + } + } + +} diff --git a/libsrc/ffdec_lib/testdata/namespaces/MyClass.as b/libsrc/ffdec_lib/testdata/namespaces/MyClass.as new file mode 100644 index 000000000..a9cb4f569 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/namespaces/MyClass.as @@ -0,0 +1,114 @@ +package { + + public class MyClass { + public var a1:int = 1; + public var a2:int = 2; + + private var a1x:int = 3; + private var a2x:int = 4; + + protected var a1y:int = 5; + protected var a2y:int = 6; + + + public static var a1:int = 7; + public static var a2:int = 8; + + private static var a1x:int = 9; + private static var a2x:int = 10; + + protected static var a1y:int = 11; + protected static var a2y:int = 12; + + myns var a1:int = 13; + myns var a2:int = 14; + + myns2 var a1:int = 15; + myns2 var a2:int = 16; + + + + + public function f1():int { + return 17; + } + + public function f2():int { + return 18; + } + + + protected function f1x():int { + return 19; + } + + protected function f2x():int { + return 20; + } + + + private function f1y():int { + return 21; + } + + private function f2y():int { + return 22; + } + + + public static function f1():int { + return 23; + } + public static function f2():int { + return 24; + } + + + protected static function f1x():int { + return 25; + } + protected static function f2x():int { + return 26; + } + + + private static function f1y():int { + return 27; + } + private static function f2y():int { + return 28; + } + + myns function f1():int { + return 29; + } + myns function f2():int { + return 30; + } + + myns2 function f1():int { + return 31; + } + myns2 function f2():int { + return 32; + } + + + public function getResult():int { + var inst_a = this.a1 + this.a2 + this.a1x + this.a2x + this.a1y + this.a2y; + var inst_f = this.f1() + this.f2() + this.f1x() + this.f2x() + this.f1y() + this.f2y(); + var inst = inst_a + inst_f; + + var stat_a = MyClass.a1 + MyClass.a2 + MyClass.a1x + MyClass.a2x + MyClass.a1y + MyClass.a2y; + var stat_f = MyClass.f1() + MyClass.f2() + MyClass.f1x() + MyClass.f2x() + MyClass.f1y() + MyClass.f2y(); + var stat = stat_a + stat_f; + + var ns_a = myns::a1 + myns::a2 + myns2::a1 + myns2::a2; + var ns_f = myns::f1() + myns::f2() + myns2::f1() + myns2::f2(); + var ns = ns_a + ns_f; + + return inst+stat+ns; //528 + } + } + +} diff --git a/libsrc/ffdec_lib/testdata/namespaces/MyClass2.as b/libsrc/ffdec_lib/testdata/namespaces/MyClass2.as new file mode 100644 index 000000000..a26be3277 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/namespaces/MyClass2.as @@ -0,0 +1,15 @@ +package { + + public class MyClass2 { + + public function MyClass2() { + + } + + public function getResult():int{ + return 33; + } + + } + +} diff --git a/libsrc/ffdec_lib/testdata/namespaces/myns.as b/libsrc/ffdec_lib/testdata/namespaces/myns.as new file mode 100644 index 000000000..2dfd0b742 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/namespaces/myns.as @@ -0,0 +1,5 @@ +package { + + public namespace myns = "http://www.example.com"; + +} diff --git a/libsrc/ffdec_lib/testdata/namespaces/myns2.as b/libsrc/ffdec_lib/testdata/namespaces/myns2.as new file mode 100644 index 000000000..65e0f31ff --- /dev/null +++ b/libsrc/ffdec_lib/testdata/namespaces/myns2.as @@ -0,0 +1,5 @@ +package { + + public namespace myns2 = "http://www.example2.com"; + +} diff --git a/libsrc/ffdec_lib/testdata/namespaces/namespaces.fla b/libsrc/ffdec_lib/testdata/namespaces/namespaces.fla new file mode 100644 index 000000000..c5f6fb296 Binary files /dev/null and b/libsrc/ffdec_lib/testdata/namespaces/namespaces.fla differ diff --git a/libsrc/ffdec_lib/testdata/namespaces/namespaces.html b/libsrc/ffdec_lib/testdata/namespaces/namespaces.html new file mode 100644 index 000000000..f00bb5953 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/namespaces/namespaces.html @@ -0,0 +1,49 @@ + + + + namespaces + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + Get Adobe Flash player + + + + + +
+ + diff --git a/libsrc/ffdec_lib/testdata/namespaces/namespaces.swf b/libsrc/ffdec_lib/testdata/namespaces/namespaces.swf new file mode 100644 index 000000000..a2dce8280 Binary files /dev/null and b/libsrc/ffdec_lib/testdata/namespaces/namespaces.swf differ diff --git a/libsrc/ffdec_lib/testdata/namespaces/same_classes.swf b/libsrc/ffdec_lib/testdata/namespaces/same_classes.swf new file mode 100644 index 000000000..356130bbe Binary files /dev/null and b/libsrc/ffdec_lib/testdata/namespaces/same_classes.swf differ diff --git a/libsrc/ffdec_lib/testdata/namespaces/same_traits.swf b/libsrc/ffdec_lib/testdata/namespaces/same_traits.swf new file mode 100644 index 000000000..6a2fdd624 Binary files /dev/null and b/libsrc/ffdec_lib/testdata/namespaces/same_traits.swf differ diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex index e69741b27..36088cacc 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex @@ -110,6 +110,8 @@ SingleCharacter = [^\r\n\'\\] OIdentifierCharacter = [^\r\n\u00A7\\] Preprocessor = \u00A7\u00A7 {Identifier} +NamespaceSuffix = "#" {DecIntegerLiteral} + RegExp = \/([^\r\n/]|\\\/)+\/[a-z]* %state STRING, CHARLITERAL, XMLSTARTTAG, XML, OIDENTIFIER @@ -289,7 +291,9 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]* xmlTagName = s.substring(1); }*/ /* identifiers */ + {Identifier}{NamespaceSuffix} { return token(TokenType.REGEX); } {Identifier} { return token(TokenType.IDENTIFIER); } + } { @@ -328,6 +332,12 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]* } { + "\u00A7" {NamespaceSuffix} { + yybegin(YYINITIAL); + // length also includes the trailing quote + namespace suffix + return token(TokenType.REGEX, tokenStart, tokenLength + yylength()); + } + "\u00A7" { yybegin(YYINITIAL); // length also includes the trailing quote diff --git a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java index 805575b4a..629d0cb4c 100644 --- a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java +++ b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java @@ -3749,7 +3749,7 @@ public class CommandLineArgumentParser { String dcs = swf.getDocumentClass(); if (dcs != null) { if (dcs.contains(".")) { - DottedChain dc = new DottedChain(dcs.split("\\.")); + DottedChain dc = DottedChain.parseWithSuffix(dcs); pw.println("documentClass=" + dc.toPrintableString(true)); } else { pw.println("documentClass=" + IdentifiersDeobfuscation.printIdentifier(true, dcs)); diff --git a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java index 64c9c3251..509c37db3 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java +++ b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java @@ -571,7 +571,7 @@ public class DebuggerHandler implements DebugConnectionListener { Matcher m; if ((m = patAS3.matcher(name)).matches()) { - String clsName = m.group(3); + String clsNameWithSuffix = m.group(3); String pkg = m.group(2).replace("\\", "."); m = patAS3PCode.matcher(name); @@ -579,10 +579,10 @@ public class DebuggerHandler implements DebugConnectionListener { moduleToClassIndex.put(file, Integer.parseInt(m.group(3))); moduleToTraitIndex.put(file, Integer.parseInt(m.group(4))); moduleToMethodIndex.put(file, Integer.parseInt(m.group(5))); - name = DottedChain.parse(pkg).add(clsName).toString(); + name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); name = "#PCODE abc:" + m.group(1) + ",body:" + m.group(6) + ";" + name; } else { - name = DottedChain.parse(pkg).add(clsName).toString(); + name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); } } modulePaths.put(file, name); diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java index 0b687bf5b..aa1e70d28 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java @@ -357,6 +357,14 @@ public abstract class MainFrameMenu implements MenuBuilder { mainFrame.getPanel().renameOneIdentifier(swf); } + protected void renameColliding(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().renameColliding(swf); + } + protected void renameInvalidIdentifiers(ActionEvent evt) { if (Main.isWorking()) { return; @@ -718,6 +726,7 @@ public abstract class MainFrameMenu implements MenuBuilder { setMenuEnabled("/tools/deobfuscation", swfSelected); setMenuEnabled("/tools/deobfuscation/renameOneIdentifier", swfSelected && !isWorking); setMenuEnabled("/tools/deobfuscation/renameInvalidIdentifiers", swfSelected && !isWorking); + setMenuEnabled("/tools/deobfuscation/renameColliding", swfSelected && !isWorking); setMenuEnabled("/tools/deobfuscation/deobfuscation", hasAbc); setMenuEnabled("/tools/search", swfSelected); @@ -889,6 +898,7 @@ public abstract class MainFrameMenu implements MenuBuilder { addMenuItem("/tools/deobfuscation", translate("menu.tools.deobfuscation"), "deobfuscate16", null, 0, null, false, null, false); addMenuItem("/tools/deobfuscation/renameOneIdentifier", translate("menu.tools.deobfuscation.globalrename"), "rename16", this::renameOneIdentifier, PRIORITY_MEDIUM, null, true, null, false); addMenuItem("/tools/deobfuscation/renameInvalidIdentifiers", translate("menu.tools.deobfuscation.renameinvalid"), "renameall16", this::renameInvalidIdentifiers, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/tools/deobfuscation/renameColliding", translate("menu.tools.deobfuscation.renameColliding"), "renameall16", this::renameColliding, PRIORITY_MEDIUM, null, true, null, false); addMenuItem("/tools/deobfuscation/deobfuscation", translate("menu.tools.deobfuscation.pcode"), "deobfuscate32", this::deobfuscationActionPerformed, PRIORITY_TOP, null, true, null, false); finishMenu("/tools/deobfuscation"); diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 137a504fd..c45bc048b 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -27,6 +27,7 @@ import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.RenameType; import com.jpexs.decompiler.flash.abc.ScriptPack; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; +import com.jpexs.decompiler.flash.abc.avm2.deobfuscation.AbcMultiNameCollisionFixer; import com.jpexs.decompiler.flash.abc.avm2.deobfuscation.DeobfuscationLevel; import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.configuration.Configuration; @@ -1913,6 +1914,48 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se updateClassesList(); } + public void renameColliding(final SWF swf) { + if (swf == null) { + return; + } + if (confirmExperimental()) { + new CancellableWorker() { + @Override + protected Integer doInBackground() throws Exception { + AbcMultiNameCollisionFixer fixer = new AbcMultiNameCollisionFixer(); + return fixer.fixCollisions(swf); + } + + @Override + protected void onStart() { + Main.startWork(translate("work.renaming.identifiers") + "...", this); + } + + @Override + protected void done() { + View.execInEventDispatch(() -> { + try { + int cnt = get(); + Main.stopWork(); + View.showMessageDialog(null, translate("message.rename.renamed").replace("%count%", Integer.toString(cnt))); + swf.assignClassesToSymbols(); + swf.clearScriptCache(); + if (abcPanel != null) { + abcPanel.reload(); + } + updateClassesList(); + reload(true); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error during renaming identifiers", ex); + Main.stopWork(); + View.showMessageDialog(null, translate("error.occured").replace("%error%", ex.getClass().getSimpleName())); + } + }); + } + }.execute(); + } + } + public void renameOneIdentifier(final SWF swf) { if (swf == null) { return; diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 90577159b..101fa699b 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -213,7 +213,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener multinameIndexRef = new Reference<>(0); if (decompiledTextArea.getPropertyTypeAtPos(pos, abcIndex, classIndex, traitIndex, classTrait, multinameIndexRef)) { - UsageFrame.gotoUsage(ABCPanel.this, new TraitMultinameUsage(getAbcList().get(abcIndex.getVal()).getABC(), multinameIndexRef.getVal(), classIndex.getVal(), traitIndex.getVal(), classTrait.getVal(), null, -1) { + UsageFrame.gotoUsage(ABCPanel.this, new TraitMultinameUsage(getAbcList().get(abcIndex.getVal()).getABC(), multinameIndexRef.getVal(), decompiledTextArea.getScriptLeaf().scriptIndex, classIndex.getVal(), traitIndex.getVal(), classTrait.getVal() ? TraitMultinameUsage.TRAITS_TYPE_CLASS : TraitMultinameUsage.TRAITS_TYPE_INSTANCE, null, -1) { }); return; } @@ -1244,7 +1247,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener locTypeRef = new Reference<>(DottedChain.EMPTY); @@ -343,9 +343,8 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL return false; } boolean found; - t = sd.getNextToken(t); - while (t != lastToken && !currentType.equals(DottedChain.ALL)) { - t = sd.getNextToken(t); + + while (!currentType.equals(DottedChain.ALL)) { String ident = t.getString(sd); found = false; List abcList = getABC().getSwf().getAbcList(); @@ -357,13 +356,13 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL InstanceInfo ii = a.instance_info.get(cindex); for (int j = 0; j < ii.instance_traits.traits.size(); j++) { Trait tr = ii.instance_traits.traits.get(j); - if (ident.equals(tr.getName(a).getName(a.constants, null, false /*NOT RAW!*/))) { + if (ident.equals(tr.getName(a).getName(a.constants, null, false /*NOT RAW!*/, true))) { classIndex.setVal(cindex); abcIndex.setVal(i); traitIndex.setVal(j); classTrait.setVal(false); multinameIndex.setVal(tr.name_index); - currentType = ii.getName(a.constants).getNameWithNamespace(a.constants); + currentType = ii.getName(a.constants).getNameWithNamespace(a.constants, true); found = true; break loopi; } @@ -372,13 +371,13 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL ClassInfo ci = a.class_info.get(cindex); for (int j = 0; j < ci.static_traits.traits.size(); j++) { Trait tr = ci.static_traits.traits.get(j); - if (ident.equals(tr.getName(a).getName(a.constants, null, false /*NOT RAW!*/))) { + if (ident.equals(tr.getName(a).getName(a.constants, null, false /*NOT RAW!*/, true))) { classIndex.setVal(cindex); abcIndex.setVal(i); traitIndex.setVal(j); classTrait.setVal(true); multinameIndex.setVal(tr.name_index); - currentType = ii.getName(a.constants).getNameWithNamespace(a.constants); + currentType = ii.getName(a.constants).getNameWithNamespace(a.constants, true); found = true; break loopi; } @@ -389,10 +388,14 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL return false; } + if (t == lastToken) { + break; + } t = sd.getNextToken(t); if (!".".equals(t.getString(sd))) { break; } + t = sd.getNextToken(t); } return true; } @@ -481,7 +484,7 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL for (int i = 1; i < abc.constants.getMultinameCount(); i++) { Multiname m = abc.constants.getMultiname(i); if (m != null) { - if (typeName.equals(m.getNameWithNamespace(abc.constants).toRawString())) { + if (typeName.equals(m.getNameWithNamespace(abc.constants, true).toRawString())) { return i; } } @@ -536,7 +539,7 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL if (tm != null) { String name = ""; if (classIndex > -1) { - name = abc.instance_info.get(classIndex).getName(abc.constants).getNameWithNamespace(abc.constants).toPrintableString(true); + name = abc.instance_info.get(classIndex).getName(abc.constants).getNameWithNamespace(abc.constants, true).toPrintableString(true); } Trait currentTrait = null; @@ -547,7 +550,7 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL currentTrait = getCurrentTrait(); isStatic = abc.isStaticTraitId(classIndex, lastTraitIndex); if (currentTrait != null) { - name += ":" + currentTrait.getName(abc).getName(abc.constants, null, false); + name += ":" + currentTrait.getName(abc).getName(abc.constants, null, false, true); } } } @@ -588,11 +591,11 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL } currentMethodHighlight = null; //currentTrait = null; - String name = abc.instance_info.get(classIndex).getName(abc.constants).getNameWithNamespace(abc.constants).toPrintableString(true); + String name = abc.instance_info.get(classIndex).getName(abc.constants).getNameWithNamespace(abc.constants, true).toPrintableString(true); currentTrait = getCurrentTrait(); isStatic = abc.isStaticTraitId(classIndex, lastTraitIndex); if (currentTrait != null) { - name += ":" + currentTrait.getName(abc).getName(abc.constants, null, false); + name += ":" + currentTrait.getName(abc).getName(abc.constants, null, false, true); } displayMethod(pos, abc.findMethodIdByTraitId(classIndex, lastTraitIndex), name, currentTrait, lastTraitIndex, isStatic); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/DetailPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/DetailPanel.java index 7a310a243..e25f83b76 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/DetailPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/DetailPanel.java @@ -286,7 +286,7 @@ public class DetailPanel extends JPanel implements TagEditorPanel { if (trait == null) { traitNameLabel.setText("-"); } else if (abcPanel != null) { - traitNameLabel.setText(trait.getName(abcPanel.abc).getName(abcPanel.abc.constants, null, false)); + traitNameLabel.setText(trait.getName(abcPanel.abc).getName(abcPanel.abc.constants, null, false, true)); } }); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java index ef537dc32..2d3e306aa 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java @@ -123,6 +123,7 @@ public class SlotConstTraitDetailPanel extends JPanel implements TraitDetail { return false; } + abc.refreshMultinameNamespaceSuffixes(); ((Tag) abc.parentTag).setModified(true); return true; } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java index 15a034584..ddce8551a 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java @@ -97,9 +97,9 @@ public class TraitsListItem { return "__" + STR_SCRIPT_INITIALIZER; } if (isStatic) { - return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false); + return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); } else { - return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false); + return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); } } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java b/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java index ed9d73dba..1fde1de45 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java @@ -19,7 +19,7 @@ package com.jpexs.decompiler.flash.gui.abc; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.abc.types.Namespace; -import com.jpexs.decompiler.flash.abc.usages.InsideClassMultinameUsage; +import com.jpexs.decompiler.flash.abc.usages.InsideClassMultinameUsageInterface; import com.jpexs.decompiler.flash.abc.usages.MethodMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.MultinameUsage; import com.jpexs.decompiler.flash.abc.usages.TraitMultinameUsage; @@ -92,21 +92,21 @@ public class UsageFrame extends AppDialog implements MouseListener { cont.add(new JScrollPane(usageList), BorderLayout.CENTER); cont.add(buttonsPanel, BorderLayout.SOUTH); setSize(400, 300); - setTitle((definitions ? translate("dialog.title.declaration") : translate("dialog.title")) + abc.constants.getMultiname(multinameIndex).getNameWithNamespace(abc.constants).toPrintableString(true)); + setTitle((definitions ? translate("dialog.title.declaration") : translate("dialog.title")) + abc.constants.getMultiname(multinameIndex).getNameWithNamespace(abc.constants, true).toPrintableString(true)); View.centerScreen(this); View.setWindowIcon(this); } public static void gotoUsage(final ABCPanel abcPanel, final MultinameUsage usage) { - if (usage instanceof InsideClassMultinameUsage) { - final InsideClassMultinameUsage icu = (InsideClassMultinameUsage) usage; + if (usage instanceof InsideClassMultinameUsageInterface) { + final InsideClassMultinameUsageInterface icu = (InsideClassMultinameUsageInterface) usage; Runnable settrait = new Runnable() { @Override public void run() { abcPanel.decompiledTextArea.removeScriptListener(this); - abcPanel.decompiledTextArea.setClassIndex(icu.classIndex); + abcPanel.decompiledTextArea.setClassIndex(icu.getClassIndex()); if (usage instanceof TraitMultinameUsage) { TraitMultinameUsage tmu = (TraitMultinameUsage) usage; int traitIndex; @@ -115,13 +115,13 @@ public class UsageFrame extends AppDialog implements MouseListener { } else { traitIndex = tmu.traitIndex; } - if (!tmu.isStatic) { + if (tmu.traitsType == TraitMultinameUsage.TRAITS_TYPE_INSTANCE) { traitIndex += abcPanel.abc.class_info.get(tmu.classIndex).static_traits.traits.size(); } if (tmu instanceof MethodMultinameUsage) { MethodMultinameUsage mmu = (MethodMultinameUsage) usage; if (mmu.isInitializer == true) { - traitIndex = abcPanel.abc.class_info.get(mmu.classIndex).static_traits.traits.size() + abcPanel.abc.instance_info.get(mmu.classIndex).instance_traits.traits.size() + (mmu.isStatic ? 1 : 0); + traitIndex = abcPanel.abc.class_info.get(mmu.classIndex).static_traits.traits.size() + abcPanel.abc.instance_info.get(mmu.classIndex).instance_traits.traits.size() + (mmu.traitsType == TraitMultinameUsage.TRAITS_TYPE_CLASS ? 1 : 0); } } abcPanel.decompiledTextArea.gotoTrait(traitIndex); @@ -129,11 +129,11 @@ public class UsageFrame extends AppDialog implements MouseListener { } }; - if (abcPanel.decompiledTextArea.getClassIndex() == icu.classIndex && abcPanel.abc == icu.abc) { + if (abcPanel.decompiledTextArea.getClassIndex() == icu.getClassIndex() && abcPanel.abc == icu.getAbc()) { settrait.run(); } else { abcPanel.decompiledTextArea.addScriptListener(settrait); - abcPanel.hilightScript(abcPanel.getSwf(), icu.abc.instance_info.get(icu.classIndex).getName(icu.abc.constants).getNameWithNamespace(icu.abc.constants).toRawString()); + abcPanel.hilightScript(abcPanel.getSwf(), icu.getAbc().instance_info.get(icu.getClassIndex()).getName(icu.getAbc().constants).getNameWithNamespace(icu.getAbc().constants, true).toRawString()); } } } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/tablemodels/MultinameTableModel.java b/src/com/jpexs/decompiler/flash/gui/abc/tablemodels/MultinameTableModel.java index dea183418..2192e629e 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/tablemodels/MultinameTableModel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/tablemodels/MultinameTableModel.java @@ -131,7 +131,7 @@ public class MultinameTableModel implements TableModel { if (abc.constants.getMultiname(rowIndex).name_index == -1) { return ""; } - return abc.constants.getMultiname(rowIndex).getName(abc.constants, null, true); + return abc.constants.getMultiname(rowIndex).getName(abc.constants, null, true, true); case 3: if (rowIndex == 0) { return ""; diff --git a/src/com/jpexs/decompiler/flash/gui/debugger/DebuggerTools.java b/src/com/jpexs/decompiler/flash/gui/debugger/DebuggerTools.java index e06f83a3d..13b3d51a9 100644 --- a/src/com/jpexs/decompiler/flash/gui/debugger/DebuggerTools.java +++ b/src/com/jpexs/decompiler/flash/gui/debugger/DebuggerTools.java @@ -97,23 +97,23 @@ public class DebuggerTools { } for (int i = 1; i < a.constants.getMultinameCount(); i++) { Multiname m = a.constants.getMultiname(i); - if ("flash.display.Loader".equals(m.getNameWithNamespace(a.constants).toRawString())) { + if ("flash.display.Loader".equals(m.getNameWithNamespace(a.constants, true).toRawString())) { m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); m.name_index = a.constants.getStringId("DebugLoader", true); ((Tag) ct).setModified(true); - } else if ("flash.utils.getDefinitionByName".equals(m.getNameWithNamespace(a.constants).toRawString())) { + } else if ("flash.utils.getDefinitionByName".equals(m.getNameWithNamespace(a.constants, true).toRawString())) { m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); m.name_index = a.constants.getStringId("debugGetDefinitionByName", true); ((Tag) ct).setModified(true); - } else if ("flash.utils.getQualifiedClassName".equals(m.getNameWithNamespace(a.constants).toRawString())) { + } else if ("flash.utils.getQualifiedClassName".equals(m.getNameWithNamespace(a.constants, true).toRawString())) { m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); m.name_index = a.constants.getStringId("debugGetQualifiedClassName", true); ((Tag) ct).setModified(true); - } else if ("flash.utils.getQualifiedSuperclassName".equals(m.getNameWithNamespace(a.constants).toRawString())) { + } else if ("flash.utils.getQualifiedSuperclassName".equals(m.getNameWithNamespace(a.constants, true).toRawString())) { m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); m.name_index = a.constants.getStringId("debugGetQualifiedSuperclassName", true); ((Tag) ct).setModified(true); - } else if ("flash.utils.describeType".equals(m.getNameWithNamespace(a.constants).toRawString())) { + } else if ("flash.utils.describeType".equals(m.getNameWithNamespace(a.constants, true).toRawString())) { m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); m.name_index = a.constants.getStringId("debugDescribeType", true); ((Tag) ct).setModified(true); @@ -131,7 +131,7 @@ public class DebuggerTools { ABC a = ct.getABC(); for (int i = 1; i < a.constants.getMultinameCount(); i++) { Multiname m = a.constants.getMultiname(i); - if ("trace".equals(m.getNameWithNamespace(a.constants).toRawString())) { + if ("trace".equals(m.getNameWithNamespace(a.constants, true).toRawString())) { m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); m.name_index = a.constants.getStringId(fname, true); ((Tag) ct).setModified(true); @@ -154,7 +154,7 @@ public class DebuggerTools { ABC a = ct.getABC(); for (int i = 1; i < a.constants.getMultinameCount(); i++) { Multiname m = a.constants.getMultiname(i); - String packageStr = m.getNameWithNamespace(a.constants).toString(); + String packageStr = m.getNameWithNamespace(a.constants, true).toString(); if (isDebuggerClass(packageStr, "debugTrace") || isDebuggerClass(packageStr, "debugAlert") || isDebuggerClass(packageStr, "debugSocket") diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index 5f992623c..7e0c09b88 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -771,4 +771,6 @@ variables.column.scope = Scope variables.column.flags = Flags variables.column.trait = Trait -message.font.setadvancevalues = This operation will set advance of ALL characters in this tag to selected font source advances. \ No newline at end of file +message.font.setadvancevalues = This operation will set advance of ALL characters in this tag to selected font source advances. + +menu.tools.deobfuscation.renameColliding = Rename colliding traits/classes